emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 7f95d2d: Support history files in remote shells (Bu


From: Michael Albinus
Subject: [Emacs-diffs] master 7f95d2d: Support history files in remote shells (Bug#36742)
Date: Mon, 22 Jul 2019 07:04:24 -0400 (EDT)

branch: master
commit 7f95d2d40726b4fb4a2ba1b8c373f3498e286d34
Author: Michael Albinus <address@hidden>
Commit: Michael Albinus <address@hidden>

    Support history files in remote shells (Bug#36742)
    
    * doc/emacs/misc.texi (Shell Ring): Mention history file for
    remote shells.
    
    * lisp/shell.el (shell--start-prog): New buffer-local variable.
    (shell): Set it.
    (shell-mode): Handle history file for remote shells. (Bug#36742)
---
 doc/emacs/misc.texi |  7 ++++++-
 lisp/shell.el       | 29 ++++++++++++++++++++---------
 2 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index 9339626..5877c4b 100644
--- a/doc/emacs/misc.texi
+++ b/doc/emacs/misc.texi
@@ -1253,13 +1253,18 @@ history list, not from the shell buffer itself.  Thus, 
editing the shell
 buffer, or even killing large parts of it, does not affect the history
 that these commands access.
 
-@vindex shell-input-ring-file-name
+@vindex comint-input-ring-file-name
   Some shells store their command histories in files so that you can
 refer to commands from previous shell sessions.  Emacs reads
 the command history file for your chosen shell, to initialize its own
 command history.  The file name is @file{~/.bash_history} for bash,
 @file{~/.sh_history} for ksh, and @file{~/.history} for other shells.
 
+@vindex tramp-histfile-override
+  If you run the shell on a remote host, this setting might be
+overwritten by the variable @code{tramp-histfile-override}.  It is
+recommended to set this variable to @code{nil}.
+
 @node Shell History Copying
 @subsubsection Shell History Copying
 
diff --git a/lisp/shell.el b/lisp/shell.el
index 5357027..2914d1d 100644
--- a/lisp/shell.el
+++ b/lisp/shell.el
@@ -358,6 +358,10 @@ Thus, this does not include the shell's current 
directory.")
     ("^\\[[1-9][0-9]*\\]" . font-lock-string-face))
   "Additional expressions to highlight in Shell mode.")
 
+(defvar-local shell--start-prog nil
+  "Shell file name started in `shell'.")
+(put 'shell--start-prog 'permanent-local t)
+
 ;;; Basic Procedures
 
 (defun shell--unquote&requote-argument (qstr &optional upos)
@@ -573,20 +577,26 @@ buffer."
   (setq list-buffers-directory (expand-file-name default-directory))
   ;; shell-dependent assignments.
   (when (ring-empty-p comint-input-ring)
-    (let ((shell (if (get-buffer-process (current-buffer))
-                     (file-name-nondirectory
-                      (car (process-command (get-buffer-process 
(current-buffer)))))
-                   ""))
-         (hsize (getenv "HISTSIZE")))
+    (let ((remote (file-remote-p default-directory))
+          (shell (or shell--start-prog ""))
+          (hsize (getenv "HISTSIZE"))
+          (hfile (getenv "HISTFILE")))
+      (when remote
+        ;; `shell-snarf-envar' does not work trustworthy.
+        (setq hsize (shell-command-to-string "echo -n $HISTSIZE")
+              hfile (shell-command-to-string "echo -n $HISTFILE")))
+      (and (string-equal hfile "") (setq hfile nil))
       (and (stringp hsize)
           (integerp (setq hsize (string-to-number hsize)))
           (> hsize 0)
           (set (make-local-variable 'comint-input-ring-size) hsize))
       (setq comint-input-ring-file-name
-           (or (getenv "HISTFILE")
-               (cond ((string-equal shell "bash") "~/.bash_history")
-                     ((string-equal shell "ksh") "~/.sh_history")
-                     (t "~/.history"))))
+            (concat
+             remote
+            (or hfile
+                (cond ((string-equal shell "bash") "~/.bash_history")
+                      ((string-equal shell "ksh") "~/.sh_history")
+                      (t "~/.history")))))
       (if (or (equal comint-input-ring-file-name "")
              (equal (file-truename comint-input-ring-file-name)
                     (file-truename "/dev/null")))
@@ -746,6 +756,7 @@ Otherwise, one argument `-i' is passed to the shell.
               (xargs-name (intern-soft (concat "explicit-" name "-args"))))
          (unless (file-exists-p startfile)
            (setq startfile (concat user-emacs-directory "init_" name ".sh")))
+         (setq-local shell--start-prog (file-name-nondirectory prog))
          (apply #'make-comint-in-buffer "shell" buffer prog
                 (if (file-exists-p startfile) startfile)
                 (if (and xargs-name (boundp xargs-name))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]