emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master e9d2e60 08/17: Customize the leading char style for chars


From: Oleh Krehel
Subject: [elpa] master e9d2e60 08/17: Customize the leading char style for chars and words
Date: Fri, 08 May 2015 13:42:09 +0000

branch: master
commit e9d2e60965d2d0299205116f7f7e33a6887b34f0
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>

    Customize the leading char style for chars and words
    
    * avy-jump.el (avy--style-fn): New defun.
    (avy--generic-jump): Add a STYLE arg.
    (avy-goto-char-style): New defcustom.
    (avy-goto-word-style): New defcustom.
    (avy-goto-char): Update.
    (avy-goto-char-2): Update.
    (avy-goto-word-0): Update.
    (avy-goto-word-1): Simplify.
    (avy-goto-subword-0): Update doc.
    
    Fixes #5
---
 avy-jump.el |   87 ++++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 56 insertions(+), 31 deletions(-)

diff --git a/avy-jump.el b/avy-jump.el
index 2f8617b..5f8334a 100644
--- a/avy-jump.el
+++ b/avy-jump.el
@@ -215,39 +215,64 @@ LEAF is ((BEG . END) . WND)."
        (cdr leaf)
      (selected-window))))
 
-(defun avy--generic-jump (regex flip)
+(defun avy--style-fn (style)
+  "Transform STYLE symbol to a style function."
+  (cl-case style
+    (pre #'avy--overlay-pre)
+    (at #'avy--overlay-at)
+    (post #'avy--overlay-post)
+    (t (error "Unexpected style %S" style))))
+
+(defun avy--generic-jump (regex window-flip style)
   "Jump to REGEX.
-When FLIP is non-nil, flip `avy-all-windows'."
+When WINDOW-FLIP is non-nil, do the opposite of `avy-all-windows'.
+STYLE determines the leading char overlay style."
   (let ((avy-all-windows
-         (if flip
+         (if window-flip
              (not avy-all-windows)
            avy-all-windows)))
     (avy--goto
      (avy--process
       (avy--regex-candidates
        regex)
-      #'avy--overlay-post))))
+      (avy--style-fn style)))))
+
+(defcustom avy-goto-char-style 'pre
+  "Method of displaying the overlays for `avy-goto-char' and 
`avy-goto-char-2'."
+  :type '(choice
+          (const :tag "Pre" pre)
+          (const :tag "At" at)
+          (const :tag "Post" post)))
+
+(defcustom avy-goto-word-style 'pre
+  "Method of displaying the overlays for `avy-goto-word-0' and 
`avy-goto-word-0'."
+  :type '(choice
+          (const :tag "Pre" pre)
+          (const :tag "At" at)
+          (const :tag "Post" post)))
 
 ;;* Commands
 ;;;###autoload
 (defun avy-goto-char (&optional arg)
   "Read one char and jump to it.
-The window scope is determined by `avy-all-windows'.
-When ARG is non-nil, flip the window scope."
+The window scope is determined by `avy-all-windows' (ARG negates it)."
   (interactive "P")
   (avy--generic-jump
-   (regexp-quote (string (read-char "char: "))) arg))
+   (regexp-quote (string (read-char "char: ")))
+   arg
+   avy-goto-char-style))
 
 ;;;###autoload
 (defun avy-goto-char-2 (&optional arg)
-  "Read two chars and jump to them in current window.
-When ARG is non-nil, flip the window scope."
+  "Read two consecutive chars and jump to the first one.
+The window scope is determined by `avy-all-windows' (ARG negates it)."
   (interactive "P")
   (avy--generic-jump
    (regexp-quote (string
                  (read-char "char 1: ")
                  (read-char "char 2: ")))
-   arg))
+   arg
+   avy-goto-char-style))
 
 ;;;###autoload
 (defun avy-isearch ()
@@ -263,44 +288,44 @@ When ARG is non-nil, flip the window scope."
 
 ;;;###autoload
 (defun avy-goto-word-0 (arg)
-  "Jump to a word start."
+  "Jump to a word start.
+The window scope is determined by `avy-all-windows' (ARG negates it)."
   (interactive "P")
   (let ((avy-keys (number-sequence ?a ?z)))
-    (avy--generic-jump "\\b\\sw" arg)))
+    (avy--generic-jump "\\b\\sw" arg avy-goto-word-style)))
+
+;;;###autoload
+(defun avy-goto-word-1 (&optional arg)
+  "Read one char at word start and jump there.
+The window scope is determined by `avy-all-windows' (ARG negates it)."
+  (interactive "P")
+  (let* ((str (string (read-char "char: ")))
+         (regex (if (and avy-word-punc-regexp
+                         (string-match avy-word-punc-regexp str))
+                    str
+                  (concat
+                   "\\b"
+                   str))))
+    (avy--generic-jump regex arg avy-goto-word-style)))
 
 ;;;###autoload
 (defun avy-goto-subword-0 (&optional arg)
-  "Jump to a word or subword start."
+  "Jump to a word or subword start.
+The window scope is determined by `avy-all-windows' (ARG negates it)."
   (interactive "P")
   (let* ((avy-all-windows
           (if arg
               (not avy-all-windows)
             avy-all-windows))
          (avy-keys (number-sequence ?a ?z))
-        (case-fold-search nil)
+         (case-fold-search nil)
          (candidates (avy--regex-candidates
                       "\\(\\b\\sw\\)\\|\\(?:[^A-Z]\\([A-Z]\\)\\)")))
     (dolist (x candidates)
       (when (> (- (cdar x) (caar x)) 1)
         (cl-incf (caar x))))
     (avy--goto
-     (avy--process candidates #'avy--overlay-pre))))
-
-;;;###autoload
-(defun avy-goto-word-1 ()
-  "Jump to a word start in current window.
-Read one char with which the word should start."
-  (interactive)
-  (let* ((str (string (read-char "char: ")))
-         (candidates (avy--regex-candidates
-                      (if (and avy-word-punc-regexp
-                               (string-match avy-word-punc-regexp str))
-                          str
-                        (concat
-                         "\\b"
-                         str)))))
-    (avy--goto
-     (avy--process candidates #'avy--overlay-pre))))
+     (avy--process candidates (avy--style-fn avy-goto-word-style)))))
 
 (defun avy--line (&optional arg)
   "Select line in current window."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]