@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

新しいtrampは違った!

古いtrampの続き


最新版にアップデートしたら$TERMにdumbをセットしてくれるようになった.ということで$TERMで切り替えたらうまくいった

[追記] trampでsudoしたときはrootのログインシェルじゃなくて自分のログインシェルで,かつrootの.zshrcを読み込みます.sudoのオプションがsudo -u (user) -s -Hだから.

ってことはsudoしたいサーバー全部に~root/.zshrcを置かなあかんくて面倒なので,@satoru_hさんが解決策をしめしてくれました.

[追記終わり]

trampの更新

本家サイトより、tramp 2.1.9 をダウンロードする
展開してから、./configure –with-contrib && make && make clean する
tram-2.19 ディレクトリ全体を、ロードパスの通った場所におく
Emacs を起動してから、M-x tramp-version をして tramp のバージョンを確認する

Emacs から sudo 経由でファイルを編集する方法 | Carpe Diem

これを参考にtrampを最新版にしてみた.

現時点での最新版はtramp-2.1.17.tar.gzなのでお間違いなく.

こっちのリンクからどうぞ本家

そんで上の通り,

tar xzvf tramp-2.1.17.tar.gz
cd tramp-2.1.17/
./configure --with-contrib
make
make clean
cd ../../
mv tramp-2.1.17/ ~/.emacs.d/lisp/

てな感じにロードパスの通ったところに置いちゃいます

そんで.emacsにでも以下のように追記します

(add-to-list 'load-path "~/.emacs.d/lisp/tramp-2.1.17/lisp/")
(require 'tramp)
(setq tramp-shell-prompt-pattern "^.*[#$%>] *")

zsh側の設定

こんな感じに~/.zshrcに書いときます.(sshなどでログインしたとき用)

# set prompt
case ${UID} in
0)
    PROMPT="%B%{^[[31m%}%/#%{^[[m%}%b "
    PROMPT2="%B%{^[[31m%}%_#%{^[[m%}%b "
    SPROMPT="%B%{^[[31m%}%r is correct? [n,y,a,e]:%{^[[m%}%b "
    [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] &&
    PROMPT="%{^[[37m%}${HOST%%.*} ${PROMPT}"
    ;;
*)
    PROMPT="%{^[[31m%}%/%%%{^[[m%} "
    PROMPT2="%{^[[31m%}%_%%%{^[[m%} "
    SPROMPT="%{^[[31m%}%r is correct? [n,y,a,e]:%{^[[m%} "
    [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] &&
    PROMPT="%{^[[37m%}${HOST%%.*} ${PROMPT}"
    ;;
esac

# set terminal title including current directory
case "${TERM}" in
# for emacs tramp setting
dumb | emacs)
    PROMPT="%n@%~%(!.#.$)"
    RPROMPT=""
    PS1='%(?..[%?])%!:%~%# '
    # for tramp to not hang, need the following. cf:
    # http://www.emacswiki.org/emacs/TrampMode
    unsetopt zle
    unsetopt prompt_cr
    unsetopt prompt_subst
    unfunction precmd
    unfunction preexec
    ;;
esac

あと,/sudo::/path/to/file したときにはどうも~root/.zshrcを読み込んでいる模様なのでそっちも設定します.

if [[ $TERM == "dumb" ]]; then
    PS1='%(?..[%?])%!:%~%# '
    unsetopt zle
    unsetopt prompt_cr
    unsetopt prompt_subst
    unfunction precmd
    unfunction preexec
fi

ちなみにMacでは/var/root/.zshrcになるみたいです.

うーん,こんなもん?