From 2a5979c3aa166de5738f13b03eee1e58483e1ca2 Mon Sep 17 00:00:00 2001 From: Thomas Dehaeze Date: Sun, 1 Mar 2020 21:37:23 +0100 Subject: [PATCH] Remove spacemacs config --- dotfiles/spacemacs.org | 2632 ---------------------------------------- 1 file changed, 2632 deletions(-) delete mode 100644 dotfiles/spacemacs.org diff --git a/dotfiles/spacemacs.org b/dotfiles/spacemacs.org deleted file mode 100644 index 93f9abd..0000000 --- a/dotfiles/spacemacs.org +++ /dev/null @@ -1,2632 +0,0 @@ -#+TITLE: Spacemacs configuration -:DRAWER: -#+STARTUP: overview - -#+LANGUAGE: en -#+EMAIL: dehaeze.thomas@gmail.com -#+AUTHOR: Dehaeze Thomas - -#+HTML_LINK_HOME: ./index.html -#+HTML_LINK_UP: ./index.html - -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: - -#+PROPERTY: header-args:emacs-lisp :comments link :results silent -:END: - -Ressources: -- https://github.com/munen/emacs.d - -* User Init - :PROPERTIES: - :header-args:emacs-lisp+: :tangle ~/.spacemacs.d/user-init.el - :END: -** Melpa -#+begin_src emacs-lisp :tangle no - (add-to-list 'package-archives '("melpa" . "http://www.mirrorservice.org/sites/melpa.org/packages/")) -#+end_src - -** TODO Ispell -https://emacs.stackexchange.com/questions/17237/in-emacs-where-is-ispells-personal-dictionary-stored - -#+begin_src emacs-lisp - (setq ispell-program-name "/usr/bin/aspell") - ;; (setq ispell-personal-dictionary "/home/thomas/.config/aspell/") -#+end_src - -** Org latex fragment -#+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 -r (<= (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 - -** Default Browser -#+begin_src emacs-lisp - (setq browse-url-browser-function 'browse-url-generic - browse-url-generic-program "qutebrowser") -#+end_src - -* User-Config -:PROPERTIES: -:header-args:emacs-lisp+: :tangle ~/.spacemacs.d/user-config.el -:END: -** Others -#+begin_src emacs-lisp - ;; Line Wrapping - (spacemacs/toggle-truncate-lines-on) - - ;; Visual line navigation for textual modes - (add-hook 'text-mode-hook 'spacemacs/toggle-visual-line-navigation-on) - - ;; leader-q-q just kill the frame without killink the server - (evil-leader/set-key - "q q" 'spacemacs/frame-killer) - - ;; Remove current light highlight - (spacemacs/toggle-highlight-current-line-globally-off) -#+end_src - -** Windows Management -#+begin_src emacs-lisp - (global-set-key (kbd "") 'shrink-window) - (global-set-key (kbd "") 'enlarge-window) - (global-set-key (kbd "") 'shrink-window-horizontally) - (global-set-key (kbd "") 'enlarge-window-horizontally) -#+end_src - -** Lockfiles -#+begin_src emacs-lisp - (setq create-lockfiles nil) -#+end_src - -** Autosave -#+begin_src emacs-lisp - (setq backup-directory-alist `(("." . "~/.saves"))) - (setq backup-by-copying t) -#+end_src - -** Magit -#+begin_src emacs-lisp - (setenv "GIT_ASKPASS" "git-gui--askpass") - - (setq magit-diff-refine-hunk 'all) -#+end_src - -** User informations -#+begin_src emacs-lisp - ;; Used to the \author for LaTeX export - (setq user-full-name "Thomas Dehaeze") - - ;; Used to set \email for LaTeX export - (setq user-mail-address "dehaeze.thomas@gmail.com") -#+end_src - -** Change default alert backend -#+begin_src emacs-lisp - (setq alert-default-style 'libnotify) -#+end_src - -** LaTeX -- https://tex.stackexchange.com/questions/52179/what-is-your-favorite-emacs-and-or-auctex-command-trick -- https://tex.stackexchange.com/questions/20843/useful-shortcuts-or-key-bindings-or-predefined-commands-for-emacsauctex - -*** Basic LaTeX configuration -#+begin_src emacs-lisp - (defun latex/clean () - "Clean LaTeX output using latexmk" - (interactive) - (async-shell-command - ;; command and parameters - "latexmk -c " - (shell-quote-argument buffer-file-name) - " &" - )) - - (evil-define-key 'normal LaTeX-mode-map (kbd ", C") 'latex/clean) - - (add-hook 'TeX-mode-hook #'TeX-fold-mode) -#+end_src - -*** Master file -#+begin_src emacs-lisp - (setq-default TeX-master nil) -#+end_src - -*** Pdf Viewer -#+begin_src emacs-lisp - (setq TeX-view-program-selection '((output-pdf "Zathura"))) - (setq TeX-source-correlate-mode t) - (setq TeX-source-correlate-start-server t) - (setq TeX-source-correlate-method 'synctex) - (setq TeX-view-program-list - '(("PDF Tools" TeX-pdf-tools-sync-view))) -#+end_src - -** Helm-Bibtex -*** General Config -#+begin_src emacs-lisp - (with-eval-after-load 'helm-bibtex - ;; Use "tags" field when looking for bib entries - (setq helm-bibtex-additional-search-fields '(keywords)) - ;; Special Tags: - ;; - favorite - - ;; Reverse the order of display - ;; (advice-add 'bibtex-completion-candidates - ;; :filter-return 'reverse) - - ;; Display of bibtex entries with helm - (setq bibtex-completion-display-formats - '((t . "${author:36} ${title:*} ${year:4} ${=type=:7} ${=has-note=:1}"))) - - ;; Special symbols for notes and pdf - (setq bibtex-completion-pdf-symbol "⌘") - (setq bibtex-completion-notes-symbol "✎") - - ;; Use file field to find the PDF - ;; (setq bibtex-completion-pdf-field "file") - - ;; Bibliography file - (setq bibtex-completion-bibliography "~/Cloud/thesis/ressources/references.bib") - - ;; Directory with all the pdfs - (setq bibtex-completion-library-path "~/Cloud/thesis/ressources/pdfs") - - ;; Directory with notes files - (setq bibtex-completion-notes-path "~/Cloud/thesis/ressources/notes") - - ;; Template used when creating new Note file - (setq bibtex-completion-notes-template-multiple-files (concat "#+TITLE: ${title}\n" - ":DRAWER:\n" - "#+LATEX_CLASS: biblioreport\n" - "\n" - "#+OPTIONS: toc:nil title:nil\n" - "#+OPTIONS: ':t -:t\n" - "\n" - "#+LATEX_HEADER: \\newcommand{\\refType}{${=type=}}\n" - "#+LATEX_HEADER: \\newcommand{\\refKey}{${=key=}}\n" - "#+LATEX_HEADER: \\newcommand{\\refTitle}{${title}}\n" - "#+LATEX_HEADER: \\newcommand{\\refAuthor}{${author-or-editor}}\n" - "#+LATEX_HEADER: \\newcommand{\\refJournal}{${journal}}\n" - "#+LATEX_HEADER: \\newcommand{\\refYear}{${year}}\n" - "#+LATEX_HEADER: \\newcommand{\\refDoi}{${DOI}}\n" - "#+LATEX_HEADER: \\newcommand{\\refUrl}{${url}}\n" - "#+LATEX_HEADER: \\newcommand{\\refKeywords}{${keywords}}\n" - "#+LATEX_HEADER: \\input{config.tex}\n" - "#+LATEX_HEADER: \\graphicspath{{./figs/${=key=}/}}\n" - "# #+TOC: headlines 2\n" - ":END:\n" - "\n" - "#+BEGIN_abstract\n" - "\n" - "#+END_abstract\n" - "\n" - "* ${title} :ignore:\n" - ":PROPERTIES:\n" - ":CUSTOM_ID: ${=key=}\n" - ":AUTHOR: ${author}\n" - ":TYPE: ${=type=}\n" - ":JOURNAL: ${journal}\n" - ":YEAR: ${year}\n" - ":VOLUME: ${volume}\n" - ":PAGES: ${pages}\n" - ":DOI: ${DOI}\n" - ":URL: ${url}\n" - ":NOTER_DOCUMENT: ../pdfs/${=key=}.pdf\n" - ":END:\n" - "\n")) - - ;; Make "Edit notes" the default action - (helm-delete-action-from-source "Edit notes" helm-source-bibtex) - (helm-add-action-to-source "Edit notes" 'helm-bibtex-edit-notes helm-source-bibtex 0) - ) -#+end_src - -*** Open pdf externally -#+begin_src emacs-lisp - (with-eval-after-load 'helm-bibtex - (defun tdehaeze/open-pdf-externally (key) - (call-process "zathura" nil 0 nil (nth 0 (-cons-to-list (bibtex-completion-find-pdf key))))) - - ;; Action to open the pdf with Zathura - (helm-delete-action-from-source "Open PDF Externally" helm-source-bibtex) - (helm-add-action-to-source "Open PDF Externally" 'tdehaeze/open-pdf-externally helm-source-bibtex 1) - ) -#+end_src - -*** Special Commands -#+begin_src emacs-lisp - (defun helm-bibtex-favorites (&optional arg) - "Search Favorite BibTeX entries" - (interactive "P") - (helm-bibtex arg nil "favorite ")) -#+end_src - -*** List all element of the bibliography without pdf associated -#+begin_src emacs-lisp - (defun list-bib-without-pdf-associated () - (interactive) - (bibtex-completion-init) - (setq candidates (bibtex-completion-candidates)) - - (defun canditate-is-pdf-present (candidate) - (bibtex-completion-find-pdf-in-library (cdr (assoc "=key=" candidate))) - ) - - (setq candidates-without-pdf (remove-if #'canditate-is-pdf-present candidates)) - - (setq candidate-without-pdf-names (mapcar - (lambda (x) (cdr (assoc "title" x))) - candidates-without-pdf)) - - (with-output-to-temp-buffer "*bib-without-pdf*" (princ (string-join candidate-without-pdf-names "\n"))) - (switch-to-buffer-other-window "*bib-without-pdf*") - ) -#+end_src - -** Auto Complete -#+begin_src emacs-lisp - (global-company-mode) -#+end_src - -** Yas Snippets -#+begin_src emacs-lisp - (setq yas-indent-line "fixed") -#+end_src - -** Org-Mode -- http://cachestocaches.com/2016/9/my-workflow-org-agenda/ -- http://doc.norang.ca/org-mode.html#TodoKeywords -- https://emacs.cafe/emacs/orgmode/gtd/2017/06/30/orgmode-gtd.html - -*** Org General Config -#+begin_src emacs-lisp - (with-eval-after-load 'org - (setq org-directory "~/Cloud/org/") - (setq org-default-notes-file "~/Cloud/org/refile.org") - ;; Highligh latex parts in org mode - (setq org-highlight-latex-and-related '(native)) - ;; Disable automatic highlight of TODO keywords in orgmode buffers - (add-hook 'org-mode-hook (lambda () (hl-todo-mode -1))) - ;; The following setting hides blank lines between headings which keeps folded view nice and compact. - (setq org-cycle-separator-lines 0) - (setq org-startup-indented t) - ) -#+end_src - -*** Org Tagging -#+begin_src emacs-lisp - (with-eval-after-load 'org - ;; Tags with fast selection keys - (setq org-tag-alist (quote (("@christophe" . ?c) - ("@muriel" . ?m)))) - ) -#+end_src -*** Org Gcal -- https://cestlaz.github.io/posts/using-emacs-26-gcal/#.WIqBud9vGAk - -#+begin_src emacs-lisp - (with-eval-after-load 'org - (setq org-gcal-client-id "396102378658-dcmbcmrnthbe925519otsjbd921otq0v.apps.googleusercontent.com" - org-gcal-client-secret "4M5PWrbhQjwYEMXGK85lDYX9" - org-gcal-file-alist '(("dehaeze.thomas@gmail.com" . "~/Cloud/org/gcal.org") - ("8kjmhe2ar0abnm054ill1fb0gc@group.calendar.google.com" . "~/Cloud/org/gcal_phd.org"))) - ;; Automatic fetch of the new events - (add-hook 'org-agenda-mode-hook (lambda () (org-gcal-fetch) )) - ) -#+end_src - -*** Org Refile -#+begin_src emacs-lisp - (with-eval-after-load 'org - (setq org-refile-targets '((org-agenda-files . (:maxlevel . 6)))) - ) -#+end_src -*** Org Todos -http://sachachua.com/blog/2014/04/thinking-todo-keywords/ -#+begin_src emacs-lisp - (with-eval-after-load 'org - ;; Tags with fast selection keys - (setq org-todo-keywords '( - (sequence "TODO(t)" "NEXT(n)" "MAIL(m)" "|" "DONE(d)") - (sequence "READ(r)" "BKMK(b)" "EXER(x)" "|" "DONE(d)") - (sequence "WAIT(w@/!)" "SDAY(s)" "|" "CANC(c@/!)") - (sequence "QUES(q)" "|" "ANSW(a)") - (sequence "EXAM(e)" "IDEA(i)" "|") - )) - - ;; Display of the keywords - (setq org-todo-keyword-faces - '(("TODO" . (:foreground "#cc241d" :weight bold)) ;; red - ("EXER" . (:foreground "#cc241d" :weight bold)) ;; red - ("NEXT" . (:foreground "#cc241d" :weight bold)) ;; red - ("MAIL" . (:foreground "#cc241d" :weight bold)) ;; red - ("READ" . (:foreground "#cc241d" :weight bold)) ;; red - ("ANSW" . (:foreground "#689d6a" :weight bold)) ;; aqua - ("DONE" . (:foreground "#689d6a" :weight bold)) ;; aqua - ("WAIT" . (:foreground "#d65d0e" :weight bold)) ;; orange - ("QUES" . (:foreground "#d79921" :weight bold)) ;; yellow - ("CANC" . (:foreground "#a89984" :weight bold)) ;; grey - ("SDAY" . (:foreground "#98971a" :weight bold)) ;; green - ("BKMK" . (:foreground "#98971a" :weight bold)) ;; green - ("IDEA" . (:foreground "#98971a" :weight bold)) ;; green - ("EXAM" . (:foreground "#98971a" :weight bold)))) ;; green - ) -#+end_src - -*** Archive subtrees under the same hierarchy as original in the archive files -https://gist.github.com/Fuco1/e86fb5e0a5bb71ceafccedb5ca22fcfb - -#+begin_src emacs-lisp - (defadvice org-archive-subtree (around fix-hierarchy activate) - (let* ((fix-archive-p (and (not current-prefix-arg) - (not (use-region-p)))) - (location (org-archive--compute-location org-archive-location)) - (afile (car location)) - (offset (if (= 0 (length (cdr location))) - 1 - (1+ (string-match "[^*]" (cdr location))))) - (buffer (or (find-buffer-visiting afile) (find-file-noselect afile)))) - ad-do-it - (when fix-archive-p - (with-current-buffer buffer - (goto-char (point-max)) - (while (> (org-current-level) offset) (org-up-heading-safe)) - (let* ((olpath (org-entry-get (point) "ARCHIVE_OLPATH")) - (path (and olpath (split-string olpath "/"))) - (level offset) - tree-text) - (when olpath - (org-mark-subtree) - (setq tree-text (buffer-substring (region-beginning) (region-end))) - (let (this-command) (org-cut-subtree)) - (goto-char (point-min)) - (save-restriction - (widen) - (-each path - (lambda (heading) - (if (re-search-forward - (rx-to-string - `(: bol (repeat ,level "*") (1+ " ") ,heading)) nil t) - (org-narrow-to-subtree) - (goto-char (point-max)) - (unless (looking-at "^") - (insert "\n")) - (insert (make-string level ?*) - " " - heading - "\n")) - (cl-incf level))) - (widen) - (org-end-of-subtree t t) - (org-paste-subtree level tree-text)))))))) -#+end_src - -*** Org Agenda -**** General configuration -#+begin_src emacs-lisp - (with-eval-after-load 'org - ;; File to save todo items - (setq org-agenda-files (list "~/Cloud/org/" "~/.config/literate-dotfiles/dotfiles")) - - ;; Include archived files - (setq org-agenda-archives-mode t) - - ;; Set priority range from A to C with default A - (setq org-highest-priority ?A) - (setq org-lowest-priority ?C) - (setq org-default-priority ?C) - - ;; Set colours for priorities - (setq org-priority-faces '((?A . (:foreground "#CC241D")) - (?B . (:foreground "#D65D0E")) - (?C . (:foreground "#D79921")))) - - ;; Open agenda in current window - (setq org-agenda-window-setup 'current-window) - - (setq org-agenda-prefix-format - '((agenda . " %-12:c %?-12t% s") - (todo . "") ;; Don't show the filename for reading agenda - (tags . " %-12:c") - (search . " %-12:c")) - ) - ) -#+end_src - -**** Org Agenda Custom Views -https://blog.aaronbieber.com/2016/09/24/an-agenda-for-life-with-org-mode.html - -#+begin_src emacs-lisp - (with-eval-after-load 'org - (defun tdh/org-agenda-skip-scheduled () - (org-agenda-skip-entry-if 'scheduled 'deadline 'regexp "\n]+>")) - - (setq org-agenda-custom-commands - '(("w" "Work" tags-todo "@work") ;; All todos related to work - ("h" "Home" tags-todo "@home") ;; All todos not related to work - ("q" . "Questions to ask") - ("qc" "Questions to Cristophe" tags "@christophe/QUES" ((org-agenda-overriding-header "Questions to Christophe"))) - ("qm" "Questions to Muriel" tags "@muriel/QUES" ((org-agenda-overriding-header "Questions to Muriel"))) - ("qo" "Questions to Olivier" tags "@olivier/QUES" ((org-agenda-overriding-header "Questions to Olivier"))) - ("qq" "All questions" tags "/QUES" ((org-agenda-overriding-header "Other questions"))) - ("n" "Next things to do" - ((tags "+PRIORITY+\"A\"" - ((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done)) - (org-agenda-overriding-header "High-priority unfinished tasks:"))) - (agenda "") - (todo "NEXT" ((org-agenda-skip-function 'tdh/org-agenda-skip-scheduled)(org-agenda-overriding-header "Next thing to do that are not scheduled"))) - (todo "MAIL" ((org-agenda-overriding-header "Email to write/reply"))) - (todo "WAIT" ((org-agenda-overriding-header "Things Waiting"))))) - ("u" "Unscheduled tasks" todo "TODO" - ((org-agenda-skip-function 'tdh/org-agenda-skip-scheduled) - (org-agenda-overriding-header "Unscheduled TODO entries: "))) - ("r" "Things to read" - ((todo "READ" ((org-agenda-overriding-header "Things to read")))) - ((org-agenda-files '("~/Cloud/thesis/ressources/notes/"))))) - ) - ) -#+end_src - -*** Org Notification based on calendar event -https://emacs.stackexchange.com/questions/3844/good-methods-for-setting-up-alarms-audio-visual-triggered-by-org-mode-events - -#+begin_src emacs-lisp - (with-eval-after-load 'org - (setq appt-message-warning-time 5) - (defun my-org-agenda-to-appt () - (interactive) - (setq appt-time-msg-list nil) - (org-agenda-to-appt)) - - (my-org-agenda-to-appt) - ; Display appointments as a window manager notification - (setq appt-disp-window-function 'my-appt-display) - (setq appt-delete-window-function (lambda () t)) - - (setq my-appt-notification-app (concat (getenv "HOME") "/bin/appt-notification")) - (defun my-appt-display (min-to-app new-time msg) - (if (atom min-to-app) - (start-process "my-appt-notification-app" nil my-appt-notification-app min-to-app msg) - (dolist (i (number-sequence 0 (1- (length min-to-app)))) - (start-process "my-appt-notification-app" nil my-appt-notification-app (nth i min-to-app) (nth i msg))))) - ) -#+end_src - -**** appt-notification script -:PROPERTIES: -:header-args: :tangle ~/.spacemacs.d/bin/appt-notification -:header-args+: :comments none :mkdirp yes -:header-args+: :shebang "#!/usr/bin/env bash" -:END: -#+begin_src bash - TIME="$1"TODO - MSG="$2" - - dunstify --replace=85401 "Event in $TIME minutes" "$MSG" -#+end_src - -*** Org Structure Template -#+begin_src emacs-lisp - (with-eval-after-load 'org - (setq org-structure-template-alist - '(("c" . "center") - ("C" . "comment") - ("i" . "important") - ("e" . "example") - ("q" . "quote") - ("s" . "src")) - ) - ) -#+end_src - -*** Org Capture -Documentation: -- Template elements: https://orgmode.org/manual/Template-elements.html#Template-elements -- Template expansion: https://orgmode.org/manual/Template-expansion.html#Template-expansion -- Capture protocol: https://orgmode.org/manual/capture-protocol.html - -#+begin_src emacs-lisp - (with-eval-after-load 'org - (setq org-capture-templates - (quote (("t" ; key - "todo" ; name - entry ; type - (file+headline "~/Cloud/org/work-notebook.org" "Inbox") ; target - "** TODO %?\n%U\n" ; template - ) - ("M" ; key - "Meeting" ; name - entry ; type - (file+headline "~/Cloud/org/work-notebook.org" "Meetings") ; target - "** %?\n%(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n" ; template - ) - ("m" ; key - "mail" ; name - entry ; type - (file+headline "~/Cloud/org/work-notebook.org" "Mails") ; target - "** TODO [#A] %?\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n%a\n" ; template - ) - ("pm" - "Org-Protocol Mail" - entry - (file+headline "~/Cloud/org/work-notebook.org" "Mails") - "* MAIL %:description [[message:%:link][link]]\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n\n" - :immediate-finish t - ) - ("pu" - "Org-Protocol Url" - entry - (file+headline "~/Cloud/org/work-notebook.org" "Inbox") - "* [[%:link][%:description]]\nCaptured On: %U\n\n" - :immediate-finish t - ) - ("pt" - "Org-Protocol text" - entry - (file+headline "~/Cloud/org/work-notebook.org" "Inbox") - "* %:description\nSource: %:link\nCaptured On: %U\n\n#+BEGIN_QUOTE\n%i\n#+END_QUOTE\n\n" - :immediate-finish t - ) - ))) - ) -#+end_src - -*** Org Babel -**** Main configuration -#+begin_src emacs-lisp - (with-eval-after-load 'org - ;; Don't ask for confirmation when evalutating latex blocs - (defun my-org-confirm-babel-evaluate (lang body) - (not (member lang '("emacs-lisp" "latex" "matlab" "sh")))) - (setq org-confirm-babel-evaluate 'my-org-confirm-babel-evaluate) - - ;; Enable Babel evalutation - (org-babel-do-load-languages 'org-babel-load-languages '((latex . t) - (shell . t) - (matlab . t) - (python . t) - (emacs-lisp . t))) - ) -#+end_src - -**** Library of Babel -#+begin_src emacs-lisp - (with-eval-after-load 'org - (org-babel-lob-ingest "~/Cloud/thesis/org-mode/org-babel-tutorial/org-babel-library.org") - ) -#+end_src - -**** Org-Babel Matlab -#+begin_src emacs-lisp - (with-eval-after-load '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 -#+begin_src emacs-lisp -(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 - -**** TODO Asynchronous execution -#+begin_src emacs-lisp :tangle no - (push "~/.emacs.d/private/ob-session-async/lisp/" load-path) - (require 'ob-session-async) -#+end_src - -#+begin_src emacs-lisp - ;; (with-eval-after-load "ob" - ;; (require 'org-babel-eval-in-repl)) -#+end_src - -#+begin_src emacs-lisp - ;; (with-eval-after-load "eval-in-repl" - ;; (setq eir-jump-after-eval nil)) -#+end_src - -**** TODO Theme -#+begin_src emacs-lisp - (with-eval-after-load 'org - (require 'color) - (set-face-attribute 'org-block nil :background (color-darken-name (face-attribute 'default :background) 3)) - ) -#+end_src - -**** Indentation -#+begin_src emacs-lisp - (with-eval-after-load 'org - (setq org-edit-src-content-indentation 2 - org-src-tab-acts-natively nil - org-src-preserve-indentation nil) - ) -#+end_src - -**** Org-Babel Tangle Subtree -#+begin_src emacs-lisp - (defun tdh/org-babel-tangle-subtree () - "Tangle the current subtree" - (interactive) - (progn - (org-narrow-to-subtree) - (org-babel-tangle) - (widen)) - ) - - (evil-define-key 'normal org-mode-map (kbd ", b T") 'tdh/org-babel-tangle-subtree) -#+end_src - -**** TODO 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 - (defun tdh/org-babel-jump-to-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) - (find-file file) - (error "Cannot open tangle file %S" file))))) - - (evil-define-key 'normal org-mode-map (kbd ", b F") 'tdh/org-babel-jump-to-tangle-file) -#+end_src - -*** Org Export -**** Basic -#+begin_src emacs-lisp - (with-eval-after-load 'org - ;; How many levels of headline to export - (setq org-export-headline-levels 4) - - ;; Authorize BIND to set local variables - (setq org-export-allow-bind-keywords t) - - (setq org-odt-preferred-output-format "doc") - - ;; Used to not export headings with :ignore: tag - (require 'ox-extra) - (ox-extras-activate '(ignore-headlines)) - ) -#+end_src - -**** Ox Latex Subfigure package -#+begin_src emacs-lisp - (use-package ox-latex-subfigure - :config (require 'ox-latex-subfigure) - ) -#+end_src - -**** Clear page before heading -https://emacs.stackexchange.com/questions/30575/adding-latex-newpage-before-a-heading/30892 - -#+begin_src emacs-lisp - (with-eval-after-load 'org - (with-eval-after-load 'ox-latex - (defun org/get-headline-string-element (headline backend info) - (let ((prop-point (next-property-change 0 headline))) - (if prop-point (plist-get (text-properties-at prop-point headline) :parent)))) - - (defun org/ensure-latex-clearpage (headline backend info) - (when (org-export-derived-backend-p backend 'latex) - (let ((elmnt (org/get-headline-string-element headline backend info))) - (when (and elmnt (org-element-property :CLEARPAGE elmnt)) - (concat "\\clearpage\n" headline))))) - - (add-to-list 'org-export-filter-headline-functions - 'org/ensure-latex-clearpage) - ) - ) -#+end_src - -**** TODO HTML Export -***** MathJax -#+begin_src emacs-lisp -(setq org-html-mathjax-template - " -") -#+end_src - -***** Export with css class instead of inline css -#+begin_src emacs-lisp - (with-eval-after-load 'org - (setq org-html-htmlize-output-type 'css) - ) -#+end_src - -***** TODO MP4 movies -#+begin_src emacs-lisp :tangle no - (with-eval-after-load 'org - (setq org-html-html5-fancy t) - (setq org-html-doctype "xhtml-strict") - ) -#+end_src - -***** TODO MathJax with SIunix -#+begin_src emacs-lisp :tangle no - (with-eval-after-load 'org - (setq org-html-mathjax-template - " - " - ) - ) -#+end_src - -*** Org LaTeX -**** Org CdLatex -https://orgmode.org/manual/CDLaTeX-mode.html#CDLaTeX-mode -#+begin_src emacs-lisp - (with-eval-after-load 'org - (push "~/.spacemacs.d/local/" load-path) - (require 'cdlatex) - (add-hook 'org-mode-hook 'turn-on-org-cdlatex)) -#+end_src - -**** LaTeX Classes -#+begin_src emacs-lisp - (with-eval-after-load 'org - (with-eval-after-load 'ox-latex - ;; Custom classes to use when exporting to latex - (add-to-list 'org-latex-classes - `("beamer" - ,(concat "\\documentclass[presentation]{beamer}\n" - "[DEFAULT-PACKAGES]" - "[PACKAGES]" - "[EXTRA]\n") - ("\\section{%s}" . "\\section*{%s}") - ("\\subsection{%s}" . "\\subsection*{%s}") - ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))) - (add-to-list 'org-latex-classes - '("clean-cheatsheet" - "\\documentclass{clean-cheatsheet}" - ("\\section{%s}" . "\\section*{%s}") - ("\\subsection{%s}" . "\\subsection*{%s}") - ("\\subsubsection{%s}" . "\\subsubsection*{%s}") - ("\\paragraph{%s}" . "\\paragraph*{%s}") - ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) - ) - (add-to-list 'org-latex-classes - '("clean-beamer" - "\\documentclass{clean-beamer}" - ("\\section{%s}" . "\\section*{%s}") - ("\\subsection{%s}" . "\\subsection*{%s}") - ("\\subsubsection{%s}" . "\\subsubsection*{%s}") - ("\\paragraph{%s}" . "\\paragraph*{%s}") - ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) - ) - (add-to-list 'org-latex-classes - '("cleanreport" - "\\documentclass{cleanreport}" - ("\\section{%s}" . "\\section*{%s}") - ("\\subsection{%s}" . "\\subsection*{%s}") - ("\\subsubsection{%s}" . "\\subsubsection*{%s}") - ("\\paragraph{%s}" . "\\paragraph*{%s}") - ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) - ) - (add-to-list 'org-latex-classes - '("scrreprt" - "\\documentclass{scrreprt}" - ("\\section{%s}" . "\\section*{%s}") - ("\\subsection{%s}" . "\\subsection*{%s}") - ("\\subsubsection{%s}" . "\\subsubsection*{%s}") - ("\\paragraph{%s}" . "\\paragraph*{%s}") - ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) - ) - (add-to-list 'org-latex-classes - '("biblioreport" - "\\documentclass{biblioreport}" - ("\\section{%s}" . "\\section*{%s}") - ("\\subsection{%s}" . "\\subsection*{%s}") - ("\\subsubsection{%s}" . "\\subsubsection*{%s}") - ("\\paragraph{%s}" . "\\paragraph*{%s}") - ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) - ) - ) - ) -#+end_src - -**** Basic -#+begin_src emacs-lisp - (with-eval-after-load 'org - (with-eval-after-load 'ox-latex - ;; Add packages by default - (add-to-list 'org-latex-packages-alist '("" "siunitx" t)) - (add-to-list 'org-latex-packages-alist '("" "array" t)) - (add-to-list 'org-latex-packages-alist '("" "tabularx" t)) - (add-to-list 'org-latex-packages-alist '("" "booktabs" t)) - (add-to-list 'org-latex-packages-alist '("" "bm" t)) - (add-to-list 'org-latex-packages-alist '("most" "tcolorbox" t)) - - ;; Setup default option for image size when exporting to LaTeX - (setq org-latex-image-default-option "scale=1") - (setq org-latex-image-default-width nil) - - ;; Use define labels instead of automatic generated ones - (setq org-latex-prefer-user-labels t) - - ;; Captions above the table - (setq org-latex-caption-above '(table)) - - ;; Settings to export code with `minted' instead of `verbatim'. - (setq org-latex-listings 'minted) - - ;; Command used when exporting to pdf - (setq org-latex-pdf-process - '("latexmk -cd -pdflatex=\"pdflatex -synctex=1 -shell-escape -interaction nonstopmode -output-directory %o\" -pdf -bibtex -f %f")) - ) - ) -#+end_src - -**** Beamer -***** Bold Text -#+begin_src emacs-lisp -(defun my-beamer-bold (contents backend info) - (when (eq backend 'beamer) - (replace-regexp-in-string "\\`\\\\[A-Za-z0-9]+" "\\\\textbf" contents))) - -(add-to-list 'org-export-filter-bold-functions 'my-beamer-bold) -#+end_src - -***** TODO Make a custom environment for columns with title -# #+beamer: \csubtitle{title}\vspace{1em} - -***** TODO Custom Environments -- [ ] Make some comment those special environments - -#+begin_src emacs-lisp - (with-eval-after-load 'org - (with-eval-after-load 'ox-beamer - (add-to-list 'org-beamer-environments-extra - '("cbox" ;; Name of environment - "m" ;; Selection key - "\\onslide%a{\\begin{cbox}[%h]%O" - "\\end{cbox}}\\vspace{0.5em}")) - (add-to-list 'org-beamer-environments-extra - '("csubbox" ;; Name of environment - "M" ;; Selection key - "\\onslide%a{\\tcbsubtitle{%h}" - "}")) - ) - ) -#+end_src - -**** TODO Latex Fragments -- [ ] The remove hook does not seems to work - -#+begin_src emacs-lisp - (with-eval-after-load 'org - (with-eval-after-load 'ox-latex - ;; Automatic toggle of latex fragments http://slumpy.org/blog/2017-02-01-automatic-latex-preview-in-org-mode/ - ;; Activate Automatic LaTeX fragment - (spacemacs/set-leader-keys "ol" '(lambda () (interactive) (add-hook 'post-command-hook 'tdh/org-latex-fragment-toggle t))) - ;; Disable Automatic LaTeX fragment - (spacemacs/set-leader-keys "oL" '(lambda () (interactive) (remove-hook 'post-command-hook 'tdh/org-latex-fragment-toggle))) - - ;; Use F9 to globally generate all the latex fragments - (global-set-key (kbd "") (lambda () (interactive) (org-preview-latex-fragment 16))) - - ;; Put all the preview images in some directory - (setq org-preview-latex-image-directory "~/.ltximg/") - - ;; Define backends to preview LaTeX fragments - (setq org-preview-latex-process-alist '((imagemagick - :programs ("latex" "convert") - :description "pdf > png" - :message "you need to install the programs: latex and imagemagick." - :image-input-type "pdf" - :image-output-type "png" - :image-size-adjust (0.6 . 0.6) - :latex-compiler ("pdflatex -interaction nonstopmode -output-directory %o %f") - :image-converter ("convert -density %D -trim -antialias %f -quality 100 %O")) - (pdf2svg - :programs ("latex" "pdf2svg") - :description "pdf > svg" - :message "you need to install the programs: pdflatex and pdf2svg." - :image-input-type "pdf" - :image-output-type "svg" - :image-size-adjust (1.0 . 1.0) - :latex-compiler ("pdflatex -interaction nonstopmode -output-directory %o %f") - :image-converter ("pdfcrop %f %f && pdftocairo -svg %f %O")) - ;; :image-converter ("pdf2svg %f %O")) - (dvisvgm - :programs ("latex" "dvisvgm") - :description "dvi > svg" - :message "you need to install the programs: latex and dvisvgm." - :image-input-type "dvi" - :image-output-type "svg" - :image-size-adjust (1.0 . 1.0) - :latex-compiler ("latex -interaction nonstopmode -output-directory %o %f") - :image-converter ("dvisvgm %f -n -b min -c %S -o %O")) - )) - - ;; Use imagemagick/dvisvgm to generate png from pdf - (setq org-preview-latex-default-process 'dvisvgm) - )) -#+end_src - -**** TODO Custom Export - Add Page and Label for LaTeX export -https://emacs.stackexchange.com/questions/156/emacs-function-to-convert-an-arbitrary-org-property-into-an-arbitrary-string-na?rq=1 - -#+begin_src emacs-lisp :tangle no - (with-eval-after-load 'org - (defcustom tdehaeze/org-property-mapping - '((latex ("CUSTOM_PAGE" . tdehaeze/insert-org-page-latex) - ("CUSTOM_LABEL" . tdehaeze/insert-org-label-latex))) - "List of mappings from org property to arbitrary strings. - Each element is a list: - (BACKEND (PROPERTY1 . FUNCTION1) (PROPERTY2 . FUNCTION2) ...) - FUNCTION are functions which get called with a single - argument (the value of PROPERTY) and are responsible for doing - whatever should be done." - :type '(repeat (cons symbol (repeat (cons string string))))) - ) -#+end_src - -#+begin_src emacs-lisp :tangle no - (with-eval-after-load 'org - (defun tdehaeze/replace-org-property (backend) - "Convert org properties using `tdehaeze/org-property-mapping'. - Lookup BACKEND in `tdehaeze/org-property-mapping' for a list of - (PROPERTY REPLACEMENT). For each healine being exported, if it has a - PROPERTY listed insert a string immediately after the healine given by - (format REPLACEMENT PROPERTY-VALUE)" - (let ((map (cdr (assoc backend tdehaeze/org-property-mapping))) - value replacement) - (when map - (org-map-entries - (lambda () - (dolist (it map) - (save-excursion - (when (setq value (org-entry-get (point) (car it))) - (funcall (cdr it) value))))))))) - - (add-hook 'org-export-before-processing-hook #'tdehaeze/replace-org-property) - ) -#+end_src - -#+begin_src emacs-lisp :tangle no - (with-eval-after-load 'org - (defun tdehaeze/insert-org-label-latex (label) - "Insert \"\\\\label{LABEL}\\n\" after the :PROPERTY: drawer." - (search-forward-regexp org-property-end-re) - (forward-char 1) - (insert (format "\\label{%s}\n" label))) - (defun tdehaeze/insert-org-page-latex (page) - "Insert \"\\\\page{PAGE}\\n\" after the :PROPERTY: drawer." - (search-forward-regexp org-property-end-re) - (forward-char 1) - (insert (format "\\page{%s}\n" page))) - ) -#+end_src - -#+begin_src emacs-lisp :tangle no - (with-eval-after-load 'org - (defun org-latex-format-headline-default-function (todo _todo-type priority text tags _info) - "Default format function for a headline. - See `org-latex-format-headline-function' for details." - (concat - (and todo (format "{\\bfseries\\sffamily %s} " todo)) - (and priority (format "\\framebox{\\#%c} " priority)) - text - (and tags - (format "\\hfill{}\\textsc{%s}" - (mapconcat #'org-latex--protect-text tags ":"))) - (and todo (format "{\n\\page{%s} " todo))) - ) -#+end_src - -**** Number Equations -#+begin_src emacs-lisp -(defun org-renumber-environment (orig-func &rest args) - "A function to inject numbers in LaTeX fragment previews." - (let ((results '()) - (counter -1) - (numberp)) - - (setq results (loop for (begin . env) in - (org-element-map (org-element-parse-buffer) 'latex-environment - (lambda (env) - (cons - (org-element-property :begin env) - (org-element-property :value env)))) - collect - (cond - ((and (string-match "\\\\begin{equation}" env) - (not (string-match "\\\\tag{" env))) - (incf counter) - (cons begin counter)) - ((string-match "\\\\begin{align}" env) - (prog2 - (incf counter) - (cons begin counter) - (with-temp-buffer - (insert env) - (goto-char (point-min)) - ;; \\ is used for a new line. Each one leads to a number - (incf counter (count-matches "\\\\$")) - ;; unless there are nonumbers. - (goto-char (point-min)) - (decf counter (count-matches "\\nonumber"))))) - (t - (cons begin nil))))) - - (when (setq numberp (cdr (assoc (point) results))) - (setf (car args) - (concat - (format "\\setcounter{equation}{%s}\n" numberp) - (car args))))) - - (apply orig-func args)) - -(advice-add 'org-create-formula-image :around #'org-renumber-environment) -#+end_src - -*** TODO [#A] View PDF in org mode -#+begin_src emacs-lisp :tangle no -(defun tdh/org-include-img-from-pdf (&rest _) - "Convert pdf files to image files in org-mode bracket links. - # ()convertfrompdf:t # This is a special comment; tells that the upcoming - # link points to the to-be-converted-to file. - # If you have a foo.pdf that you need to convert to foo.png, use the - # foo.png file name in the link. - [[./foo.png]] -" - (interactive) - (if (executable-find "convert") - (save-excursion - (goto-char (point-min)) - (while (re-search-forward "^[ \t]*#\\s-+()convertfrompdf\\s-*:\\s-*t" - nil :noerror) - ;; Keep on going to the next line till it finds a line with bracketed - ;; file link. - (while (progn - (forward-line 1) - (not (looking-at org-bracket-link-regexp)))) - ;; Get the sub-group 1 match, the link, from `org-bracket-link-regexp' - (let ((link (match-string-no-properties 1))) - (when (stringp link) - (let* ((imgfile (expand-file-name (file-name-sans-extension link))) - (pdffile (expand-file-name - (concat imgfile - "." "pdf"))) - (cmd (concat "pdftocairo -png -transp -singlefile " - pdffile " " imgfile))) - - (message "%s" imgfile) - (when (and (file-readable-p pdffile) - (file-newer-than-file-p pdffile imgfile)) - ;; This block is executed only if pdffile is newer than - ;; imgfile or if imgfile does not exist. - (shell-command cmd) - (message "%s" cmd))))))) - (user-error "`convert' executable (part of Imagemagick) is not found"))) - (add-hook 'org-export-before-processing-hook #'tdh/org-include-img-from-pdf) -#+end_src - -#+begin_src emacs-lisp :tangle no - (add-to-list 'image-type-file-name-regexps '("\\.pdf\\'" . imagemagick)) - (add-to-list 'image-file-name-extensions "pdf") - (setq imagemagick-types-inhibit (remove 'PDF imagemagick-types-inhibit)) - (setq org-image-actual-width 600) -#+end_src - -#+begin_src emacs-lisp :tangle no - (defun my-latex-filter-nobreaks (text backend info) - "Ensure \" \" are properly handled in LaTeX export." - (when (org-export-derived-backend-p backend 'latex) - (replace-regexp-in-string " " "~" text))) - - (add-to-list 'org-export-filter-plain-text-functions - 'my-latex-filter-nobreaks) -#+end_src - -#+begin_src emacs-lisp :tangle no -(setq image-file-name-extensions - (quote - ("png" "jpeg" "jpg" "gif" "tiff" "tif" "xbm" "xpm" "pbm" "pgm" "ppm" "pnm" "svg" "pdf" "bmp"))) - -(setq org-image-actual-width 600) - -(setq org-imagemagick-display-command "convert -density 600 \"%s\" -thumbnail \"%sx%s>\" \"%s\"") -(defun org-display-inline-images (&optional include-linked refresh beg end) - "Display inline images. -Normally only links without a description part are inlined, because this -is how it will work for export. When INCLUDE-LINKED is set, also links -with a description part will be inlined. This -can be nice for a quick -look at those images, but it does not reflect what exported files will look -like. -When REFRESH is set, refresh existing images between BEG and END. -This will create new image displays only if necessary. -BEG and END default to the buffer boundaries." - (interactive "P") - (unless refresh - (org-remove-inline-images) - (if (fboundp 'clear-image-cache) (clear-image-cache))) - (save-excursion - (save-restriction - (widen) - (setq beg (or beg (point-min)) end (or end (point-max))) - (goto-char beg) - (let ((re (concat "\\[\\[\\(\\(file:\\)\\|\\([./~]\\)\\)\\([^]\n]+?" - (substring (org-image-file-name-regexp) 0 -2) - "\\)\\]" (if include-linked "" "\\]"))) - old file ov img) - (while (re-search-forward re end t) - (setq old (get-char-property-and-overlay (match-beginning 1) - 'org-image-overlay) - file (expand-file-name - (concat (or (match-string 3) "") (match-string 4)))) - (when (file-exists-p file) - (let ((file-thumb (format "%s%s_thumb.png" (file-name-directory file) (file-name-base file)))) - (if (file-exists-p file-thumb) - (let ((thumb-time (nth 5 (file-attributes file-thumb 'string))) - (file-time (nth 5 (file-attributes file 'string)))) - (if (time-less-p thumb-time file-time) - (shell-command (format org-imagemagick-display-command - file org-image-actual-width org-image-actual-width file-thumb) nil nil))) - (shell-command (format org-imagemagick-display-command - file org-image-actual-width org-image-actual-width file-thumb) nil nil)) - (if (and (car-safe old) refresh) - (image-refresh (overlay-get (cdr old) 'display)) - (setq img (save-match-data (create-image file-thumb))) - (when img - (setq ov (make-overlay (match-beginning 0) (match-end 0))) - (overlay-put ov 'display img) - (overlay-put ov 'face 'default) - (overlay-put ov 'org-image-overlay t) - (overlay-put ov 'modification-hooks - (list 'org-display-inline-remove-overlay)) - (push ov org-inline-image-overlays)))))))))) -#+end_src - -Two options: -- work with =.png= file extension and only replace with =.pdf= when exporting to LaTeX if the corresponding file exists -- work with =.pdf= file, add a special function to display =.pdf= files (using =convert= or =pdftocairo=). Change to =.png= when exporting to html - -Let's try the first solution. - -#+begin_src emacs-lisp :tangle no -(defun tdh/change-png-to-pdf (text backend info) - "Change png images to pdf images when existing" - (when (org-export-derived-backend-p backend 'latex) - (let ((text (replace-regexp-in-string "[^\\w]\\(:\\)[^\n\t\r]+\\(:\\)[^\\w]" "" text nil nil 1 nil))) - (replace-regexp-in-string "[^\\w]\\(\\)[^\n\t\r]+\\(:\\)[^\\w]" "" text nil nil 2 nil)))) - -(add-to-list 'org-export-filter-plain-text-fucntions 'my-html-mark-tag) -#+end_src - -#+begin_src emacs-lisp :tangle no -(save-excursion - (goto-char (point-min)) - (while (re-search-forward "^[ \t]*#\\s-+()convertfrompdf\\s-*:\\s-*t" - nil :noerror) - ;; Keep on going to the next line till it finds a line with bracketed - ;; file link. - (while (progn - (forward-line 1) - (not (looking-at org-bracket-link-regexp)))) - ;; Get the sub-group 1 match, the link, from `org-bracket-link-regexp' - (let ((link (match-string-no-properties 1))) - (when (stringp link) - (let* ((imgfile (expand-file-name link)) - (pdffile (expand-file-name - (concat (file-name-sans-extension imgfile) - "." "pdf"))) - (cmd (concat "convert -density 96 -quality 85 " - pdffile " " imgfile))) - (when (and (file-readable-p pdffile) - (file-newer-than-file-p pdffile imgfile)) - ;; This block is executed only if pdffile is newer than - ;; imgfile or if imgfile does not exist. - (shell-command cmd) - (message "%s" cmd))))))) -#+end_src - - -*** Org Ref -Ressources: -- https://github.com/tmalsburg/helm-bibtex -- https://github.com/jkitchin/org-ref -- https://www.reddit.com/r/emacs/comments/4gudyw/help_me_with_my_orgmode_workflow_for_notetaking/ - -#+begin_src emacs-lisp - (with-eval-after-load 'org - ;; Folder where the notes files are located (or file if just one Note file) - (setq org-ref-notes-directory "~/Cloud/thesis/ressources/notes") - (setq org-ref-bibliography-notes "~/Cloud/thesis/ressources/notes") - - ;; Bibliography File - (setq reftex-default-bibliography '("~/Cloud/thesis/ressources/references.bib")) - (setq org-ref-default-bibliography '("~/Cloud/thesis/ressources/references.bib")) - - ;; Folder where all the pdf are located - (setq org-ref-pdf-directory "~/Cloud/thesis/ressources/pdfs") - - ;; Tell org-ref to let helm-bibtex find notes for it - (setq org-ref-notes-function - (lambda (thekey) - (let ((bibtex-completion-bibliography (org-ref-find-bibliography))) - (bibtex-completion-edit-notes - (list (car (org-ref-get-bibtex-key-and-file thekey))))))) - - ;; Problem with speed: don't display broken links - (setq org-ref-show-broken-links nil) - ;; Display information on the citation - (setq org-ref-show-citation-on-enter t) - ) -#+end_src - -*** Org Noter -- https://github.com/weirdNox/org-noter - -#+begin_src emacs-lisp - (with-eval-after-load 'org - (setq org-noter-always-create-frame nil) - (setq org-noter-kill-frame-at-session-end nil) - ;; Fraction of the frame that the document window will occupy when split - (setq org-noter-doc-split-fraction '(0.6 . 0.6)) - ;; Save the last visited location automatically; when starting a new session, go to that location - (setq org-noter-auto-save-last-location t) - ;; Add an empty line between each note's heading and content - (setq org-noter-separate-notes-from-heading t) - ;; List of paths to check (non recursively) when searching for a notes file - (setq org-noter-notes-search-path "~/Cloud/thesis/ressources/notes") - ) -#+end_src - -*** Custom key bindings -Export to LaTeX -#+begin_src emacs-lisp - (evil-define-key 'normal org-mode-map (kbd ", l") 'org-latex-export-to-latex) -#+end_src - -Open pdf externally. -#+begin_src emacs-lisp - (defun tdh/open-org-pdf-externally () - (interactive) - (call-process "xdg-open" nil 0 nil (concat (file-name-sans-extension (buffer-file-name)) ".pdf")) - ) - - (evil-define-key 'normal org-mode-map (kbd ", v p") '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")) - ) - - (evil-define-key 'normal org-mode-map (kbd ", v h") 'tdh/open-org-html-externally) -#+end_src - -*** TODO Org-Contacts -#+begin_src emacs-lisp :tangle no - (with-eval-after-load 'org - (setq org-contacts-files (list "~/Cloud/org/contacts.org")) - ) -#+end_src - -*** TODO Org-Wunderlist -#+begin_src emacs-lisp :tangle no - (require 'org-wunderlist) - (setq org-wunderlist-client-id "6799d9caeb2f5d8bd641" - org-wunderlist-token "fd5965cde436c2587850a7c517d366561d8a1cbf7b6d96ab62f3fc8c9930" - org-wunderlist-file "~/Cloud/thesis/todos/wunderlist.org" - org-wunderlist-dir "~/.emacs.d/org-wunderlist/") -#+end_src - -*** TODO ox-hugo -*** Automatically run =startblock= when opening org-mode files -#+begin_src emacs-lisp - (with-eval-after-load 'org - (defun tdh/eval-startblock () - (if (member "startblock" (org-babel-src-block-names)) - (save-excursion - (org-babel-goto-named-src-block "startblock") - (org-babel-execute-src-block)) - nil - ) - ) - - (add-hook 'org-mode-hook 'tdh/eval-startblock) - ) -#+end_src - -*** TODO Insert ScreenShot or Picture from Phone -http://pragmaticemacs.com/emacs/a-workflow-to-quickly-add-photos-to-org-mode-notes/ - -- [ ] One function to move file from =~/Picture/= folder (where the screenshots are taken) to current directory and then insert and org link to the picture. Maybe ask if it should be copied in a sub directory (figs folder for instance). -- [ ] One function to copy file from =~/Cloud/Photos/= folder (where the pictures from phone are taken) to current directory (and ask for the new name of the picture) and insert org link. - -#+begin_src emacs-lisp - ;; required libraries - (require 'dash) - ;; (require 'swiper) - (require 's) - - ;; start directory - (defvar tdh/image-dir (expand-file-name "/home/thomas/Pictures")) - - (defun tdh/insert-conference-image () - "Insert image from conference directory, rename and add link in current file. - - The file is taken from a start directory set by `tdh/image-dir' and moved to the current directory, renamed and embedded at the point as an org-mode link. The user is presented with a list of files in the start directory, from which to select the file to move, sorted by most recent first." - (interactive) - (let (file-list target-dir file-list-sorted start-file start-file-full file-ext end-file end-file-base end-file-full file-number) - ;; Clean directories from list but keep times - (setq file-list - (-remove (lambda (x) (nth 1 x)) - (directory-files-and-attributes tdh/image-dir))) - - ;; Get target directory - (setq target-dir (file-name-directory (buffer-file-name))) - - ;; Sort list by most recent - (setq file-list-sorted - (mapcar #'car - (sort file-list - #'(lambda (x y) (time-less-p (nth 6 y) (nth 6 x)))))) - - ;; Use ivy to select start-file - (setq start-file (ivy-read - (concat "Move selected file to " target-dir ":") - file-list-sorted - :re-builder #'ivy--regex - :sort nil - :initial-input nil)) - - ;; add full path to start file and end-file - (setq start-file-full - (expand-file-name start-file tdh/image-dir)) - - ;; final file name including path - (setq end-file-full - (expand-file-name start-file target-dir)) - - ;; rename file - (rename-file start-file-full end-file-full) - (message "moved %s to %s" start-file-full start-file) - - ;; insert link - (insert (org-make-link-string (format "file:%s" start-file))) - - ;; display image - (org-display-inline-images t t))) -#+end_src - -*** TODO [#B] Render Tables -https://www.reddit.com/r/emacs/comments/d3a8or/pretty_org_tables_in_the_buffer_chapter_2_it/ - -#+begin_src emacs-lisp - (defun my-render-org-table-at-point () - (interactive) - (save-excursion - (beginning-of-line) - ;; removes the overlay is already there - (if (overlays-at (point)) - (delete-overlay (car (overlays-at (point)))) - - (let* ((element-type (org-element-type (org-element-at-point)))) - (if (and (not (eq element-type 'table)) - (not (eq element-type 'table-row))) - (error "not at an org table") - - (while (not (eq 'table (org-element-type (org-element-at-point)))) - (forward-line -1)) - (my-render-org-table (org-element-at-point)) - ))))) - - - (defun my-render-org-table (table) - (interactive) - (let* ((begin (org-element-property :begin table)) - (end (let ((pos (org-element-property :end table))) - (goto-char pos) - (beginning-of-line) - ;; skip possible space after table - (while (not (looking-at " *[|#]")) - (setq pos (point)) - (forward-line -1)) - pos)) - (tabletxt (buffer-substring-no-properties begin end)) - (img (with-temp-buffer - (insert tabletxt) - (mark-whole-buffer) - (org-latex-convert-region-to-latex) - (org-latex-preview) - (goto-char (point-min)) - (overlay-get (car (overlays-at (point))) 'display))) - (overlay (make-overlay begin end))) - (overlay-put overlay 'display img) - (forward-line -1)) - ) - - - (defun my-render-org-tables-in-buffer () - (save-excursion - (org-element-map (org-element-parse-buffer) 'table 'my-render-org-table))) - - ;; Use F9 to globally generate tables - (global-set-key (kbd "") (lambda () (interactive) (my-render-org-table-at-point))) -#+end_src - - -** Projectile -#+begin_src emacs-lisp - (setq projectile-generic-command "fd -H --ignore-file .projectile -t f -0") -#+end_src - -** TODO [#B] Matlab -- https://github.com/yuhonglin/matlab-mode -- https://github.com/pronobis/matlab-mode - -*** TODO [#A] Test with Org Babel -#+begin_src emacs-lisp :tangle no - (let* ((session - (funcall (intern "org-babel-matlab-initiate-session") - "*MATLAB*" params)) - (result (org-babel-octave-evaluate session "ls" "output")))) -#+end_src - -*** Setup Matlab Mode -#+begin_src emacs-lisp - (setq matlab-shell-command "/home/thomas/bin/matlab") - (setq matlab-shell-command-switches (list "-nodesktop -nosplash")) - (setq mlint-programs '("mlint" "/home/thomas/bin/mlint")) -#+end_src - -*** Setup Flycheck -#+begin_src emacs-lisp - (defvar mlint-executable "/home/thomas/bin/mlint") - - (flycheck-define-command-checker 'matlab-mlint - "A Matlab checker based on mlint." - :command `(,mlint-executable source) - :error-patterns - '((warning line-start "L " line " (C " (1+ digit) "): " (message) line-end)) - :modes '(matlab-mode)) - - (add-to-list 'flycheck-checkers 'matlab-mlint) - - ;; Automatic startup of flycheck for matlab - (add-hook 'matlab-mode-hook 'flycheck-mode) -#+end_src - -#+begin_src emacs-lisp :tangle no - (defadvice org-edit-src-code (around set-buffer-file-name activate compile) - (let ((file-name (buffer-file-name))) ;; (1) - ad-do-it ;; (2) - (setq buffer-file-name file-name))) ;; (3) -#+end_src - -*** TODO Setup Company - not working -#+begin_src emacs-lisp - ;; (add-to-list 'company-backends 'company-matlab) -#+end_src - -*** TODO Beautify code -#+begin_src emacs-lisp - (defun matlab-beautify-buffer () - "Beautify Current Buffer" - (interactive) - (save-buffer) - (matlab-shell-run-command (concat "MBeautify.formatFile(\"" (buffer-file-name) "\")")) - ) - - ;; (global-set-key [C-f1] 'show-file-name) -#+end_src - -*** Key Bindings -#+begin_src emacs-lisp - (defun matlab-add-breakpoint () - (interactive) - (matlab-shell-run-command (concat "dbstop in " (buffer-name) " at " (number-to-string (line-number-at-pos nil))))) - (defun matlab-remove-breakpoint () - (interactive) - (matlab-shell-run-command (concat "dbclear in " (buffer-name) " at " (number-to-string (line-number-at-pos nil))))) - (defun matlab-list-breakpoints () - (interactive) - (matlab-shell-run-command (concat "dbstatus " (buffer-name)))) - (defun matlab-clear-breakpoints () - (interactive) - (matlab-shell-run-command (concat "dbclear in " (buffer-name)))) - (defun matlab-go-to-file-directory () - (interactive) - (matlab-shell-run-command (concat "cd " (file-name-directory buffer-file-name)))) -#+end_src - -#+begin_src emacs-lisp - (evil-define-key 'normal matlab-mode-map (kbd ", g") 'matlab-go-to-file-directory) - - (evil-define-key 'normal matlab-mode-map (kbd ", d a") 'matlab-add-breakpoint) - (evil-define-key 'normal matlab-mode-map (kbd ", d r") 'matlab-remove-breakpoint) - (evil-define-key 'normal matlab-mode-map (kbd ", d L") 'matlab-list-breakpoints) - (evil-define-key 'normal matlab-mode-map (kbd ", d c") 'matlab-clear-breakpoints) - - (evil-define-key 'normal matlab-mode-map (kbd ", d l") 'gud-cont) - (evil-define-key 'normal matlab-mode-map (kbd ", d s") 'gud-step) - (evil-define-key 'normal matlab-mode-map (kbd ", d n") 'gud-next) - (evil-define-key 'normal matlab-mode-map (kbd ", d q") 'gud-finish) -#+end_src - -*** Wrong highlight of comments -#+begin_src emacs-lisp :tangle no - (add-hook 'matlab-mode-hook - ;; `highlight-numbers-mode' breaks MATLAB comment coloring -- - ;; `highlight-numbers-mode' is mostly redundant with - ;; `rainbow-identifiers-mode' anyway - (lambda () - (highlight-numbers-mode -1)) - ;; We must append the above *after* `spacemacs/run-prog-mode-hooks' - ;; in `matlab-mode-hook', since the former hook enables - ;; `highlight-numbers-mode'. Note that - ;; `spacemacs/run-prog-mode-hooks' is manually added to - ;; `matlab-mode-hook' by Spacemacs since the upstream `matlab-mode' - ;; package does not derive `matlab-mode' from `prog-mode' (oddly -- - ;; IIRC the author refused to do so for compatibility with XEmacs). - 'append) -#+end_src - -** TODO [#B] Mails With Mu4e -:PROPERTIES: -:header-args:emacs-lisp+: :tangle no -:END: -- https://github.com/kzar/davemail -- http://cachestocaches.com/2017/3/complete-guide-email-emacs-using-mu-and-/ -- http://spacemacs.org/layers/+email/mu4e/README.html -- http://www.djcbsoftware.nl/code/mu/mu4e/index.html#Top -- https://notanumber.io/2016-10-03/better-email-with-mu4e/ -- https://vxlabs.com/2017/02/07/mu4e-0-9-18-e-mailing-with-emacs-now-even-better/ -- http://www.brool.com/post/using-mu4e/ -- https://www.reddit.com/r/emacs/comments/8q84dl/tip_how_to_easily_manage_your_emails_with_mu4e/ -- https://vxlabs.com/2017/02/07/mu4e-0-9-18-e-mailing-with-emacs-now-even-better/ - -*** Set default mail user agent to mu4e - #+begin_src emacs-lisp - (setq mail-user-agent 'mu4e-user-agent) - #+end_src - -*** Default config -**** Default behavior -#+begin_src emacs-lisp - (setq mu4e-maildir "~/.mail" - mu4e-update-interval nil - mu4e-compose-signature-auto-include t - mu4e-view-show-images t - mu4e-view-show-addresses t) -#+end_src - -**** Default folders -#+begin_src emacs-lisp - (setq mu4e-sent-folder "/gmail/Sent" - mu4e-drafts-folder "/gmail/Drafts" - mu4e-trash-folder "/gmail/Trash" - mu4e-refile-folder "/gmail/Archive" - mu4e-compose-signature "Thomas Dehaeze\n" - user-mail-address "dehaeze.thomas@gmail.com") -#+end_src - -**** Default signature and email address -#+begin_src emacs-lisp - (setq mu4e-compose-signature "Thomas Dehaeze\n" - user-mail-address "dehaeze.thomas@gmail.com") -#+end_src - -**** Saving the attachment to Downloads directory -#+begin_src emacs-lisp - (setq mu4e-attachment-dir "~/Downloads") -#+end_src - -**** A list of user's e-mail addresses -#+begin_src emacs-lisp - (setq mu4e-user-mail-address-list '("dehaeze.thomas@gmail.com" "thomas.dehaeze@esrf.fr" "thomas.dehaeze@doct.ulg.ac.be")) -#+end_src - -**** Mail directory shortcuts -#+begin_src emacs-lisp - (setq mu4e-maildir-shortcuts - '( - ("/gmail/Inbox" . ?g) - ("/esrf/Inbox" . ?e) - ("/ulg/Inbox" . ?u) - )) -#+end_src - -*** TODO Contexts - Email accounts -#+begin_src emacs-lisp :tangle no - (setq mu4e-contexts - `( ,(make-mu4e-context - :name "gmail" - :enter-func (lambda () (mu4e-message "Entering Gmail context")) - :leave-func (lambda () (mu4e-message "Leaving Gmail context")) - :match-func (lambda (msg) - (when msg - (string-match-p "^/gmail" (mu4e-message-field msg :maildir)))) - :vars '( - (mu4e-sent-messages-behavior . (delete)) - (user-mail-address . "dehaeze.thomas@gmail.com") - (mu4e-sent-folder . "/gmail/Sent") - (mu4e-trash-folder . "/gmail/Trash") - (mu4e-drafts-folder . "/gmail/Drafts") - (mu4e-refile-folder . "/gmail/Archive") - (mu4e-compose-signature . - (concat - "Thomas Dehaeze\n" - "\n")) - )) - ,(make-mu4e-context - :name "esrf" - :enter-func (lambda () (mu4e-message "Entering ESRF context")) - :leave-func (lambda () (mu4e-message "Leaving ESRF context")) - :match-func (lambda (msg) - (when msg - (string-match-p "^/esrf" (mu4e-message-field msg :maildir)))) - :vars '( - (user-mail-address . "thomas.dehaeze@esrf.fr") - (mu4e-sent-folder . "/esrf/Sent") - (mu4e-trash-folder . "/esrf/Trash") - (mu4e-drafts-folder . "/esrf/Drafts") - (mu4e-refile-folder . "/esrf/Archive") - (mu4e-compose-signature . - (concat - "Thomas Dehaeze\n" - "\n")) - )) - ,(make-mu4e-context - :name "ulg" - :enter-func (lambda () (mu4e-message "Entering ULG context")) - :leave-func (lambda () (mu4e-message "Leaving ULG context")) - :match-func (lambda (msg) - (when msg - (string-match-p "^/ulg" (mu4e-message-field msg :maildir)))) - :vars '( - (user-mail-address . "thomas.dehaeze@doct.ulg.ac.be") - (mu4e-sent-folder . "/ulg/Sent") - (mu4e-trash-folder . "/ulg/Trash") - (mu4e-drafts-folder . "/ulg/Drafts") - (mu4e-refile-folder . "/ulg/Archive") - (mu4e-compose-signature . - (concat - "Thomas Dehaeze\n" - "\n")) - )) - )) - (setq mu4e-context-policy 'pick-first) -#+end_src - -*** Receiving emails - Mbsync -Let systemd get the mail, then pressing =U= will just run =mu= to reindex everything. -#+begin_src emacs-lisp - (setq mu4e-get-mail-command "true") -#+end_src - -Fix for mbsync found [[http://pragmaticemacs.com/emacs/fixing-duplicate-uid-errors-when-using-mbsync-and-mu4e/][here]]. -#+begin_src emacs-lisp - (setq mu4e-change-filenames-when-moving t) -#+end_src - -*** Sending emails - Msmtp -#+begin_src emacs-lisp - (setq smtpmail-default-smtp-server "smtp.gmail.com" - smtpmail-smtp-server "smtp.gmail.com" - smtpmail-smtp-service 587) - - (setq message-send-mail-function 'message-send-mail-with-sendmail - sendmail-program "msmtp" - user-full-name "Thomas Dehaeze") -#+end_src - -*** Bookmarks -#+begin_src emacs-lisp :tangle no - (setq mu4e-bookmarks - `(("flag:unread AND NOT flag:trashed" "Unread messages" ?u) - ("date:today..now" "Today's messages" ?t) - ("date:7d..now" "Last 7 days" ?w) - ("mime:image/*" "Messages with images" ?p) - (,(mapconcat 'identity - (mapcar - (lambda (maildir) - (concat "maildir:" (car maildir))) - mu4e-maildir-shortcuts) " OR ") - "All inboxes" ?i))) -#+end_src - -*** TODO Notifications -#+begin_src emacs-lisp - (with-eval-after-load 'mu4e-alert - (mu4e-alert-set-default-style 'libnotify)) - (mu4e-alert-enable-notifications) -#+end_src - -Mode-line notifications -#+begin_src emacs-lisp - (setq mu4e-enable-mode-line t) -#+end_src - -*** Use Org-Mode Tables In Emails -#+begin_src emacs-lisp - (add-hook 'message-mode-hook 'turn-on-orgtbl) - (add-hook 'message-mode-hook 'turn-on-orgstruct++) -#+end_src - -*** TODO Integration with Org-Mode -Store link to message if in header view, not to header query -#+begin_src emacs-lisp - (setq org-mu4e-link-query-in-headers-mode nil) -#+end_src - -*** TODO [#A] When putting something on the Trash, it will be in the archive folder on gmail -Even when totally deleting it. It will stay on gmail. How to fix that? - -*** TODO Verify that sending mails with gmail account works and that there is no duplicate - -Should check this variable: mu4e-sent-messages-behavior -#+begin_src emacs-lisp :tangle no - (setq mu4e-sent-messages-behavior 'delete) -#+end_src - -And [[https://www.djcbsoftware.nl/code/mu/mu4e/Gmail-configuration.html][here]]. -If I put it to delete, it works for gmail but not for the other ones... -Check [[https://github.com/djcb/mu/issues/179][here]]. - -*** TODO Cheatsheet -| Command | Usage | -|---------+-----------------------| -| =C-j= | Next mail | -| =C-k= | Previous mail | -| =R/C/F= | Reply/Compose/Forward | -| =t= | Move to Archive | -| =d= | Move to Trash | - -** PDF-Tools -#+begin_src emacs-lisp - (add-hook 'pdf-view-mode-hook (lambda() (linum-mode -1))) -#+end_src - -** Custom command and leader keys -*** Watch LaTeX file using latexmk -#+begin_src emacs-lisp - (defun 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 latex/watch/kill () - "Kill the currently running TeX job." - (interactive) - (delete-process "latexmk-watch") - ) - - (spacemacs/set-leader-keys "ow" 'latex/watch) - (spacemacs/set-leader-keys "ok" 'latex/watch/kill) -#+end_src - -*** Helm-Bibtex -#+begin_src emacs-lisp - (spacemacs/set-leader-keys "ob" 'helm-bibtex) - (spacemacs/set-leader-keys "of" 'helm-bibtex-favorites) - (spacemacs/set-leader-keys "or" 'helm-resume) -#+end_src - -*** Eshell -#+begin_src emacs-lisp - (spacemacs/set-leader-keys "os" 'eshell) -#+end_src - -*** Open terminal in current directory -#+begin_src emacs-lisp - (defun open-terminal-in-workdir () - (interactive) - (call-process-shell-command - (concat "termite --directory=" default-directory) nil 0)) - - (spacemacs/set-leader-keys "ot" 'open-terminal-in-workdir) -#+end_src - -*** Open ranger in current directory -#+begin_src emacs-lisp - (defun open-ranger-in-workdir () - (interactive) - (call-process-shell-command - (concat "termite --directory=" default-directory " --exec=ranger") nil 0)) - - (spacemacs/set-leader-keys "oo" 'open-ranger-in-workdir) -#+end_src - -** Path for Shell -#+begin_src emacs-lisp - (when (memq window-system '(mac ns x)) - (exec-path-from-shell-initialize)) -#+end_src - -** Proxy -#+begin_src emacs-lisp :tangle no - (setq url-proxy-services - '(("http" . "proxy.esrf.fr:3128") - ("https" . "proxy.esrf.fr:3128") - ("no_proxy" . "^.*esrf.fr"))) -#+end_src - -** Remove the problem of recentf files -#+begin_src emacs-lisp - (cancel-timer recentf-auto-save-timer) -#+end_src - -** TODO [#B] Slack -:PROPERTIES: -:header-args:emacs-lisp+: :tangle no -:END: -#+begin_src emacs-lisp - (slack-register-team - :name "emacs-slack" - :default t - :client-id "299050134212.316863429523" - :client-secret "7168a660375090e517fe812ea2d136e5" - :token "xoxp-299050134212-299063259042-715794254097-7c319fdd63315620e86f1fad42c126a2" - :subscribed-channels '()) -#+end_src - -#+begin_src emacs-lisp - (advice-add 'slack-counts-update :override #'ignore) -#+end_src - -#+begin_src emacs-lisp - (setq slack-prefer-current-team t) -#+end_src - -** TODO [#C] Neomutt connection -https://mentat.za.net/blog/2018/10/31/using-org-mode-with-neomutt/ - -#+begin_src emacs-lisp - (require 'org-protocol) - ;; Call this function, which spawns neomutt, whenever org-mode - ;; tries to open a link of the form mutt:message-id+goes_here@mail.gmail.com - - (defun tdehaeze/mutt-open-message (message-id) - "In neomutt, open the email with the the given Message-ID" - (let* - ((message-id (replace-regexp-in-string "^/*" "" message-id)) - (mail-file - (replace-regexp-in-string - "\n$" "" (shell-command-to-string - (format "mu find -n 1 -f l i:%s" message-id)))) - (mail-dir (replace-regexp-in-string "/\\(cur\\|new\\|tmp\\)/$" "" - (file-name-directory mail-file))) - (message-id-escaped (regexp-quote message-id)) - (mutt-keystrokes - (format "L~i %s\n\n" (shell-quote-argument message-id-escaped))) - (mutt-command (list "neomutt" "-R" "-f" mail-dir - "-e" (format "push '%s'" mutt-keystrokes)))) - - (message "Launching neomutt for message %s" message-id) - (call-process "setsid" nil nil - "-f" "termite" "-e" - (concat "neomutt -R -f " mail-dir " -e \"" (format "push '%s a l'\"" mutt-keystrokes))))) - - ;; Hook up `message:...` style URLs - (org-add-link-type "message" 'tdehaeze/mutt-open-message) -#+end_src - -** Abbreviations -Type the abbreviation and use =C-x a -= to create a new abbreviation. - -#+begin_src emacs-lisp - (setq-default abbrev-mode t) - ;; save abbreviations upon exiting xemacs - (setq save-abbrevs t) - ;; set the file storing the abbreviations - (setq abbrev-file-name "~/.spacemacs.d/my-abbreviations.el") - ;; reads the abbreviations file on startup - (quietly-read-abbrev-file) -#+end_src - -** Elfeed - -** Telegram -:PROPERTIES: -:header-args:emacs-lisp+: :tangle no -:END: -#+begin_src emacs-lisp - (telega-notifications-mode 1) -#+end_src - -* Snippets - :PROPERTIES: - :header-args:conf+: :comments none - :header-args:conf+: :mkdirp yes - :END: -** LaTeX -*** Coordinate -#+begin_src conf :tangle ~/.spacemacs.d/snippets/latex/coordinate -#contributor : Thomas Dehaeze -#name :coordinate -# -- -\coordinate[${1:->}] (${2:name}) at (${3:pointcoordinate}); -$0 -#+end_src - -*** Draw -#+begin_src conf :tangle ~/.spacemacs.d/snippets/latex/draw -#contributor : Thomas Dehaeze -#name :draw -# -- -\draw[${1:->}] (${2:point1}) -- (${3:point2}); -$0 -#+end_src - -*** Node -#+begin_src conf :tangle ~/.spacemacs.d/snippets/latex/node -#contributor : Thomas Dehaeze -#name :node -# -- -node[${1:below right}] (${2:name}) {${3:label}}; -$0 -#+end_src - -*** Path -#+begin_src conf :tangle ~/.spacemacs.d/snippets/latex/path -#contributor : Thomas Dehaeze -#name :path -# -- -\path[${1}] (${2:point1}) -- (${3:point2}); -$0 -#+end_src - -** Matlab -*** Clear -#+begin_src conf :tangle ~/.spacemacs.d/snippets/matlab/clear -#contributor : Thomas Dehaeze -#name :clear and close all -# -- -clear; close all; clc; -$0 -#+end_src - -*** Function -#+begin_src conf :tangle ~/.spacemacs.d/snippets/matlab/function -#contributor : Thomas Dehaeze -#name :function -# -- -function [${4:outputs}] = ${1:functionName}(${2:inputs}, ${3:opts_param}) -% $1 - Description -% -% Syntax: $1($2, $3) -% -% Inputs: -% - $2 - -% - $3 - Optionals parameters: structure with the following fields: -% - -% -% Outputs: -% - $4 - - -%% Default value for opts -opts = struct(... - '${5:outputs}', ${6:default_value} ... -); - -if exist('opts_param','var') - for opt = fieldnames($3)' - if sum(strcmp(fieldnames(opts), opt{1})) == 1 - opts.(opt{1}) = $3.(opt{1}); - else - warning(sprintf('%s is not a valid option.', opt{1})); - end - end -end - -$0 -#+end_src - -** Org Mode -*** Begin -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/begin -#contributor : Thomas Dehaeze -#name :LaTeX Environment -# -- -\begin{${1:equation}} - $0 -\end{$1} -#+end_src - -*** Block -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/block -#contributor : Thomas Dehaeze -#name :Org-Mode Block -#key: block -# -- -,#+begin_${1:$$(let ((type (yas-choose-value '("src" "example" "quote" "verse" "center" "latex" "html" "ascii")))) - (if type (concat type (if (equal type "src") - (concat " " (yas-choose-value '("emacs-lisp" "latex" "python" "sh" "matlab")))))))} -$0 -#+end_${1:$(car (split-string yas-text))} -#+end_src - -*** Custom Box -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/cbox -#contributor : Thomas Dehaeze -#name :Custom Box -# -- -#+attr_latex: :options [$1]{${2:blue}}{${3:ams nodisplayskip}} -#+begin_cbox -$0 -#+end_cbox -#+end_src - -*** Latex Class -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/latex-class -#name: latex-class -#key: lc -#expand-env: ((classes (mapcar 'car org-latex-classes))) -# -- -#+latex_class: ${1:$$(yas-choose-value classes)} -$0 -#+end_src - -*** Name Caption Figure -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/name-caption-figure -#name: name-caption-figure -#key: ncf -# -- -#+name: fig:${1:name} -#+caption: ${2:Caption} -[[${3:`(read-file-name "File: ")`}]] - -$0 -#+end_src - -*** Bibliography with completion -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/bib -#name: bibliography with completion -#key: bib -# -- -bibliography:${1:$$(yas-choose-value (org-ref-find-bibliography))} -#+end_src - -*** Cite -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/cite -#name: org-ref cite link -#key: cite -# -- -cite:${1:$$(completing-read - "bibtex key: " - (let ((bibtex-files (org-ref-find-bibliography)))(bibtex-global-key-alist)))} -#+end_src - -*** Ref -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/ref -#name: org-ref ref link with completion -#key: ref -# -- -ref:${1:$$(completing-read "label: " (org-ref-get-labels))} -#+end_src - -*** Beamer - CBOX -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/bcbox -#contributor : Thomas Dehaeze -#name :Beamer Custom Box -# -- -,*** ${1:@@latex:@@} :B_cbox: -,:PROPERTIES: -:BEAMER_env: cbox -:BEAMER_opt: {${2:blue}}{${3:ams nodisplayskip}} -:END: - -$0 -#+end_src - -*** Code -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/code -#contributor : Thomas Dehaeze -#name :Code -# -- -#+caption: ${1:Listing Caption} -#+label: lst:${2:listing_name} -,#+begin_src ${3:listing_language} -$0 -,#+end_src -#+end_src - -*** Equation -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/equation -#contributor : Thomas Dehaeze -#name :Equation -# -- -#+name: eq:${1:equation_name} -\begin{equation} -$0 -\end{equation} -#+end_src - -*** Figure -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/figure -#contributor : Thomas Dehaeze -#name :Figure -# -- -#+name: fig:${1:figure_name} -#+caption: ${2:Figure caption} -#+attr_latex: :${3:scale 1} -[[file:${4:figs/}$1.${5:pdf}]] -$0 -#+end_src - -*** Frac -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/frac -#contributor : Thomas Dehaeze -#name :LaTeX Fraction -# -- -\frac{$1}{$2} $0 -#+end_src - -*** Left -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/left -#contributor : Thomas Dehaeze -#name :Left Right mathematical delimitations -# -- -\left$1 $0 \right$2 -#+end_src - -*** Mconfig -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/mconfig -#contributor : Thomas Dehaeze -#name :Matlab-Configuration-Header -# -- -#+PROPERTY: header-args:matlab :session *MATLAB* -#+PROPERTY: header-args:matlab+ :tangle ${1:filename}.m -#+PROPERTY: header-args:matlab+ :comments org -#+PROPERTY: header-args:matlab+ :exports both -#+PROPERTY: header-args:matlab+ :results none -#+PROPERTY: header-args:matlab+ :eval no-export -#+PROPERTY: header-args:matlab+ :noweb yes -#+PROPERTY: header-args:matlab+ :mkdirp yes -#+PROPERTY: header-args:matlab+ :output-dir ${2:figs} -$0 -#+end_src - -*** Mdescription -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/mdescription -#contributor : Thomas Dehaeze -#name :Measurement-Description -# -- -,* Measurement description -,** Setup :ignore: -*Setup*: - -,** Goal :ignore: -*Goal*: - -,** Measurements :ignore: -*Measurements*: - -Three measurements are done: -| Measurement File | Description | -|-------------------------+------------------------------| -| =mat/data_${1:001}.mat= | $2 | - -Each of the measurement =mat= file contains one =data= array with 3 columns: -| Column number | Description | -|---------------+-------------------| -| 1 | $3 | -| 2 | $4 | -| 3 | Time | - -$0 -#+end_src - -*** Mfigure -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/mfigure -#contributor : Thomas Dehaeze -#name :Matlab-Figure -# -- -#+HEADER: :tangle no :exports results :results none :noweb yes -,#+begin_src matlab :var filepath="${2:figs}/$1.pdf" :var figsize="${3:full-tall}" :post pdf2svg(file=*this*, ext="png") - <>$0 -,#+end_src - -#+NAME: fig:$1 -#+CAPTION: ${4:caption}${5: ([[./figs/$1.png][png]], [[./figs/$1.pdf][pdf]])} -[[file:$2/$1.png]] -#+end_src - -*** Mfunction -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/mfunction -#contributor : Thomas Dehaeze -#name :Matlab-Function -# -- -,* ${1:Function Name} -:PROPERTIES: -:header-args:matlab+: :tangle src/${2:matlab_file_name}.m -:header-args:matlab+: :comments none :mkdirp yes :eval no -:END: -<> - -This Matlab function is accessible [[file:src/$2.m][here]]. - -,#+begin_src matlab - function [${4:in_data}] = $2(${3:in_data}) - % $2 - $0 - % - % Syntax: [$4] = $2($3) - % - % Inputs: - % - $3 - - % - % Outputs: - % - $4 - - - end -,#+end_src -#+end_src - -*** Mheader -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/mheader -#contributor : Thomas Dehaeze -#name :Matlab-Header -# -- -,* ${1:Heading Name} -:PROPERTIES: -:header-args:matlab+: :tangle matlab/${2:matlab_file_name}.m -:header-args:matlab+: :comments org :mkdirp yes -:END: -<> - -,** ZIP file containing the data and matlab files :ignore: -,#+begin_src bash :exports none :results none - if [ matlab/$2.m -nt data/$2.zip ]; then - cp matlab/$2.m $2.m; - zip data/$2 \ - mat/data.mat \ - $2.m - rm $2.m; - fi -,#+end_src - -,#+begin_note - All the files (data and Matlab scripts) are accessible [[file:data/$2.zip][here]]. -,#+end_note - -$0 -#+end_src - -*** Minipage -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/minipage -#contributor : Thomas Dehaeze -#name :minipage -# -- -#+BEGIN_EXPORT latex -\begin{figure}[htbp] -\centering -\begin{minipage}[t]{0.49\linewidth} -#+END_EXPORT -#+attr_latex: :float nil :width 0.95\linewidth -$0 -#+BEGIN_EXPORT latex -\end{minipage}% -\hfill% -\begin{minipage}[t]{0.49\linewidth} -#+END_EXPORT -#+attr_latex: :float nil :width 0.95\linewidth - -#+BEGIN_EXPORT latex -\end{minipage} -\end{figure} -#+END_EXPORT -#+end_src - -*** Minit -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/minit -#contributor : Thomas Dehaeze -#name :Matlab-Init -# -- -,** Matlab Init :noexport:ignore: -,#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) - <> -,#+end_src - -,#+begin_src matlab :exports none :results silent :noweb yes - <> -,#+end_src - -$0 -#+end_src - -*** Mtable -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/mtable -#contributor : Thomas Dehaeze -#name :Matlab-Table -# -- -,#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*) - data2orgtable(${1:data}, {${2:'rowlabel'}}, {${3:'collabel'}}, ' %.1f '); -,#+end_src -$0 -#+end_src - -*** Multicolumn -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/multicolumn -#contributor : Thomas Dehaeze -#name :Multcolumn -# -- -#+attr_latex: :float multicolumn -$0 -#+end_src - -*** Subfigure -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/subfigure -#contributor : Thomas Dehaeze -#name :Subfigure -# -- -#+name: fig:${1:figure_name} -#+caption: ${2:figure caption} -#+attr_latex: :environment subfigure :width 0.49\linewidth :align c -| file:${3:sub_fig_name}.${4:pdf} | file:${5:sub_fig_name}.${6:pdf} | -| <> ${7:sub figure caption} | <> ${8:sub figure caption} | -$0 -#+end_src - -*** Table -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/table -#contributor : Thomas Dehaeze -#name :Table -# -- -#+name: tab:${1:table_name} -#+caption: ${2:Table caption} -#+attr_latex: :environment tabularx :width ${3:\linewidth} :align ${4:lXX} -#+attr_latex: :center t :booktabs t :float t -| $0 | | | -|---+---+---| -| | | | -#+end_src - -*** Tikz -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/tikz -#contributor : Thomas Dehaeze -#name :Tikz figure -# -- -,#+begin_src latex :file ${1:figure_name}.pdf :post pdf2svg(file=*this*, ext="png") :exports both - \begin{tikzpicture} - $0 - \end{tikzpicture} -,#+end_src -#+end_src - -*** Tikzfig -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/tikzfig -#contributor : Thomas Dehaeze -#name :Tikz Figure -# -- -#+NAME: fig:${1:figure_name} -#+HEADER: :headers '("\\\\usepackage{tikz}" "\\\\usepackage{import}" "\\\\import{$HOME/Cloud/thesis/LaTeX/}{config.tex}") -#+HEADER: :imagemagick t :fit yes :iminoptions -scale 100% -density 150 :imoutoptions -quality 100 -#+HEADER: :results raw replace :buffer no :eval no-export :exports both :mkdirp yes -#+HEADER: :output-dir ${2:figs} -,#+begin_src latex :file $1.pdf :post pdf2svg(file=*this*, ext="png") :exports both - \begin{tikzpicture} - $0 - \end{tikzpicture} -,#+end_src - -#+NAME: fig:$1 -#+CAPTION: ${3:Caption} -#+RESULTS: fig:$1 -#+end_src - -*** Tikzheader -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/tikzheader -#contributor : Thomas Dehaeze -#name :Tikz Header -# -- -,* ${1:Title/Description of the figure} -,#+begin_src latex :file ${2:figure_name}.pdf :tangle figs/$2.tex :exports ${3:both} - \begin{tikzpicture} - $0 - \end{tikzpicture} -,#+end_src - -#+name: fig:$2 -#+caption: $1 ([[./figs/$2.png][png]], [[./figs/$2.pdf][pdf]], [[./figs/$2.tex][tex]]). -#+RESULTS: -[[file:./figs/$2.png]] -#+end_src - -*** User-config -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/user-config -# -*- mode: snippet -*- -# name: user-config -# key: uc -# -- -,#+begin_src emacs-lisp :tangle user-config.el -$1 -,#+end_src -#+end_src - -*** User-init -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/user-init -# -*- mode: snippet -*- -# name: user-init -# key: ui -# -- -,#+begin_src emacs-lisp :tangle user-init.el -$1 -,#+end_src -#+end_src - -*** Wrap -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/wrap -#contributor : Thomas Dehaeze -#name :Wrap -# -- -#+attr_latex: :float wrap -$0 -#+end_src -*** Latex -**** Integral -#+begin_src conf :tangle ~/.spacemacs.d/snippets/org-mode/latex/int -# -*- mode: snippet -*- -# name: latex integral -# key: int -# contributor: John Kitchin -# -- -\int_{$1}^{$2} $3d$4$0 -#+end_src