Created
March 7, 2018 14:31
-
-
Save prepor/4b3a310674220766590adc817a29f26e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defun mine/post-init-smartparens () | |
(require 'smartparens-config) | |
(add-hook 'minibuffer-setup-hook 'turn-on-smartparens-strict-mode) | |
;;;;;;;;;;;;;;;;;;;;;;;; | |
;; keybinding management | |
(define-key smartparens-mode-map (kbd "C-M-f") 'sp-forward-sexp) | |
(define-key smartparens-mode-map (kbd "C-M-b") 'sp-backward-sexp) | |
(define-key smartparens-mode-map (kbd "C-M-d") 'sp-down-sexp) | |
(define-key smartparens-mode-map (kbd "C-M-a") 'sp-backward-down-sexp) | |
(define-key smartparens-mode-map (kbd "C-S-d") 'sp-beginning-of-sexp) | |
(define-key smartparens-mode-map (kbd "C-S-a") 'sp-end-of-sexp) | |
(define-key smartparens-mode-map (kbd "C-M-e") 'sp-up-sexp) | |
(define-key smartparens-mode-map (kbd "C-M-u") 'sp-backward-up-sexp) | |
(define-key smartparens-mode-map (kbd "C-M-t") 'sp-transpose-sexp) | |
(define-key smartparens-mode-map (kbd "C-M-n") 'sp-next-sexp) | |
(define-key smartparens-mode-map (kbd "C-M-p") 'sp-previous-sexp) | |
(define-key smartparens-mode-map (kbd "C-M-k") 'sp-kill-sexp) | |
(define-key smartparens-mode-map (kbd "C-M-w") 'sp-copy-sexp) | |
(define-key smartparens-mode-map (kbd "M-<delete>") 'sp-unwrap-sexp) | |
(define-key smartparens-mode-map (kbd "M-<backspace>") 'sp-backward-unwrap-sexp) | |
(define-key smartparens-mode-map (kbd "C-<right>") 'sp-forward-slurp-sexp) | |
(define-key smartparens-mode-map (kbd "C-<left>") 'sp-forward-barf-sexp) | |
(define-key smartparens-mode-map (kbd "C-M-<left>") 'sp-backward-slurp-sexp) | |
(define-key smartparens-mode-map (kbd "C-M-<right>") 'sp-backward-barf-sexp) | |
(define-key smartparens-mode-map (kbd "M-D") 'sp-splice-sexp) | |
(define-key smartparens-mode-map (kbd "C-M-<delete>") 'sp-splice-sexp-killing-forward) | |
(define-key smartparens-mode-map (kbd "C-M-h") 'sp-splice-sexp-killing-backward) | |
(define-key smartparens-mode-map (kbd "C-S-<backspace>") 'sp-splice-sexp-killing-around) | |
(define-key smartparens-mode-map (kbd "C-]") 'sp-select-next-thing-exchange) | |
(define-key smartparens-mode-map (kbd "C-<left_bracket>") 'sp-select-previous-thing) | |
(define-key smartparens-mode-map (kbd "C-M-]") 'sp-select-next-thing) | |
(define-key smartparens-mode-map (kbd "M-F") 'sp-forward-symbol) | |
(define-key smartparens-mode-map (kbd "M-B") 'sp-backward-symbol) | |
(bind-key "C-c f" (lambda () (interactive) (sp-beginning-of-sexp 2)) smartparens-mode-map) | |
(bind-key "C-c b" (lambda () (interactive) (sp-beginning-of-sexp -2)) smartparens-mode-map) | |
(bind-key "C-M-s" | |
(defhydra smartparens-hydra () | |
"Smartparens" | |
("d" sp-down-sexp "Down") | |
("e" sp-up-sexp "Up") | |
("u" sp-backward-up-sexp "Up") | |
("a" sp-backward-down-sexp "Down") | |
("f" sp-forward-sexp "Forward") | |
("b" sp-backward-sexp "Backward") | |
("k" sp-kill-sexp "Kill" :color blue) | |
("q" nil "Quit" :color blue)) | |
smartparens-mode-map) | |
(bind-key "H-t" 'sp-prefix-tag-object smartparens-mode-map) | |
(bind-key "H-p" 'sp-prefix-pair-object smartparens-mode-map) | |
(bind-key "H-y" 'sp-prefix-symbol-object smartparens-mode-map) | |
(bind-key "H-h" 'sp-highlight-current-sexp smartparens-mode-map) | |
(bind-key "H-e" 'sp-prefix-save-excursion smartparens-mode-map) | |
(bind-key "H-s c" 'sp-convolute-sexp smartparens-mode-map) | |
(bind-key "H-s a" 'sp-absorb-sexp smartparens-mode-map) | |
(bind-key "H-s e" 'sp-emit-sexp smartparens-mode-map) | |
(bind-key "H-s p" 'sp-add-to-previous-sexp smartparens-mode-map) | |
(bind-key "H-s n" 'sp-add-to-next-sexp smartparens-mode-map) | |
(bind-key "H-s j" 'sp-join-sexp smartparens-mode-map) | |
(bind-key "H-s s" 'sp-split-sexp smartparens-mode-map) | |
(bind-key "H-s r" 'sp-rewrap-sexp smartparens-mode-map) | |
(defvar hyp-s-x-map) | |
(define-prefix-command 'hyp-s-x-map) | |
(bind-key "H-s x" hyp-s-x-map smartparens-mode-map) | |
(bind-key "H-s x x" 'sp-extract-before-sexp smartparens-mode-map) | |
(bind-key "H-s x a" 'sp-extract-after-sexp smartparens-mode-map) | |
(bind-key "H-s x s" 'sp-swap-enclosing-sexp smartparens-mode-map) | |
(bind-key "C-x C-t" 'sp-transpose-hybrid-sexp smartparens-mode-map) | |
(bind-key ";" 'sp-comment emacs-lisp-mode-map) | |
(bind-key [remap c-electric-backspace] 'sp-backward-delete-char smartparens-strict-mode-map) | |
;;;;;;;;;;;;;;;;;; | |
;; pair management | |
(sp-local-pair 'minibuffer-inactive-mode "'" nil :actions nil) | |
(bind-key "C-(" 'sp---wrap-with-40 minibuffer-local-map) | |
;;; markdown-mode | |
(sp-with-modes '(markdown-mode gfm-mode rst-mode) | |
(sp-local-pair "*" "*" | |
:wrap "C-*" | |
:unless '(sp--gfm-point-after-word-p sp-point-at-bol-p) | |
:post-handlers '(("[d1]" "SPC")) | |
:skip-match 'sp--gfm-skip-asterisk) | |
(sp-local-pair "**" "**") | |
(sp-local-pair "_" "_" :wrap "C-_" :unless '(sp-point-after-word-p))) | |
(defun sp--gfm-point-after-word-p (id action context) | |
"Return t if point is after a word, nil otherwise. | |
This predicate is only tested on \"insert\" action." | |
(when (eq action 'insert) | |
(sp--looking-back-p (concat "\\(\\sw\\)" (regexp-quote id))))) | |
(defun sp--gfm-skip-asterisk (ms mb me) | |
(save-excursion | |
(goto-char mb) | |
(save-match-data (looking-at "^\\* ")))) | |
;;; rst-mode | |
(sp-with-modes 'rst-mode | |
(sp-local-pair "``" "``")) | |
;;; org-mode | |
(sp-with-modes 'org-mode | |
(sp-local-pair "*" "*" :actions '(insert wrap) :unless '(sp-point-after-word-p sp-point-at-bol-p) :wrap "C-*" :skip-match 'sp--org-skip-asterisk) | |
(sp-local-pair "_" "_" :unless '(sp-point-after-word-p) :wrap "C-_") | |
(sp-local-pair "/" "/" :unless '(sp-point-after-word-p) :post-handlers '(("[d1]" "SPC"))) | |
(sp-local-pair "~" "~" :unless '(sp-point-after-word-p) :post-handlers '(("[d1]" "SPC"))) | |
(sp-local-pair "=" "=" :unless '(sp-point-after-word-p) :post-handlers '(("[d1]" "SPC"))) | |
(sp-local-pair "«" "»")) | |
(defun sp--org-skip-asterisk (ms mb me) | |
(or (and (= (line-beginning-position) mb) | |
(eq 32 (char-after (1+ mb)))) | |
(and (= (1+ (line-beginning-position)) me) | |
(eq 32 (char-after me))))) | |
;;; tex-mode latex-mode | |
(sp-with-modes '(tex-mode plain-tex-mode latex-mode) | |
(sp-local-tag "i" "\"<" "\">")) | |
;;; lisp modes | |
(sp-with-modes sp--lisp-modes | |
(sp-local-pair "(" nil | |
:wrap "C-(" | |
:pre-handlers '(my-add-space-before-sexp-insertion) | |
:post-handlers '(my-add-space-after-sexp-insertion))) | |
(defun my-add-space-after-sexp-insertion (id action _context) | |
(when (eq action 'insert) | |
(save-excursion | |
(forward-char (sp-get-pair id :cl-l)) | |
(when (or (eq (char-syntax (following-char)) ?w) | |
(looking-at (sp--get-opening-regexp))) | |
(insert " "))))) | |
p | |
(defun my-add-space-before-sexp-insertion (id action _context) | |
(when (eq action 'insert) | |
(save-excursion | |
(backward-char (length id)) | |
(when (or (eq (char-syntax (preceding-char)) ?w) | |
(and (looking-back (sp--get-closing-regexp)) | |
(not (eq (char-syntax (preceding-char)) ?')))) | |
(insert " ")))))) | |
;; keybinding managemen |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment