I use the screen command line program in Linux all the time, and I looked through the man page but didn't find the answer to this (although maybe I just missed it):

What I want to do is have a single command that splits the current region, tabs to the new region, and opens a new screen in it. I hoped there was some way to maybe go into command (colon) mode and do something like split; focus down; screen but that doesn't work. Any ideas? Is it possible to maybe bind a series of commands to a single C-a binding?

link|improve this question

56% accept rate
Is bind not working for you? Something like bind ^s split focus down screen? – DaveParillo Jan 11 '10 at 22:59
split focus down screen (I also tried binding it to C-a e), gives an error: split: no arguments required. I've read through most of the man page again and still see no way to execute multiple commands series; there appears to be no macro or multiple-command capability. – dirtside Jan 11 '10 at 23:32
feedback

3 Answers

up vote 5 down vote accepted

Have you tried:

register s ^aS^i^ac
bindkey ^a,, process s

From the depths of the screen manual:

register [-e encoding] key string

Save the specified string to the register key. The encoding of the string can be specified via the -e option. See also the "paste" command.

and:

process [key]

Stuff the contents of the specified register into screen's input queue. If no argument is given you are prompted for a register name. The text is parsed as if it had been typed in from the user's keyboard. This command can be used to bind multiple actions to a single key.

link|improve this answer
feedback

Screen's command eval is handy for creating this kind of macros:

screen -X bind e eval split 'focus down' screen

Commands expecting arguments (like focus down) need to be quoted (single or double).

link|improve this answer
Thanks, your answer helped me to map ' ' such that I enter copy mode and immediately start the marking (to behave as if I typed '[ '). This is what I put into .screenrc: register s ' ' bind ' ' eval 'copy' 'process s' (register and bind being on separate lines). – haridsv Apr 15 '11 at 19:21
feedback

You could also arrange some files this way:

~/.myscreenmacro:

split
focus down
screen

~/.screenrc:

bind e source $HOME/.myscreenmacro

This is a little clearer than the other ways.

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.