{"id":13836974,"url":"https://github.com/jixiuf/vterm-toggle","last_synced_at":"2025-07-10T16:31:34.241Z","repository":{"id":37390947,"uuid":"177299177","full_name":"jixiuf/vterm-toggle","owner":"jixiuf","description":"toggles between the vterm buffer and whatever buffer you are editing.","archived":false,"fork":false,"pushed_at":"2023-09-12T02:46:28.000Z","size":85,"stargazers_count":173,"open_issues_count":6,"forks_count":11,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-02-16T07:36:56.978Z","etag":null,"topics":["emacs","libvterm","terminal","vterm"],"latest_commit_sha":null,"homepage":"","language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jixiuf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2019-03-23T14:31:10.000Z","updated_at":"2024-01-21T00:53:22.000Z","dependencies_parsed_at":"2024-02-16T07:46:39.283Z","dependency_job_id":null,"html_url":"https://github.com/jixiuf/vterm-toggle","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jixiuf%2Fvterm-toggle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jixiuf%2Fvterm-toggle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jixiuf%2Fvterm-toggle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jixiuf%2Fvterm-toggle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jixiuf","download_url":"https://codeload.github.com/jixiuf/vterm-toggle/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225648049,"owners_count":17502171,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["emacs","libvterm","terminal","vterm"],"created_at":"2024-08-04T15:00:58.418Z","updated_at":"2024-11-20T23:32:05.130Z","avatar_url":"https://github.com/jixiuf.png","language":"Emacs Lisp","funding_links":[],"categories":["Emacs Lisp"],"sub_categories":[],"readme":"[![MELPA](https://melpa.org/packages/vterm-toggle-badge.svg)](https://melpa.org/#/vterm-toggle)\n# vterm-toggle Toggle vterm buffer\n\n[emacs-libvterm](https://github.com/akermu/emacs-libvterm) is fully-fledged terminal emulator inside GNU Emacs based on libvterm.\n\nThis package provides the command `vterm-toggle` which toggles between the vterm\nbuffer and whatever buffer you are editing.\n\n This is done in an \"intelligent\" way.  Features are:\n 1. Starts a vterm if none is existent.\n 2. Minimum distortion of your window configuration.\n 3. When done in the vterm-buffer you are returned to the same window\n    configuration you had before you toggled to the shell.\n 4. If you desire, you automagically get a `cd` command in the shell to the\n    directory where your current buffers file exists, just call `vterm-toggle-cd`\n    instead of `vterm-toggle`.\n\n```\n(global-set-key [f2] 'vterm-toggle)\n(global-set-key [C-f2] 'vterm-toggle-cd)\n\n;; you can cd to the directory where your previous buffer file exists\n;; after you have toggle to the vterm buffer with `vterm-toggle'.\n(define-key vterm-mode-map [(control return)]   #'vterm-toggle-insert-cd)\n\n;Switch to next vterm buffer\n(define-key vterm-mode-map (kbd \"s-n\")   'vterm-toggle-forward)\n;Switch to previous vterm buffer\n(define-key vterm-mode-map (kbd \"s-p\")   'vterm-toggle-backward)\n\n```\n\n# Customize\n## vterm-toggle-cd-auto-create-buffer\nWith\n```\n(setq vterm-toggle-cd-auto-create-buffer nil)\n```\n`vterm-toggle-cd`  would activate a recent vterm buffer even if no prompt can be found\n(with vterm-toggle-use-dedicated-buffer still nil). So when the current buffer is not a vterm buffer,\nit would always activate a recent vterm buffer if there is one but would only insert cd if the prompt is available.\nAnd you can bind\n```\n(define-key vterm-mode-map [(control return)]   #'vterm-toggle-insert-cd)\n```\n## vterm-toggle-reset-window-configration-after-exit\n\n`t` Reset window configuration after vterm buffer is killed.\n`'kill-window-only` Kill Window only.\n\n## vterm-toggle-hide-method\n1. `delete-window`  Delete vterm window\n2. `nil`  Toggle without closing the vterm window, just jump back-and-forth\n    between vterm and a code buffer.\n3. `reset-window-configration`  Reset window configration\n## show vterm buffer in current window\n```\n(setq vterm-toggle-fullscreen-p nil)\n(add-to-list 'display-buffer-alist\n             '((lambda (buffer-or-name _)\n                   (let ((buffer (get-buffer buffer-or-name)))\n                     (with-current-buffer buffer\n                       (or (equal major-mode 'vterm-mode)\n                           (string-prefix-p vterm-buffer-name (buffer-name buffer))))))\n         (display-buffer-reuse-window display-buffer-same-window)))\n\n\n```\n## show vterm buffer in bottom side\n```\n(setq vterm-toggle-fullscreen-p nil)\n(add-to-list 'display-buffer-alist\n             '((lambda (buffer-or-name _)\n                   (let ((buffer (get-buffer buffer-or-name)))\n                     (with-current-buffer buffer\n                       (or (equal major-mode 'vterm-mode)\n                           (string-prefix-p vterm-buffer-name (buffer-name buffer))))))\n                (display-buffer-reuse-window display-buffer-at-bottom)\n                ;;(display-buffer-reuse-window display-buffer-in-direction)\n                ;;display-buffer-in-direction/direction/dedicated is added in emacs27\n                ;;(direction . bottom)\n                ;;(dedicated . t) ;dedicated is supported in emacs27\n                (reusable-frames . visible)\n                (window-height . 0.3)))\n```\n## show  vterm buffer in side window\nIf you want show vterm buffer at bottom side window:\n```\n(setq vterm-toggle-fullscreen-p nil)\n(add-to-list 'display-buffer-alist\n             '((lambda (buffer-or-name _)\n                   (let ((buffer (get-buffer buffer-or-name)))\n                     (with-current-buffer buffer\n                       (or (equal major-mode 'vterm-mode)\n                           (string-prefix-p vterm-buffer-name (buffer-name buffer))))))\n               (display-buffer-reuse-window display-buffer-in-side-window)\n               (side . bottom)\n               ;;(dedicated . t) ;dedicated is supported in emacs27\n               (reusable-frames . visible)\n               (window-height . 0.3)))\n```\n\n\n# work with centaur-tabs (select next/prev vterm buffer)\n\n   https://github.com/ema2159/centaur-tabs/\n\nYou can customize `centaur-tabs` and make all vterm buffer in a tab group, and\nuse `centaur-tabs-forward` and `centaur-tabs-backward` switch from one vterm\nbuffer to another.\n\n```\n(global-set-key  (kbd \"s-n\") 'centaur-tabs-forward)\n(global-set-key  (kbd \"s-p\") 'centaur-tabs-backward)\n```\n\n```\n(setq centaur-tabs-buffer-groups-function 'vmacs-awesome-tab-buffer-groups)\n(defun vmacs-awesome-tab-buffer-groups ()\n  \"`vmacs-awesome-tab-buffer-groups' control buffers' group rules. \"\n  (list\n   (cond\n    ((derived-mode-p 'eshell-mode 'term-mode 'shell-mode 'vterm-mode)\n     \"Term\")\n    ((string-match-p (rx (or\n                          \"\\*Helm\"\n                          \"\\*helm\"\n                          \"\\*tramp\"\n                          \"\\*Completions\\*\"\n                          \"\\*sdcv\\*\"\n                          \"\\*Messages\\*\"\n                          \"\\*Ido Completions\\*\"\n                          ))\n                     (buffer-name))\n     \"Emacs\")\n    (t \"Common\"))))\n\n(setq vterm-toggle--vterm-buffer-p-function 'vmacs-term-mode-p)\n(defun vmacs-term-mode-p(\u0026optional args)\n  (derived-mode-p 'eshell-mode 'term-mode 'shell-mode 'vterm-mode))\n\n```\n# vterm-toggle-use-dedicated-buffer\nWhen  vterm-toggle-use-dedicated-buffer is not nil, you can toggle to a dedicated vterm buffer.\n\nyou can toggle to different dedicated buffer for different purpose.\nFor example, I want to replace default `compile` with my `vterm-compile`\n```\n(defvar vterm-compile-dedicated-buffer nil)\n(defun vterm-compile ()\n  (interactive)\n  (let ((vterm-toggle-use-dedicated-buffer t)\n        (vterm-toggle--vterm-dedicated-buffer vterm-compile-dedicated-buffer))\n    (with-current-buffer (vterm-toggle-cd)\n      (setq vterm-compile-dedicated-buffer (current-buffer))\n      (rename-buffer \"term compile\")\n      (compilation-shell-minor-mode 1)\n      (vterm-send-string compile-command t)\n      (vterm-send-return))\n    )\n  )\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjixiuf%2Fvterm-toggle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjixiuf%2Fvterm-toggle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjixiuf%2Fvterm-toggle/lists"}