From: Visuwesh <visuweshm@gmail.com>
To: Protesilaos Stavrou <info@protesilaos.com>
Cc: 65039@debbugs.gnu.org
Subject: bug#65039: 30.0.50; [PATCH] Add bookmark handler for M-x shell
Date: Fri, 04 Aug 2023 18:31:16 +0530 [thread overview]
Message-ID: <87bkfn7yhv.fsf@gmail.com> (raw)
In-Reply-To: <87v8dv2mfu.fsf@protesilaos.com> (Protesilaos Stavrou's message of "Fri, 04 Aug 2023 12:20:37 +0300")
[வெள்ளி ஆகஸ்ட் 04, 2023] Protesilaos Stavrou wrote:
> The code is adapted from Eshell, which has the capability you describe.
> I do not have the means to test an SSH connection. Though I tried the
> 'sudo' TRAMP method and the bookmarking correctly logs me in as root
> when I do 'bookmark-jump'. This works even if I kill the shell buffer
> and all TRAMP buffers.
I see that `shell' sets the value of `explicit-shell-file-name' to the
filename of the remote shell chosen but unfortunately this gets set to
nil once `make-comint-in-buffer' function is called since `comint-mode'
kills all local variables. :-(
I don't know how reliable of a solution
(executable-find shell--start-prog)
is to get the absolute filename of the shell being used.
If that is an acceptable solution, then the following diff works fine
for both remote and local shells.
diff --git a/lisp/shell.el b/lisp/shell.el
index 5cf108bfa3..8396870a67 100644
--- a/lisp/shell.el
+++ b/lisp/shell.el
@@ -637,6 +637,7 @@ shell-mode
(setq comint-prompt-regexp shell-prompt-pattern)
(shell-completion-vars)
+ (setq-local bookmark-make-record-function #'shell-bookmark-make-record)
(setq-local paragraph-separate "\\'")
(setq-local paragraph-start comint-prompt-regexp)
(setq-local font-lock-defaults '(shell-font-lock-keywords t))
@@ -1770,6 +1771,32 @@ shell-highlight-undef-mode-restart
(when shell-highlight-undef-mode
(shell-highlight-undef-mode 1)))
+;;; Bookmark support
+
+;; Adapted from esh-mode.el
+(declare-function bookmark-prop-get "bookmark" (bookmark prop))
+
+(defun shell-bookmark-name ()
+ (format "shell-%s"
+ (file-name-nondirectory
+ (directory-file-name
+ (file-name-directory default-directory)))))
+
+(defun shell-bookmark-make-record ()
+ "Create a bookmark for the current Shell buffer."
+ `(,(shell-bookmark-name)
+ (location . ,default-directory)
+ (shell-filename . ,(executable-find shell--start-prog))
+ (handler . shell-bookmark-jump)))
+
+;;;###autoload
+(defun shell-bookmark-jump (bookmark)
+ "Default bookmark handler for Shell buffers."
+ (let ((default-directory (bookmark-prop-get bookmark 'location)))
+ (shell nil (bookmark-prop-get bookmark 'shell-filename))))
+
+(put 'shell-bookmark-jump 'bookmark-handler-type "Shell")
+
(provide 'shell)
;;; shell.el ends here
next prev parent reply other threads:[~2023-08-04 13:01 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-03 14:41 bug#65039: 30.0.50; [PATCH] Add bookmark handler for M-x shell Protesilaos Stavrou
2023-08-03 15:56 ` Eli Zaretskii
2023-08-04 9:17 ` Protesilaos Stavrou
2023-08-04 10:32 ` Eli Zaretskii
2023-08-04 14:06 ` Protesilaos Stavrou
2023-08-05 9:18 ` Eli Zaretskii
2023-09-03 11:15 ` Stefan Kangas
2023-09-03 11:42 ` Eli Zaretskii
2023-09-05 4:39 ` Protesilaos Stavrou
2023-09-05 6:17 ` Eshel Yaron via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-18 5:28 ` Protesilaos Stavrou
2023-08-04 14:35 ` Drew Adams
2023-08-03 17:08 ` Visuwesh
2023-08-04 9:20 ` Protesilaos Stavrou
2023-08-04 13:01 ` Visuwesh [this message]
2023-08-04 14:13 ` Protesilaos Stavrou
2023-08-04 14:35 ` Visuwesh
2023-08-11 4:55 ` Protesilaos Stavrou
2023-08-04 17:01 ` Jim Porter
2023-08-06 4:43 ` Protesilaos Stavrou
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87bkfn7yhv.fsf@gmail.com \
--to=visuweshm@gmail.com \
--cc=65039@debbugs.gnu.org \
--cc=info@protesilaos.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.