作業の流れ的に美しくありませんし、毎回引っかかるのでストレスにもなります。
vim ですと「:e sudo:%」でカレントファイルを sudo で開きなおしてくれるようです。いいなあ。
ということで 自動的に sudo で開きなおしてくれる機能を作ろうかと思ったら、すでにあったのでそれを導入します。
元のlispは、書き込み不可なファイルすべてをsudoで開きなおすか聞いてくるのでうっとおしいので、少し修正しました。
root所有なファイルを開いた時だけ、sudoで開き直すか聞いてくるようにしました。
以下を ~/.emacs にコピペしします。
(defun file-root-p (filename)
"Return t if file FILENAME created by root."
(eq 0 (nth 2 (file-attributes filename))))
(defun th-rename-tramp-buffer ()
(when (file-remote-p (buffer-file-name))
(rename-buffer
(format "%s:%s"
(file-remote-p (buffer-file-name) 'method)
(buffer-name)))))
(add-hook 'find-file-hook
'th-rename-tramp-buffer)
(defadvice find-file (around th-find-file activate)
"Open FILENAME using tramp's sudo method if it's read-only."
(if (and (file-root-p (ad-get-arg 0))
(not (file-writable-p (ad-get-arg 0)))
(y-or-n-p (concat "File "
(ad-get-arg 0)
" is read-only. Open it as root? ")))
(th-find-file-sudo (ad-get-arg 0))
ad-do-it))
(defun th-find-file-sudo (file)
"Opens FILE with root privileges."
(interactive "F")
(set-buffer (find-file (concat "/sudo::" file))))
これで dired や C-x C-f で普通にファイルを開いても、それがroot所有なファイルならば自動的にsudoで開きなおすか聞いてくれます。おかげでtrampを意識しなくて済むのでとても楽になりました。
3 件のコメント:
便利に使わせて頂いております。
で、一つ、お願いが。
root だけでなく他のユーザ所有のファイルでも処理してくれるように改造/拡張して頂けると、とっても嬉しいです。要するに、処理対象のファイルオーナを設定可能にする、と。
ご検討頂けるでしょうか?
新規に記事書いてやってみますね。
コメントを投稿