diff options
Diffstat (limited to 'emacs/.emacs.d/lisp/my/my-prog.el')
-rw-r--r-- | emacs/.emacs.d/lisp/my/my-prog.el | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/emacs/.emacs.d/lisp/my/my-prog.el b/emacs/.emacs.d/lisp/my/my-prog.el index 798b4cd..a0e0ce7 100644 --- a/emacs/.emacs.d/lisp/my/my-prog.el +++ b/emacs/.emacs.d/lisp/my/my-prog.el @@ -137,20 +137,33 @@ (require 'my-buffer) -(defun my-switch-or-create-shell-buffer (arg) +(defvar my-shell-buffer-list nil + "List of shell mode buffers.") + +(defun my-shell-open-or-cycle (arg) "Switch to or create a shell buffer. If there's no buffer with shell mode, or with a prefix-arg, create a shell buffer using `my-shell-with-directory'" (interactive "P") (if (or arg - (not (seq-filter - (lambda (buffer) - (with-current-buffer buffer - (derived-mode-p 'shell-mode))) - (buffer-list)))) - (call-interactively 'my-shell-with-directory) - (my-buffer-quick-major-mode 'shell-mode))) + (not (my-buffer-find-mode 'shell-mode))) + (progn + (call-interactively 'my-shell-with-directory) + (setq my-shell-buffer-list + (seq-filter 'my-buffer-with-same-major-mode-p + (buffer-list)))) + (if (eq last-command 'my-shell-open-or-cycle) + (progn + (setq my-shell-buffer-list + (my-list-cycle my-shell-buffer-list)) + (switch-to-buffer (car my-shell-buffer-list))) + (let ((buffer + (my-buffer-find-mode 'shell-mode))) + (switch-to-buffer buffer) + (setq my-shell-buffer-list + (seq-filter 'my-buffer-with-same-major-mode-p + (buffer-list))))))) ;;; gdb (require 'gdb-mi) |