diff options
author | Sean Whitton <spwhitton@spwhitton.name> | 2020-08-05 23:45:14 -0700 |
---|---|---|
committer | Sean Whitton <spwhitton@spwhitton.name> | 2020-08-07 13:19:05 -0700 |
commit | c3563cb78059c28581827902d1b03dda360568a8 (patch) | |
tree | 5137825f84574217f4c1f76b3496c8f3b62c8982 | |
parent | 8ed0f7e66b36760ed619454e3d58d63ae04e9a60 (diff) | |
download | dotfiles-c3563cb78059c28581827902d1b03dda360568a8.tar.gz |
break out spw/buffer-ring-cycle-lambda
-rw-r--r-- | .emacs.d/init-spw.el | 54 |
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 |