Helm: Refine helm-defswitcher macro
parent
7027282244
commit
dd3ed544f1
|
@ -264,27 +264,10 @@ This should be faster then `seq-uniq'."
|
|||
(lambda (b)
|
||||
(with-current-buffer b
|
||||
(derived-mode-p 'eshell-mode)))
|
||||
(lambda (name)
|
||||
(lambda (&optional name)
|
||||
(eshell 'new)
|
||||
(rename-buffer (format "*eshell<%s>*" name) 'unique)))
|
||||
|
||||
(defun ambrevar/eshell-or-new-session (&optional arg)
|
||||
"Create an interactive Eshell buffer.
|
||||
Switch to last Eshell session if any.
|
||||
Otherwise create a new one and switch to it.
|
||||
See `eshell' for the numeric prefix ARG."
|
||||
(interactive "P")
|
||||
(if (or arg (eq major-mode 'eshell-mode))
|
||||
(helm-eshell-buffers)
|
||||
;; (eshell (or arg t))
|
||||
(let ((last (buffer-list)))
|
||||
(while (and last
|
||||
(not (with-current-buffer (car last)
|
||||
(eq major-mode 'eshell-mode))))
|
||||
(setq last (cdr last)))
|
||||
(if last
|
||||
(switch-to-buffer (car last))
|
||||
(eshell (or arg t))))))
|
||||
(when name
|
||||
(rename-buffer (format "*eshell<%s>*" name) 'unique))))
|
||||
|
||||
;;; Auto-suggestion
|
||||
(when (require 'esh-autosuggest nil t)
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
(defun helm-buffer-transformer (buffers)
|
||||
(mapcar #'buffer-name buffers))
|
||||
|
||||
(defmacro helm-defswitcher (name predicate new-fn &optional extra-sources)
|
||||
(defmacro helm-deflister (name predicate new-fn &optional extra-sources)
|
||||
(let ((buffer-source-name (format "%s buffers" name)))
|
||||
(add-to-list 'helm-source-names-using-follow buffer-source-name)
|
||||
`(defun ,(intern (format "helm-%s-buffers" (downcase name))) ()
|
||||
|
@ -28,9 +28,29 @@
|
|||
. helm-kill-marked-buffers))
|
||||
:keymap helm-buffer-switcher-map
|
||||
:persistent-action 'helm-buffers-list-persistent-action)
|
||||
,@extra-sources
|
||||
(helm-build-dummy-source ,(format "Open new %s" name)
|
||||
:action (helm-make-actions ,(format "Open new %s" name) ',new-fn)))
|
||||
:buffer ,(format "*helm-%s-buffers*" name)))))
|
||||
|
||||
(defmacro helm-defswitcher (name predicate new-fn &optional extra-sources)
|
||||
"Create an interactive Eshell buffer.
|
||||
Switch to last Eshell session if any.
|
||||
Otherwise create a new one and switch to it.
|
||||
See `eshell' for the numeric prefix ARG."
|
||||
(let ((mode (intern (format "%s-mode" (downcase name)))))
|
||||
`(progn
|
||||
(helm-deflister ,name ,predicate ,new-fn ,extra-sources)
|
||||
(defun ,(intern (format "helm-%s-switch" (downcase name))) (&rest arg)
|
||||
(interactive "P")
|
||||
(if (or arg (derived-mode-p ',mode))
|
||||
;; TODO: Funcall the return value of helm-deflister.
|
||||
(funcall ',(intern (format "helm-%s-buffers" (downcase name))))
|
||||
(let ((last (cl-loop for buffer in (buffer-list)
|
||||
when (funcall ,predicate buffer)
|
||||
return buffer)))
|
||||
(if last
|
||||
(switch-to-buffer last)
|
||||
(funcall ,new-fn))))))))
|
||||
|
||||
(provide 'patch-helm)
|
||||
|
|
Loading…
Reference in New Issue