Скинуть текст в терминал, работающий в 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.