Files
@ 6e8a9fec23d0
Branch filter:
Location: workgroups2/src/workgroups-ido.el - annotation
6e8a9fec23d0
3.6 KiB
text/x-elisp
defalias wg-switch-to-buffer
088605c05794 088605c05794 088605c05794 443938b472d4 058c10044937 295f3038db4d 5a6c3a89c877 5a6c3a89c877 5a6c3a89c877 5a6c3a89c877 5a6c3a89c877 5a6c3a89c877 5a6c3a89c877 5a6c3a89c877 5a6c3a89c877 5a6c3a89c877 5a6c3a89c877 058c10044937 443938b472d4 443938b472d4 443938b472d4 295f3038db4d 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 295f3038db4d 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 295f3038db4d 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 443938b472d4 088605c05794 | ;;; workgroups-ido --- ido and iswitchb compatibility
;;; Commentary:
;;; Code:
(require 'workgroups-variables)
(require 'cl-lib)
(require 'ido)
(defcustom wg-ido-entry-buffer-replacement-regexp "^ .*Minibuf.*$"
"Regexp matching the name of a buffer to replace `ido-entry-buffer'.
The regexp should match the name of a live buffer that will never
be a completion candidate under normal circumstances. You
probably don't want to change this. See
`wg-get-sneaky-ido-entry-buffer-replacement'."
:type 'regexp
:group 'workgroups)
(defun wg-read-buffer-mode ()
"Return the buffer switching package (ido or iswitchb) to use, or nil."
(if (eq wg-current-buffer-list-filter-id 'fallback) 'fallback
(cl-case (let (workgroups-mode) (command-remapping 'switch-to-buffer))
(ido-switch-buffer 'ido)
(otherwise 'fallback))))
(defun wg-read-buffer-function (&optional mode)
"Return MODE's or `wg-read-buffer-mode's `read-buffer' function."
(cl-case (or mode (wg-read-buffer-mode))
(ido 'ido-read-buffer)
(fallback (lambda (prompt &optional default require-match)
(let (read-buffer-function)
(read-buffer prompt default require-match))))))
(defun wg-completing-read
(prompt choices &optional pred require-match initial-input history default)
"Do a completing read. The function called depends on what's on."
(cl-ecase (wg-read-buffer-mode)
(ido
(ido-completing-read prompt choices pred require-match
initial-input history default))
(fallback
(completing-read prompt choices pred require-match
initial-input history default))))
(defun wg-get-sneaky-ido-entry-buffer-replacement (&optional regexp)
"Return a live buffer to replace `ido-entry-buffer'.
This is a workaround for an ido misfeature. IMHO, ido should
respect the value of `ido-temp-list' after
`ido-make-buffer-list-hook' has been run, since the user's
preference for the final value of `ido-temp-list', if any, has
been expressed in that hook. But ido conditionally rotates the
first match to the end after the hook has been run, based on the
value of `ido-entry-buffer'. So as a workaround, set
`ido-entry-buffer' to a buffer that will never be a completion
candidate under normal circumstances. See
`wg-ido-entry-buffer-replacement-regexp'."
(wg-get-first-buffer-matching-regexp
(or regexp wg-ido-entry-buffer-replacement-regexp)))
(defun wg-adjust-buffer-list-default (buflist &optional default)
"Adjust BUFLIST based on DEFAULT.
DEFAULT is the default completion candidate, and defaults to
`wg-buffer-internal-default-buffer'. Non-nil, this gets placed
at the beginning of BUFLIST. Otherwise rotate BUFLIST."
(wg-aif (or default wg-buffer-internal-default-buffer)
(wg-move-elt it buflist 0)
(wg-rotate-list buflist)))
(defun wg-finalize-buffer-list (buflist)
"Run `wg-buffer-list-finalization-hook' and return
`wg-temp-buffer-list'."
(let ((wg-temp-buffer-list buflist))
(run-hooks 'wg-buffer-list-finalization-hook)
wg-temp-buffer-list))
(defun wg-set-buffer-list-symbol (symbol)
"Set SYMBOL to the filtered buffer-list."
(when (and wg-current-buffer-list-filter-id (boundp symbol))
(set symbol
(wg-finalize-buffer-list
(wg-adjust-buffer-list-default
(wg-filtered-buffer-list t))))))
(defun wg-set-ido-buffer-list ()
"Set `ido-temp-list' with `wg-set-buffer-list-symbol'.
Added to `ido-make-buffer-list-hook'."
(wg-set-buffer-list-symbol 'ido-temp-list)
(wg-when-boundp (ido-entry-buffer)
(setq ido-entry-buffer (wg-get-sneaky-ido-entry-buffer-replacement))))
(provide 'workgroups-ido)
;;; workgroups-ido.el ends here
|