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

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

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

Я убил строку «date» из одного буфера, вставил ее в терминал в другом буфере и нажал «return».

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

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


person hekevintran    schedule 05.06.2010    source источник


Ответы (3)


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

Дополнение:

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

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

Я бы предположил, что вы всегда можете начать в линейном режиме следующим образом:

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

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

person Sean    schedule 05.06.2010
comment
Есть ли способ заставить эмулятор терминала принимать рывки без возможности редактирования всего буфера? Или есть способ настроить эмулятор терминала, чтобы он всегда начинался с line run. - person hekevintran; 05.06.2010
comment
Спасибо за C-c C-j. Emacs потрясающий! - person Raj; 02.05.2013

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

person Bryce Thomas    schedule 17.08.2010

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

person Khorkrak    schedule 05.06.2010
comment
Текст попадает в буфер, но нажатие return не отправляет его на терминал. Таким образом, похоже, что все правильно, пока вы не попытаетесь запустить команду, а она ничего не сделает. - person hekevintran; 05.06.2010