Yanking text в терминал, работающий в Emacs

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

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

Я убил строку "дата" из одного буфера и вытащил ее в терминал в другом буфере и набрал return.

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

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

Ответ 1

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

Приложение:

Yanking текст, не выходя из режима char, немного сложнее; однако соответствующая функция term-paste (не yank, которая просто вставляет текст в буфер терминала, не отправляя его в нижний процесс). term-paste немедленно отправит самое последнее убийство в нижестоящий процесс, но не предоставляет возможности фантазии yank, к которой вы, вероятно, привыкли (например, 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)

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

Ответ 2

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

Ответ 3

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