Скинуть текст в терминал, работающий в Emacs

Я не могу вставить текст в терминал, работающий в Emacs.

Это моя процедура:

Я убил строку "date" из одного буфера и перетянул ее в терминал в другом буфере и нажал return.

Терминал ведет себя так, как будто я ничего не печатал. Он просто возвращает подсказку обратно.

Я использую OS X 10.5.8 и Emacs 23.1. Я пробовал эту процедуру на Aquamacs, Carbon Emacs и выпуске с http://emacsformacosx.com/. Все они показывают это странное поведение даже в своих конфигурациях по умолчанию с моим пустым файлом.emacs. Что может быть причиной этого?

3 ответа

Под "в терминале" я предполагаю, что вы имеете в виду, что вы используете встроенный в Emacs эмулятор терминала. Обычно эмулятор терминала передает большинство ключей в точности так, как они были введены в процесс оболочки. Введите Cc Cj в терминальном буфере, чтобы перевести его в состояние, в котором доступны обычные привязки клавиш Emacs. Вы увидите изменение строки режима с (Term: char run) в (Term: line run),

Приложение:

Дергать текст, не выходя из режима char, немного сложно; соответствующая функция, однако, term-paste (не yank, который просто вставляет текст в буфер терминала, не отправляя его в подчиненный процесс). term-paste немедленно отправит самое последнее уничтожение низшему процессу, но не предоставляет такую ​​функциональность, к которой вы, вероятно, привыкли (например, My для циклического повторения предыдущих убийств). Вы могли бы бежать term-paste как расширенная команда: Cc Mx term-paste RET.

Вероятно, самое простое решение - это просто временно перейти в линейный режим (Cc Cj), когда вам есть что вставить, а затем немедленно вернуться в режим char (Cc Ck). Или даже проще, просто оставайтесь в линейном режиме все время. Я часто делаю это, когда терминал подключен к сеансу Oracle SQL*Plus. Я редко замечаю разницу, но я получаю всевозможные удобные функции Emacs, такие как возможность набирать Mp для циклического выполнения длинного, ранее набранного оператора SQL.

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

(add-hook 'term-mode-hook 'term-line-mode)

... но это не работает для меня. Не знаю почему.

В буфере с запущенным терминалом переведите терминал в линейный режим с помощью C-c C-j, Чтобы вставить текст, нажмите S-Insert (это Shift-Insert). Если вам нужен терминал, чтобы потом вернуться в режим char, это C-c C-k,

Когда все остальное терпит неудачу, я просто выделяю текст и нажимаю Edit->Copy, затем щелкаю правой кнопкой мыши в другом буфере emacs и нажимаю paste.

Другие вопросы по тегам