Получение Emacs ansi-term и Zsh для приятного воспроизведения
Я пытался использовать Zsh в моем сеансе emacs, без того, чтобы emacs переназначил все ключи Zsh. Я обнаружил, что для этого достаточно хорошо работает, но у меня все еще есть некоторые проблемы. Я получал много ненужных символов, выводимых с помощью, я смог это исправить с помощью:
## Setup proper term information for emacs ansi-term mode
[[ $TERM == eterm-color ]] && export TERM=xterm
Но все еще не работает идеально. Теперь у меня проблемы с выводом на экран, особенно при использовании чего-то вроде Cr для поиска.
Я обнаружил, что он работает нормально, если вы не измените размер окна. Я могу воспроизвести это как:
- Запустите чистый
emacs -q
- Запустите
ansi-term
и используйте zsh
- Сделать окно полноэкранным
- Выведите что-нибудь, что заполняет экран
- Тип C-r
- Приглашение будет с экрана
Может быть, есть какой-то способ увеличить пространство между выходом и минибуфером, чтобы компенсировать перерегулирование?
У кого-нибудь еще Zsh + Ansi-term работает нормально?
Ответы
Ответ 1
Попробуйте MultiTerm.
Это единственный режим терминала Emacs, который, похоже, отлично работает с zsh. Это позволяет вам легко установить, какие команды вы хотите захватить emacs и которые вы хотите перенаправить на терминал. Настройки по умолчанию для меня до сих пор были достаточно хорошими.
Кроме того, добавьте следующее в свой .zshrc, чтобы позволить emacs отслеживать текущий каталог, когда вы cd.
if [ -n "$INSIDE_EMACS" ]; then
chpwd() { print -P "\033AnSiTc %d" }
print -P "\033AnSiTu %n"
print -P "\033AnSiTc %d"
fi
Ответ 2
Хммм. Я не думаю, что когда-либо видел какие-либо причудливые работы по редактированию в течение ansi-term, хотя я не пробовал его через 20 лет. Я просто прошу, попутно, если вы попробовали shell-mode (оболочка M-x), так как это намного более естественно с EMACS.
Тем не менее, прочитав файл term.el, он выглядит как ansi-term, который делает много собственных манипуляций. вы можете посмотреть код сырого режима, начиная с строки 1230, по крайней мере, в EMACS 22.3.
Ответ 3
Я тоже долго искал это. Для меня добавление следующего в
;; ansi-term
(global-set-key "\C-x\C-a" '(lambda ()(interactive)(ansi-term "/bin/zsh")))
(global-set-key "\C-x\ a" '(lambda ()(interactive)(ansi-term "/bin/zsh")))
работает. Я выбрал это из
http://svn.assembla.com/svn/id774/scripts/dot_files/dot_emacs.d/elisp/global-set-key.el.
Я уверен, что в этом script есть и другие лакомства. Поскольку дополнительный бонусный экран, похоже, хорошо играет с emacs для меня.
Ответ 4
Я понял это. Это была проблема конфигурации emacs. Этот бит elisp в моем .emacs вызывал это:
(custom-set-variables
'(fringe-mode nil nil (fringe))
'(fringes-outside-margins t t))
Спасибо за помощь.
Ответ 5
Ложная тревога, которая не исправила. Я обнаружил, что он отлично работает, если вы не изменяете размер окна. Я могу воспроизвести его так:
- Запустите чистый emacs -q
- Запустите ansi-term и используйте zsh
- Сделать окно полноэкранным.
- Вывести то, что заполняет экран
- Тип C-r
- Приглашение будет отключено.
Возможно, есть способ сделать пространство между выводом и минибуфером больше, чтобы компенсировать перерегулирование?
Ответ 6
Используйте M-r для поиска истории команд в emacs, а не C-r