Làm cách nào để sửa lời nhắc của tôi trong chế độ shell emacs?


13

Tôi đang thực hiện một số chương trình trên máy của đồng nghiệp. Anh ta có một phiên bản emacs (23.1.1) mà tôi chưa từng sử dụng trước đây. Vấn đề của tôi là khi tôi chuyển sang chế độ shell, dấu nhắc bash của tôi trông như thế này:

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

Tôi đã PS1thiết lập '[\u@\h]\$ 'trong của tôi .bashrc. Nó được cho là trông như thế này:

[jay@socrates]$

Đây là cách nó trông trong một vỏ thông thường. Tôi cũng đã kiểm tra rằng PS1 được đặt thành giá trị chính xác trong vỏ emacs, vì vậy bây giờ tôi đã hết ý tưởng. Làm thế nào tôi có thể nhận được lời nhắc của mình để nhìn theo cách tôi muốn?

Tôi đã thấy một số gợi ý để sử dụng termhoặc eshellthay vì shell. termcó cùng một vấn đề nhanh chóng như trên và eshellhoàn toàn phớt lờ tôi PS1để điều đó không thực sự có ích.

Câu trả lời:


13

Shell của bạn đang cố gắng đặt tiêu đề / tiêu đề của XTerm (hoặc bảng điều khiển khác). Có một số cách điều này có thể được thực hiện.

Trước tiên hãy chắc chắn rằng PS1 thực sự là những gì bạn nghĩ

echo $PS1 | less -E

Điều đó sẽ cho bạn biết nếu có các ký tự điều khiển trong dấu nhắc, ít hơn sẽ làm cho chúng trông buồn cười. Giả sử lời nhắc của bạn chính xác như bạn nói, thì đó có thể là biến môi trường PROMPT_COMMAND. Bạn có thể nhìn theo cách tương tự ...

echo $PROMPT_COMMAND | less -E

Nếu lệnh prompt là vấn đề, thì bạn có thể bỏ đặt nó. Trong cả hai trường hợp, các biến này đang được thiết lập ở đâu đó và không nên được thiết lập để cập nhật tiêu đề XTerm, nếu bạn không ở trong Xterm!

Bạn có thể xem trong bashrc "tiêu chuẩn" (/ etc / bashrc). Bạn sẽ thấy mã kiểm tra trình bao iteractive (được đặt PS1), sau đó kiểm tra xterm (xem biến $ TERM) và thực hiện một số thứ khác ở đó so với các loại thiết bị đầu cuối khác.

Tôi nghi ngờ ở đâu đó trong khởi tạo bash là một thiết lập được mã hóa cứng, chỉ nên được thực hiện trên các chương trình giao diện điều khiển tương thích xterm. Đọc man bash để tìm tổng danh sách các tệp bạn có thể tìm và xem qua.

Nếu tất cả các cách trên đều thất bại, hãy thử

printenv | less

Và xem nếu bạn có thể tìm thấy một cái gì đó đáng ngờ trong đó, và sau đó theo dõi nơi nó đang được đặt. Đăng nó ở đây nếu bạn không thể làm việc đó.


1
PROMPT_COMMAND là vấn đề. Tôi không chắc nó được đặt ở đâu, nhưng tôi đã thêm một dòng vào ~ / .bashrc để bỏ đặt nó và nó hoạt động. Cảm ơn!
Jay Conrod

PROMPT_COMMAND cũng đang giết tôi. Tôi đang sử dụng MobaXTerm và nó có một dấu nhắc bash đặc biệt phức tạp, đó là sự kết hợp giữa PS1 và PROMPT_COMMAND.
Steve Broberg

5

Tôi đã gặp phải vấn đề chính xác tương tự và đó là do PROMPT_COMMAND. Tôi thích tiêu đề xterm. Vì vậy, tôi đã thêm dòng sau vào ~ / .emacs_bash

export PROMPT_COMMAND=""

2

Nó có thể là một cái gì đó để làm với loại thiết bị đầu cuối của vỏ emacs so với vỏ thông thường của bạn. Kiểm tra TERMbiến môi trường được đặt thành gì trong cả hai shell. Nếu chúng khác nhau thì bạn có thể thay đổi loại thiết bị đầu cuối vỏ emacs hoặc sử dụng định nghĩa PS1 khác cho loại thiết bị đầu cuối emacs trong .bashrc.

Bạn cũng có thể thử M-x ansi-term(và ansi-color-for-comint-mode-onnếu bạn có lời nhắc màu).


1
ansi-color-for-comint-mode-on đã giúp tôi!
dùng1

1

Điều này đã được trả lời rất tốt trên trang web stackoverflow. của Daniel Poe.

Đây là câu trả lời của anh ấy.

Bạn có thể sử dụng AnsiTerm có hỗ trợ màu hoặc bạn có thể bật AnsiColor cho hệ vỏ thông thường:

(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.