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

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

[elpa] master a86bdee6 16/78: avy.el (avy-pop-mark): use own history for


From: Oleh Krehel
Subject: [elpa] master a86bdee6 16/78: avy.el (avy-pop-mark): use own history for points and windows
Date: Sat, 23 Jan 2016 13:59:43 +0000

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

    avy.el (avy-pop-mark): use own history for points and windows
    
    * avy.el (avy-action-goto): Don't save mark here, since the window was
      already changed.
    (avy--process): Set mark here.
    (avy-ring): New defvar.
    (avy-push-mark): New defun.
    (avy-pop-mark): Use `avy-ring' unless it's empty. Then use the mark ring.
    
    Fixes #88
    Re #69
    Re #81
---
 avy.el |   27 +++++++++++++++++++++------
 1 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/avy.el b/avy.el
index 0057396..4f09aea 100644
--- a/avy.el
+++ b/avy.el
@@ -47,6 +47,7 @@
 
 ;;; Code:
 (require 'cl-lib)
+(require 'ring)
 
 ;;* Customization
 (defgroup avy nil
@@ -452,9 +453,6 @@ Set `avy-style' according to COMMMAND as well."
 
 (defun avy-action-goto (pt)
   "Goto PT."
-  (unless (or (= pt (point))
-              (region-active-p))
-    (push-mark))
   (goto-char pt))
 
 (defun avy-action-mark (pt)
@@ -506,6 +504,7 @@ Use OVERLAY-FN to visualize the decision overlay."
             ;; ignore exit from `avy-handler-function'
             ((eq res 'exit))
             (t
+             (avy-push-mark)
              (when (and (consp res)
                         (windowp (cdr res)))
                (let* ((window (cdr res))
@@ -944,7 +943,7 @@ The window scope is determined by `avy-all-windows' (ARG 
negates it)."
                 (let ((line (read-from-minibuffer
                              "Goto line: " (string char))))
                   (when line
-                    (push-mark)
+                    (avy-push-mark)
                     (goto-char (point-min))
                     (forward-line (1- (string-to-number line)))
                     (throw 'done 'exit))))))
@@ -1028,10 +1027,26 @@ The window scope is determined by `avy-all-windows' 
(ARG negates it)."
        arg
        avy-style))))
 
+(defvar avy-ring (make-ring 20)
+  "Hold the window and point history.")
+
+(defun avy-push-mark ()
+  "Store the current point and window."
+  (ring-insert avy-ring
+               (cons (point) (selected-window))))
+
 (defun avy-pop-mark ()
-  "Jump back to the last location of `push-mark'."
+  "Jump back to the last location of `avy-push-mark'."
   (interactive)
-  (set-mark-command 4))
+  (let (res)
+    (condition-case nil
+        (progn
+          (while (not (window-live-p
+                       (cdr (setq res (ring-remove avy-ring 0))))))
+          (select-window (cdr res))
+          (goto-char (car res)))
+      (error
+       (set-mark-command 4)))))
 
 (define-obsolete-function-alias
     'avy--goto 'identity "0.3.0"



reply via email to

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