summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2020-08-05 23:45:14 -0700
committerSean Whitton <spwhitton@spwhitton.name>2020-08-07 13:19:05 -0700
commitc3563cb78059c28581827902d1b03dda360568a8 (patch)
tree5137825f84574217f4c1f76b3496c8f3b62c8982
parent8ed0f7e66b36760ed619454e3d58d63ae04e9a60 (diff)
downloaddotfiles-c3563cb78059c28581827902d1b03dda360568a8.tar.gz
break out spw/buffer-ring-cycle-lambda
-rw-r--r--.emacs.d/init-spw.el54
1 files changed, 21 insertions, 33 deletions
diff --git a/.emacs.d/init-spw.el b/.emacs.d/init-spw.el
index 80dc372f..45dd5cd2 100644
--- a/.emacs.d/init-spw.el
+++ b/.emacs.d/init-spw.el
@@ -65,6 +65,15 @@ add places the library might be available to `load-path'."
,on-exit)
map))
+(defmacro spw/buffer-ring-cycle-lambda (&optional ring action)
+ `(when-let ((buffers ,(or ring '(spw/buffer-cloned-siblings-ring ret-val)))
+ (buffers-pos 0))
+ (lambda (count)
+ (interactive "p")
+ (setq buffers-pos (+ count buffers-pos))
+ (let ((buffer (ring-ref buffers buffers-pos)))
+ ,(or action '(switch-to-buffer buffer nil t))))))
+
(defun spw/bind-command-with-cycling* (binding1 binding2 generator &optional on-exit map)
(dolist (binding (remove nil (list binding1 binding2)))
(let ((binding-fn (intern (concat "spw/"
@@ -509,12 +518,7 @@ add places the library might be available to `load-path'."
(spw/bind-command-with-ret-val-cycling
("e" . project-eshell)
nil
- (when-let ((buffers (spw/buffer-cloned-siblings-ring ret-val))
- (buffers-pos 0))
- (lambda (count)
- (interactive "p")
- (setq buffers-pos (+ count buffers-pos))
- (switch-to-buffer (ring-ref buffers buffers-pos) nil t)))
+ (spw/buffer-ring-cycle-lambda)
nil
;; bind into project-prefix-map, rather than just a remap, so that works
;; under C-x 4 p too
@@ -522,33 +526,21 @@ add places the library might be available to `load-path'."
(spw/bind-command-with-cycling
([remap info] . info)
nil
- (when-let ((buffers (spw/buffer-cloned-siblings-ring (get-buffer "*info*")))
- (buffers-pos 0))
- (lambda (count)
- (interactive "p")
- (setq buffers-pos (+ count buffers-pos))
- (switch-to-buffer (ring-ref buffers buffers-pos) nil t))))
+ (spw/buffer-ring-cycle-lambda
+ (spw/buffer-cloned-siblings-ring (get-buffer "*info*"))))
(spw/bind-command-with-ret-val-cycling
([remap switch-to-buffer-other-window] . switch-to-buffer-other-window)
nil
- (when-let ((buffers (spw/buffer-cloned-siblings-ring ret-val))
- (buffers-pos 0))
- (lambda (count)
- (interactive "p")
- (setq buffers-pos (+ count buffers-pos))
- (switch-to-buffer (ring-ref buffers buffers-pos) nil t))))
+ (spw/buffer-ring-cycle-lambda))
(spw/bind-command-with-ret-val-cycling
([remap display-buffer] . display-buffer)
nil
- (when-let ((buffers (spw/buffer-cloned-siblings-ring (window-buffer ret-val)))
- (buffers-pos 0))
- (lambda (count)
- (interactive "p")
- (setq buffers-pos (+ count buffers-pos))
- (with-selected-window ret-val
- (let ((display-buffer-overriding-action '((display-buffer-same-window)
- (inhibit-same-window . nil))))
- (display-buffer (ring-ref buffers buffers-pos)))))))
+ (spw/buffer-ring-cycle-lambda
+ (spw/buffer-cloned-siblings-ring (window-buffer ret-val))
+ (with-selected-window ret-val
+ (let ((display-buffer-overriding-action '((display-buffer-same-window)
+ (inhibit-same-window . nil))))
+ (display-buffer buffer)))))
;; filling of comments -- we don't want to set
;; `comment-auto-fill-only-comments' always on because in Org-mode, for
@@ -999,12 +991,8 @@ to be run by the OS shell."
(spw/bind-command-with-ret-val-cycling
("\C-cee" . spw/cycle-eshells)
nil
- (when (ring-p ret-val)
- (let ((buffers-pos 0))
- (lambda (count)
- (interactive "p")
- (setq buffers-pos (+ count buffers-pos))
- (switch-to-buffer (ring-ref ret-val buffers-pos) nil t)))))
+ (spw/buffer-ring-cycle-lambda
+ (and (ring-p ret-val) ret-val)))
;;; my commands -- like defining functions in .bashrc where simple aliases are
;;; not enough