8

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?

0

4 Answers 4

5

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.

1
  • And you can put in newlines with \n and the escape (for vim) with \033. I guess you can push anything in Commented Sep 21, 2016 at 15:40
6

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.

2
  • This is a great tip! Perfect for one-off stuff sessions. For example, I had a vim recording that wouldn't repeat for some reason. I could only get it to go by hitting @q again and again (even @@ didn't work.) Created a text file with "stuff @q" repeated 100 times, then sourced the file and away we went!
    – funroll
    Commented Aug 31, 2012 at 2:46
  • You can also add in "sleep 0.1" if you need to tweak the timing.
    – funroll
    Commented Aug 31, 2012 at 2:48
4

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).

1
  • 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
    Commented Apr 15, 2011 at 19:21
0

To create a split, change focus, and create new window with one command, put this in ~/.screenrc :

bind s eval "split" "focus down" "screen"

and use control-a s.

This uses eval as described in the manual.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .