diff --git a/core/core-evil.el b/core/core-evil.el index 5f4fbc42b..86a53ea85 100644 --- a/core/core-evil.el +++ b/core/core-evil.el @@ -346,23 +346,22 @@ evil-Surround-edit evil-surround-region) :config - (global-evil-surround-mode 1) - - ;; Escaped surround characters - (setq-default evil-surround-pairs-alist - (cons '(?\\ . narf/evil-surround-escaped) - evil-surround-pairs-alist)) - - (add-hook! emacs-lisp-mode - (push '(?\` . ("`" . "'")) evil-surround-pairs-alist)) - (add-hook! python-mode - (push '((?d . ("\"\"\"" . "\"\"\""))) evil-surround-pairs-alist))) + (global-evil-surround-mode 1)) (use-package evil-embrace :after evil-surround :config (evil-embrace-enable-evil-surround-integration) - (embrace-add-pair-regexp ?\\ "\\[[{(]" "\\[]})]" 'narf/evil-surround-escaped)) + ;; Escaped surround characters + (embrace-add-pair-regexp ?\\ "\\[[{(]" "\\[]})]" 'narf/embrace-escaped) + (add-hook 'LaTeX-mode-hook 'embrace-LaTeX-mode-hook) + (add-hook 'org-mode-hook 'embrace-org-mode-hook) + (add-hook! emacs-lisp-mode + (embrace-add-pair ?\` "`" "'")) + (add-hook! (emacs-lisp-mode lisp-mode) + (embrace-add-pair-regexp ?f "([^ ]+ " ")" 'narf/embrace-elisp-fn)) + (add-hook! (org-mode latex-mode) + (embrace-add-pair-regexp ?l "\\[a-z]+{" "}" 'narf/embrace-latex))) (use-package evil-visualstar :commands (global-evil-visualstar-mode diff --git a/core/defuns/defuns-embrace.el b/core/defuns/defuns-embrace.el new file mode 100644 index 000000000..20f772731 --- /dev/null +++ b/core/defuns/defuns-embrace.el @@ -0,0 +1,32 @@ +;;; defuns-embrace.el + +(defun narf--embrace-get-pair (char) + (acond ((cdr-safe (assoc (string-to-char char) evil-surround-pairs-alist)) + `(,(car it) . ,(cdr it))) + ((assoc-default char embrace--pairs-list) + (if (functionp (embrace-pair-struct-read-function it)) + (let ((pair (funcall (embrace-pair-struct-read-function it)))) + `(,(car pair) . ,(cdr pair))) + `(,(embrace-pair-struct-left it) . ,(embrace-pair-struct-right it)))) + (t `(,char . ,char)))) + +;;;###autoload +(defun narf/embrace-escaped () + "Escaped surround characters." + (let* ((char (string (read-char "\\"))) + (pair (narf--embrace-get-pair char)) + (text (if (sp-point-in-string) "\\\\%s" "\\%s"))) + (cons (format text (car pair)) + (format text (cdr pair))))) + +;;;###autoload +(defun narf/embrace-latex () + "LaTeX commands" + (cons (format "\\%s{" (read-string "\\")) "}")) + +;;;###autoload +(defun narf/embrace-elisp-fn () + (cons (format "(%s " (or (read-string "(") "")) ")")) + +(provide 'defuns-embrace) +;;; defuns-embrace.el ends here diff --git a/core/defuns/defuns-evil.el b/core/defuns/defuns-evil.el index 4bd88fc2c..a82abea2b 100644 --- a/core/defuns/defuns-evil.el +++ b/core/defuns/defuns-evil.el @@ -42,22 +42,6 @@ (when evil-exchange--overlays (evil-exchange-cancel))) -;;;###autoload -(defun narf/evil-surround-escaped () - "Escaped surround characters." - (let* ((char (string (read-char "\\"))) - (pair (acond ((cdr-safe (assoc (string-to-char char) evil-surround-pairs-alist)) - `(,(car it) . ,(cdr it))) - (t `(,char . ,char)))) - (text (if (sp-point-in-string) "\\\\%s" "\\%s"))) - (cons (format text (car pair)) - (format text (cdr pair))))) - -;;;###autoload -(defun narf/evil-surround-latex () - "LaTeX commands" - (cons (format "\\%s{" (read-string "\\")) "}")) - ;;;###autoload (autoload 'narf/evil-macro-on-all-lines "defuns-evil" nil t) (evil-define-operator narf/evil-macro-on-all-lines (beg end &optional macro) "Apply macro to each line."