;;; terminal.el --- Userland terminal with vterm -*- lexical-binding: t -*- ;; This file is not part of GNU Emacs ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; commentary ;;; Code: (require 'transient) (defcustom theurgy-enable-vterm-windows nil "Whether `vterm' should be enabled on Windows sytems." :type 'boolean :group 'theurgy :group 'theurgy-compat) (when (or (equal system-type 'gnu/linux) theurgy-enable-vterm-windows) (use-package vterm :ensure t)) (defun theurgy-shell () (interactive) (if (fboundp 'vterm) 'vterm 'shell)) (defun theurgy-bottom-shell () "Put a shell in the bottom of the frame." (interactive) (let ((win (car (window-at-side-list nil 'bottom)))) (if (and win (equal 'bottom (window-parameter win 'window-side))) (delete-window win) (funcall (theurgy-shell))))) (defun theurgy-main-shell () "Put a shell in a main window." (interactive) (if (get-buffer "*Shell Session*") (switch-to-buffer "*Shell Session*") (funcall (theurgy-shell) "*Shell Session*"))) (defun theurgy-gomuks () "Launch gomuks as it's own buffer." (interactive) (if (get-buffer "*Gomuks*") (switch-to-buffer "*Gomuks*") (funcall (theurgy-shell) "*Gomuks*") (let ((buf (current-buffer))) (vterm-send-string "gomuks") (vterm-send-return) (rename-buffer "Gomuks")))) (defun theurgy-gomuks-workspace () "Launch gomuks as a workspace." (interactive) (theurgy-gomuks) (tab-rename "Gomuks") (tab-bar-change-tab-group "userland: gomuks")) (define-key global-map (kbd "C-") 'theurgy-main-shell) (global-set-key (kbd "M-RET") 'theurgy-bottom-shell) (when (fboundp 'vterm) (define-key vterm-mode-map (kbd "M-RET") 'theurgy-bottom-shell)) (add-to-list 'display-buffer-alist '("\\*vterm\\*\\|\\*shell\\*" (display-buffer-in-side-window) (side . bottom) (slot . 0) (window-height . 0.2))) (use-package restart-emacs) (use-package system-packages) (transient-define-prefix system-interactions-transient () "Transient menu for interfacing with the system via system-packages and restart." ["Emacs system actions" ("R" "Restart" restart-emacs)] ["Package..." ("s" "Search" system-packages-search) ("u" "Update" system-packages-update) ("i" "Install" system-packages-install) ("r" "Uninstall" system-packages-uninstall) ("o" "Remove Orphans" system-packages-remove-orphaned)]) (define-key global-map (kbd "C-c o s") #'system-interactions-transient) (provide 'terminal) ;;; terminal.el ends here