Emacsが `Mx shell`でパスフレーズを表示しないようにする方法は?


9

内部からファイルをバックアップするために、パスフレーズでatticを使用してみましたM-x shell。シェルは、パスフレーズをバッファ内のプレーンテキストとして公開し、で入力しM-rたり、シェルの入力履歴を調べたりして、パスフレーズを使用できるようにしましたC-c C-l

シェルを閉じて入力履歴を再度開いたところ、少なくとも消えていました。おそらく、シェルはそれから初期の履歴を読み取り.bash_history、少なくともそこにbash私を書かないという良識passphraseがあったためです。

バックアップemacsを実行するために本当に離れる必要atticがありますか、それとも不注意にならないように構成する方法はありますか?

新鮮なemacs -Qセッションで問題を再現することができました。Emacsが電話をかけるときを除いてすべてのケースでパスフレーズを正しく隠すので、以前は混乱していました

 attic create --stats /path/to/backup::name ~/folders ~/backed ~/up

次に、次のatticようにプロンプ​​トします。

Enter passphrase for /path/to/backup::name:

この問題は、このPythonワンライナーで再現できます。

python -c 'import getpass; getpass.getpass("Hello")'

パスワードプロンプト文字列が"Password:"Emacsの場合、パスワードプロンプトが表示されますが、文字列がそれ以外の場合は表示されません。

Emacsに少なくともatticのパスワードプロンプトを認識させるにはどうすればよいですか?

回答:


13

シェルモードでは、Emacsはプロンプトに基づいてパスワードプロンプトを検出します。それは見ている場合Password:(またはEnter new password:、またはPasswort:、またはWachtwoord:バリエーションの数をか)、それはあなたがパスワードを入力するよう求めていることを前提とミニバッファから文字列(プロンプトを繰り返す)を読み込みます。この文字列はエコーされず、どの履歴リストにも入力されません。

Emacsがプロンプトを認識しない場合は、呼び出すことで同じ効果を得ることができますM-x send-invisible(デフォルトではキーにバインドされていません)。

Emacsをカスタマイズして、表示されるパスワードプロンプトを認識するように教えることができますcomint-password-prompt-regexp。この正規表現は現在の行で検索されるので^、左マージンのテキストと一致させる場合は最初に開始し、\'後で任意のテキストを許可しない場合は終了する必要があることに注意してください。

別のプロンプト形式を追加\|^…\'するには、既存の正規表現の最後に追加します。たとえば、これをinitファイルに追加できます(二重引用符の間にバックスラッシュを2つ付けることを忘れないでください)。

(setq comint-password-prompt-regexp
      (concat comint-password-prompt-regexp
              "\\|^Enter passphrase for .*:\\s *\\'"))

1
また、に要素を追加する場合は、デフォルトで追加できるように、をcomint-password-prompt-regexp介して送信することを検討してM-x report-emacs-bugください。
Stefan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.