mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-02 11:21:42 +00:00
Fix buffer-list rename&refresh after after killing a buffer in ido.
* lisp/ido.el: Revert Óscar's. (ido-kill-buffer-at-head): Exit the minibuffer with ido-exit=refresh. Remember the buffers at head, rather than their name. * lisp/iswitchb.el (iswitchb-kill-buffer): Re-make the list.
This commit is contained in:
parent
8f081e96de
commit
e014333552
@ -1,3 +1,11 @@
|
||||
2010-08-21 Leo <sdl.web@gmail.com>
|
||||
|
||||
Fix buffer-list rename&refresh after after killing a buffer in ido.
|
||||
* lisp/ido.el: Revert Óscar's.
|
||||
(ido-kill-buffer-at-head): Exit the minibuffer with ido-exit=refresh.
|
||||
Remember the buffers at head, rather than their name.
|
||||
* lisp/iswitchb.el (iswitchb-kill-buffer): Re-make the list.
|
||||
|
||||
2010-08-21 Kirk Kelsey <kirk.kelsey@0x4b.net> (tiny change)
|
||||
Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
|
66
lisp/ido.el
66
lisp/ido.el
@ -1042,11 +1042,11 @@ Value is an integer which is number of chars to right of prompt.")
|
||||
;; Stores the current list of items that will be searched through.
|
||||
;; The list is ordered, so that the most interesting item comes first,
|
||||
;; although by default, the files visible in the current frame are put
|
||||
;; at the end of the list.
|
||||
(defvar ido-cur-list nil)
|
||||
;; at the end of the list. Created by `ido-make-item-list'.
|
||||
(defvar ido-cur-list)
|
||||
|
||||
;; Stores the choice list for ido-completing-read
|
||||
(defvar ido-choice-list nil)
|
||||
(defvar ido-choice-list)
|
||||
|
||||
;; Stores the list of items which are ignored when building
|
||||
;; `ido-cur-list'. It is in no specific order.
|
||||
@ -3348,12 +3348,9 @@ for first matching file."
|
||||
(if ido-temp-list
|
||||
(nconc ido-temp-list ido-current-buffers)
|
||||
(setq ido-temp-list ido-current-buffers))
|
||||
(if (and default (buffer-live-p (get-buffer default)))
|
||||
(progn
|
||||
(setq ido-temp-list
|
||||
(delete default ido-temp-list))
|
||||
(setq ido-temp-list
|
||||
(cons default ido-temp-list))))
|
||||
(if default
|
||||
(setq ido-temp-list
|
||||
(cons default (delete default ido-temp-list))))
|
||||
(run-hooks 'ido-make-buffer-list-hook)
|
||||
ido-temp-list))
|
||||
|
||||
@ -3594,7 +3591,6 @@ for first matching file."
|
||||
;; Used by `ido-get-buffers-in-frames' to walk through all windows
|
||||
(let ((buf (buffer-name (window-buffer win))))
|
||||
(unless (or (member buf ido-bufs-in-frame)
|
||||
(minibufferp buf)
|
||||
(member buf ido-ignore-item-temp-list))
|
||||
;; Only add buf if it is not already in list.
|
||||
;; This prevents same buf in two different windows being
|
||||
@ -3835,27 +3831,6 @@ for first matching file."
|
||||
;;(add-hook 'completion-setup-hook 'completion-setup-function)
|
||||
(display-completion-list completion-list)))))))
|
||||
|
||||
(defun ido-kill-buffer-internal (buf)
|
||||
"Kill buffer BUF and rebuild ido's buffer list if needed."
|
||||
(if (not (kill-buffer buf))
|
||||
;; buffer couldn't be killed.
|
||||
(setq ido-rescan t)
|
||||
;; else buffer was killed so remove name from list.
|
||||
(setq ido-cur-list (delq buf ido-cur-list))
|
||||
;; Some packages, like uniquify.el, may rename buffers when one
|
||||
;; is killed, so we need to test this condition to avoid using
|
||||
;; an outdated list of buffer names. We don't want to always
|
||||
;; rebuild the list of buffers, as this alters the previous
|
||||
;; buffer order that the user was seeing on the prompt. However,
|
||||
;; when we rebuild the list, we try to keep the previous second
|
||||
;; buffer as the first one.
|
||||
(catch 'update
|
||||
(dolist (b ido-cur-list)
|
||||
(unless (get-buffer b)
|
||||
(setq ido-cur-list (ido-make-buffer-list (cadr ido-matches)))
|
||||
(setq ido-rescan t)
|
||||
(throw 'update nil))))))
|
||||
|
||||
;;; KILL CURRENT BUFFER
|
||||
(defun ido-kill-buffer-at-head ()
|
||||
"Kill the buffer at the head of `ido-matches'.
|
||||
@ -3864,15 +3839,26 @@ If cursor is not at the end of the user input, delete to end of input."
|
||||
(if (not (eobp))
|
||||
(delete-region (point) (line-end-position))
|
||||
(let ((enable-recursive-minibuffers t)
|
||||
(buf (ido-name (car ido-matches))))
|
||||
(when buf
|
||||
(ido-kill-buffer-internal buf)
|
||||
;; Check if buffer still exists.
|
||||
(if (get-buffer buf)
|
||||
;; buffer couldn't be killed.
|
||||
(buf (ido-name (car ido-matches)))
|
||||
(nextbuf (cadr ido-matches)))
|
||||
(when (get-buffer buf)
|
||||
;; If next match names a buffer use the buffer object; buffer
|
||||
;; name may be changed by packages such as uniquify; mindful
|
||||
;; of virtual buffers.
|
||||
(when (and nextbuf (get-buffer nextbuf))
|
||||
(setq nextbuf (get-buffer nextbuf)))
|
||||
(if (null (kill-buffer buf))
|
||||
;; Buffer couldn't be killed.
|
||||
(setq ido-rescan t)
|
||||
;; else buffer was killed so remove name from list.
|
||||
(setq ido-cur-list (delq buf ido-cur-list)))))))
|
||||
;; Else `kill-buffer' succeeds so re-make the buffer list
|
||||
;; taking into account packages like uniquify may rename
|
||||
;; buffers.
|
||||
(if (bufferp nextbuf)
|
||||
(setq nextbuf (buffer-name nextbuf)))
|
||||
(setq ido-default-item nextbuf
|
||||
ido-text-init ido-text
|
||||
ido-exit 'refresh)
|
||||
(exit-minibuffer))))))
|
||||
|
||||
;;; DELETE CURRENT FILE
|
||||
(defun ido-delete-file-at-head ()
|
||||
@ -3910,7 +3896,7 @@ Record command in `command-history' if optional RECORD is non-nil."
|
||||
((eq method 'kill)
|
||||
(if record
|
||||
(ido-record-command 'kill-buffer buffer))
|
||||
(ido-kill-buffer-internal buffer))
|
||||
(kill-buffer buffer))
|
||||
|
||||
((eq method 'other-window)
|
||||
(if record
|
||||
|
@ -1027,8 +1027,8 @@ Return the modified list with the last element prepended to it."
|
||||
(defun iswitchb-kill-buffer ()
|
||||
"Kill the buffer at the head of `iswitchb-matches'."
|
||||
(interactive)
|
||||
(let ( (enable-recursive-minibuffers t)
|
||||
buf)
|
||||
(let ((enable-recursive-minibuffers t)
|
||||
buf)
|
||||
|
||||
(setq buf (car iswitchb-matches))
|
||||
;; check to see if buf is non-nil.
|
||||
@ -1042,8 +1042,10 @@ Return the modified list with the last element prepended to it."
|
||||
(if (get-buffer buf)
|
||||
;; buffer couldn't be killed.
|
||||
(setq iswitchb-rescan t)
|
||||
;; else buffer was killed so remove name from list.
|
||||
(setq iswitchb-buflist (delq buf iswitchb-buflist)))))))
|
||||
;; Else `kill-buffer' succeeds so re-make the buffer list
|
||||
;; taking into account packages like uniquify may rename
|
||||
;; buffers
|
||||
(iswitchb-make-buflist iswitchb-default))))))
|
||||
|
||||
;;; VISIT CHOSEN BUFFER
|
||||
(defun iswitchb-visit-buffer (buffer)
|
||||
|
Loading…
Reference in New Issue
Block a user