ฉันจะแก้ไขข้อความแจ้งของฉันในโหมดเชลล์ emacs ได้อย่างไร


13

ฉันกำลังเขียนโปรแกรมบนเครื่องของเพื่อนร่วมงาน เขามี emacs รุ่นหนึ่ง (23.1.1) ที่ฉันไม่เคยใช้มาก่อน ปัญหาของฉันคือเมื่อฉันไปที่โหมด shell bash prompt ของฉันจะเป็นดังนี้:

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

ฉันได้PS1ตั้งค่าให้ในของฉัน'[\u@\h]\$ ' .bashrcมันควรจะเป็นแบบนี้:

[jay@socrates]$

นี่คือลักษณะที่ปรากฏในเชลล์ปกติ ฉันได้ตรวจสอบด้วยว่า PS1 ถูกตั้งค่าเป็นค่าที่ถูกต้องในเชลล์ emacs ดังนั้นตอนนี้ฉันก็เลยคิดไม่ออก ฉันจะได้รับพรอมต์ของฉันเพื่อดูวิธีที่ฉันต้องการได้อย่างไร

ผมเคยเห็นคำแนะนำบางอย่างที่จะใช้termหรือแทนeshell มีปัญหาการแจ้งเตือนเช่นเดียวกับข้างต้นและละเว้นทั้งหมดของฉันที่ไม่ได้ช่วยจริงๆshelltermeshellPS1

คำตอบ:


13

เชลล์ของคุณพยายามตั้งชื่อ / ส่วนหัวของ XTerm (หรือคอนโซลอื่น) มีหลายวิธีที่อาจทำเช่นนี้

ก่อนอื่นตรวจสอบให้แน่ใจว่า PS1 นั้นเป็นสิ่งที่คุณคิดจริงๆ

echo $PS1 | less -E

นั่นจะบอกคุณว่ามีอักขระควบคุมในพรอมต์หรือไม่น้อยกว่าจะทำให้พวกเขาดูตลก สมมติว่าพรอมต์ของคุณตรงตามที่คุณพูดดังนั้นอาจเป็นตัวแปรสภาพแวดล้อมของ PROMPT_COMMAND คุณสามารถดูได้ด้วยวิธีเดียวกัน ...

echo $PROMPT_COMMAND | less -E

หากคำสั่งพรอมต์เป็นปัญหาคุณสามารถยกเลิกการตั้งค่าได้ ไม่ว่าในกรณีใดตัวแปรเหล่านี้จะถูกตั้งค่าไว้ที่ใดที่หนึ่งและไม่ควรตั้งค่าให้อัปเดตส่วนหัวของ XTerm หากคุณไม่ได้อยู่ใน XTerm!

คุณสามารถดูใน "มาตรฐาน" bashrc (/ etc / bashrc) คุณควรเห็นโค้ดที่ตรวจสอบเชลล์แบบวนซ้ำ (คือชุด PS1) จากนั้นตรวจสอบ xterm (ดูตัวแปร $ TERM) และทำสิ่งที่แตกต่างจากเทอร์มินัลประเภทอื่น

ฉันสงสัยว่าการเริ่มต้น bash นั้นเป็นการติดตั้งแบบฮาร์ดโค้ดซึ่งควรทำกับโปรแกรมคอนโซลที่เข้ากันได้กับ xterm เท่านั้น อ่าน man bash เพื่อค้นหารายการไฟล์ทั้งหมดที่คุณสามารถค้นหาได้

หากทั้งหมดข้างต้นล้มเหลวลอง

printenv | less

และดูว่าคุณสามารถค้นหาสิ่งที่น่าสงสัยในนั้นหรือไม่จากนั้นติดตามดูว่ามันถูกตั้งไว้ที่ใด โพสต์ไว้ที่นี่หากคุณไม่สามารถทำได้


1
PROMPT_COMMAND เป็นปัญหา ฉันไม่แน่ใจว่าจะเริ่มต้นที่ใด แต่ฉันเพิ่มบรรทัดใน ~ / .bashrc เพื่อยกเลิกการตั้งค่าและใช้งานได้ ขอบคุณ!
35414 Jay Conrod

PROMPT_COMMAND ก็ฆ่าฉันเช่นกัน ฉันใช้ MobaXTerm และมี bash prompt ที่ซับซ้อนเป็นพิเศษซึ่งเป็นการรวมกันของ PS1 และ PROMPT_COMMAND
Steve Broberg

5

ฉันเจอปัญหาเดียวกันที่แน่นอนและเป็นเพราะ PROMPT_COMMAND ฉันชอบชื่อ xterm ดังนั้นฉันจึงเพิ่มบรรทัดต่อไปนี้ใน ~ / .emacs_bash

export PROMPT_COMMAND=""

2

อาจเป็นเรื่องเกี่ยวกับชนิดเทอร์มินัลของ emacs shell และเชลล์ปกติของคุณ ตรวจสอบTERMตัวแปรสภาพแวดล้อมที่ตั้งค่าไว้ในทั้งสองเชลล์ หากมีความแตกต่างกันคุณควรจะสามารถเปลี่ยนประเภทเทอร์มินัลเชลล์ emacs หรือใช้ข้อกำหนด PS1 ที่แตกต่างกันสำหรับประเภทเทอร์มินัล emacs .bashrcมา

คุณสามารถลองM-x ansi-term(และansi-color-for-comint-mode-onถ้าคุณมีข้อความแจ้งสี)


1
ansi-color-for-comint-mode-on ช่วยฉันได้!
User1

1

นี่เป็นคำตอบที่ดีมากในไซต์ stackoverflow โดย Daniel Poe

นี่คือคำตอบของเขา

คุณสามารถใช้ AnsiTerm ซึ่งรองรับสีหรือคุณสามารถเปิดใช้งาน AnsiColor สำหรับเปลือกปกติ:

(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.