Skip to content

Commit

Permalink
feat(vterm): advice instead to prefer project-specific buffer
Browse files Browse the repository at this point in the history
  • Loading branch information
Walheimat committed Jan 15, 2024
1 parent b0edc12 commit cb5d797
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 23 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ Versioning](https://semver.org/spec/v2.0.0.html).
### Changed

- Clocking out now prompts the user to select the next state.
- Instead of providing `wal-project-vterm`, `vterm` is now advised to
prefer using a project-specific buffer.

## [2.2.7]

Expand Down
35 changes: 22 additions & 13 deletions lib/wal-terminal.org
Original file line number Diff line number Diff line change
Expand Up @@ -125,33 +125,42 @@ Adds the same functionality to have one =vterm= buffer per project and
sets up =with-editor=.

#+BEGIN_SRC emacs-lisp
(defun wal-project-vterm (&optional force)
"Get a project `vterm' buffer.
(defun wal-vterm--prefer-project (fun &optional arg)
"Get preferably a `vterm' buffer.

If FORCE is non-nil, this creates a new buffer even if a project
buffer already exists."
This calls FUN (which is `vterm'). If there is a project and ARG
is non-nil, this creates a new buffer even if a project buffer
already exists."
(interactive "P")

(let* ((default-directory (project-root (project-current t)))
(vterm-buffer-name (project-prefixed-buffer-name "vterm"))
(buffer (get-buffer vterm-buffer-name)))
(if-let ((project (project-current)))

(if (and buffer (not force))
(pop-to-buffer buffer (bound-and-true-p display-comint-buffer-action))
(vterm t))))
(let* ((default-directory (project-root project))
(vterm-buffer-name (project-prefixed-buffer-name "vterm"))
(buffer (get-buffer vterm-buffer-name)))

(if (and buffer (not arg))
(pop-to-buffer buffer (bound-and-true-p display-comint-buffer-action))

(funcall fun t)))

(funcall fun arg)))

(use-package vterm
:hook
(vterm-mode . with-editor-export-git-editor)

:init
(advice-add
'vterm :around
#'wal-vterm--prefer-project)

:custom
(vterm-prefix "VTerm")
(vterm-max-scrollback 10000)

:general
(ambassador "t" '(:ignore t :wk "vterm")
"tt" 'vterm
"tp" 'wal-project-vterm)
(ambassador "t" 'vterm)

:delight
(vterm-copy-mode " vcp"))
Expand Down
31 changes: 21 additions & 10 deletions test/wal-terminal-test.el
Original file line number Diff line number Diff line change
Expand Up @@ -16,30 +16,41 @@

(bydi-was-called eshell-truncate-buffer)))

(ert-deftest wal-project-vterm ()
(bydi ((:always project-current)
(ert-deftest wal-vterm--prefer-project ()
:tags '(terminal)

(defun faketerm (&rest args)
t)

(bydi ((:sometimes project-current)
(:mock project-root :return "/tmp")
(:mock project-prefixed-buffer-name :return "*test-vterm*")
(:spy pop-to-buffer)
(:watch default-directory)
vterm)
(:spy faketerm)
(:watch default-directory))

(wal-project-vterm)
(wal-vterm--prefer-project 'faketerm t)

(bydi-was-called vterm)
(bydi-was-called faketerm)
(bydi-was-set-to default-directory "/tmp")

(ert-with-test-buffer (:name "vterm")
(rename-buffer "*test-vterm*")

(funcall-interactively 'wal-project-vterm t)
(funcall-interactively 'wal-vterm--prefer-project 'faketerm t)

(bydi-was-called vterm)
(bydi-was-called faketerm)
(bydi-was-not-called pop-to-buffer)

(wal-project-vterm)
(wal-vterm--prefer-project 'faketerm)

(bydi-was-called pop-to-buffer))

(bydi-toggle-sometimes)

(funcall-interactively 'wal-vterm--prefer-project 'faketerm 'argument)

(bydi-was-called pop-to-buffer))))
(bydi-was-called-last-with faketerm 'argument)))

;;; wal-terminal-test.el ends here

Expand Down

0 comments on commit cb5d797

Please sign in to comment.