Як виправити своє запит у режимі оболонки emacs?


13

Я займаюся деяким програмуванням на машині колеги. У нього є версія emacs (23.1.1), яку я раніше не використовував. Моя проблема полягає в тому, що коли я переходжу до оболонки, мій баш-рядок виглядає так:

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

Я PS1налаштувався на '[\u@\h]\$ 'своє .bashrc. Це має виглядати приблизно так:

[jay@socrates]$

Ось як це виглядає в звичайній оболонці. Я також перевірив, що PS1 встановлений на правильне значення в оболонці emacs, тому зараз я не маю ідеї. Як я можу запропонувати моєму підказку виглядати так, як я хочу?

Я бачив кілька пропозицій використовувати termабо eshellзамість цього shell. termмає таку ж швидку проблему, що і вище, і eshellповністю ігнорує мою, PS1так що насправді не допомагає.

Відповіді:


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, щоб зняти його, і це працює. Спасибі!
Джей Конрод

PROMPT_COMMAND вбив і мене. Я використовую MobaXTerm, і він має особливо складну підказку bash, яка була комбінацією PS1 і PROMPT_COMMAND.
Стів Броберг

5

Я зіткнувся з точно такою ж проблемою, і це пов’язано з PROMPT_COMMAND. Мені подобається назва xterm. Тому я додав наступний рядок у ~ / .emacs_bash

export PROMPT_COMMAND=""

2

Це може бути пов'язане з термінальним типом оболонки emacs та звичайною оболонкою. Перевірте, що встановлена TERMзмінна середовище в обох оболонках. Якщо вони різні, вам слід мати змогу змінити тип терміналу оболонки emacs або використовувати інше визначення PS1 для типу терміналу emacs в .bashrc.

Ви також можете спробувати M-x ansi-termansi-color-for-comint-mode-onякщо у вас є кольорові підказки).


1
ansi-color-for-comint-mode-on допоміг мені!
Користувач1

1

На це відповіли дуже добре на сайті stackoverflow. Даніель По.

Ось його відповідь.

Ви можете використовувати AnsiTerm, який підтримує кольори, або ввімкнути AnsiColor для звичайної оболонки:

(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.