如何修復 emacs shell 模式下的提示?

如何修復 emacs shell 模式下的提示?

我正在同事的機器上進行一些程式設計。他有一個我以前沒用過的emacs版本(23.1.1)。我的問題是,當我進入 shell 模式時,我的 bash 提示符號如下所示:

^[]0;jay@socrates:~^G[jay@socrates]$ 

我已經PS1'[\u@\h]\$ '我的.bashrc.它應該看起來像這樣:

[jay@socrates]$

這就是它在普通 shell 中的樣子。我還檢查了 emacs shell 中的 PS1 是否設定為正確的值,所以現在我沒有主意了。如何讓提示看起來像我想要的樣子?

我看到了一些使用termoreshell代替 的建議shellterm有與上面相同的提示問題,並且eshell完全忽略我的PS1所以這並沒有真正的幫助。

答案1

您的 shell 正在嘗試設定 XTerm(或其他控制台)的標題/標頭。有多種方法可以實現這一點。

首先確保 PS1 確實如您所想

echo $PS1 | less -E

這會告訴您提示中是否有控製字符,較少會使它們看起來有趣。假設您的提示與您所說的完全一樣,那麼它可能是 PROMPT_COMMAND 環境變數。你可以用同樣的方式來看...

echo $PROMPT_COMMAND | less -E

如果提示命令是問題所在,那麼您只需取消設定即可。無論哪種情況,這些變數都會在某處設置,如果您不在 XTerm 中,則不應將其設定為更新 XTerm 標頭!

您可以查看“標準”bashrc (/etc/bashrc)。您應該看到程式碼檢查迭代 shell(是 PS1 設定),然後檢查 xterm(查看 $TERM 變數),並執行與其他終端類型不同的操作。

我懷疑 bash 初始化中的某個地方是硬編碼設置,只能在 xterm 相容的控制台程式上完成。請閱讀man bash以查找您可以查找和瀏覽的文件的完整清單。

如果以上方法都失敗,請嘗試

printenv | less

看看是否能在那裡發現可疑的東西,然後追蹤它的設定位置。如果您無法解決,請將其發佈到此處。

答案2

我遇到了完全相同的問題,這是由於 PROMPT_COMMAND 造成的。我喜歡 xterm 的標題。所以我在 ~/.emacs_bash 中添加了以下行

export PROMPT_COMMAND=""

答案3

這可能與 emacs shell 與常規 shell 的終端類型有關。檢查TERM兩個 shell 中環境變數的設定。如果它們不同,那麼您應該能夠更改 emacs shell 終端類型或在 中為 emacs 終端類型使用不同的 PS1 定義.bashrc

您也可以嘗試M-x ansi-termansi-color-for-comint-mode-on如果您有顏色提示)。

答案4

這個問題在 stackoverflow 網站上得到了很好的答案。作者:丹尼爾·坡。

這是他的答案。

您可以使用支援顏色的 AnsiTerm,也可以為普通 shell 啟用 AnsiColor:

(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)

相關內容