fix electric indent, tab indent and smartparens

This commit is contained in:
2023-04-12 16:40:39 +02:00
parent ed4b350109
commit f9aa8e01a1
4 changed files with 124 additions and 120 deletions

View File

@@ -1 +0,0 @@
# Pasting from unix into emacs doesn't work anymore

View File

@@ -122,7 +122,7 @@ Returns t if version changed, nil otherwise."
;; enable outshine mode ;; enable outshine mode
(outshine-hook-function) (outshine-hook-function)
(electric-indent-mode t))) (electric-indent-local-mode t)))
;; use UP arrow for history in *ielm* as well, just as C-up ;; use UP arrow for history in *ielm* as well, just as C-up
(add-hook 'comint-mode-hook (add-hook 'comint-mode-hook

View File

@@ -30,27 +30,29 @@ Used when enabling smartparens-mode."
(goto-char beg)))) (goto-char beg))))
(use-package smartparens (use-package smartparens
:config :config
(require 'smartparens-config) (require 'smartparens-config)
(require 'cl-lib) (require 'cl-lib)
;; enable sp in minibuffer as well ;; enable sp in minibuffer as well
;; maybe, see: https://github.com/Fuco1/smartparens/issues/33: ;; maybe, see: https://github.com/Fuco1/smartparens/issues/33:
;; (sp-local-pair 'minibuffer-inactive-mode "'" nil :actions nil) ;; (sp-local-pair 'minibuffer-inactive-mode "'" nil :actions nil)
(setq sp-ignore-modes-list (setq sp-ignore-modes-list
(delete 'minibuffer-inactive-mode sp-ignore-modes-list)) (delete 'minibuffer-inactive-mode sp-ignore-modes-list))
;; automatically enable where needed ;; automatically enable where needed
(add-something-to-mode-hooks (add-something-to-mode-hooks
'(rust emacs-lisp ielm lisp lisp-interaction scheme slime-repl ) 'smartparens-mode) '(rust emacs-lisp ielm lisp elisp lisp-interaction scheme slime-repl ) 'smartparens-mode)
;; also in some select prog modes ;; also in some select prog modes
(add-something-to-mode-hooks ;; (add-something-to-mode-hooks
'(perl ruby c c++ sh makefile config-general yaml go) 'smartparens-mode) ;; '(perl ruby c c++ sh makefile config-general yaml go) (smartparens-mode t))
;; the above doesn't work anymore, for whatever reasons, so I enable it for all
(smartparens-global-mode t)
;; via https://ebzzry.io/en/emacs-pairs/: ;; via https://ebzzry.io/en/emacs-pairs/:
(defmacro def-pairs (pairs) (defmacro def-pairs (pairs)
"Define functions for pairing. PAIRS is an alist of (NAME . STRING) "Define functions for pairing. PAIRS is an alist of (NAME . STRING)
conses, where NAME is the function name that will be created and conses, where NAME is the function name that will be created and
STRING is a single-character string that marks the opening character. STRING is a single-character string that marks the opening character.
@@ -59,81 +61,81 @@ STRING is a single-character string that marks the opening character.
defines the functions WRAP-WITH-PAREN and WRAP-WITH-BRACKET, defines the functions WRAP-WITH-PAREN and WRAP-WITH-BRACKET,
respectively." respectively."
`(progn `(progn
,@(cl-loop for (key . val) in pairs ,@(cl-loop for (key . val) in pairs
collect collect
`(defun ,(read (concat `(defun ,(read (concat
"wrap-with-" "wrap-with-"
(prin1-to-string key) (prin1-to-string key)
"s")) "s"))
(&optional arg) (&optional arg)
(interactive "p") (interactive "p")
(sp-wrap-with-pair ,val))))) (sp-wrap-with-pair ,val)))))
(def-pairs ((paren . "(") (def-pairs ((paren . "(")
(bracket . "[") (bracket . "[")
(brace . "{") (brace . "{")
(single-quote . "'") (single-quote . "'")
(double-quote . "\"") (double-quote . "\"")
(back-quote . "`"))) (back-quote . "`")))
;;(add-hook 'smartparens-enabled-hook #'tvd-disable-par-and-pair) ;;(add-hook 'smartparens-enabled-hook #'tvd-disable-par-and-pair)
;;(add-hook 'smartparens-enabled-hook #'turn-on-smartparens-strict-mode) ;;(add-hook 'smartparens-enabled-hook #'turn-on-smartparens-strict-mode)
;; auto wrapping w/o region ;; auto wrapping w/o region
(define-key smartparens-mode-map (kbd "C-c (") 'wrap-with-parens) (define-key smartparens-mode-map (kbd "C-c (") 'wrap-with-parens)
(define-key smartparens-mode-map (kbd "C-c [") 'wrap-with-brackets) (define-key smartparens-mode-map (kbd "C-c [") 'wrap-with-brackets)
(define-key smartparens-mode-map (kbd "C-c {") 'wrap-with-braces) (define-key smartparens-mode-map (kbd "C-c {") 'wrap-with-braces)
(define-key smartparens-mode-map (kbd "C-c '") 'wrap-with-single-quotes) (define-key smartparens-mode-map (kbd "C-c '") 'wrap-with-single-quotes)
(define-key smartparens-mode-map (kbd "C-c \"") 'wrap-with-double-quotes) (define-key smartparens-mode-map (kbd "C-c \"") 'wrap-with-double-quotes)
(define-key smartparens-mode-map (kbd "C-c `") 'wrap-with-back-quotes) (define-key smartparens-mode-map (kbd "C-c `") 'wrap-with-back-quotes)
;; modification ;; modification
(define-key smartparens-mode-map (kbd "C-k") 'sp-kill-hybrid-sexp) (define-key smartparens-mode-map (kbd "C-k") 'sp-kill-hybrid-sexp)
(define-key smartparens-mode-map (kbd "C-<left>") 'sp-forward-slurp-sexp) (define-key smartparens-mode-map (kbd "C-<left>") 'sp-forward-slurp-sexp)
(define-key smartparens-mode-map (kbd "C-<right>") 'sp-forward-barf-sexp) (define-key smartparens-mode-map (kbd "C-<right>") 'sp-forward-barf-sexp)
;; movement ;; movement
;; Also Check: https://github.com/Fuco1/smartparens/wiki/Working-with-expressions ;; Also Check: https://github.com/Fuco1/smartparens/wiki/Working-with-expressions
;; (look for "quick summary for each navigation function") ;; (look for "quick summary for each navigation function")
;; ;;
;; Jump after the next balanced expression. If inside one and ;; Jump after the next balanced expression. If inside one and
;; there is no forward exp., jump after its closing pair. ;; there is no forward exp., jump after its closing pair.
(define-key smartparens-mode-map (kbd "C-M-<right>") 'sp-forward-sexp) (define-key smartparens-mode-map (kbd "C-M-<right>") 'sp-forward-sexp)
;; Jump before the previous balanced expression. If inside one ;; Jump before the previous balanced expression. If inside one
;; and there is no previous exp., jump before its opening pair. ;; and there is no previous exp., jump before its opening pair.
(define-key smartparens-mode-map (kbd "C-M-<left>") 'sp-backward-sexp) (define-key smartparens-mode-map (kbd "C-M-<left>") 'sp-backward-sexp)
;; Jump up one level from the current balanced expression. This ;; Jump up one level from the current balanced expression. This
;; means skipping all the enclosed expressions within this and ;; means skipping all the enclosed expressions within this and
;; then jumping after the closing pair. ;; then jumping after the closing pair.
(define-key smartparens-mode-map (kbd "C-M-<up>") 'sp-up-sexp) (define-key smartparens-mode-map (kbd "C-M-<up>") 'sp-up-sexp)
;; Jump after the opening pair of next balanced expression. This ;; Jump after the opening pair of next balanced expression. This
;; effectively descends one level down in the "expression ;; effectively descends one level down in the "expression
;; hierarchy". If there is no expression to descend to, jump ;; hierarchy". If there is no expression to descend to, jump
;; after current expression's opening pair. This can be used to ;; after current expression's opening pair. This can be used to
;; quickly navigate to the beginning of current balanced ;; quickly navigate to the beginning of current balanced
;; expression. ;; expression.
(define-key smartparens-mode-map (kbd "C-M-<down>") 'sp-down-sexp) (define-key smartparens-mode-map (kbd "C-M-<down>") 'sp-down-sexp)
;; Jump to the beginning of following balanced expression. If ;; Jump to the beginning of following balanced expression. If
;; there is no following expression on the current level, jump ;; there is no following expression on the current level, jump
;; one level up backward, effectively doing sp-backward-up-sexp. ;; one level up backward, effectively doing sp-backward-up-sexp.
(define-key smartparens-mode-map (kbd "C-S-<left>") 'sp-next-sexp) (define-key smartparens-mode-map (kbd "C-S-<left>") 'sp-next-sexp)
;; Jump to the end of the previous balanced expression. If there ;; Jump to the end of the previous balanced expression. If there
;; is no previous expression on the current level, jupm one level ;; is no previous expression on the current level, jupm one level
;; up forward, effectively doing sp-up-sexp. ;; up forward, effectively doing sp-up-sexp.
(define-key smartparens-mode-map (kbd "C-S-<right>") 'sp-previous-sexp) (define-key smartparens-mode-map (kbd "C-S-<right>") 'sp-previous-sexp)
;; comment the whole sexp ;; comment the whole sexp
(define-key smartparens-mode-map (kbd ";") 'tvd-lisp-comment) (define-key smartparens-mode-map (kbd ";") 'tvd-lisp-comment)
;; replace my global setting ;; replace my global setting
;; FIXME: fhceck/fix M<up+down>! ;; FIXME: fhceck/fix M<up+down>!
(define-key smartparens-mode-map (kbd "M-<right>") 'sp-forward-symbol) (define-key smartparens-mode-map (kbd "M-<right>") 'sp-forward-symbol)
(define-key smartparens-mode-map (kbd "M-<left>") 'sp-backward-symbol) (define-key smartparens-mode-map (kbd "M-<left>") 'sp-backward-symbol)
(when (fboundp 'defhydra) (when (fboundp 'defhydra)
(defhydra hydra-smartparens (:hint nil) (defhydra hydra-smartparens (:hint nil)
" "
Sexps [quit with _q_, reach this hydra with 'C-x ('] Sexps [quit with _q_, reach this hydra with 'C-x (']
^Nav^ ^Barf/Slurp^ ^Depth^ ^Nav^ ^Barf/Slurp^ ^Depth^
@@ -154,41 +156,41 @@ _k_: kill (C-k) _s_: split _{_: wrap with { }
^^ _i_: indent defun ^^ _i_: indent defun
" "
("q" nil) ("q" nil)
;; Wrapping ;; Wrapping
("(" (lambda (_) (interactive "P") (sp-wrap-with-pair "("))) ("(" (lambda (_) (interactive "P") (sp-wrap-with-pair "(")))
("{" (lambda (_) (interactive "P") (sp-wrap-with-pair "{"))) ("{" (lambda (_) (interactive "P") (sp-wrap-with-pair "{")))
("'" (lambda (_) (interactive "P") (sp-wrap-with-pair "'"))) ("'" (lambda (_) (interactive "P") (sp-wrap-with-pair "'")))
("\"" (lambda (_) (interactive "P") (sp-wrap-with-pair "\""))) ("\"" (lambda (_) (interactive "P") (sp-wrap-with-pair "\"")))
;; Navigation ;; Navigation
("f" sp-forward-sexp ) ("f" sp-forward-sexp )
("b" sp-backward-sexp) ("b" sp-backward-sexp)
("u" sp-backward-up-sexp) ("u" sp-backward-up-sexp)
("d" sp-down-sexp) ("d" sp-down-sexp)
("p" sp-backward-down-sexp) ("p" sp-backward-down-sexp)
("n" sp-up-sexp) ("n" sp-up-sexp)
;; Kill/copy ;; Kill/copy
("w" sp-copy-sexp) ("w" sp-copy-sexp)
("k" sp-kill-sexp) ("k" sp-kill-sexp)
;; Misc ;; Misc
("t" sp-transpose-sexp) ("t" sp-transpose-sexp)
("j" sp-join-sexp) ("j" sp-join-sexp)
("s" sp-split-sexp) ("s" sp-split-sexp)
("c" sp-convolute-sexp) ("c" sp-convolute-sexp)
("i" sp-indent-defun) ("i" sp-indent-defun)
;; Depth changing ;; Depth changing
("R" sp-splice-sexp) ("R" sp-splice-sexp)
("r" sp-splice-sexp-killing-around) ("r" sp-splice-sexp-killing-around)
("<up>" sp-splice-sexp-killing-backward) ("<up>" sp-splice-sexp-killing-backward)
("<down>" sp-splice-sexp-killing-forward) ("<down>" sp-splice-sexp-killing-forward)
;; Barfing/slurping ;; Barfing/slurping
("<left>" sp-forward-slurp-sexp) ("<left>" sp-forward-slurp-sexp)
("<right>" sp-forward-barf-sexp) ("<right>" sp-forward-barf-sexp)
("C-<left>" sp-backward-barf-sexp) ("C-<left>" sp-backward-barf-sexp)
("C-<right>" sp-backward-slurp-sexp)) ("C-<right>" sp-backward-slurp-sexp))
(define-key smartparens-mode-map (kbd "C-x (") 'hydra-smartparens/body) (define-key smartparens-mode-map (kbd "C-x (") 'hydra-smartparens/body)
)) ))
;;; Parens config goes here as well ;;; Parens config goes here as well

View File

@@ -277,3 +277,6 @@ in between will be killed. If INS is non-nil, it will be inserted then."
(advice-add 'iedit-mode :after '(lambda (&rest args) ;; restore previously saved (advice-add 'iedit-mode :after '(lambda (&rest args) ;; restore previously saved
(setq buffer-undo-list tvd-buffer-undo-list)))) (setq buffer-undo-list tvd-buffer-undo-list))))
(add-hook 'text-mode-hook
(lambda () (electric-indent-local-mode -1)))