Fix remote-host directory tracking for shells in `term' buffers

* lisp/term.el (term-handle-ansi-terminal-messages): Use an explicit
tramp method when constructing the tramp path for a non-local host,
as this is now mandatory.  "-" is a pseudo-method for the user's
`tramp-default-method'.  (Bug#31355)

Specify the remote username explicitly in all cases, as
`tramp-default-user' and `tramp-default-user-alist' could cause the
previous logic to fail.

Minor related improvements to the commentary.
This commit is contained in:
Phil Sainty 2018-05-04 01:29:42 +12:00
parent 16e8541b74
commit 03697e648c

View file

@ -233,31 +233,33 @@
;; ;;
;; Notice: for directory/host/user tracking you need to have something ;; Notice: for directory/host/user tracking you need to have something
;; like this in your shell startup script (this is for a POSIXish shell ;; like this in your shell startup script (this is for a POSIXish shell
;; like Bash but should be quite easy to port to other shells) ;; like Bash but should be quite easy to port to other shells).
;;
;; For troubleshooting in Bash, you can check the definition of the
;; custom functions with the "type" command. e.g. "type cd". If you
;; do not see the expected definition from the config below, then the
;; directory tracking will not work.
;; ;;
;; ---------------------------------------- ;; ----------------------------------------
;; ;;
;; # Set HOSTNAME if not already set. ;; # Set HOSTNAME if not already set.
;; : ${HOSTNAME=$(uname -n)} ;; : ${HOSTNAME=$(uname -n)}
;; ;;
;; # su does not change this but I'd like it to ;; # su does not change this but I'd like it to
;;
;; USER=$(whoami) ;; USER=$(whoami)
;; ;;
;; # ... ;; # ...
;; ;;
;; case $TERM in ;; case $TERM in
;; eterm*) ;; eterm*)
;; ;;
;; printf '%s\n' \ ;; printf '%s\n' \
;; -------------------------------------------------------------- \ ;; -------------------------------------------------------------- \
;; "Hello $user" \ ;; "Hello $USER" \
;; "Today is $(date)" \ ;; "Today is $(date)" \
;; "We are on $HOSTNAME running $(uname) under Emacs term mode" \ ;; "We are on $HOSTNAME running $(uname) under Emacs term mode" \
;; -------------------------------------------------------------- ;; --------------------------------------------------------------
;; ;;
;; export EDITOR=emacsclient
;;
;; # The \033 stands for ESC. ;; # The \033 stands for ESC.
;; # There is a space between "AnSiT?" and $whatever. ;; # There is a space between "AnSiT?" and $whatever.
;; ;;
@ -269,10 +271,11 @@
;; printf '\033AnSiTh %s\n' "$HOSTNAME" ;; printf '\033AnSiTh %s\n' "$HOSTNAME"
;; printf '\033AnSiTu %s\n' "$USER" ;; printf '\033AnSiTu %s\n' "$USER"
;; ;;
;; eval $(dircolors $HOME/.emacs_dircolors) ;; # Use custom dircolors in term buffers.
;; # eval $(dircolors $HOME/.emacs_dircolors)
;; esac ;; esac
;; ;;
;; # ... ;; # ...
;; ;;
;; ;;
@ -2750,12 +2753,10 @@ See `term-prompt-regexp'."
(setq default-directory (setq default-directory
(file-name-as-directory (file-name-as-directory
(if (and (string= term-ansi-at-host (system-name)) (if (and (string= term-ansi-at-host (system-name))
(string= term-ansi-at-user (user-real-login-name))) (string= term-ansi-at-user (user-real-login-name)))
(expand-file-name term-ansi-at-dir) (expand-file-name term-ansi-at-dir)
(if (string= term-ansi-at-user (user-real-login-name)) (concat "/-:" term-ansi-at-user "@" term-ansi-at-host ":"
(concat "/" term-ansi-at-host ":" term-ansi-at-dir) term-ansi-at-dir))))
(concat "/" term-ansi-at-user "@" term-ansi-at-host ":"
term-ansi-at-dir)))))
;; I'm not sure this is necessary, ;; I'm not sure this is necessary,
;; but it's best to be on the safe side. ;; but it's best to be on the safe side.