From b2702fc2c1fe6d76ea878e413f7e5c4514240103 Mon Sep 17 00:00:00 2001 From: Pierre Neidhardt Date: Fri, 8 Mar 2019 09:37:34 +0100 Subject: [PATCH] Emacs/Lisp: Split Scheme and Common Lisp setups --- .emacs.d/init.el | 13 ++++ .emacs.d/lisp/init-lisp.el | 129 +++------------------------------- .emacs.d/lisp/init-lispy.el | 67 ++++++++++++++++++ .emacs.d/lisp/init-rainbow.el | 20 ++++++ .emacs.d/lisp/init-scheme.el | 35 +++++++++ 5 files changed, 144 insertions(+), 120 deletions(-) create mode 100644 .emacs.d/lisp/init-lispy.el create mode 100644 .emacs.d/lisp/init-rainbow.el create mode 100644 .emacs.d/lisp/init-scheme.el diff --git a/.emacs.d/init.el b/.emacs.d/init.el index 098b5995..88952c9b 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -260,7 +260,20 @@ ;;; Lisp (nconc package-selected-packages '(lispy lispyville rainbow-delimiters geiser slime)) (with-eval-after-load 'lisp-mode (require 'init-lisp)) +(with-eval-after-load 'scheme-mode (require 'init-scheme)) (setq geiser-repl-history-filename (expand-file-name "geiser_history" user-emacs-directory)) +;; Emacs Lisp +(add-hook 'emacs-lisp-mode-hook 'ambrevar/turn-on-prettify-before-save) +(add-hook 'emacs-lisp-mode-hook 'ambrevar/turn-on-complete-filename) +(add-hook 'emacs-lisp-mode-hook 'ambrevar/turn-on-tab-width-to-8) ; Because some existing code uses tabs. +(add-hook 'emacs-lisp-mode-hook 'ambrevar/turn-off-indent-tabs) ; Should not use tabs. +(add-hook 'emacs-lisp-mode-hook 'ambrevar/init-lispy) +(when (fboundp 'rainbow-delimiters-mode) + (add-hook 'emacs-lisp-mode-hook #'rainbow-delimiters-mode)) +(ambrevar/define-keys emacs-lisp-mode-map + "" 'package-lint-current-buffer + ;; Do not use `recompile' since we want to change the compilation folder for the current buffer. + "" (lambda () (interactive) (async-byte-recompile-directory (file-name-directory (buffer-file-name))))) ;;; Lua (nconc package-selected-packages '(lua-mode)) diff --git a/.emacs.d/lisp/init-lisp.el b/.emacs.d/lisp/init-lisp.el index 10e7c258..38c7afa5 100644 --- a/.emacs.d/lisp/init-lisp.el +++ b/.emacs.d/lisp/init-lisp.el @@ -1,104 +1,15 @@ ;;; Lisp -(with-eval-after-load 'lispyville - (lispyville-set-key-theme - '(operators ; Add equivalent for lispy-delete? - c-w ; Bind M-backspace to lispyville-delete-backward-word? - (escape insert) - slurp/barf-cp - ;; (mark insert) - mark-toggle ; TODO: Check out readme. - )) - (lispyville--define-key '(motion normal visual) - (kbd "^") #'lispy-left - (kbd "M-h") #'lispyville-previous-opening - (kbd "M-l") #'lispyville-next-opening - (kbd "M-j") #'lispy-down - (kbd "M-k") #'lispy-up - (kbd "M-H") #'lispy-up-slurp ; lispy-down-slurp? - (kbd "M-J") #'lispyville-drag-forward - (kbd "M-K") #'lispyville-drag-backward - (kbd "M-L") #'lispy-move-right ; lispy-up-slurp? - (kbd "C-x C-e") #'lispy-eval - (kbd "C-j") #'lispy-split - (kbd "S-C-j") #'lispy-join - (kbd "C-1") #'lispy-describe-inline - (kbd "C-2") #'lispy-arglist-inline - (kbd "C-4") #'lispy-x - (kbd "gd") #'lispy-goto-symbol - (kbd "M-") 'lispyville-delete-backward-word - ;; (kbd "/") #'lispy-occur - ;; (kbd "M-;") #'lispy-comment ; This conflicts with `iedit-toggle-selection' default binding. - ;; TODO: lispy-eval-and-replace - ")" #'lispy-right - "=" #'lispyville-prettify) - (lispyville--define-key 'insert - (kbd "") 'lispy-delete-backward - (kbd "M-") 'lispyville-delete-backward-word - ";" 'lispy-comment - ;; ":" 'lispy-colon ; The colon is not always used to delimit keys. - "'" 'lispy-tick - "`" 'lispy-backtick - "\"" 'lispy-quotes - "(" 'lispy-parens - ")" 'lispy-right-nostring) - (lispyville--define-key '(motion normal) - ;; "q" 'lispy-ace-paren ; REVIEW: Conflicts with magit-blame's quit. Fixed? - "Q" 'special-lispy-teleport ; TODO: Go to closest parenthesis if not on one. - "q" 'lispy-ace-paren - ;; "f" 'lispy-ace-paren - ;; "Q" 'lispy-ace-symbol - ;; "t" 'lispy-ace-char - "Y" 'lispy-new-copy - (kbd "S-") 'lispy-eval-other-window - ;; "p" 'lispy-paste - (kbd "M-C") 'lispy-clone ; TODO: Go to closest parenthesis if not on one. forward-char + lispyville-backward-up-list? - "D" 'lispy-kill) +(require 'init-lispy) +(require 'init-rainbow) - (lispy-define-key lispy-mode-map-special "C" 'lispy-clone)) - -(defun ambrevar/init-lispy () - (when (require 'lispy nil t) - (set-face-foreground 'lispy-face-hint "#FF00FF") - (when (require 'lispyville nil t) - (add-hook 'lispy-mode-hook 'lispyville-mode)) - (lispyville-mode))) - -(dolist (hook '(lisp-mode-hook - common-lisp-mode-hook - emacs-lisp-mode-hook - scheme-mode-hook)) - (add-hook hook 'ambrevar/turn-on-prettify-before-save) - (add-hook hook 'ambrevar/turn-on-complete-filename) - (add-hook hook 'ambrevar/turn-on-tab-width-to-8) ; Because some existing code uses tabs. - (add-hook hook 'ambrevar/turn-off-indent-tabs) ; Should not use tabs. - (add-hook hook 'ambrevar/init-lispy) - (when (fboundp 'rainbow-delimiters-mode) - (add-hook hook #'rainbow-delimiters-mode))) - -(when (require 'rainbow-delimiters nil t) - ;; See https://yoo2080.wordpress.com/2013/09/08/living-with-rainbow-delimiters-mode/. - ;; TODO: The color saturation metioned in the URL fails when running in daemon mode. - ;; https://github.com/Fanael/rainbow-delimiters/issues/36 - (set-face-foreground 'rainbow-delimiters-depth-1-face "#fe1717") - (set-face-foreground 'rainbow-delimiters-depth-2-face "#589cff") - (set-face-foreground 'rainbow-delimiters-depth-3-face "#f1fe52") - (set-face-foreground 'rainbow-delimiters-depth-4-face "#44ff4c") - (set-face-foreground 'rainbow-delimiters-depth-5-face "#83b2ff") - (set-face-foreground 'rainbow-delimiters-depth-6-face "#6161ff") - (set-face-foreground 'rainbow-delimiters-depth-7-face "#35ff35") - (set-face-foreground 'rainbow-delimiters-depth-8-face "#7ca8ff") - (set-face-foreground 'rainbow-delimiters-depth-9-face "#50fec1") - (set-face-attribute 'rainbow-delimiters-unmatched-face nil - :foreground 'unspecified - :inherit 'error - :strike-through t)) - -;; Emacs Lisp -(ambrevar/define-keys emacs-lisp-mode-map - "" 'package-lint-current-buffer - ;; Do not use `recompile' since we want to change the compilation folder for the current buffer. - "" (lambda () (interactive) (async-byte-recompile-directory (file-name-directory (buffer-file-name))))) +(add-hook 'lisp-mode-hook 'ambrevar/turn-on-prettify-before-save) +(add-hook 'lisp-mode-hook 'ambrevar/turn-on-complete-filename) +(add-hook 'lisp-mode-hook 'ambrevar/turn-on-tab-width-to-8) ; Because some existing code uses tabs. +(add-hook 'lisp-mode-hook 'ambrevar/turn-off-indent-tabs) ; Should not use tabs. +(add-hook 'lisp-mode-hook 'ambrevar/init-lispy) +(when (fboundp 'rainbow-delimiters-mode) + (add-hook 'lisp-mode-hook #'rainbow-delimiters-mode)) ;;; Common LISP. (defun ambrevar/slime-switch-to-repl () ; TODO: Replace with `helm-defswitch'. @@ -155,26 +66,4 @@ (when (require 'clhs nil 'noerror) (clhs-setup))) -;;; Scheme. -(with-eval-after-load 'scheme - (when (require 'patch-scheme nil t) - (setq scheme-imenu-generic-expression - al/scheme-imenu-generic-expression) - (advice-add 'scheme-indent-function - :override 'al/scheme-indent-function) - (add-hook 'scheme-mode-hook 'al/scheme-fix-docstring-font-lock))) - -(with-eval-after-load 'geiser-impl - ;; (setq geiser-repl-skip-version-check-p t - ;; geiser-mode-start-repl-p t) - (setq geiser-active-implementations (delq 'chicken geiser-active-implementations) - geiser-default-implementation 'guile - ;; geiser-repl-save-debugging-history-p t - geiser-repl-history-size 5000) - (add-hook 'geiser-repl-mode-hook 'lispyville-mode) - (add-hook 'geiser-repl-mode-hook 'rainbow-delimiters-mode)) - -(with-eval-after-load 'geiser-guile - (require 'patch-geiser nil 'noerror)) - (provide 'init-lisp) diff --git a/.emacs.d/lisp/init-lispy.el b/.emacs.d/lisp/init-lispy.el new file mode 100644 index 00000000..2fc2223c --- /dev/null +++ b/.emacs.d/lisp/init-lispy.el @@ -0,0 +1,67 @@ +;; Lispy + +(with-eval-after-load 'lispyville + (lispyville-set-key-theme + '(operators ; Add equivalent for lispy-delete? + c-w ; Bind M-backspace to lispyville-delete-backward-word? + (escape insert) + slurp/barf-cp + ;; (mark insert) + mark-toggle ; TODO: Check out readme. + )) + (lispyville--define-key '(motion normal visual) + (kbd "^") #'lispy-left + (kbd "M-h") #'lispyville-previous-opening + (kbd "M-l") #'lispyville-next-opening + (kbd "M-j") #'lispy-down + (kbd "M-k") #'lispy-up + (kbd "M-H") #'lispy-up-slurp ; lispy-down-slurp? + (kbd "M-J") #'lispyville-drag-forward + (kbd "M-K") #'lispyville-drag-backward + (kbd "M-L") #'lispy-move-right ; lispy-up-slurp? + (kbd "C-x C-e") #'lispy-eval + (kbd "C-j") #'lispy-split + (kbd "S-C-j") #'lispy-join + (kbd "C-1") #'lispy-describe-inline + (kbd "C-2") #'lispy-arglist-inline + (kbd "C-4") #'lispy-x + (kbd "gd") #'lispy-goto-symbol + (kbd "M-") 'lispyville-delete-backward-word + ;; (kbd "/") #'lispy-occur + ;; (kbd "M-;") #'lispy-comment ; This conflicts with `iedit-toggle-selection' default binding. + ;; TODO: lispy-eval-and-replace + ")" #'lispy-right + "=" #'lispyville-prettify) + (lispyville--define-key 'insert + (kbd "") 'lispy-delete-backward + (kbd "M-") 'lispyville-delete-backward-word + ";" 'lispy-comment + ;; ":" 'lispy-colon ; The colon is not always used to delimit keys. + "'" 'lispy-tick + "`" 'lispy-backtick + "\"" 'lispy-quotes + "(" 'lispy-parens + ")" 'lispy-right-nostring) + (lispyville--define-key '(motion normal) + ;; "q" 'lispy-ace-paren ; REVIEW: Conflicts with magit-blame's quit. Fixed? + "Q" 'special-lispy-teleport ; TODO: Go to closest parenthesis if not on one. + "q" 'lispy-ace-paren + ;; "f" 'lispy-ace-paren + ;; "Q" 'lispy-ace-symbol + ;; "t" 'lispy-ace-char + "Y" 'lispy-new-copy + (kbd "S-") 'lispy-eval-other-window + ;; "p" 'lispy-paste + (kbd "M-C") 'lispy-clone ; TODO: Go to closest parenthesis if not on one. forward-char + lispyville-backward-up-list? + "D" 'lispy-kill) + + (lispy-define-key lispy-mode-map-special "C" 'lispy-clone)) + +(defun ambrevar/init-lispy () + (when (require 'lispy nil t) + (set-face-foreground 'lispy-face-hint "#FF00FF") + (when (require 'lispyville nil t) + (add-hook 'lispy-mode-hook 'lispyville-mode)) + (lispyville-mode))) + +(provide 'init-lispy) diff --git a/.emacs.d/lisp/init-rainbow.el b/.emacs.d/lisp/init-rainbow.el new file mode 100644 index 00000000..ef0921aa --- /dev/null +++ b/.emacs.d/lisp/init-rainbow.el @@ -0,0 +1,20 @@ +;; Rainbow delimiters + +(when (require 'rainbow-delimiters nil t) + ;; See https://yoo2080.wordpress.com/2013/09/08/living-with-rainbow-delimiters-mode/. + ;; TODO: The color saturation metioned in the URL fails when running in daemon mode. + ;; https://github.com/Fanael/rainbow-delimiters/issues/36 + (set-face-foreground 'rainbow-delimiters-depth-1-face "#fe1717") + (set-face-foreground 'rainbow-delimiters-depth-2-face "#589cff") + (set-face-foreground 'rainbow-delimiters-depth-3-face "#f1fe52") + (set-face-foreground 'rainbow-delimiters-depth-4-face "#44ff4c") + (set-face-foreground 'rainbow-delimiters-depth-5-face "#83b2ff") + (set-face-foreground 'rainbow-delimiters-depth-6-face "#6161ff") + (set-face-foreground 'rainbow-delimiters-depth-7-face "#35ff35") + (set-face-foreground 'rainbow-delimiters-depth-8-face "#7ca8ff") + (set-face-foreground 'rainbow-delimiters-depth-9-face "#50fec1") + (set-face-attribute 'rainbow-delimiters-unmatched-face nil + :foreground 'unspecified + :inherit 'error + :strike-through t)) +(provide 'init-rainbow) diff --git a/.emacs.d/lisp/init-scheme.el b/.emacs.d/lisp/init-scheme.el new file mode 100644 index 00000000..87427315 --- /dev/null +++ b/.emacs.d/lisp/init-scheme.el @@ -0,0 +1,35 @@ +;;; Scheme + +(require 'init-lispy) +(require 'init-rainbow) + +(add-hook 'scheme-mode-hook 'ambrevar/turn-on-prettify-before-save) +(add-hook 'scheme-mode-hook 'ambrevar/turn-on-complete-filename) +(add-hook 'scheme-mode-hook 'ambrevar/turn-on-tab-width-to-8) ; Because some existing code uses tabs. +(add-hook 'scheme-mode-hook 'ambrevar/turn-off-indent-tabs) ; Should not use tabs. +(add-hook 'scheme-mode-hook 'ambrevar/init-lispy) +(when (fboundp 'rainbow-delimiters-mode) + (add-hook 'scheme-mode-hook #'rainbow-delimiters-mode)) + +(with-eval-after-load 'scheme + (when (require 'patch-scheme nil t) + (setq scheme-imenu-generic-expression + al/scheme-imenu-generic-expression) + (advice-add 'scheme-indent-function + :override 'al/scheme-indent-function) + (add-hook 'scheme-mode-hook 'al/scheme-fix-docstring-font-lock))) + +(with-eval-after-load 'geiser-impl + ;; (setq geiser-repl-skip-version-check-p t + ;; geiser-mode-start-repl-p t) + (setq geiser-active-implementations (delq 'chicken geiser-active-implementations) + geiser-default-implementation 'guile + ;; geiser-repl-save-debugging-history-p t + geiser-repl-history-size 5000) + (add-hook 'geiser-repl-mode-hook 'lispyville-mode) + (add-hook 'geiser-repl-mode-hook 'rainbow-delimiters-mode)) + +(with-eval-after-load 'geiser-guile + (require 'patch-geiser nil 'noerror)) + +(provide 'init-scheme)