[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 2ad5fb1 20/57: Add support for virtual buffers
From: |
Oleh Krehel |
Subject: |
[elpa] master 2ad5fb1 20/57: Add support for virtual buffers |
Date: |
Tue, 19 May 2015 14:21:27 +0000 |
branch: master
commit 2ad5fb1b126a6230062e1ecf2a748ffffe30c90d
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>
Add support for virtual buffers
* ivy.el (ivy-mode-map): New defvar. Remap `switch-to-buffer' to
`ivy-switch-buffer'.
(ivy-mode): Use `ivy-mode-map'.
(ivy--virtual-buffers): New devar.
(ivy--virtual-buffers): New defun.
(ivy-buffer-list): Return a list of buffers, taking
`ido-use-virtual-buffers' into account.
(ivy-switch-buffer): New command.
Fixes #84
---
ivy.el | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 81 insertions(+), 1 deletions(-)
diff --git a/ivy.el b/ivy.el
index d130a77..2168fb2 100644
--- a/ivy.el
+++ b/ivy.el
@@ -117,6 +117,12 @@ Only \"./\" and \"../\" apply here. They appear in reverse
order."
map)
"Keymap used in the minibuffer.")
+(defvar ivy-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map [remap switch-to-buffer] 'ivy-switch-buffer)
+ map)
+ "Keymap for `ivy-mode'.")
+
;;* Globals
(cl-defstruct ivy-state
prompt collection
@@ -701,14 +707,19 @@ The history, defaults and input-method arguments are
ignored for now."
;;;###autoload
(define-minor-mode ivy-mode
- "Toggle Ivy mode on or off.
+ "Toggle Ivy mode on or off.
With ARG, turn Ivy mode on if arg is positive, off otherwise.
Turning on Ivy mode will set `completing-read-function' to
`ivy-completing-read'.
+Global bindings:
+\\{ivy-mode-map}
+
+Minibuffer bindings:
\\{ivy-minibuffer-map}"
:group 'ivy
:global t
+ :keymap ivy-mode-map
:lighter " ivy"
(if ivy-mode
(setq completing-read-function 'ivy-completing-read)
@@ -1081,6 +1092,75 @@ CANDS is a list of strings."
(put-text-property 0 (length res) 'read-only nil res)
res))))
+(defvar ivy--virtual-buffers nil
+ "Store the virtual buffers alist.")
+
+(defvar recentf-list)
+(defvar ido-use-faces)
+(defvar ido-process-ignore-lists)
+(defvar ido-ignored-list)
+(defvar ido-use-virtual-buffers)
+(declare-function ido-make-buffer-list "ido")
+
+(defun ivy--virtual-buffers ()
+ "Adapted from `ido-add-virtual-buffers-to-list'."
+ (unless recentf-mode
+ (recentf-mode 1))
+ (let ((bookmarks (and (boundp 'bookmark-alist)
+ bookmark-alist))
+ virtual-buffers name)
+ (dolist (head (append
+ recentf-list
+ (delete " - no file -"
+ (delq nil (mapcar (lambda (bookmark)
+ (cdr (assoc 'filename
bookmark)))
+ bookmarks)))))
+ (setq name (file-name-nondirectory head))
+ (when (equal name "")
+ (setq name (file-name-nondirectory (directory-file-name head))))
+ (when (equal name "")
+ (setq name head))
+ (and (not (equal name ""))
+ (null (get-file-buffer head))
+ (not (assoc name virtual-buffers))
+ (push (cons name head) virtual-buffers)))
+ (when virtual-buffers
+ (if ido-use-faces
+ (dolist (comp virtual-buffers)
+ (put-text-property 0 (length (car comp))
+ 'face 'ido-virtual
+ (car comp))))
+ (setq ivy--virtual-buffers (nreverse virtual-buffers))
+ (mapcar #'car ivy--virtual-buffers))))
+
+(defun ivy-buffer-list ()
+ "Return the current list of buffers.
+See `ido-make-buffer-list'."
+ (require 'ido)
+ (setq ivy--virtual-buffers nil)
+ (let ((ido-process-ignore-lists t)
+ ido-ignored-list)
+ (delete-dups
+ (append (ido-make-buffer-list nil)
+ (and
+ ido-use-virtual-buffers
+ (ivy--virtual-buffers))))))
+
+(defun ivy-switch-buffer ()
+ "Switch to another buffer."
+ (interactive)
+ (if (not ivy-mode)
+ (call-interactively 'switch-to-buffer)
+ (let ((bl (ivy-buffer-list)))
+ (ivy-read "Switch to buffer: " bl
+ :action
+ (lambda ()
+ (let ((virtual (assoc ivy--current ivy--virtual-buffers)))
+ (if virtual
+ (find-file (cdr virtual))
+ (switch-to-buffer
+ ivy--current nil 'force-same-window))))))))
+
(provide 'ivy)
;;; ivy.el ends here
- [elpa] master 5a451a9 26/57: ivy.el (ivy-read): Add a re-builder argument, (continued)
- [elpa] master 5a451a9 26/57: ivy.el (ivy-read): Add a re-builder argument, Oleh Krehel, 2015/05/19
- [elpa] master f7fc3ad 11/57: Work around grep-read-files, Oleh Krehel, 2015/05/19
- [elpa] master 056614d 22/57: Rename avy-swiper to swiper-avy, Oleh Krehel, 2015/05/19
- [elpa] master cf292da 23/57: Declare swiper-map, Oleh Krehel, 2015/05/19
- [elpa] master a953af0 19/57: Simplify ivy-partial-or-done, Oleh Krehel, 2015/05/19
- [elpa] master fe34d2c 10/57: ivy.el (ivy-partial-or-done): Handle empty input, Oleh Krehel, 2015/05/19
- [elpa] master 77abf00 25/57: ivy.el (ivy-backward-kill-word): Add and bind to "M-DEL", Oleh Krehel, 2015/05/19
- [elpa] master 8c936bc 21/57: ivy.el (ivy-use-virtual-buffers): New defcustom, Oleh Krehel, 2015/05/19
- [elpa] master 9b9885d 33/57: ivy.el (ivy-partial-or-done): Fixup, Oleh Krehel, 2015/05/19
- [elpa] master d841418 24/57: Fix the transition from a bad regex to good one, Oleh Krehel, 2015/05/19
- [elpa] master 2ad5fb1 20/57: Add support for virtual buffers,
Oleh Krehel <=
- [elpa] master f97622d 30/57: swiper.el (swiper-font-lock-ensure): Ignore fundamental-mode, Oleh Krehel, 2015/05/19
- [elpa] master 6d4f2b3 34/57: Fix the error switching to non-existent buffers, Oleh Krehel, 2015/05/19
- [elpa] master 16eb4a2 31/57: When completing file names, defer to `minibuffer-complete' for "TAB", Oleh Krehel, 2015/05/19
- [elpa] master b63c358 35/57: Properly update virtual buffers for "^ " interaction, Oleh Krehel, 2015/05/19
- [elpa] master d8f79fa 43/57: ivy.el (ivy-partial-or-done): Update doc, Oleh Krehel, 2015/05/19
- [elpa] master ce0efb3 29/57: Allow to customize the minibuffer formatter, Oleh Krehel, 2015/05/19
- [elpa] master 9a2083a 27/57: Swiper should use the :re-builder argument, Oleh Krehel, 2015/05/19
- [elpa] master d8c2ef3 45/57: ivy.el (ivy-partial-or-done): More predictability, Oleh Krehel, 2015/05/19
- [elpa] master e05e3b7 39/57: ivy.el (ivy-read): Keep the last ivy--index for :dynamic-collection, Oleh Krehel, 2015/05/19
- [elpa] master 1cdb6ed 32/57: ivy.el (ivy-partial-or-done): Fixup, Oleh Krehel, 2015/05/19