diff options
author | Vincent Ambo <tazjin@google.com> | 2019-12-14T15·24+0000 |
---|---|---|
committer | Vincent Ambo <tazjin@google.com> | 2019-12-14T15·24+0000 |
commit | 7d03ab714059a05e4f841be379b7a5ba2d033b09 (patch) | |
tree | 43dfc7b90339c69a5827ab468099591ca6b5edd3 /tools/emacs/config/term-setup.el | |
parent | 1584607fb9c0d7d8c151509573c3447f17f42ec8 (diff) |
chore(emacs.d): Move init/* to config/* r/144
Diffstat (limited to 'tools/emacs/config/term-setup.el')
-rw-r--r-- | tools/emacs/config/term-setup.el | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/tools/emacs/config/term-setup.el b/tools/emacs/config/term-setup.el new file mode 100644 index 000000000000..cd4f9c25ef73 --- /dev/null +++ b/tools/emacs/config/term-setup.el @@ -0,0 +1,36 @@ +;; Utilities for X11 terminal buffers. + +(defvar x11-terminal-program "gnome-terminal" + "Which X11 terminal application to use.") + +(defvar x11-terminal-buffer-prefix "Term" + "String prefix for X11 terminal buffer names.") + +(defun open-or-create-terminal-buffer (buffer-name) + "Switch to the buffer with BUFFER-NAME or create a new buffer + running the configured X11 terminal." + (let ((buffer (get-buffer buffer-name))) + (if (not buffer) + (run-external-command x11-terminal-program) + (switch-to-buffer buffer)))) + +(defun is-terminal-buffer (buffer) + "Determine whether BUFFER runs an X11 terminal." + (and (equal 'exwm-mode (buffer-local-value 'major-mode buffer)) + (s-starts-with? x11-terminal-buffer-prefix (buffer-name buffer)))) + +(defun counsel-switch-to-terminal () + "Switch to an X11 terminal buffer, or create a new one." + (interactive) + (let ((terms (-map #'buffer-name + (-filter #'is-terminal-buffer (buffer-list))))) + (if terms + (ivy-read "Switch to terminal buffer: " + (cons "New terminal" terms) + :caller 'counsel-switch-to-terminal + :preselect (s-concat "^" x11-terminal-buffer-prefix) + :require-match t + :action #'open-or-create-terminal-buffer) + (run-external-command x11-terminal-program)))) + +(provide 'term-setup) |