all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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





  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.