views:

139

answers:

3

I am unable to yank text into a terminal running in Emacs.

This is my procedure:

I killed the string "date" from one buffer and yanked it into the terminal in another buffer and hit return.

The terminal behaves as if I typed nothing. It just returns the prompt back.

I am using OS X 10.5.8 and Emacs 23.1. I have tried this procedure on Aquamacs, Carbon Emacs, and the release from http://emacsformacosx.com/. They all show this weird behaviour even in their default configurations with my .emacs file empty. What could possibly be causing this?

+2  A: 

By "in a terminal" I assume you mean you're running Emacs's built-in terminal emulator. Ordinarily, the terminal emulator transmits most keys exactly as typed to the shell process. Type C-c C-j in the terminal buffer to put it into a state where ordinary Emacs key bindings are available. You'll see the mode line change from (Term: char run) to (Term: line run).

Addendum:

Yanking text without leaving char mode is a little tricky; the relevant function, however, is term-paste (not yank, which merely inserts the text into the terminal buffer without sending it to the inferior process). term-paste will immediately send the most recent kill to the inferior process, but doesn't provide the fancy yank functionality you're probably used to (like M-y to cycle through prior kills). You could run term-paste as an extended command: C-c M-x term-paste RET.

Probably the easiest solution is just to temporarily go into line mode (C-c C-j) when you have something to paste, and then immediately go back into char mode (C-c C-k). Or even easier, just stay in line mode all the time. I often do this when I have a terminal logged into an Oracle SQL*Plus session. I rarely notice the difference, but I get all sorts of convenient Emacs functionality, like being able to type M-p to cycle through a long, previously-typed SQL statement.

I would have assumed that you could always start off in line mode like this:

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

...but it doesn't work for me. Don't know why.

Sean
Is there a way to make the terminal emulator accept yanks without having the whole buffer be editable? Or is there a way to configure the terminal emulator to always start with `line run`.
hekevintran
A: 

When all else fails I just highlight the text and click Edit->Copy then right click in the other emacs buffer and click paste.

Khorkrak
The text goes into the buffer, but hitting return does not send it to the terminal. So it looks like everything is correct until you try to run the command and it doesn't do anything.
hekevintran
A: 

In the buffer with the terminal running, put the terminal into line mode with C-c C-j. To paste in your text, now press S-Insert (that's Shift-Insert). If you need the terminal to go back to char mode afterwards, it's C-c C-k.

Bryce Thomas