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

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

[elpa] master 0772929 29/67: Add some rudimentary history handling


From: Oleh Krehel
Subject: [elpa] master 0772929 29/67: Add some rudimentary history handling
Date: Sun, 22 Mar 2015 17:33:58 +0000

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

    Add some rudimentary history handling
    
    * ivy.el (ivy-minibuffer-map): Bind "M-n", "M-p", and "C-g".
    (ivy-history): New defvar.
    (ivy-read): Update.
    (ivy--minibuffer-setup): Offer thing-at-point for "M-n".
    (ivy--default): New defvar.
    
    Re #16.
---
 ivy.el |   25 +++++++++++++++++++++++--
 1 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/ivy.el b/ivy.el
index ce4a610..47f3568 100644
--- a/ivy.el
+++ b/ivy.el
@@ -52,6 +52,7 @@
 
 ;;* User Visible
 ;;** Keymap
+(require 'delsel)
 (defvar ivy-minibuffer-map
   (let ((map (make-sparse-keymap)))
     (define-key map (kbd "C-m") 'ivy-done)
@@ -63,9 +64,18 @@
     (define-key map (kbd "DEL") 'ivy-backward-delete-char)
     (define-key map (kbd "M-<") 'ivy-beginning-of-buffer)
     (define-key map (kbd "M->") 'ivy-end-of-buffer)
+    (define-key map (kbd "M-n") 'next-history-element)
+    (define-key map (kbd "M-p") 'previous-history-element)
+    (define-key map (kbd "C-g") 'minibuffer-keyboard-quit)
     map)
   "Keymap used in the minibuffer.")
 
+(defvar ivy-history nil
+  "History list of candidates entered in the minibuffer.
+
+Maximum length of the history list is determined by the value
+of `history-length', which see.")
+
 ;;** Commands
 (defun ivy-done ()
   "Exit the minibuffer with the selected candidate."
@@ -104,7 +114,6 @@ On error (read-only), quit without selecting."
   (condition-case nil
       (backward-delete-char 1)
     (error
-     (require 'delsel)
      (minibuffer-keyboard-quit))))
 
 ;;** Entry Point
@@ -122,10 +131,16 @@ If INDEX is non-nil select the corresponding candidate."
   (setq ivy--all-candidates collection)
   (setq ivy--update-fn update-fn)
   (setq ivy-exit nil)
+  (setq ivy--default (or (thing-at-point 'symbol) ""))
   (unwind-protect
        (minibuffer-with-setup-hook
            #'ivy--minibuffer-setup
-         (read-from-minibuffer prompt initial-input))
+         (read-from-minibuffer
+          prompt
+          initial-input
+          ivy-minibuffer-map
+          nil
+          'ivy-history))
     (remove-hook 'post-command-hook #'ivy--exhibit)))
 
 (defvar ivy-text ""
@@ -168,6 +183,9 @@ Otherwise, store nil.")
 (defun ivy--minibuffer-setup ()
   "Setup ivy completion in the minibuffer."
   (set (make-local-variable 'completion-show-inline-help) nil)
+  (set (make-local-variable 'minibuffer-default-add-function)
+       (lambda ()
+         (list ivy--default)))
   (use-local-map (make-composed-keymap ivy-minibuffer-map
                                        (current-local-map)))
   (setq-local max-mini-window-height ivy-height)
@@ -187,6 +205,9 @@ Otherwise, store nil.")
 (defvar ivy--current ""
   "Current candidate.")
 
+(defvar ivy--default nil
+  "Default initial input.")
+
 (defvar ivy--update-fn nil
   "Current function to call when current candidate(s) update.")
 



reply via email to

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