Skip to content

Instantly share code, notes, and snippets.

@pkkm
Created July 25, 2013 13:05
Show Gist options
  • Select an option

  • Save pkkm/6079418 to your computer and use it in GitHub Desktop.

Select an option

Save pkkm/6079418 to your computer and use it in GitHub Desktop.

Revisions

  1. Paweł Kraśnicki created this gist Jul 25, 2013.
    78 changes: 78 additions & 0 deletions smartparens.el
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,78 @@
    ;;; Bindings.

    (define-key sp-keymap (kbd "C-M-f") 'sp-forward-sexp)
    (define-key sp-keymap (kbd "C-M-b") 'sp-backward-sexp)

    (define-key sp-keymap (kbd "C-M-d") 'sp-down-sexp)
    (define-key sp-keymap (kbd "C-M-a") 'sp-backward-down-sexp)
    (define-key sp-keymap (kbd "C-S-a") 'sp-beginning-of-sexp)
    (define-key sp-keymap (kbd "C-S-d") 'sp-end-of-sexp)

    (define-key sp-keymap (kbd "C-M-e") 'sp-up-sexp)
    (define-key emacs-lisp-mode-map (kbd ")") 'sp-up-sexp)
    (define-key sp-keymap (kbd "C-M-u") 'sp-backward-up-sexp)
    (define-key sp-keymap (kbd "C-M-t") 'sp-transpose-sexp)

    (define-key sp-keymap (kbd "C-M-n") 'sp-next-sexp)
    (define-key sp-keymap (kbd "C-M-p") 'sp-previous-sexp)

    (define-key sp-keymap (kbd "C-M-k") 'sp-kill-sexp)
    (define-key sp-keymap (kbd "C-M-w") 'sp-copy-sexp)

    ;;(define-key sp-keymap (kbd "M-<delete>") 'sp-unwrap-sexp)
    ;;(define-key sp-keymap (kbd "M-<backspace>") 'sp-backward-unwrap-sexp)

    (define-key sp-keymap (kbd "C-<right>") 'sp-forward-slurp-sexp)
    (define-key sp-keymap (kbd "C-<left>") 'sp-forward-barf-sexp)
    (define-key sp-keymap (kbd "C-M-<left>") 'sp-backward-slurp-sexp)
    (define-key sp-keymap (kbd "C-M-<right>") 'sp-backward-barf-sexp)

    (define-key sp-keymap (kbd "M-D") 'sp-splice-sexp)
    ;;(define-key sp-keymap (kbd "C-M-<delete>") 'sp-splice-sexp-killing-forward)
    ;;(define-key sp-keymap (kbd "C-M-<backspace>") 'sp-splice-sexp-killing-backward)
    ;;(define-key sp-keymap (kbd "C-S-<backspace>") 'sp-splice-sexp-killing-around)

    (define-key sp-keymap (kbd "C-]") 'sp-select-next-thing-exchange)
    (define-key sp-keymap (kbd "C-<left_bracket>") 'sp-select-previous-thing)
    (define-key sp-keymap (kbd "C-M-]") 'sp-select-next-thing)

    (define-key sp-keymap (kbd "M-F") 'sp-forward-symbol)
    (define-key sp-keymap (kbd "M-B") 'sp-backward-symbol)

    ;;; Other bindings.

    (defvar my-smartparens-map (make-sparse-keymap)
    "Keymap for rarely used Smartparens commands.")
    (define-prefix-command 'my-smartparens-map)
    (define-key evil-normal-state-map (kbd "g p") #'my-smartparens-map)

    (define-key my-smartparens-map (kbd "t") 'sp-prefix-tag-object) ; Perform the next operation on an SGML tag.
    (define-key my-smartparens-map (kbd "p") 'sp-prefix-pair-object) ; Perform the next operation on a balanced pair.

    ;; Splice sexp, killing backward. Then wrap the enclosing sexp with the killed one.
    ;; Example (| -- cursor):
    ;; (let ((stuff 1)) |(while (we-are-good)
    ;; (while (we-are-good) -> (let ((stuff 1))
    ;; |(do-thing 1) (do-thing 1)
    ;; (do-thing 2))) (do-thing 2)))
    (define-key my-smartparens-map (kbd "c") 'sp-convolute-sexp)

    ;; Absorb -- move the sexp before the one we're in into it, at the cursor position.
    ;; Emit -- the reverse.
    ;; Example (| -- cursor):
    ;; (do-stuff 1) (save-excursion
    ;; (save-excursion --absorb--> |(do-stuff 1)
    ;; |(do-stuff 2)) (do-stuff 2))
    (define-key my-smartparens-map (kbd "a") 'sp-absorb-sexp)
    (define-key my-smartparens-map (kbd "e") 'sp-emit-sexp)
    (define-key my-smartparens-map (kbd "A") 'sp-emit-sexp)
    (define-key my-smartparens-map (kbd "E") 'sp-absorb-sexp)

    ;; Add the expression after/before point to the list before/after point (like slurp forward/backward, but from the outside).
    (define-key my-smartparens-map (kbd "p") 'sp-add-to-previous-sexp)
    (define-key my-smartparens-map (kbd "n") 'sp-add-to-next-sexp)

    ;; Join, split.
    (define-key my-smartparens-map (kbd "j") 'sp-join-sexp)
    (define-key my-smartparens-map (kbd "T") 'sp-join-sexp)
    (define-key my-smartparens-map (kbd "s") 'sp-split-sexp)