diff --git a/01-create-dirs.sh b/01-create-dirs.sh
index 81ef79ae293d33e7518589927fb0548e04ea4abb..a89280d31229a66744babf343d9a568e6014be70 100755
--- a/01-create-dirs.sh
+++ b/01-create-dirs.sh
@@ -5,4 +5,5 @@ mefs_indent_message "Directory tree creation..."
mkdir -p $mefs_EMACSDIR/sources
mkdir -p $mefs_EMACSDIR/flavors/
ln -sf $mefs_THISREPODIR/configs $mefs_EMACSDIR/
+ln -sf $mefs_THISREPODIR/layers $mefs_EMACSDIR/
diff --git a/configs/spacemacs-default/dot-layers.el b/configs/spacemacs-default/dot-layers.el
index 4b0422e821e0885a9176f98b3ca4f9e1bad00420..76bcffbc4180f7e190881f6605477ca15c703120 100644
--- a/configs/spacemacs-default/dot-layers.el
+++ b/configs/spacemacs-default/dot-layers.el
@@ -21,7 +21,7 @@
;; csv
;; -------- Applications
- ;; org
+ org
;; gnus
;; fasd
lsp
diff --git a/configs/spacemacs-default/dot-user-config.el b/configs/spacemacs-default/dot-user-config.el
index 85c9209ff0c363a6d37586c42943074ce32861ca..001d0fcd06bfa91b79abd55bf61390ded4ed7724 100644
--- a/configs/spacemacs-default/dot-user-config.el
+++ b/configs/spacemacs-default/dot-user-config.el
@@ -1,19 +1,231 @@
(defun dotspacemacs/user-config-specific ()
- (defun ulys/config/org/babel ()
-
- ;; FIXME julia bug - hack I have opened issue #13597
- (setq inferior-julia-program-name "julia")
-
- (custom-set-variables
- '(org-babel-load-languages (quote ((emacs-lisp . t)
- (R . t)
- (latex . t)
- (shell . t)
- (ditaa . t)
- (julia . t)
- (python . t)
- (sql . t)
- )))
- '(org-confirm-babel-evaluate nil)))
+ (ulys/config/org)
+ (ulys/config/ess)
+ )
+
+; ESS config
+(defun ulys/config/ess ()
+ (ulys/conf/ess-devtools-save-silentely)
+ (add-hook 'ess-mode-hook
+ (lambda ()
+ (define-key ess-mode-map (kbd ";") 'ess-insert-assign)
+ (define-key ess-mode-map (kbd "C-;") 'ulys/conf/ess-insert-magrittr-pipe)
+ (define-key ess-mode-map (kbd "C-:")
+ 'ulys/conf/ess-insert-right-assign-operator)
+ (define-key ess-mode-map (kbd "C-x C-j")
+ 'ess-eval-line-invisibly-and-step)
+ (define-key ess-mode-map (kbd "C-`") 'ulys/conf/ess-backquote-from-dollar)
+ (define-key ess-mode-map (kbd "C-~") 'ulys/conf/ess-backquote-delete-df$)
+ )))
+(defun ulys/conf/ess-insert-magrittr-pipe ()
+ "Insert magrittr pipe at i.e. \"%>%\"."
+ (interactive)
+ (insert "\n %>% "))
+(defun ulys/conf/ess-insert-right-assign-operator ()
+ "Insert \"->\"."
+ (interactive)
+ (insert " -> "))
+(defun ulys/conf/ess-devtools-save-silentely ()
+ (setq ess-save-silently t))
+(defun ulys/conf/ess-backquote-from-dollar ()
+ "Surround with backquotes form last $ till point."
+ (interactive)
+ (insert "`")
+ (setq initial-position (point))
+ (evil-find-char-to-backward 1 (string-to-char "$"))
+ (insert "`")
+ (goto-char (+ 1 initial-position)))
+(defun ulys/conf/ess-backquote-delete-df$ ()
+ (interactive)
+ (ulys/conf/ess-backquote-from-dollar)
+ (evil-find-char-to-backward 1 (string-to-char "$"))
+ (setq dollar-position (point))
+ (evil-backward-WORD-begin)
+ (evil-sp-delete (point) dollar-position)
+ (evil-find-char 1 (string-to-char "`"))
+ (evil-forward-char)
+ )
+
+;; Org config
+(defun ulys/config/org ()
+ (ulys/config/org/misc)
(ulys/config/org/babel)
+ (ulys/config/org-calendar)
+;; (ulys/config/org-minted)
+;; (ulys/config/org-odt-export-latexml)
+;; (ulys/config/org-capture)
+;; (ulys/config/org-file-apps)
+ )
+(defun ulys/config/org/misc ()
+ (setq org-list-allow-alphabetical t)
+ (setq org-hide-emphasis-markers t)
+ ;; <sTAB => src block
+ (require 'org-tempo)
)
+(defun ulys/config/org/babel ()
+
+ (setq org-src-window-setup 'current-window)
+
+ ;; FIXME julia bug - hack - have opened issue #13597
+ (setq inferior-julia-program-name "julia")
+
+ (custom-set-variables
+ '(org-babel-load-languages (quote ((emacs-lisp . t)
+ (R . t)
+ (latex . t)
+ (shell . t)
+ (ditaa . t)
+ (julia . t)
+ (python . t)
+ (sql . t)
+ )))
+ '(org-confirm-babel-evaluate nil)))
+(defun ulys/org-insert-csv-as-table (filename)
+ "Insert a csv file into the current buffer at point, and convert it to an org table."
+ (interactive (list (ido-read-file-name "csv file: ")))
+ (let* ((start (point))
+ (end (+ start (nth 1 (insert-file-contents filename)))))
+ (org-table-convert-region start end)))
+(defun ulys/config/org-capture ()
+ (setq org-default-notes-file "~/Nextcloud/org/tasks.org" )
+ (setq org-capture-templates
+ '(("t" "Thesis-related Task" entry
+ (file "~/Nextcloud/org/thesis.org")
+ "** TODO %?" :empty-lines 1)
+ ("u" "Teaching-related Task" entry
+ (file "~/Nextcloud/org/teaching.org")
+ "** TODO %?" :empty-lines 1)
+ ("h" "Hospital-related Task" entry
+ (file "~/Nextcloud/org/hospital.org")
+ "** TODO %?" :empty-lines 1))))
+(defun ulys/config/org-file-apps ()
+ (defun ulys/org-pdf-app (file-path link-without-schema)
+ "Open pdf file using pdf-tools and go to the specified page."
+ (let* ((page (if (not (string-match "\\.pdf::\\([0-9]+\\)\\'"
+ link-without-schema))
+ 1
+ (string-to-number (match-string 1 link-without-schema)))))
+ (find-file-other-window file-path)
+ (pdf-view-goto-page page)))
+ (setq org-file-apps
+ '((auto-mode . emacs)
+ ("\\.x?html?\\'" . "firefox %s")
+ ("\\.pdf\\(::[0-9]+\\)?\\'" . whatacold/org-pdf-app)
+ ("\\.gif\\'" . "eog \"%s\"")
+ ("\\.mp4\\'" . "vlc \"%s\"")
+ ("\\.mkv" . "vlc \"%s\""))))
+(defun ulys/config/org-calendar ()
+ (setq calendar-week-start-day 1))
+(defun ulys/org//capture-helper-capture-with-yank-method (method arg)
+
+ ;; helper 1/2
+ (defun wrap-into-results-example (capture)
+ (concat
+ "#+RESULTS:\n"
+ "#+ATTR_LATEX: :options frame=lines\n"
+ "#+BEGIN_SRC R :eval no :tangle no\n"
+ capture
+ "\n#+END_SRC\n"))
+
+ ;; helper 2/2
+ (defun choose-process (arg)
+ (if (or arg ;; user asks for selection
+ (not (boundp 'R-process-target)) ;; target not set
+ ;; or target is not set to an active process:
+ (not (process-live-p (get-buffer-process
+ R-process-target))))
+ (setq R-process-target
+ (completing-read
+ "Choose R process: "
+ (seq-map (lambda (el) (buffer-name (process-buffer el)))
+ (process-list))))))
+
+ ;; main
+ (choose-process arg)
+ (insert (wrap-into-results-example
+ (funcall method R-process-target))))
+(defun ulys/org/tibble-capture (arg)
+ "Let the user choose a R process, then kill last tibble output
+in the process and insert it in current buffer in a org
+#+RESULTS: format."
+ (interactive "P")
+
+ ;; helper 1/3
+ (defun extract-nrows-from-tibble-first-line (line)
+ "Extract the number N in the pattern: # A tibble N x M"
+ (let* (( line-without-commas (replace-regexp-in-string "," "" line))
+ ( x-position (string-match " x" line-without-commas))
+ ( nrow-start-at (length "# A tibble ")))
+ (string-to-number
+ (substring line-without-commas nrow-start-at x-position))))
+
+
+ ;; helper 3/3
+ (defun yank-last-tibble-from-buffer (buffer)
+ (interactive)
+
+ (save-current-buffer
+ (set-buffer buffer)
+ (search-backward "tibble")
+ (beginning-of-line)
+ (let* ((tibble-beg (point))
+ (nrow (extract-nrows-from-tibble-first-line (thing-at-point 'line t)))
+ (tibble-end (progn
+ (message "nrow: %d" nrow)
+ (re-search-forward (concat "^" (number-to-string (min 10 nrow))))
+ (while (search-forward "#" nil t)) ;; t means no error
+ (end-of-line)
+ (point))))
+ (buffer-substring tibble-beg tibble-end))))
+
+ ;; main
+ (ulys/org//capture-helper-capture-with-yank-method 'yank-last-tibble-from-buffer arg))
+(defun ulys/org/glimpse-capture (arg)
+ "Let the user choose a R process, then kill last glimpse output
+in the process and insert it in current buffer in a org
+#+RESULTS: format."
+ (interactive "P")
+
+ ;; helper 1
+ (defun extract-nb-vars-from-glimpse-second-line (line)
+ "Extract the number N in the pattern: Variables: N"
+ (let (( nb-vars-start-at (length "Varialbes: "))
+ ( nb-vars-end-at (length line)))
+ (string-to-number
+ (substring line nb-vars-start-at nb-vars-end-at))))
+
+ ;; helper 2
+ (defun suppress_$_in_front_of_lines (lines)
+ (replace-regexp-in-string "^\$ " "" lines))
+
+ ;; helper 3
+ (defun yank-last-glimpse-from-buffer (buffer)
+ (interactive)
+
+ (save-current-buffer
+ (set-buffer buffer)
+ (search-backward "Observations: ")
+ (beginning-of-line)
+ (let* ((glimpse-beg (point))
+ (nrow (progn
+ (forward-line)
+ (extract-nb-vars-from-glimpse-second-line
+ (thing-at-point 'line t))))
+ (glimpse-end (progn
+ (forward-line nrow)
+ (end-of-line)
+ (point))))
+ (suppress_$_in_front_of_lines
+ (buffer-substring glimpse-beg glimpse-end) ))))
+
+ ;; main
+ (ulys/org//capture-helper-capture-with-yank-method 'yank-last-glimpse-from-buffer arg))
+(defun ulys/config/org-minted ()
+ (setq org-latex-listings 'minted
+ org-latex-packages-alist '(("" "minted"))
+ org-latex-pdf-process
+ '("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
+ "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
+ "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f")))
+(defun ulys/config/org-odt-export-latexml ()
+ (setq org-latex-to-mathml-convert-command"latexmlmath \"%i\" --presentationmathml=%o"))
diff --git a/configs/spacemacs-minimal/init.el b/configs/spacemacs-minimal/init.el
index c8b80fa3060047163422d16a9d80ab5ad617fbee..53a0ed821a209470f5a08084af3e4c0bb03e49f2 100644
--- a/configs/spacemacs-minimal/init.el
+++ b/configs/spacemacs-minimal/init.el
@@ -41,6 +41,7 @@ This function should only modify configuration layer settings."
;; List of additional paths where to look for configuration layers.
;; Paths must have a trailing slash (i.e. `~/.mycontribs/')
dotspacemacs-configuration-layer-path '()
+
;; List of additional packages that will be installed without being
;; wrapped in a layer. If you need some configuration for these
;; packages, then consider creating a layer. You can also put the
@@ -48,7 +49,8 @@ This function should only modify configuration layer settings."
;; To use a local version of a package, use the `:location' property:
;; '(your-package :location "~/path/to/your-package/")
;; Also include the dependencies as they will not be resolved automatically.
- dotspacemacs-additional-packages '()
+ dotspacemacs-additional-packages '(
+ )
;; A list of packages that cannot be updated.
dotspacemacs-frozen-packages '()
@@ -75,6 +77,8 @@ This function should only modify configuration layer settings."
helm-no-header t)
emacs-lisp
git
+ org
+ smartparens
)
)
@@ -274,11 +278,11 @@ It should only modify the values of Spacemacs settings."
;; If non-nil then the last auto saved layouts are resumed automatically upon
;; start. (default nil)
- dotspacemacs-auto-resume-layouts nil
+ dotspacemacs-auto-resume-layouts t
;; If non-nil, auto-generate layout name when creating new layouts. Only has
;; effect when using the "jump to layout by number" commands. (default nil)
- dotspacemacs-auto-generate-layout-names nil
+ dotspacemacs-auto-generate-layout-names t
;; Size (in MB) above which spacemacs will prompt to open the large file
;; literally to avoid performance issues. Opening a file literally means that
@@ -505,6 +509,8 @@ If you are unsure, try setting them in `dotspacemacs/user-config' first."
;; --------------------------------------------------
;; ------ Configuration common to all versions ------
;; --------------------------------------------------
+ (message (concat user-emacs-directory "../../layers/"))
+ ;; (setq-default dotspacemacs-configuration-layer-path '(concat user-emacs-directory "../../layers/"))
;; --------------------------------------------------
@@ -541,8 +547,10 @@ before packages are loaded."
;; --------------------------------------------------
;; ------ Configuration common to all versions ------
;; --------------------------------------------------
- (setq undo-tree-auto-save-history t)
- (setq hybrid-style-enable-hjkl-bindings t)
+
+ (ulys/conf/general)
+ (ulys/conf/dired)
+ (ulys/conf/kbd)
;; --------------------------------------------------
;; ----- Configuration specific to this version -----
@@ -551,5 +559,54 @@ before packages are loaded."
(dotspacemacs/user-config-specific)
)
+ ; general config
+(defun ulys/conf/general ()
+ (setq undo-tree-auto-save-history t)
+ (setq vc-follow-symlinks t) ;; To edit .spacemacs without to be prompted each time
+ (setq hybrid-style-enable-hjkl-bindings t)
+ (spacemacs/toggle-centered-point-globally-on)
+
+ ;; add time in powerline
+ (display-time-mode 1)
+
+ ;; New frame will open fullscreen
+ (add-to-list 'default-frame-alist '(fullscreen . fullboth))
+ )
+ ; dired config
+(defun ulys/conf/dired ()
+
+ ;; helpers
+ (defun ulys/dired-open-current-dir ()
+ (interactive)
+ (spacemacs/dired "."))
+ (defun ulys/conf/dired/kbd/C-hjkl ()
+ (evil-define-key '(normal) dired-mode-map (kbd "C-h") 'dired-up-directory)
+ (evil-define-key '(normal) dired-mode-map (kbd "C-j") 'evil-next-line)
+ (evil-define-key '(normal) dired-mode-map (kbd "C-k") 'evil-previous-line)
+ (evil-define-key '(normal) dired-mode-map (kbd "C-l") 'dired-find-alternate-file))
+
+ ;; Auto-refresh dired on file change
+ (add-hook 'dired-mode-hook 'auto-revert-mode)
+
+ (spacemacs/set-leader-keys "ad" 'ulys/dired-open-current-dir)
+
+ ;; (hide .~undo-tree~ files)
+ (setq dired-omit-verbose nil)
+ (add-hook 'dired-mode-hook (lambda () (dired-omit-mode)))
+ (ulys/conf/dired/kbd/C-hjkl))
+ ; kbd config
+(defun ulys/conf/kbd ()
+
+ ;; --- others
+ ;; C-h to delete buffer and C-S-h for help
+ (global-set-key (kbd "C-h") 'spacemacs/kill-this-buffer)
+
+ ;; Simulates vim increment and decrement number
+ (define-key evil-normal-state-map (kbd "C-a C-a") 'evil-numbers/inc-at-pt)
+ (define-key evil-normal-state-map (kbd "C-x C-x") 'evil-numbers/dec-at-pt)
+
+ )
+
+
;; Do not write anything past this comment. This is where Emacs will
;; auto-generate custom variable definitions.
diff --git a/configs/spacemacs-test/dot-layers.el b/configs/spacemacs-test/dot-layers.el
index 586e4f35762160d6ee7bac30e0a6878628556d65..ac2916da97eb589db2be8787b50c38e4bd22b7d4 100644
--- a/configs/spacemacs-test/dot-layers.el
+++ b/configs/spacemacs-test/dot-layers.el
@@ -21,7 +21,7 @@
;; csv
;; -------- Applications
- ;; org
+ org
;; gnus
;; fasd
lsp
@@ -50,5 +50,11 @@
;; -------
;; theming
))
- )
+
+dotspacemacs-additional-packages
+(append dotspacemacs-additional-packages
+ '(
+ )
+ )
+ )
)
diff --git a/configs/spacemacs-test/dot-user-config.el b/configs/spacemacs-test/dot-user-config.el
index 85c9209ff0c363a6d37586c42943074ce32861ca..18b85edbadabb8c56e43b25e29ff4dfc90405ae5 100644
--- a/configs/spacemacs-test/dot-user-config.el
+++ b/configs/spacemacs-test/dot-user-config.el
@@ -1,8 +1,9 @@
(defun dotspacemacs/user-config-specific ()
(defun ulys/config/org/babel ()
- ;; FIXME julia bug - hack I have opened issue #13597
- (setq inferior-julia-program-name "julia")
+
+ ;; FIXME julia bug - hack I have opened issue #13597
+ (setq inferior-julia-program-name "julia")
(custom-set-variables
'(org-babel-load-languages (quote ((emacs-lisp . t)
@@ -15,5 +16,9 @@
(sql . t)
)))
'(org-confirm-babel-evaluate nil)))
+
+
(ulys/config/org/babel)
+
+ (require 'org-tempo)
)