From b1a1953e1c20578b0d866d538b6045b42f4de4ef Mon Sep 17 00:00:00 2001 From: Oleh Krehel Date: Mon, 7 Dec 2015 14:54:16 +0100 Subject: [PATCH] Customize extra chars for avy-goto-subword-1 * avy.el (avy-subword-extra-word-chars): New defcustom. (avy-goto-subword-0): Modify the syntax table temporarily using `avy-subword-extra-word-chars'. Fixes #116 --- avy.el | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/avy.el b/avy.el index bd04228..4426a22 100644 --- a/avy.el +++ b/avy.el @@ -955,6 +955,11 @@ The window scope is determined by `avy-all-windows' (ARG negates it)." (declare-function subword-backward "subword") (defvar subword-backward-regexp) +(defcustom avy-subword-extra-word-chars '(?{ ?= ?} ?* ?: ?> ?<) + "A list of characters that should temporarily match \"\\w\". +This variable is used by `avy-goto-subword-0' and `avy-goto-subword-1'." + :type '(repeat character)) + ;;;###autoload (defun avy-goto-subword-0 (&optional arg predicate) "Jump to a word or subword start. @@ -971,18 +976,22 @@ should return true." "\\(\\(\\W\\|[[:lower:][:digit:]]\\)\\([!-/:@`~[:upper:]]+\\W*\\)\\|\\W\\w+\\)") candidates) (avy-dowindows arg - (let ((ws (window-start)) - window-cands) - (save-excursion - (goto-char (window-end (selected-window) t)) - (subword-backward) - (while (> (point) ws) - (when (or (null predicate) - (and predicate (funcall predicate))) - (unless (get-char-property (point) 'invisible) - (push (cons (point) (selected-window)) window-cands))) - (subword-backward))) - (setq candidates (nconc candidates window-cands)))) + (let ((syn-tbl (copy-syntax-table))) + (dolist (char avy-subword-extra-word-chars) + (modify-syntax-entry char "w" syn-tbl)) + (with-syntax-table syn-tbl + (let ((ws (window-start)) + window-cands) + (save-excursion + (goto-char (window-end (selected-window) t)) + (subword-backward) + (while (> (point) ws) + (when (or (null predicate) + (and predicate (funcall predicate))) + (unless (get-char-property (point) 'invisible) + (push (cons (point) (selected-window)) window-cands))) + (subword-backward))) + (setq candidates (nconc candidates window-cands)))))) (avy--process candidates (avy--style-fn avy-style))))) ;;;###autoload