Скинуть текст в терминал, работающий в Emacs - PullRequest
11 голосов
/ 05 июня 2010

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

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

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

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

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

Ответы [ 3 ]

15 голосов
/ 05 июня 2010

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

Добавление:

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

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

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

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

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

1 голос
/ 17 августа 2010

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

0 голосов
/ 05 июня 2010

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

...