Получение Emacs ansi-term и Zsh для приятной игры - PullRequest
16 голосов
/ 15 декабря 2008

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

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

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

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

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

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

У кого-нибудь еще Zsh + Ansi-term работает нормально?

Ответы [ 4 ]

13 голосов
/ 07 апреля 2012

Попробуйте MultiTerm .

Это единственный режим терминала Emacs, который хорошо работает с zsh. Он позволяет вам легко установить, какие команды вы хотите перехватить в emacs, и какие вы хотите направить на терминал. Настройки по умолчанию для меня пока достаточно хороши.

Кроме того, добавьте следующее в ваш .zshrc, чтобы позволить emacs отследить ваш текущий каталог, когда вы используете компакт-диск.

if [ -n "$INSIDE_EMACS" ]; then
  chpwd() { print -P "\033AnSiTc %d" }
  print -P "\033AnSiTu %n"
  print -P "\033AnSiTc %d"
fi
3 голосов
/ 15 декабря 2008

Хммм. Я не думаю, что я когда-либо видел какую-либо необычную работу по редактированию хорошо в течение одного семестра, хотя я не пробовал это возможно в течение 20 лет. Попробую попросту спросить, пробовали ли вы режим оболочки (оболочка M-x), так как в любом случае с EMACS это намного естественнее.

Тем не менее, читая файл term.el, похоже, что ansi-term сам по себе много управляет. Возможно, вы захотите взглянуть на код необработанного режима, начиная со строки 1230, по крайней мере, в EMACS 22.3.

1 голос
/ 21 мая 2010

Я тоже долго искал это. Для меня добавление следующего к

;; 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.

Я уверен, что в этом сценарии есть и другие вкусности. В качестве дополнительного бонуса мне кажется, что с emacs приятно играть.

0 голосов
/ 16 декабря 2008

Я понял это. Это была проблема конфигурации emacs. Этот бит elisp в моем .emacs вызывал его:

(custom-set-variables
 '(fringe-mode nil nil (fringe))
 '(fringes-outside-margins t t))

Спасибо за помощь.

...