summaryrefslogtreecommitdiff
path: root/helm.el
diff options
context:
space:
mode:
authorThierry Volpiatto <thierry.volpiatto@gmail.com>2017-05-20 09:44:37 +0200
committerThierry Volpiatto <thierry.volpiatto@gmail.com>2017-05-20 09:44:37 +0200
commit8c194a0dc16d60825b379df5e8e479bc0e2f13e6 (patch)
tree83ad80ca277aa4705bbdf3a74fe77f7f0504b145 /helm.el
parentb780d8e17002803e8d82d462ed1bbfb4e8eb7b3b (diff)
Allow cycling resume.
* helm-lib.el (helm-iter-sub-next-circular): New, inlined from iterator.el. * helm.el (helm-map): Bind cycle resume. (helm--cycle-resume-iterator): New internal var. (helm-cycle-resume): New global. (helm-run-cycle-resume): New local to helm.
Diffstat (limited to 'helm.el')
-rw-r--r--helm.el25
1 files changed, 25 insertions, 0 deletions
diff --git a/helm.el b/helm.el
index 5d8ad28f..a73b91b7 100644
--- a/helm.el
+++ b/helm.el
@@ -235,6 +235,7 @@ vectors, so don't use strings to define them."
(define-key map (kbd "C-!") 'helm-toggle-suspend-update)
(define-key map (kbd "C-x b") 'helm-resume-previous-session-after-quit)
(define-key map (kbd "C-x C-b") 'helm-resume-list-buffers-after-quit)
+ (define-key map (kbd "<S-f1>") 'helm-run-cycle-resume)
;; Disable `file-cache-minibuffer-complete'.
(define-key map (kbd "<C-tab>") 'undefined)
;; Multi keys
@@ -1247,6 +1248,7 @@ You should not modify this yourself unless you know what you are doing.")
Should be set in candidates functions if needed, will be restored
at end of session.")
(defvar helm--action-prompt "Select action: ")
+(defvar helm--cycle-resume-iterator nil)
;; Utility: logging
(defun helm-log (format-string &rest args)
@@ -2220,6 +2222,29 @@ Return nil if no `helm-buffer' found."
:buffer "*helm resume*")
(keyboard-quit))))
+;;;###autoload
+(defun helm-cycle-resume ()
+ (interactive)
+ (cl-assert helm-buffers nil "No helm buffers to resume")
+ (setq helm--cycle-resume-iterator
+ (helm-iter-sub-next-circular
+ helm-buffers helm-last-buffer :test 'equal))
+ (message "Resuming helm buffer `%s'" helm-last-buffer)
+ (if (sit-for 1.2)
+ (helm-resume helm-last-buffer)
+ (message "Resuming helm buffer `%s'"
+ (setq helm-last-buffer
+ (helm-iter-next helm--cycle-resume-iterator)))
+ (sit-for 1)))
+
+(defun helm-run-cycle-resume ()
+ (interactive)
+ (when (cdr helm-buffers)
+ (setq helm-last-buffer
+ (helm-iter-next helm--cycle-resume-iterator)))
+ (helm-run-after-exit 'helm-cycle-resume))
+(put 'helm-run-cycle-resume 'helm-only t)
+
;;;###autoload
(defun helm-other-buffer (any-sources any-buffer)