Bagaimana cara memperbaiki prompt saya di mode shell emacs?

13

Saya sedang melakukan pemrograman pada mesin seorang kolega. Ia memiliki versi emacs (23.1.1) yang belum pernah saya gunakan sebelumnya. Masalah saya adalah ketika saya masuk ke mode shell, bash prompt saya terlihat seperti ini:

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

Saya telah PS1mengatur '[\u@\h]\$ 'di .bashrc. Seharusnya terlihat seperti ini:

[jay@socrates]$

Ini adalah tampilannya di shell biasa. Saya juga telah memeriksa bahwa PS1 diatur ke nilai yang benar di shell emacs, jadi sekarang saya kehabisan ide. Bagaimana saya bisa mendapatkan prompt saya untuk melihat apa yang saya inginkan?

Saya telah melihat beberapa saran untuk digunakan termatau eshellbukan shell. termmemiliki masalah prompt yang sama seperti di atas, dan eshellsepenuhnya mengabaikan saya PS1sehingga tidak terlalu membantu.

Jay Conrod
sumber

Jawaban:

13

Shell Anda sedang mencoba untuk mengatur judul / header XTerm (atau konsol lain). Ada beberapa cara yang mungkin dilakukan.

Pertama, pastikan PS1 benar-benar seperti yang Anda pikirkan

echo $PS1 | less -E

Itu akan memberi tahu Anda jika ada karakter kontrol di prompt, kurang akan membuat mereka terlihat lucu. Dengan asumsi prompt Anda persis seperti yang Anda katakan, maka itu mungkin variabel lingkungan PROMPT_COMMAND. Anda dapat melihatnya dengan cara yang sama ...

echo $PROMPT_COMMAND | less -E

Jika perintah prompt adalah masalahnya, maka Anda bisa menghapusnya. Dalam kedua kasus, variabel-variabel ini sedang diatur di suatu tempat, dan tidak boleh diatur untuk memperbarui header XTerm, jika Anda tidak berada di XTerm!

Anda dapat melihat di bashrc "standar" (/ etc / bashrc). Anda harus melihat kode yang memeriksa shell iteractive (adalah set PS1), dan kemudian memeriksa xterm (melihat variabel $ TERM), dan melakukan sesuatu yang berbeda di sana daripada jenis terminal lainnya.

Saya menduga di suatu tempat di inisialisasi bash adalah setup hard-coded, yang seharusnya hanya dilakukan pada program konsol yang kompatibel dengan xterm. Baca man bash untuk menemukan daftar total file yang dapat Anda cari dan lewati.

Jika semua hal di atas gagal, coba

printenv | less

Dan lihat apakah Anda dapat menemukan sesuatu yang mencurigakan di sana, dan kemudian melacak di mana ia sedang diatur. Posting di sini jika Anda tidak bisa menyelesaikannya.

Peter
sumber
1
PROMPT_COMMAND adalah masalahnya. Saya tidak yakin di mana pengaturannya, tetapi saya menambahkan baris ke ~ / .bashrc saya untuk menghapusnya, dan itu berhasil. Terima kasih!
Jay Conrod
PROMPT_COMMAND juga membunuh saya. Saya menggunakan MobaXTerm dan memiliki bash prompt yang sangat rumit yang merupakan kombinasi dari PS1 dan PROMPT_COMMAND.
Steve Broberg
5

Saya menemukan masalah yang sama persis dan itu karena PROMPT_COMMAND. Saya suka judul xterm. Jadi saya menambahkan baris berikut di ~ / .emacs_bash

export PROMPT_COMMAND=""
SG1
sumber
2

Mungkin ada hubungannya dengan jenis terminal dari shell emacs vs shell biasa Anda. Periksa TERMvariabel lingkungan diatur di kedua shell. Jika mereka berbeda maka Anda harus dapat mengubah tipe terminal shell emacs atau menggunakan definisi PS1 berbeda untuk tipe terminal emacs di .bashrc.

Anda juga dapat mencoba M-x ansi-term(dan ansi-color-for-comint-mode-onjika Anda memiliki permintaan warna).

luapyad
sumber
1
ansi-color-for-comint-mode-on membantu saya!
User1
1

Ini dijawab dengan sangat baik di situs stackoverflow. oleh Daniel Poe.

Inilah jawabannya.

Anda dapat menggunakan AnsiTerm yang mendukung warna atau Anda dapat mengaktifkan AnsiColor untuk shell normal:

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