From 0383ed224a7708315f3da83d5e809c597b0e888a Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Sat, 14 Oct 2023 12:18:38 +1100 Subject: [emacs] Fix notes and shell cycle and creation. One function to switch or cycle default notes indirect buffers. One to switch or cycle shell mode buffers. --- emacs/.emacs.d/lisp/my/my-org.el | 47 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) (limited to 'emacs/.emacs.d/lisp/my/my-org.el') diff --git a/emacs/.emacs.d/lisp/my/my-org.el b/emacs/.emacs.d/lisp/my/my-org.el index 8a6991e..01082d8 100644 --- a/emacs/.emacs.d/lisp/my/my-org.el +++ b/emacs/.emacs.d/lisp/my/my-org.el @@ -156,9 +156,50 @@ Otherwise deactivate mark and move point to after the block." (save-excursion (my-org-beginning-of-line-or-indent) (point)) (point))))) -(defun my-org-open-default-notes-file () - (interactive) - (find-file org-default-notes-file)) +(defvar my-shell-buffer-list nil + "List of default org notes file buffers.") + +(defun my-org-open-or-cycle-notes (arg) + "Open default notes file. + +Switch to the first buffer with the notes file that's not in a +live window, or find the notes file. + +If repeated, cycle through indirect buffers of the default notes. + +With a prefix ARG, creates a new indirect buffer of the default +notes file." + (interactive "P") + (if arg + (with-current-buffer (find-file-noselect org-default-notes-file) + (clone-indirect-buffer nil t) + (setq my-notes-buffer-list + (setq-filter 'my-buffer-with-same-base-p + (buffer-list)))) + (if (eq last-command 'my-org-open-or-cycle-notes) + (progn + (setq my-notes-buffer-list + (my-list-cycle my-notes-buffer-list)) + (switch-to-buffer (car my-notes-buffer-list))) + (let ((buffer + (find-file-noselect org-default-notes-file))) + (with-current-buffer buffer + (setq my-notes-buffer-list + (seq-filter 'my-buffer-with-same-base-p (buffer-list)))) + ;; Find first buffer that is not in a live window. If no such + ;; buffer exists, fall back to `find-file-noselect'. + (setq buffer + (or + (seq-find + (lambda (buffer) + (not (my-buffer-live-window-p buffer))) + my-notes-buffer-list) + (find-file-noselect org-default-notes-file))) + (while (not (eq buffer (car my-notes-buffer-list))) + (setq my-notes-buffer-list + (my-list-cycle my-notes-buffer-list)))) + (switch-to-buffer (car my-notes-buffer-list)) + ))) ;; links (defun my-org-substitute-gnus-link-after-archiving () -- cgit v1.2.3