Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
A killer GNU Screen Config
# the following two lines give a two-line status, with the current window highlighted
hardstatus alwayslastline
hardstatus string '%{= kG}[%{G}%H%? %1`%?%{g}][%= %{= kw}%-w%{+b yk} %n*%t%?(%u)%? %{-}%+w %=%{g}][%{B}%m/%d %{W}%C%A%{g}]'
# huge scrollback buffer
defscrollback 5000
# no welcome message
startup_message off
# 256 colors
attrcolor b ".I"
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
defbce on
# mouse tracking allows to switch region focus by clicking
mousetrack on
# default windows
screen -t Shell1 1 bash
screen -t Shell2 2 bash
screen -t Python 3 python
screen -t Media 4 bash
select 0
bind c screen 1 # window numbering starts at 1 not 0
bind 0 select 10
# get rid of silly xoff stuff
bind s split
# layouts
layout autosave on
layout new one
select 1
layout new two
select 1
split
resize -v +8
focus down
select 4
focus up
layout new three
select 1
split
resize -v +7
focus down
select 3
split -v
resize -h +10
focus right
select 4
focus up
layout attach one
layout select one
# navigating regions with Ctrl-arrows
bindkey "^[[1;5D" focus left
bindkey "^[[1;5C" focus right
bindkey "^[[1;5A" focus up
bindkey "^[[1;5B" focus down
# switch windows with F3 (prev) and F4 (next)
bindkey "^[OR" prev
bindkey "^[OS" next
# switch layouts with Ctrl+F3 (prev layout) and Ctrl+F4 (next)
bindkey "^[O1;5R" layout prev
bindkey "^[O1;5S" layout next
# F2 puts Screen into resize mode. Resize regions using hjkl keys.
bindkey "^[OQ" eval "command -c rsz" # enter resize mode
# use hjkl keys to resize regions
bind -c rsz h eval "resize -h -5" "command -c rsz"
bind -c rsz j eval "resize -v -5" "command -c rsz"
bind -c rsz k eval "resize -v +5" "command -c rsz"
bind -c rsz l eval "resize -h +5" "command -c rsz"
# quickly switch between regions using tab and arrows
bind -c rsz \t eval "focus" "command -c rsz" # Tab
bind -c rsz -k kl eval "focus left" "command -c rsz" # Left
bind -c rsz -k kr eval "focus right" "command -c rsz" # Right
bind -c rsz -k ku eval "focus up" "command -c rsz" # Up
bind -c rsz -k kd eval "focus down" "command -c rsz" # Down
@syreal17
Copy link

syreal17 commented Feb 8, 2021

This is really great, thanks! Who knew screen could be so well-configured? XD

@fevisera
Copy link

fevisera commented Feb 14, 2021

Great configuration! Thanks!

I have just find out that lines 68 and 69 (Lines) won't work for me.

Instead of them, I had to conffigure ^[[1;5R and ^[[1;5S keys.

So, it would be:

bindkey "^[[1;5R" layout prev
bindkey "^[[1;5S" layout next

@mudhoney
Copy link

mudhoney commented Jul 10, 2021

Thanks a lot for the configuration!!!
I also use defutf8 on in my .screenrc, helps a lot if you need to work with utf8

@ifrantzis
Copy link

ifrantzis commented Oct 21, 2021

Instead of changing the window numbering to start at 1 I added
bind ` select 0
That key is left of 1 on my keyboard and allows Keyboard position to match the tabs in screen.

@hydrargyrum
Copy link

hydrargyrum commented Jun 3, 2022

@fevisera Tip: it's possible to bind F2 without using terminal-specific sequences, e.g. replace

bindkey "^[OQ" eval "command -c rsz" # enter resize mode

with

bindkey -k k2 eval "command -c rsz" # enter resize mode

because k2 is the termcap name for F2, see man termcap or man terminfo.
Every terminal will set its termcap and screen will use it, no need to hardcode the terminal-specific sequence.

Shift-F2 and Ctrl-F2 are less obvious but do exist in termcap/terminfo:

  • Shift-F2 is equivalent to F14 (F2 + 12 function keys), so is F4 in termcap (bindkey -k)
  • Ctrl-F2 is equivalent to F26 (F2 + 12 + 12 function keys), so is FG in termcap (bindkey -k)

Ctrl-Shift-F2 is F38 though, I don't know why.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment