|
From: | Ben Hyde |
Subject: | Hack to get nicer buffer names for shell buffers that use tramp. |
Date: | Fri, 19 Apr 2019 16:46:41 -0400 |
Friday afternoon. Thought I’d share this which I’ve been using for a year or two.
Imagine your viewing a remote file on example.com, via tramp of course.
If you do M-x shell you get a new buffer with an interactive shell.
The code below will bless this new shell buffer with a nicer name,
e.g. shell:example.com instead of say shell.
(defun auto-name-shell-buffers (original-shell-fn &optional buffer)
"Wrap ORIGINAL-SHELL-FN to avoid tramp shell buffers name *shell*, do nothing if BUFFER."
(cond
((or buffer
(not (tramp-tramp-file-p default-directory)))
(funcall original-shell-fn buffer))
((not (zerop (call-process "/usr/bin/ssh-add" nil nil nil "-l")))
(message "ssh auth socket is bork'd"))
(t
(with-parsed-tramp-file-name default-directory tp
(let* ( ; (tramp-path (tramp-dissect-file-name default-directory))
(host (tramp-file-name-host tp))
(user (if (tramp-file-name-user tp)
(format "%s@" (tramp-file-name-user tp)) ""))
(new-buffer-name (format "*shell:%s%s*" user host)))
(funcall original-shell-fn new-buffer-name))))))
(advice-add 'shell :around #'auto-name-shell-buffers)
No doubt other crafts people would write this in far more elegant ways.
Feel free to provide feedback.
For example I don’t recall how I determined that (tramp-tramp-file-p directory)
was a fine way to tell if the current buffer is leveraging tramp.
ps. The cond clause that checks for a valid ssh agent can be removed.
I always have an agent, so I like it.
[Prev in Thread] | Current Thread | [Next in Thread] |