Получение Emacs ansi-term и Zsh для приятного воспроизведения

Я пытался использовать Zsh в моем сеансе emacs, без того, чтобы emacs переназначил все ключи Zsh. Я обнаружил, что для этого достаточно хорошо работает, но у меня все еще есть некоторые проблемы. Я получал много ненужных символов, выводимых с помощью, я смог это исправить с помощью:

## Setup proper term information for emacs ansi-term mode
[[ $TERM == eterm-color ]] && export TERM=xterm

Но все еще не работает идеально. Теперь у меня проблемы с выводом на экран, особенно при использовании чего-то вроде Cr для поиска.

Я обнаружил, что он работает нормально, если вы не измените размер окна. Я могу воспроизвести это как:

  1. Запустите чистый emacs -q
  2. Запустите ansi-term и используйте zsh
  3. Сделать окно полноэкранным
  4. Выведите что-нибудь, что заполняет экран
  5. Тип C-r
  6. Приглашение будет с экрана

Может быть, есть какой-то способ увеличить пространство между выходом и минибуфером, чтобы компенсировать перерегулирование?

У кого-нибудь еще 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