Rework all custom bindings keys
This commit is contained in:
		| @@ -122,16 +122,16 @@ Documentation: | |||||||
|    :en "C-l"   #'evil-window-right)) |    :en "C-l"   #'evil-window-right)) | ||||||
| #+end_src | #+end_src | ||||||
|  |  | ||||||
|  | Make movement keys work like they should | ||||||
| #+begin_src emacs-lisp | #+begin_src emacs-lisp | ||||||
| ;; Make movement keys work like they should |   (define-key evil-normal-state-map (kbd "<remap> <evil-next-line>") 'evil-next-visual-line) | ||||||
| (define-key evil-normal-state-map (kbd "<remap> <evil-next-line>") 'evil-next-visual-line) |   (define-key evil-normal-state-map (kbd "<remap> <evil-previous-line>") 'evil-previous-visual-line) | ||||||
| (define-key evil-normal-state-map (kbd "<remap> <evil-previous-line>") 'evil-previous-visual-line) |   (define-key evil-motion-state-map (kbd "<remap> <evil-next-line>") 'evil-next-visual-line) | ||||||
| (define-key evil-motion-state-map (kbd "<remap> <evil-next-line>") 'evil-next-visual-line) |   (define-key evil-motion-state-map (kbd "<remap> <evil-previous-line>") 'evil-previous-visual-line) | ||||||
| (define-key evil-motion-state-map (kbd "<remap> <evil-previous-line>") 'evil-previous-visual-line) |  | ||||||
| #+end_src | #+end_src | ||||||
|  |  | ||||||
|  | Make horizontal movement cross lines | ||||||
| #+begin_src emacs-lisp | #+begin_src emacs-lisp | ||||||
| ; Make horizontal movement cross lines |  | ||||||
| (setq-default evil-cross-lines t) | (setq-default evil-cross-lines t) | ||||||
| #+end_src | #+end_src | ||||||
|  |  | ||||||
| @@ -830,115 +830,16 @@ by spaces. | |||||||
| #+end_src | #+end_src | ||||||
|  |  | ||||||
| ** Org LaTeX | ** Org LaTeX | ||||||
| *** Org latex fragment | *** LaTeX Fragments | ||||||
| Don't change the font size for subscripts and superscripts in latex fragments. |  | ||||||
| This cause the orgmode tables not to be well aligned. |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (after! org |  | ||||||
|     (setq font-latex-fontify-script nil)) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (defvar tdh-org-latex-fragment-last nil |  | ||||||
|     "Holds last fragment/environment you were on.") |  | ||||||
|  |  | ||||||
|   (defun tdh-org-in-latex-fragment-p () |  | ||||||
|     "Return the point where the latex fragment begins, if inside |  | ||||||
|   a latex fragment. Else return false" |  | ||||||
|     (let* ((el (org-element-context)) |  | ||||||
|            (el-type (car el))) |  | ||||||
|       (and (or (eq 'latex-fragment el-type) (eq 'latex-environment el-type)) |  | ||||||
|           (org-element-property :begin el)))) |  | ||||||
|  |  | ||||||
|   (defun tdh-org-latex-fragment-toggle () |  | ||||||
|     "Toggle a latex fragment image " |  | ||||||
|     (and (eq 'org-mode major-mode) |  | ||||||
|    (let ((begin (tdh-org-in-latex-fragment-p))) |  | ||||||
|            (cond |  | ||||||
|             ;; were on a fragment and now on a new fragment |  | ||||||
|             ((and |  | ||||||
|               ;; fragment we were on |  | ||||||
|               tdh-org-latex-fragment-last |  | ||||||
|               ;; and are on a fragment now |  | ||||||
|               begin |  | ||||||
|  |  | ||||||
|               ;; but not on the last one this is a little tricky. as you edit the |  | ||||||
|               ;; fragment, it is not equal to the last one. We use the begin |  | ||||||
|               ;; property which is less likely to change for the comparison. |  | ||||||
|               (not (and tdh-org-latex-fragment-last |  | ||||||
|       (= begin |  | ||||||
|          tdh-org-latex-fragment-last)))) |  | ||||||
|              ;; go back to last one and put image back, provided there is still a fragment there |  | ||||||
|              (save-excursion |  | ||||||
|                (goto-char tdh-org-latex-fragment-last) |  | ||||||
|                (when (tdh-org-in-latex-fragment-p) (org-preview-latex-fragment)) |  | ||||||
|  |  | ||||||
|                ;; now remove current image |  | ||||||
|                (goto-char begin) |  | ||||||
|                (let ((ov (loop for ov in (org--list-latex-overlays) |  | ||||||
|                                if |  | ||||||
|                                (and |  | ||||||
|         (<= (overlay-start ov) (point)) |  | ||||||
|         (>= (overlay-end ov) (point))) |  | ||||||
|                                return ov))) |  | ||||||
|      (when ov |  | ||||||
|                    (delete-overlay ov))) |  | ||||||
|                ;; and save new fragment |  | ||||||
|                (setq tdh-org-latex-fragment-last begin))) |  | ||||||
|  |  | ||||||
|             ;; were on a fragment and now are not on a fragment |  | ||||||
|             ((and |  | ||||||
|               ;; not on a fragment now |  | ||||||
|               (not begin) |  | ||||||
|               ;; but we were on one |  | ||||||
|               tdh-org-latex-fragment-last) |  | ||||||
|              ;; put image back on, provided that there is still a fragment here. |  | ||||||
|              (save-excursion |  | ||||||
|                (goto-char tdh-org-latex-fragment-last) |  | ||||||
|                (when (tdh-org-in-latex-fragment-p) (org-preview-latex-fragment))) |  | ||||||
|  |  | ||||||
|              ;; unset last fragment |  | ||||||
|              (setq tdh-org-latex-fragment-last nil)) |  | ||||||
|  |  | ||||||
|             ;; were not on a fragment, and now are |  | ||||||
|             ((and |  | ||||||
|               ;; we were not one one |  | ||||||
|               (not tdh-org-latex-fragment-last) |  | ||||||
|               ;; but now we are |  | ||||||
|               begin) |  | ||||||
|              ;; remove image |  | ||||||
|              (save-excursion |  | ||||||
|                (goto-char begin) |  | ||||||
|                (let ((ov (loop for ov in (org--list-latex-overlays) |  | ||||||
|                                if |  | ||||||
|                                (and |  | ||||||
|         (<= (overlay-start ov) (point)) |  | ||||||
|         (>= (overlay-end ov) (point))) |  | ||||||
|                                return ov))) |  | ||||||
|      (when ov |  | ||||||
|                    (delete-overlay ov)))) |  | ||||||
|              (setq tdh-org-latex-fragment-last begin)))))) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|     (map! :map org-mode-map |  | ||||||
|           ;; Activate Automatic LaTeX fragment |  | ||||||
|           :n ",ol" '(lambda () (interactive) (add-hook 'post-command-hook 'tdh-org-latex-fragment-toggle t)) |  | ||||||
|           ;; ;; Disable Automatic LaTeX fragment |  | ||||||
|           :n ",oL" '(lambda () (interactive) (remove-hook 'post-command-hook 'tdh-org-latex-fragment-toggle))) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| *** TODO Latex Fragments |  | ||||||
| - [ ] The remove hook does not seems to work |  | ||||||
| http://slumpy.org/blog/2017-02-01-automatic-latex-preview-in-org-mode/ |  | ||||||
|  |  | ||||||
| #+begin_src emacs-lisp | #+begin_src emacs-lisp | ||||||
|   (after! org |   (after! org | ||||||
|     ;; Highligh latex parts in org mode |     ;; Highligh latex parts in org mode | ||||||
|     (setq org-highlight-latex-and-related '(native)) |     (setq org-highlight-latex-and-related '(native)) | ||||||
|  |  | ||||||
|     ;; Use F9 to globally generate all the latex fragments |     ;; Use F9 to globally generate all the latex fragments | ||||||
|     (map! :map org-mode-map :n "<f9>" (lambda () (interactive) (org-preview-latex-fragment 16))) |     (map! :map org-mode-map | ||||||
|  |           :n "<f9>" | ||||||
|  |           (lambda () (interactive) (org-preview-latex-fragment 16))) | ||||||
|  |  | ||||||
|     ;; Put all the preview images in some directory |     ;; Put all the preview images in some directory | ||||||
|     (setq org-preview-latex-image-directory "~/.ltximg/") |     (setq org-preview-latex-image-directory "~/.ltximg/") | ||||||
| @@ -976,6 +877,10 @@ http://slumpy.org/blog/2017-02-01-automatic-latex-preview-in-org-mode/ | |||||||
|     ;; Use imagemagick/dvisvgm to generate png from pdf |     ;; Use imagemagick/dvisvgm to generate png from pdf | ||||||
|     (setq org-preview-latex-default-process 'dvisvgm) |     (setq org-preview-latex-default-process 'dvisvgm) | ||||||
|   |   | ||||||
|  |     ;; Don't change the font size for subscripts and superscripts in latex fragments. | ||||||
|  |     ;; This cause the orgmode tables not to be well aligned. | ||||||
|  |     (setq font-latex-fontify-script nil) | ||||||
|  |  | ||||||
|     ;; Colors of latex fragments |     ;; Colors of latex fragments | ||||||
|     (setq org-format-latex-options (plist-put org-format-latex-options :foreground 'default)) |     (setq org-format-latex-options (plist-put org-format-latex-options :foreground 'default)) | ||||||
|     (setq org-format-latex-options (plist-put org-format-latex-options :background (face-background 'fringe))) |     (setq org-format-latex-options (plist-put org-format-latex-options :background (face-background 'fringe))) | ||||||
| @@ -1594,149 +1499,6 @@ Nice Functions: | |||||||
|            :table-of-contents nil))) |            :table-of-contents nil))) | ||||||
| #+end_src | #+end_src | ||||||
|  |  | ||||||
| ** Custom key bindings |  | ||||||
| *** Insert Link to paper / notes |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (defun tdh-insert-paper-org-link (paper) |  | ||||||
|     "Insert an org link to some paper, choosing the file with completion" |  | ||||||
|     (interactive |  | ||||||
|      (list (read-file-name "Paper: " "~/Cloud/thesis/ressources/pdfs/" nil t))) |  | ||||||
|     (insert (format "[[papers:%s]]" (file-name-base paper)))) |  | ||||||
|  |  | ||||||
|   (after! org |  | ||||||
|     (map! :map org-mode-map :n ",ip" 'tdh-insert-paper-org-link)) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (defun tdh-insert-note-org-link (note) |  | ||||||
|     "Insert an org link to some note, choosing the file with completion" |  | ||||||
|     (interactive |  | ||||||
|      (list (read-file-name "Note: " "~/Cloud/thesis/ressources/pdfs/" nil t))) |  | ||||||
|     (insert (format "[[notes:%s]]" (file-name-base note)))) |  | ||||||
|  |  | ||||||
|   (after! org |  | ||||||
|     (map! :map org-mode-map :n ",in" 'tdh-insert-note-org-link)) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| *** Insert Image that is in the figs folder |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (defun tdh-insert-image-org-link (img) |  | ||||||
|     "Insert an org image link, choosing the file with completion |  | ||||||
|   and starting from `my-default-image-directory'." |  | ||||||
|     (interactive |  | ||||||
|      (list (file-relative-name (read-file-name "Image: " (concat default-directory "figs/")) default-directory))) |  | ||||||
|     (insert (format "[[file:%s]]" img))) |  | ||||||
|  |  | ||||||
|   (after! org |  | ||||||
|     (map! :map org-mode-map :n ",if" 'tdh-insert-image-org-link)) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| *** Watch LaTeX file using latexmk |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (defun tdh-latex/watch () |  | ||||||
|     "Watch LaTeX file using latexmk" |  | ||||||
|     (interactive) |  | ||||||
|     (start-process-shell-command "latexmk-watch" "*latexmk-watch-output*" |  | ||||||
|                                  "latexmk" (format "-pdflatex=\"xelatex -synctex=1 -shell-escape -interaction nonstopmode  -output-directory='%s'\" -pdf -pvc -bibtex -f %s.tex" |  | ||||||
|                                                    (file-name-directory buffer-file-name) |  | ||||||
|                                                    (file-name-base buffer-file-name)))) |  | ||||||
|   (defun tdh-latex/watch/kill () |  | ||||||
|     "Kill the currently running TeX job." |  | ||||||
|     (interactive) |  | ||||||
|     (delete-process "latexmk-watch") |  | ||||||
|     ) |  | ||||||
|  |  | ||||||
|   (after! org |  | ||||||
|     (map! :map org-mode-map |  | ||||||
|             :n ",ow" 'tdh-latex/watch |  | ||||||
|             :n ",ok" 'tdh-latex/watch/kill)) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| *** Helm-Bibtex |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (after! org |  | ||||||
|     (map! :map org-mode-map |  | ||||||
|             :n ",ob" 'helm-bibtex |  | ||||||
|             :n ",of" 'helm-bibtex-favorites |  | ||||||
|             :n ",or" 'helm-resume)) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| *** Open terminal in current directory |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (defun tdh-open-terminal-in-workdir () |  | ||||||
|     (interactive) |  | ||||||
|     (call-process-shell-command |  | ||||||
|     (concat "termite --directory=" default-directory) nil 0)) |  | ||||||
|  |  | ||||||
|   (after! org |  | ||||||
|     (map! :map org-mode-map :n ",ot" 'tdh-open-terminal-in-workdir)) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| *** Open ranger in current directory |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (defun tdh-open-ranger-in-workdir () |  | ||||||
|     (interactive) |  | ||||||
|     (call-process-shell-command |  | ||||||
|     (concat "termite --directory=" default-directory " --exec=ranger") nil 0)) |  | ||||||
|  |  | ||||||
|   (after! org |  | ||||||
|     (map! :map org-mode-map :n ",oo" 'tdh-open-ranger-in-workdir)) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| *** Export to LaTeX |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (after! org |  | ||||||
|     (map! :map org-mode-map :n ",l" 'org-latex-export-to-latex)) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| *** Open pdf externally. |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (defun tdh-open-org-pdf-externally () |  | ||||||
|     (interactive) |  | ||||||
|     (call-process "zathura" nil 0 nil (concat (file-name-sans-extension (buffer-file-name)) ".pdf")) |  | ||||||
|     ) |  | ||||||
|  |  | ||||||
|   (after! org |  | ||||||
|     (map! :map org-mode-map :n ",vp" 'tdh-open-org-pdf-externally)) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| *** Open HTML externally. |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (defun tdh-open-org-html-externally () |  | ||||||
|       (interactive) |  | ||||||
|       (call-process "xdg-open" nil 0 nil (concat (file-name-sans-extension (buffer-file-name)) ".html")) |  | ||||||
|       ) |  | ||||||
|  |  | ||||||
|   (after! org |  | ||||||
|     (map! :map org-mode-map :n ",vh" 'tdh-open-org-html-externally)) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| *** Take Screenshot and insert a link |  | ||||||
|  |  | ||||||
| - Ask for a name =screenshot_name= |  | ||||||
| - use =maim -s figs/screenshot_name.png= to take a screenshot with selection |  | ||||||
| - Then insert the following to the buffer |  | ||||||
|   #+begin_src text :tangle no |  | ||||||
|     #+name: sreenshot_name |  | ||||||
|     [[file:figs/screenshot_name.png]] |  | ||||||
|   #+end_src |  | ||||||
|  |  | ||||||
| Then it would be nice to automatically prefix the =CUSTOM_ID= property (until the first =_=). |  | ||||||
|  |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (defun tdh-insert-screenshot-org-link () |  | ||||||
|   "Capture screenshot and insert the resulting file. |  | ||||||
|   The screenshot tool is determined by `org-download-screenshot-method'." |  | ||||||
|     (interactive) |  | ||||||
|     (setq filename (concat "./figs/" (read-string "Enter file name:") ".png")) |  | ||||||
|     (shell-command (concat "maim -s " filename)) |  | ||||||
|     (insert (format "[[file:%s]]" filename)) |  | ||||||
|     ) |  | ||||||
|  |  | ||||||
|   (after! org |  | ||||||
|     (map! :map org-mode-map :n ",is" 'tdh-insert-screenshot-org-link)) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| ** Automatically run =startblock= when opening org-mode files | ** Automatically run =startblock= when opening org-mode files | ||||||
| #+begin_src emacs-lisp | #+begin_src emacs-lisp | ||||||
|   (after! org |   (after! org | ||||||
| @@ -1895,6 +1657,159 @@ https://www.reddit.com/r/emacs/comments/d3a8or/pretty_org_tables_in_the_buffer_c | |||||||
|   ) |   ) | ||||||
| #+end_src | #+end_src | ||||||
|  |  | ||||||
|  | ** Custom Keybindings - =,= leader key | ||||||
|  | *** Insert Elements =,i= | ||||||
|  | Insert Link to paper | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (defun tdh-insert-paper-org-link (paper) | ||||||
|  |     "Insert an org link to some paper, choosing the file with completion" | ||||||
|  |     (interactive | ||||||
|  |      (list (read-file-name "Paper: " "~/Cloud/thesis/ressources/pdfs/" nil t))) | ||||||
|  |     (insert (format "[[papers:%s]]" (file-name-base paper)))) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | Insert Link to notes | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (defun tdh-insert-note-org-link (note) | ||||||
|  |     "Insert an org link to some note, choosing the file with completion" | ||||||
|  |     (interactive | ||||||
|  |      (list (read-file-name "Note: " "~/Cloud/thesis/ressources/pdfs/" nil t))) | ||||||
|  |     (insert (format "[[notes:%s]]" (file-name-base note)))) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | Insert Image that is in the figs folder | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (defun tdh-insert-image-org-link (img) | ||||||
|  |     "Insert an org image link, choosing the file with completion | ||||||
|  |   and starting from `my-default-image-directory'." | ||||||
|  |     (interactive | ||||||
|  |      (list (file-relative-name (read-file-name "Image: " (concat default-directory "figs/")) default-directory))) | ||||||
|  |     (insert (format "[[file:%s]]" img))) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | Take Screenshot and insert a link: | ||||||
|  | - Ask for a name =screenshot_name= | ||||||
|  | - use =maim -s figs/screenshot_name.png= to take a screenshot with selection | ||||||
|  | - Then insert the following to the buffer | ||||||
|  |  | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (defun tdh-insert-screenshot-org-link () | ||||||
|  |   "Capture screenshot and insert the resulting file. | ||||||
|  |   The screenshot tool is determined by `org-download-screenshot-method'." | ||||||
|  |     (interactive) | ||||||
|  |     (setq filename (concat "./figs/" (read-string "Enter file name:") ".png")) | ||||||
|  |     (shell-command (concat "maim -s " filename)) | ||||||
|  |     (insert (format "[[file:%s]]" filename)) | ||||||
|  |     ) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | Map Keys | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (after! org | ||||||
|  |     (map! :map org-mode-map | ||||||
|  |           (:prefix (",i" . "Insert") | ||||||
|  |           :n "p" 'tdh-insert-paper-org-link | ||||||
|  |           :n "n" 'tdh-insert-note-org-link | ||||||
|  |           :n "f" 'tdh-insert-image-org-link | ||||||
|  |           :n "s" 'tdh-insert-screenshot-org-link))) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | *** LaTeX =,l= | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (defun tdh-latex-watch () | ||||||
|  |     "Watch LaTeX file using latexmk" | ||||||
|  |     (interactive) | ||||||
|  |     (start-process-shell-command "latexmk-watch" "*latexmk-watch-output*" | ||||||
|  |                                  "latexmk" (format "-pdflatex=\"xelatex -synctex=1 -shell-escape -interaction nonstopmode  -output-directory='%s'\" -pdf -pvc -bibtex -f %s.tex" | ||||||
|  |                                                    (file-name-directory buffer-file-name) | ||||||
|  |                                                    (file-name-base buffer-file-name)))) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (defun tdh-latex-watch-kill () | ||||||
|  |     "Kill the currently running TeX job." | ||||||
|  |     (interactive) | ||||||
|  |     (delete-process "latexmk-watch") | ||||||
|  |     ) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (after! org | ||||||
|  |     (map! :map org-mode-map | ||||||
|  |           (:prefix (",l" . "LaTeX") | ||||||
|  |           :n "w" 'tdh-latex-watch | ||||||
|  |           :n "k" 'tdh-latex-watch-kill | ||||||
|  |           :n "l" 'org-latex-export-to-latex))) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | *** Org LaTeX Automatic fragment | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (defun tdh-automatic-latex-fragment-activate () | ||||||
|  |     (interactive) | ||||||
|  |     (add-hook 'org-mode-hook 'org-fragtog-mode)) | ||||||
|  |  | ||||||
|  |   (defun tdh-automatic-latex-fragment-deactivate () | ||||||
|  |     (interactive) | ||||||
|  |     (remove-hook 'org-mode-hook 'org-fragtog-mode)) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (after! org | ||||||
|  |     (map! :map org-mode-map | ||||||
|  |           (:prefix (",l" . "LaTeX") | ||||||
|  |           :n "f" 'tdh-automatic-latex-fragment-activate | ||||||
|  |           :n "F" 'tdh-automatic-latex-fragment-deactivate))) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | *** Bibtex =,n= | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (after! org | ||||||
|  |     (map! :map org-mode-map | ||||||
|  |           (:prefix (",b" . "BibTeX") | ||||||
|  |           :n "b" 'helm-bibtex | ||||||
|  |           :n "f" 'helm-bibtex-favorites | ||||||
|  |           :n "r" 'helm-resume))) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | *** Open ranger in current directory =,o= | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (defun tdh-open-ranger-in-workdir () | ||||||
|  |     (interactive) | ||||||
|  |     (call-process-shell-command | ||||||
|  |     (concat "termite --directory=" default-directory " --exec=ranger") nil 0)) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (after! org | ||||||
|  |     (map! :map org-mode-map | ||||||
|  |           :n ",o" 'tdh-open-ranger-in-workdir)) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | *** View in External programs =,v= | ||||||
|  | Open PDF output with =zathura= | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (defun tdh-open-org-pdf-externally () | ||||||
|  |     (interactive) | ||||||
|  |     (call-process "zathura" nil 0 nil (concat (file-name-sans-extension (buffer-file-name)) ".pdf")) | ||||||
|  |     ) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | Open HTML output externally | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (defun tdh-open-org-html-externally () | ||||||
|  |       (interactive) | ||||||
|  |       (call-process "xdg-open" nil 0 nil (concat (file-name-sans-extension (buffer-file-name)) ".html")) | ||||||
|  |       ) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (after! org | ||||||
|  |     (map! :map org-mode-map | ||||||
|  |           (:prefix (",v" . "View") | ||||||
|  |           :n "p" 'tdh-open-org-pdf-externally | ||||||
|  |           :n "h" 'tdh-open-org-html-externally))) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
| * Org Babel | * Org Babel | ||||||
| ** Main configuration | ** Main configuration | ||||||
| Don't ask for confirmation when evaluating following blocs | Don't ask for confirmation when evaluating following blocs | ||||||
| @@ -1943,6 +1858,15 @@ If required, it is possible to set custom colors for different source blocks | |||||||
|   ;; ) |   ;; ) | ||||||
| #+end_src | #+end_src | ||||||
|  |  | ||||||
|  | ** Indentation | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (after! org | ||||||
|  |     (setq org-edit-src-content-indentation 2 | ||||||
|  |           org-src-tab-acts-natively nil | ||||||
|  |           org-src-preserve-indentation nil) | ||||||
|  |     ) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
| ** Library of Babel | ** Library of Babel | ||||||
| Add all named source blocks to =org-babel-library-of-babel=. | Add all named source blocks to =org-babel-library-of-babel=. | ||||||
|  |  | ||||||
| @@ -1952,6 +1876,113 @@ Add all named source blocks to =org-babel-library-of-babel=. | |||||||
| #+end_src | #+end_src | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ** Org-Babel Matlab | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (after! org | ||||||
|  |     (setq org-babel-matlab-shell-command "/home/thomas/bin/matlab -nodesktop -nosplash") | ||||||
|  |  | ||||||
|  |     (setq org-babel-matlab-emacs-link-wrapper-method | ||||||
|  |         "%s | ||||||
|  |         if ischar(ans); | ||||||
|  |         echo('test'); | ||||||
|  |         fid = fopen('%s', 'w'); | ||||||
|  |         fprintf(fid, '%s', ans); | ||||||
|  |         fclose(fid); | ||||||
|  |         else; | ||||||
|  |         save -ascii %s ans; | ||||||
|  |         end | ||||||
|  |         delete('%s'); | ||||||
|  |         ") | ||||||
|  |     ) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | Default options for Matlab code | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (after! org | ||||||
|  |     (setq org-babel-default-header-args:matlab | ||||||
|  |           '((:results . "none") | ||||||
|  |             (:session . "*MATLAB*") | ||||||
|  |             (:comments . "org") | ||||||
|  |             (:exports . "both") | ||||||
|  |             (:cache .   "no") | ||||||
|  |             (:noweb . "no") | ||||||
|  |             (:hlines . "no") | ||||||
|  |             (:tangle . "no") | ||||||
|  |             (:mkdir . "yes") | ||||||
|  |             (:eval . "no-export"))) | ||||||
|  |     ) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | ** Some functions for using Matlab with Org Babel =,m= | ||||||
|  | =whos= matlab function | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (defun tdh-matlab-whos (&optional start end) | ||||||
|  |   "Get what is in the Matlab workspace" | ||||||
|  |     (interactive) | ||||||
|  |     (if (use-region-p) | ||||||
|  |       (let ((regionp (buffer-substring (region-beginning) (region-end)))) | ||||||
|  |         (process-send-string "*MATLAB*" (concat "whosEmacs " regionp "\n"))) | ||||||
|  |       (process-send-string "*MATLAB*" (concat "whosEmacs" "\n")))) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | =help= matlab function | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (defun tdh-matlab-help (&optional start end) | ||||||
|  |     "Get help on the selected function" | ||||||
|  |     (interactive) | ||||||
|  |     (if (use-region-p) | ||||||
|  |       (let ((regionp (buffer-substring (region-beginning) (region-end)))) | ||||||
|  |           (process-send-string "*MATLAB*" (concat "help " regionp "\n"))) | ||||||
|  |       (process-send-string "*MATLAB*" (concat "help " (read-string "Matlab help:") "\n"))) | ||||||
|  |     ) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | Specify a Matlab command to run | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  | (defun tdh-matlab-run-command () | ||||||
|  |   "Prompt user to enter a matlab command" | ||||||
|  |   (interactive) | ||||||
|  |   (process-send-string "*MATLAB*" (concat (read-string "Matlab Command: ") "\n"))) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | Specify a Matlab command to run and show output in mini-buffer | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (defun tdh-matlab-run-command-show-output () | ||||||
|  |     "Prompt user to enter a matlab command" | ||||||
|  |     (interactive) | ||||||
|  |     (process-send-string "*MATLAB*" (concat "evalEmacs('" (read-string "Matlab Command: ") "')\n"))) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | Org-Babel Tangle File and Execute with Matlab | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  | (defun tdh-matlab-tangle-and-execute () | ||||||
|  |   "Jump to tangle file for the source block at point." | ||||||
|  |   (interactive) | ||||||
|  |   (let (file org-babel-pre-tangle-hook org-babel-post-tangle-hook) | ||||||
|  |     (cl-letf (((symbol-function 'write-region) (lambda (start end filename &rest _ignore) | ||||||
|  |                          (setq file filename))) | ||||||
|  |           ((symbol-function 'delete-file) #'ignore)) | ||||||
|  |       (org-babel-tangle '(4))) | ||||||
|  |     (when file | ||||||
|  |       (setq file (expand-file-name file)) | ||||||
|  |       (if (file-readable-p file) | ||||||
|  |       (process-send-string "*MATLAB*" (concat "run " file "\n")) | ||||||
|  |     (error "Cannot open tangle file %S" file))))) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Map Functions | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (after! org | ||||||
|  |     (map! :map org-mode-map | ||||||
|  |           (:prefix (",m" . "Matlab") | ||||||
|  |           :n  "e" 'tdh-matlab-run-command | ||||||
|  |           :n  "E" 'tdh-matlab-run-command-show-output | ||||||
|  |           :n  "T" 'tdh-matlab-tangle-and-execute | ||||||
|  |           :nv "h" 'tdh-matlab-help | ||||||
|  |           :nv "w" 'tdh-matlab-whos))) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
| ** Remap =ctrl-ret= used to execute the src block and go to the next one | ** Remap =ctrl-ret= used to execute the src block and go to the next one | ||||||
| https://emacs.stackexchange.com/questions/13869/how-to-toggle-org-mode-source-code-block-eval-no-status | https://emacs.stackexchange.com/questions/13869/how-to-toggle-org-mode-source-code-block-eval-no-status | ||||||
|  |  | ||||||
| @@ -1979,6 +2010,7 @@ when inside a source block. Otherwise, keep the normal behavior for =ctrl-ret=. | |||||||
| #+end_src | #+end_src | ||||||
|  |  | ||||||
| ** Remap =ctrl-shift-ret= used to execute the (matlab) src block in the background and go to the next one | ** Remap =ctrl-shift-ret= used to execute the (matlab) src block in the background and go to the next one | ||||||
|  | *** =tdh-org-babel-execute-matlab-background= | ||||||
| #+begin_src emacs-lisp | #+begin_src emacs-lisp | ||||||
|   (defun tdh-org-babel-execute-matlab-background (&optional arg info params) |   (defun tdh-org-babel-execute-matlab-background (&optional arg info params) | ||||||
|     (interactive) |     (interactive) | ||||||
| @@ -2041,6 +2073,16 @@ when inside a source block. Otherwise, keep the normal behavior for =ctrl-ret=. | |||||||
|     ) |     ) | ||||||
| #+end_src | #+end_src | ||||||
|  |  | ||||||
|  | *** =tdh-matlab-execute-selected= | ||||||
|  | #+begin_src emacs-lisp | ||||||
|  |   (defun tdh-matlab-execute-selected (start end) | ||||||
|  |   "Execute selected text in the *MATLAB* buffer" | ||||||
|  |     (interactive "r") | ||||||
|  |     (let ((regionp (buffer-substring start end))) | ||||||
|  |         (process-send-string "*MATLAB*" (concat regionp "\n")))) | ||||||
|  | #+end_src | ||||||
|  |  | ||||||
|  | *** Remap =ctrl-shift-ref= | ||||||
| This function: | This function: | ||||||
| - first check if inside a source block, if not does nothing | - first check if inside a source block, if not does nothing | ||||||
| - when check if the language is =matlab= | - when check if the language is =matlab= | ||||||
| @@ -2049,7 +2091,7 @@ This function: | |||||||
|     if no region is selected, it runs all the code blocks and goes to the next block |     if no region is selected, it runs all the code blocks and goes to the next block | ||||||
|  |  | ||||||
| #+begin_src emacs-lisp | #+begin_src emacs-lisp | ||||||
|   (defun tdh-ctrl-shit-ret () |   (defun tdh-ctrl-shift-ret () | ||||||
|     (interactive) |     (interactive) | ||||||
|     (defun in-src-block-p () |     (defun in-src-block-p () | ||||||
|       "Returns t when the point is inside a source code block" |       "Returns t when the point is inside a source code block" | ||||||
| @@ -2071,103 +2113,11 @@ This function: | |||||||
| #+begin_src emacs-lisp | #+begin_src emacs-lisp | ||||||
|   (map! :after evil-org |   (map! :after evil-org | ||||||
|         :map evil-org-mode-map |         :map evil-org-mode-map | ||||||
|         :n "<C-S-return>" #'tdh-ctrl-shit-ret) |         :n "<C-S-return>" #'tdh-ctrl-shift-ret) | ||||||
| #+end_src | #+end_src | ||||||
|  |  | ||||||
| ** Org-Babel Matlab | ** Helping Functions - Tangling =,b= | ||||||
| #+begin_src emacs-lisp | Org-Babel Tangle Sub-tree | ||||||
|   (after! org |  | ||||||
|     (setq org-babel-matlab-shell-command "/home/thomas/bin/matlab -nodesktop -nosplash") |  | ||||||
|  |  | ||||||
|     (setq org-babel-matlab-emacs-link-wrapper-method |  | ||||||
|         "%s |  | ||||||
|         if ischar(ans); |  | ||||||
|         echo('test'); |  | ||||||
|         fid = fopen('%s', 'w'); |  | ||||||
|         fprintf(fid, '%s', ans); |  | ||||||
|         fclose(fid); |  | ||||||
|         else; |  | ||||||
|         save -ascii %s ans; |  | ||||||
|         end |  | ||||||
|         delete('%s'); |  | ||||||
|         ") |  | ||||||
|     ) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| ** Default options for Matlab code |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (after! org |  | ||||||
|     (setq org-babel-default-header-args:matlab |  | ||||||
|           '((:results . "none") |  | ||||||
|             (:session . "*MATLAB*") |  | ||||||
|             (:comments . "org") |  | ||||||
|             (:exports . "both") |  | ||||||
|             (:cache .   "no") |  | ||||||
|             (:noweb . "no") |  | ||||||
|             (:hlines . "no") |  | ||||||
|             (:tangle . "no") |  | ||||||
|             (:mkdir . "yes") |  | ||||||
|             (:eval . "no-export"))) |  | ||||||
|     ) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| ** Indentation |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (after! org |  | ||||||
|     (setq org-edit-src-content-indentation 2 |  | ||||||
|           org-src-tab-acts-natively nil |  | ||||||
|           org-src-preserve-indentation nil) |  | ||||||
|     ) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| ** Some functions for using Matlab with Org Babel |  | ||||||
| *** =whos= matlab function |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (defun tdh-matlab-whos (&optional start end) |  | ||||||
|   "Get what is in the Matlab workspace" |  | ||||||
|     (interactive) |  | ||||||
|     (if (use-region-p) |  | ||||||
|       (let ((regionp (buffer-substring (region-beginning) (region-end)))) |  | ||||||
|         (process-send-string "*MATLAB*" (concat "whosEmacs " regionp "\n"))) |  | ||||||
|       (process-send-string "*MATLAB*" (concat "whosEmacs" "\n")))) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| *** =help= matlab function |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (defun tdh-matlab-help (start end) |  | ||||||
|   "Get help on the selected function" |  | ||||||
|     (interactive "r") |  | ||||||
|     (let ((regionp (buffer-substring start end))) |  | ||||||
|     (process-send-string "*MATLAB*" (concat "help " regionp "\n")))) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| *** Execute selected text |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (defun tdh-matlab-execute-selected (start end) |  | ||||||
|   "Execute selected text in the *MATLAB* buffer" |  | ||||||
|     (interactive "r") |  | ||||||
|     (let ((regionp (buffer-substring start end))) |  | ||||||
|         (process-send-string "*MATLAB*" (concat regionp "\n")))) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| *** Specify a Matlab command to run |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
| (defun tdh-matlab-run-command () |  | ||||||
|   "Prompt user to enter a matlab command" |  | ||||||
|   (interactive) |  | ||||||
|   (process-send-string "*MATLAB*" (concat (read-string "Matlab Command: ") "\n"))) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| *** Specify a Matlab command to run and show output in minibuffer |  | ||||||
| #+begin_src emacs-lisp |  | ||||||
|   (defun tdh-matlab-run-command-show-output () |  | ||||||
|     "Prompt user to enter a matlab command" |  | ||||||
|     (interactive) |  | ||||||
|     (process-send-string "*MATLAB*" (concat "evalEmacs('" (read-string "Matlab Command: ") "')\n"))) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| ** Helping Functions - Tangling |  | ||||||
| *** Org-Babel Tangle Sub-tree |  | ||||||
| #+begin_src emacs-lisp | #+begin_src emacs-lisp | ||||||
|   (defun tdh-org-babel-tangle-subtree () |   (defun tdh-org-babel-tangle-subtree () | ||||||
|     "Tangle the current subtree" |     "Tangle the current subtree" | ||||||
| @@ -2179,9 +2129,7 @@ This function: | |||||||
|     ) |     ) | ||||||
| #+end_src | #+end_src | ||||||
|  |  | ||||||
| *** Org-Babel Jump to Tangle File | Org-Tangle and Org-Babel Jump to Tangle File | ||||||
| Actually this tangle the file and then go to the file. Maybe I would like to ignore the tangling phase. |  | ||||||
|  |  | ||||||
| #+begin_src emacs-lisp | #+begin_src emacs-lisp | ||||||
| (defun tdh-org-babel-jump-to-tangle-file () | (defun tdh-org-babel-jump-to-tangle-file () | ||||||
|   "Jump to tangle file for the source block at point." |   "Jump to tangle file for the source block at point." | ||||||
| @@ -2198,28 +2146,13 @@ Actually this tangle the file and then go to the file. Maybe I would like to ign | |||||||
|     (error "Cannot open tangle file %S" file))))) |     (error "Cannot open tangle file %S" file))))) | ||||||
| #+end_src | #+end_src | ||||||
|  |  | ||||||
| *** Org-Babel Tangle File and Execute | Map Functions | ||||||
| #+begin_src emacs-lisp |  | ||||||
| (defun tdh-org-babel-execute-tangle-file () |  | ||||||
|   "Jump to tangle file for the source block at point." |  | ||||||
|   (interactive) |  | ||||||
|   (let (file org-babel-pre-tangle-hook org-babel-post-tangle-hook) |  | ||||||
|     (cl-letf (((symbol-function 'write-region) (lambda (start end filename &rest _ignore) |  | ||||||
|                          (setq file filename))) |  | ||||||
|           ((symbol-function 'delete-file) #'ignore)) |  | ||||||
|       (org-babel-tangle '(4))) |  | ||||||
|     (when file |  | ||||||
|       (setq file (expand-file-name file)) |  | ||||||
|       (if (file-readable-p file) |  | ||||||
|       (process-send-string "*MATLAB*" (concat "run " file "\n")) |  | ||||||
|     (error "Cannot open tangle file %S" file))))) |  | ||||||
| #+end_src |  | ||||||
|  |  | ||||||
| *** Map Functions |  | ||||||
| #+begin_src emacs-lisp | #+begin_src emacs-lisp | ||||||
|   (after! org |   (after! org | ||||||
|     (map! :map org-mode-map :n ",bF" 'tdh-org-babel-jump-to-tangle-file) |     (map! :map org-mode-map | ||||||
|     (map! :map org-mode-map :n ",bT" 'tdh-org-babel-tangle-subtree)) |           (:prefix (",b" . "Tangle") | ||||||
|  |           :n  "F" 'tdh-org-babel-jump-to-tangle-file | ||||||
|  |           :n  "T" 'tdh-org-babel-tangle-subtree))) | ||||||
| #+end_src | #+end_src | ||||||
|  |  | ||||||
| * LaTeX | * LaTeX | ||||||
| @@ -2916,6 +2849,7 @@ they are implemented. | |||||||
|   (package! org-ref) |   (package! org-ref) | ||||||
|   (package! org-ql) |   (package! org-ql) | ||||||
|   (package! org-fancy-priorities) |   (package! org-fancy-priorities) | ||||||
|  |   (package! org-fragtog) | ||||||
| #+end_src | #+end_src | ||||||
|  |  | ||||||
| * Snippets | * Snippets | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user