9 Commits

Author SHA1 Message Date
53e4038065 Expand word delimiter characters 2017-02-05 12:31:09 -05:00
f93f6d7bd9 Disable bold fonts 2016-12-22 14:49:32 -05:00
0bfde9df6d Shut up about UTF-8 mouse mode (1005) from tmux 2016-12-22 14:48:32 -05:00
b1d4782674 Add my config.h
Adds customized font, selection word boundary character for tmux, and
decreases tab width to 4 spaces.
2016-12-22 14:48:32 -05:00
923cbdd9d1 Hide cursor when you start typing 2016-12-22 14:48:31 -05:00
a2940a5559 clipboard: Also copy to 'Ctrl-V' in addition to 'middleclick' clipboard 2016-12-22 14:48:31 -05:00
552d828ce0 solarized: Modify dark colors to Aaron's liking 2016-12-22 14:48:31 -05:00
b03129f569 solarized: Apply solarized-dark color theme 2016-12-22 14:48:31 -05:00
e3d2f4b5cc solarized: Disable lighting up bold colors
This is the equivalent of:
	URxvt.intensityStyles: false
2016-12-22 14:48:31 -05:00
13 changed files with 3061 additions and 2779 deletions

2
FAQ
View File

@ -6,7 +6,7 @@ Use the excellent tool of [utmp](http://git.suckless.org/utmp/) for this task.
It means that st doesnt have any terminfo entry on your system. Chances are It means that st doesnt have any terminfo entry on your system. Chances are
you did not `make install`. If you just want to test it without installing it, you did not `make install`. If you just want to test it without installing it,
you can manually run `tic -sx st.info`. you can manualy run `tic -sx st.info`.
## Nothing works, and nothing is said about an unknown terminal! ## Nothing works, and nothing is said about an unknown terminal!

View File

@ -1,16 +1,13 @@
MIT/X Consortium License MIT/X Consortium License
© 2014-2018 Hiltjo Posthuma <hiltjo at codemadness dot org>
© 2018 Devin J. Pohly <djpohly at gmail dot com>
© 2014-2017 Quentin Rameau <quinq at fifth dot space>
© 2009-2012 Aurélien APTEL <aurelien dot aptel at gmail dot com> © 2009-2012 Aurélien APTEL <aurelien dot aptel at gmail dot com>
© 2008-2017 Anselm R Garbe <garbeam at gmail dot com> © 2009 Anselm R Garbe <garbeam at gmail dot com>
© 2012-2017 Roberto E. Vargas Caballero <k0ga at shike2 dot com> © 2012-2016 Roberto E. Vargas Caballero <k0ga at shike2 dot com>
© 2012-2016 Christoph Lohmann <20h at r-36 dot net> © 2012-2016 Christoph Lohmann <20h at r-36 dot net>
© 2013 Eon S. Jeon <esjeon at hyunmu dot am> © 2013 Eon S. Jeon <esjeon at hyunmu dot am>
© 2013 Alexander Sedov <alex0player at gmail dot com> © 2013 Alexander Sedov <alex0player at gmail dot com>
© 2013 Mark Edgar <medgar123 at gmail dot com> © 2013 Mark Edgar <medgar123 at gmail dot com>
© 2013-2014 Eric Pruitt <eric.pruitt at gmail dot com> © 2013 Eric Pruitt <eric.pruitt at gmail dot com>
© 2013 Michael Forney <mforney at mforney dot org> © 2013 Michael Forney <mforney at mforney dot org>
© 2013-2014 Markus Teich <markus dot teich at stusta dot mhn dot de> © 2013-2014 Markus Teich <markus dot teich at stusta dot mhn dot de>
© 2014-2015 Laslo Hunhold <dev at frign dot de> © 2014-2015 Laslo Hunhold <dev at frign dot de>

View File

@ -1,57 +1,60 @@
# st - simple terminal # st - simple terminal
# See LICENSE file for copyright and license details. # See LICENSE file for copyright and license details.
.POSIX:
include config.mk include config.mk
SRC = st.c x.c SRC = st.c
OBJ = $(SRC:.c=.o) OBJ = ${SRC:.c=.o}
all: options st all: options st
options: options:
@echo st build options: @echo st build options:
@echo "CFLAGS = $(STCFLAGS)" @echo "CFLAGS = ${CFLAGS}"
@echo "LDFLAGS = $(STLDFLAGS)" @echo "LDFLAGS = ${LDFLAGS}"
@echo "CC = $(CC)" @echo "CC = ${CC}"
config.h: config.h:
cp config.def.h config.h cp config.def.h config.h
.c.o: .c.o:
$(CC) $(STCFLAGS) -c $< @echo CC $<
@${CC} -c ${CFLAGS} $<
st.o: config.h st.h win.h ${OBJ}: config.h config.mk
x.o: arg.h st.h win.h
$(OBJ): config.h config.mk st: ${OBJ}
@echo CC -o $@
st: $(OBJ) @${CC} -o $@ ${OBJ} ${LDFLAGS}
$(CC) -o $@ $(OBJ) $(STLDFLAGS)
clean: clean:
rm -f st $(OBJ) st-$(VERSION).tar.gz @echo cleaning
@rm -f st ${OBJ} st-${VERSION}.tar.gz
dist: clean dist: clean
mkdir -p st-$(VERSION) @echo creating dist tarball
cp -R FAQ LEGACY TODO LICENSE Makefile README config.mk\ @mkdir -p st-${VERSION}
config.def.h st.info st.1 arg.h st.h win.h $(SRC)\ @cp -R LICENSE Makefile README config.mk config.def.h st.info st.1 arg.h ${SRC} st-${VERSION}
st-$(VERSION) @tar -cf st-${VERSION}.tar st-${VERSION}
tar -cf - st-$(VERSION) | gzip > st-$(VERSION).tar.gz @gzip st-${VERSION}.tar
rm -rf st-$(VERSION) @rm -rf st-${VERSION}
install: st install: all
mkdir -p $(DESTDIR)$(PREFIX)/bin @echo installing executable file to ${DESTDIR}${PREFIX}/bin
cp -f st $(DESTDIR)$(PREFIX)/bin @mkdir -p ${DESTDIR}${PREFIX}/bin
chmod 755 $(DESTDIR)$(PREFIX)/bin/st @cp -f st ${DESTDIR}${PREFIX}/bin
mkdir -p $(DESTDIR)$(MANPREFIX)/man1 @chmod 755 ${DESTDIR}${PREFIX}/bin/st
sed "s/VERSION/$(VERSION)/g" < st.1 > $(DESTDIR)$(MANPREFIX)/man1/st.1 @echo installing manual page to ${DESTDIR}${MANPREFIX}/man1
chmod 644 $(DESTDIR)$(MANPREFIX)/man1/st.1 @mkdir -p ${DESTDIR}${MANPREFIX}/man1
tic -sx st.info @sed "s/VERSION/${VERSION}/g" < st.1 > ${DESTDIR}${MANPREFIX}/man1/st.1
@chmod 644 ${DESTDIR}${MANPREFIX}/man1/st.1
@echo Please see the README file regarding the terminfo entry of st. @echo Please see the README file regarding the terminfo entry of st.
@tic -sx st.info
uninstall: uninstall:
rm -f $(DESTDIR)$(PREFIX)/bin/st @echo removing executable file from ${DESTDIR}${PREFIX}/bin
rm -f $(DESTDIR)$(MANPREFIX)/man1/st.1 @rm -f ${DESTDIR}${PREFIX}/bin/st
@echo removing manual page from ${DESTDIR}${MANPREFIX}/man1
@rm -f ${DESTDIR}${MANPREFIX}/man1/st.1
.PHONY: all options clean dist install uninstall .PHONY: all options clean dist install uninstall

22
arg.h
View File

@ -21,30 +21,28 @@ extern char *argv0;
argc--;\ argc--;\
break;\ break;\
}\ }\
int i_;\ for (brk_ = 0, argv[0]++, argv_ = argv;\
for (i_ = 1, brk_ = 0, argv_ = argv;\ argv[0][0] && !brk_;\
argv[0][i_] && !brk_;\ argv[0]++) {\
i_++) {\
if (argv_ != argv)\ if (argv_ != argv)\
break;\ break;\
argc_ = argv[0][i_];\ argc_ = argv[0][0];\
switch (argc_) switch (argc_)
#define ARGEND }\ #define ARGEND }\
} }
#define ARGC() argc_ #define ARGC() argc_
#define EARGF(x) ((argv[0][i_+1] == '\0' && argv[1] == NULL)?\ #define EARGF(x) ((argv[0][1] == '\0' && argv[1] == NULL)?\
((x), abort(), (char *)0) :\ ((x), abort(), (char *)0) :\
(brk_ = 1, (argv[0][i_+1] != '\0')?\ (brk_ = 1, (argv[0][1] != '\0')?\
(&argv[0][i_+1]) :\ (&argv[0][1]) :\
(argc--, argv++, argv[0]))) (argc--, argv++, argv[0])))
#define ARGF() ((argv[0][i_+1] == '\0' && argv[1] == NULL)?\ #define ARGF() ((argv[0][1] == '\0' && argv[1] == NULL)?\
(char *)0 :\ (char *)0 :\
(brk_ = 1, (argv[0][i_+1] != '\0')?\ (brk_ = 1, (argv[0][1] != '\0')?\
(&argv[0][i_+1]) :\ (&argv[0][1]) :\
(argc--, argv++, argv[0]))) (argc--, argv++, argv[0])))
#endif #endif

View File

@ -5,7 +5,7 @@
* *
* font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
*/ */
static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true"; static char font[] = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
static int borderpx = 2; static int borderpx = 2;
/* /*
@ -16,12 +16,12 @@ static int borderpx = 2;
* 4: value of shell in /etc/passwd * 4: value of shell in /etc/passwd
* 5: value of shell in config.h * 5: value of shell in config.h
*/ */
static char *shell = "/bin/sh"; static char shell[] = "/bin/sh";
char *utmp = NULL; static char *utmp = NULL;
char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400"; static char stty_args[] = "stty raw pass8 nl -echo -iexten -cstopb 38400";
/* identification sequence returned in DA and DECID */ /* identification sequence returned in DA and DECID */
char *vtiden = "\033[?6c"; static char vtiden[] = "\033[?6c";
/* Kerning / character bounding-box multipliers */ /* Kerning / character bounding-box multipliers */
static float cwscale = 1.0; static float cwscale = 1.0;
@ -32,14 +32,14 @@ static float chscale = 1.0;
* *
* More advanced example: " `'\"()[]{}" * More advanced example: " `'\"()[]{}"
*/ */
char *worddelimiters = " "; static char worddelimiters[] = " ";
/* selection timeouts (in milliseconds) */ /* selection timeouts (in milliseconds) */
static unsigned int doubleclicktimeout = 300; static unsigned int doubleclicktimeout = 300;
static unsigned int tripleclicktimeout = 600; static unsigned int tripleclicktimeout = 600;
/* alt screens */ /* alt screens */
int allowaltscreen = 1; static int allowaltscreen = 1;
/* frames per second st should at maximum draw to the screen */ /* frames per second st should at maximum draw to the screen */
static unsigned int xfps = 120; static unsigned int xfps = 120;
@ -63,7 +63,7 @@ static unsigned int cursorthickness = 2;
static int bellvolume = 0; static int bellvolume = 0;
/* default TERM value */ /* default TERM value */
char *termname = "st-256color"; static char termname[] = "st-256color";
/* /*
* spaces per tab * spaces per tab
@ -80,35 +80,27 @@ char *termname = "st-256color";
* *
* stty tabs * stty tabs
*/ */
unsigned int tabspaces = 8; static unsigned int tabspaces = 8;
/* Terminal colors (16 first used in escape sequence) */ /* Terminal colors (16 first used in escape sequence) */
static const char *colorname[] = { static const char *colorname[] = {
/* 8 normal colors */ /* solarized dark */
"black", "#03171d", /* 0: black */
"red3", "#dc322f", /* 1: red */
"green3", "#859900", /* 2: green */
"yellow3", "#b58900", /* 3: yellow */
"blue2", "#268bd2", /* 4: blue */
"magenta3", "#d33682", /* 5: magenta */
"cyan3", "#2aa198", /* 6: cyan */
"gray90", "#eee8d5", /* 7: white */
"#001014", /* 8: brblack */
/* 8 bright colors */ "#cb4b16", /* 9: brred */
"gray50", "#586e75", /* 10: brgreen */
"red", "#657b83", /* 11: bryellow */
"green", "#839496", /* 12: brblue */
"yellow", "#6c71c4", /* 13: brmagenta*/
"#5c5cff", "#93a1a1", /* 14: brcyan */
"magenta", "#fdf6e3", /* 15: brwhite */
"cyan",
"white",
[255] = 0,
/* more colors can be added after 255 to use with DefaultXX */
"#cccccc",
"#555555",
}; };
@ -116,10 +108,10 @@ static const char *colorname[] = {
* Default colors (colorname index) * Default colors (colorname index)
* foreground, background, cursor, reverse cursor * foreground, background, cursor, reverse cursor
*/ */
unsigned int defaultfg = 7; static unsigned int defaultfg = 12;
unsigned int defaultbg = 0; static unsigned int defaultbg = 8;
static unsigned int defaultcs = 256; static unsigned int defaultcs = 14;
static unsigned int defaultrcs = 257; static unsigned int defaultrcs = 15;
/* /*
* Default shape of cursor * Default shape of cursor
@ -162,7 +154,6 @@ static MouseShortcut mshortcuts[] = {
/* Internal keyboard shortcuts. */ /* Internal keyboard shortcuts. */
#define MODKEY Mod1Mask #define MODKEY Mod1Mask
#define TERMMOD (ControlMask|ShiftMask)
static Shortcut shortcuts[] = { static Shortcut shortcuts[] = {
/* mask keysym function argument */ /* mask keysym function argument */
@ -170,14 +161,15 @@ static Shortcut shortcuts[] = {
{ ControlMask, XK_Print, toggleprinter, {.i = 0} }, { ControlMask, XK_Print, toggleprinter, {.i = 0} },
{ ShiftMask, XK_Print, printscreen, {.i = 0} }, { ShiftMask, XK_Print, printscreen, {.i = 0} },
{ XK_ANY_MOD, XK_Print, printsel, {.i = 0} }, { XK_ANY_MOD, XK_Print, printsel, {.i = 0} },
{ TERMMOD, XK_Prior, zoom, {.f = +1} }, { MODKEY|ShiftMask, XK_Prior, xzoom, {.f = +1} },
{ TERMMOD, XK_Next, zoom, {.f = -1} }, { MODKEY|ShiftMask, XK_Next, xzoom, {.f = -1} },
{ TERMMOD, XK_Home, zoomreset, {.f = 0} }, { MODKEY|ShiftMask, XK_Home, xzoomreset, {.f = 0} },
{ TERMMOD, XK_C, clipcopy, {.i = 0} }, { ShiftMask, XK_Insert, selpaste, {.i = 0} },
{ TERMMOD, XK_V, clippaste, {.i = 0} }, { MODKEY|ShiftMask, XK_Insert, clippaste, {.i = 0} },
{ TERMMOD, XK_Y, selpaste, {.i = 0} }, { MODKEY|ShiftMask, XK_C, clipcopy, {.i = 0} },
{ TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, { MODKEY|ShiftMask, XK_V, clippaste, {.i = 0} },
{ TERMMOD, XK_I, iso14755, {.i = 0} }, { MODKEY, XK_Num_Lock, numlock, {.i = 0} },
{ MODKEY, XK_Control_L, iso14755, {.i = 0} },
}; };
/* /*
@ -229,216 +221,219 @@ static uint forceselmod = ShiftMask;
* world. Please decide about changes wisely. * world. Please decide about changes wisely.
*/ */
static Key key[] = { static Key key[] = {
/* keysym mask string appkey appcursor */ /* keysym mask string appkey appcursor crlf */
{ XK_KP_Home, ShiftMask, "\033[2J", 0, -1}, { XK_KP_Home, ShiftMask, "\033[2J", 0, -1, 0},
{ XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1}, { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1, 0},
{ XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1}, { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1, 0},
{ XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1}, { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1, 0},
{ XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0}, { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0, 0},
{ XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1}, { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1, 0},
{ XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1}, { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1, 0},
{ XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0}, { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0, 0},
{ XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1}, { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1, 0},
{ XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1}, { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1, 0},
{ XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0}, { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0, 0},
{ XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1}, { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1, 0},
{ XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1}, { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1, 0},
{ XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0}, { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0, 0},
{ XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1}, { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1, 0},
{ XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1}, { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1, 0},
{ XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0}, { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0, 0},
{ XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0, 0},
{ XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0}, { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0, 0},
{ XK_KP_End, ControlMask, "\033[J", -1, 0}, { XK_KP_End, ControlMask, "\033[J", -1, 0, 0},
{ XK_KP_End, ControlMask, "\033[1;5F", +1, 0}, { XK_KP_End, ControlMask, "\033[1;5F", +1, 0, 0},
{ XK_KP_End, ShiftMask, "\033[K", -1, 0}, { XK_KP_End, ShiftMask, "\033[K", -1, 0, 0},
{ XK_KP_End, ShiftMask, "\033[1;2F", +1, 0}, { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0, 0},
{ XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0}, { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0, 0},
{ XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0}, { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0, 0},
{ XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0}, { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0, 0},
{ XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0}, { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0, 0},
{ XK_KP_Insert, ShiftMask, "\033[4l", -1, 0}, { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0, 0},
{ XK_KP_Insert, ControlMask, "\033[L", -1, 0}, { XK_KP_Insert, ControlMask, "\033[L", -1, 0, 0},
{ XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0}, { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0, 0},
{ XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0, 0},
{ XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0, 0},
{ XK_KP_Delete, ControlMask, "\033[M", -1, 0}, { XK_KP_Delete, ControlMask, "\033[M", -1, 0, 0},
{ XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0}, { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0, 0},
{ XK_KP_Delete, ShiftMask, "\033[2K", -1, 0}, { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0, 0},
{ XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0}, { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0, 0},
{ XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0}, { XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0, 0},
{ XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0, 0},
{ XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0}, { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0, 0},
{ XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0}, { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0, 0},
{ XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0}, { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0, 0},
{ XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0}, { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0, -1},
{ XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0}, { XK_KP_Enter, XK_ANY_MOD, "\r\n", -1, 0, +1},
{ XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0}, { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0, 0},
{ XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0}, { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0, 0},
{ XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0}, { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0, 0},
{ XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0}, { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0, 0},
{ XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0}, { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0, 0},
{ XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0}, { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0, 0},
{ XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0}, { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0, 0},
{ XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0}, { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0, 0},
{ XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0}, { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0, 0},
{ XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0}, { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0, 0},
{ XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0}, { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0, 0},
{ XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0}, { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0, 0},
{ XK_Up, ShiftMask, "\033[1;2A", 0, 0}, { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0, 0},
{ XK_Up, Mod1Mask, "\033[1;3A", 0, 0}, { XK_Up, ShiftMask, "\033[1;2A", 0, 0, 0},
{ XK_Up, ShiftMask|Mod1Mask,"\033[1;4A", 0, 0}, { XK_Up, Mod1Mask, "\033[1;3A", 0, 0, 0},
{ XK_Up, ControlMask, "\033[1;5A", 0, 0}, { XK_Up, ShiftMask|Mod1Mask,"\033[1;4A", 0, 0, 0},
{ XK_Up, ShiftMask|ControlMask,"\033[1;6A", 0, 0}, { XK_Up, ControlMask, "\033[1;5A", 0, 0, 0},
{ XK_Up, ControlMask|Mod1Mask,"\033[1;7A", 0, 0}, { XK_Up, ShiftMask|ControlMask,"\033[1;6A", 0, 0, 0},
{ XK_Up,ShiftMask|ControlMask|Mod1Mask,"\033[1;8A", 0, 0}, { XK_Up, ControlMask|Mod1Mask,"\033[1;7A", 0, 0, 0},
{ XK_Up, XK_ANY_MOD, "\033[A", 0, -1}, { XK_Up,ShiftMask|ControlMask|Mod1Mask,"\033[1;8A", 0, 0, 0},
{ XK_Up, XK_ANY_MOD, "\033OA", 0, +1}, { XK_Up, XK_ANY_MOD, "\033[A", 0, -1, 0},
{ XK_Down, ShiftMask, "\033[1;2B", 0, 0}, { XK_Up, XK_ANY_MOD, "\033OA", 0, +1, 0},
{ XK_Down, Mod1Mask, "\033[1;3B", 0, 0}, { XK_Down, ShiftMask, "\033[1;2B", 0, 0, 0},
{ XK_Down, ShiftMask|Mod1Mask,"\033[1;4B", 0, 0}, { XK_Down, Mod1Mask, "\033[1;3B", 0, 0, 0},
{ XK_Down, ControlMask, "\033[1;5B", 0, 0}, { XK_Down, ShiftMask|Mod1Mask,"\033[1;4B", 0, 0, 0},
{ XK_Down, ShiftMask|ControlMask,"\033[1;6B", 0, 0}, { XK_Down, ControlMask, "\033[1;5B", 0, 0, 0},
{ XK_Down, ControlMask|Mod1Mask,"\033[1;7B", 0, 0}, { XK_Down, ShiftMask|ControlMask,"\033[1;6B", 0, 0, 0},
{ XK_Down,ShiftMask|ControlMask|Mod1Mask,"\033[1;8B",0, 0}, { XK_Down, ControlMask|Mod1Mask,"\033[1;7B", 0, 0, 0},
{ XK_Down, XK_ANY_MOD, "\033[B", 0, -1}, { XK_Down,ShiftMask|ControlMask|Mod1Mask,"\033[1;8B",0, 0, 0},
{ XK_Down, XK_ANY_MOD, "\033OB", 0, +1}, { XK_Down, XK_ANY_MOD, "\033[B", 0, -1, 0},
{ XK_Left, ShiftMask, "\033[1;2D", 0, 0}, { XK_Down, XK_ANY_MOD, "\033OB", 0, +1, 0},
{ XK_Left, Mod1Mask, "\033[1;3D", 0, 0}, { XK_Left, ShiftMask, "\033[1;2D", 0, 0, 0},
{ XK_Left, ShiftMask|Mod1Mask,"\033[1;4D", 0, 0}, { XK_Left, Mod1Mask, "\033[1;3D", 0, 0, 0},
{ XK_Left, ControlMask, "\033[1;5D", 0, 0}, { XK_Left, ShiftMask|Mod1Mask,"\033[1;4D", 0, 0, 0},
{ XK_Left, ShiftMask|ControlMask,"\033[1;6D", 0, 0}, { XK_Left, ControlMask, "\033[1;5D", 0, 0, 0},
{ XK_Left, ControlMask|Mod1Mask,"\033[1;7D", 0, 0}, { XK_Left, ShiftMask|ControlMask,"\033[1;6D", 0, 0, 0},
{ XK_Left,ShiftMask|ControlMask|Mod1Mask,"\033[1;8D",0, 0}, { XK_Left, ControlMask|Mod1Mask,"\033[1;7D", 0, 0, 0},
{ XK_Left, XK_ANY_MOD, "\033[D", 0, -1}, { XK_Left,ShiftMask|ControlMask|Mod1Mask,"\033[1;8D",0, 0, 0},
{ XK_Left, XK_ANY_MOD, "\033OD", 0, +1}, { XK_Left, XK_ANY_MOD, "\033[D", 0, -1, 0},
{ XK_Right, ShiftMask, "\033[1;2C", 0, 0}, { XK_Left, XK_ANY_MOD, "\033OD", 0, +1, 0},
{ XK_Right, Mod1Mask, "\033[1;3C", 0, 0}, { XK_Right, ShiftMask, "\033[1;2C", 0, 0, 0},
{ XK_Right, ShiftMask|Mod1Mask,"\033[1;4C", 0, 0}, { XK_Right, Mod1Mask, "\033[1;3C", 0, 0, 0},
{ XK_Right, ControlMask, "\033[1;5C", 0, 0}, { XK_Right, ShiftMask|Mod1Mask,"\033[1;4C", 0, 0, 0},
{ XK_Right, ShiftMask|ControlMask,"\033[1;6C", 0, 0}, { XK_Right, ControlMask, "\033[1;5C", 0, 0, 0},
{ XK_Right, ControlMask|Mod1Mask,"\033[1;7C", 0, 0}, { XK_Right, ShiftMask|ControlMask,"\033[1;6C", 0, 0, 0},
{ XK_Right,ShiftMask|ControlMask|Mod1Mask,"\033[1;8C",0, 0}, { XK_Right, ControlMask|Mod1Mask,"\033[1;7C", 0, 0, 0},
{ XK_Right, XK_ANY_MOD, "\033[C", 0, -1}, { XK_Right,ShiftMask|ControlMask|Mod1Mask,"\033[1;8C",0, 0, 0},
{ XK_Right, XK_ANY_MOD, "\033OC", 0, +1}, { XK_Right, XK_ANY_MOD, "\033[C", 0, -1, 0},
{ XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0}, { XK_Right, XK_ANY_MOD, "\033OC", 0, +1, 0},
{ XK_Return, Mod1Mask, "\033\r", 0, 0}, { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0, 0},
{ XK_Return, XK_ANY_MOD, "\r", 0, 0}, { XK_Return, Mod1Mask, "\033\r", 0, 0, -1},
{ XK_Insert, ShiftMask, "\033[4l", -1, 0}, { XK_Return, Mod1Mask, "\033\r\n", 0, 0, +1},
{ XK_Insert, ShiftMask, "\033[2;2~", +1, 0}, { XK_Return, XK_ANY_MOD, "\r", 0, 0, -1},
{ XK_Insert, ControlMask, "\033[L", -1, 0}, { XK_Return, XK_ANY_MOD, "\r\n", 0, 0, +1},
{ XK_Insert, ControlMask, "\033[2;5~", +1, 0}, { XK_Insert, ShiftMask, "\033[4l", -1, 0, 0},
{ XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, { XK_Insert, ShiftMask, "\033[2;2~", +1, 0, 0},
{ XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, { XK_Insert, ControlMask, "\033[L", -1, 0, 0},
{ XK_Delete, ControlMask, "\033[M", -1, 0}, { XK_Insert, ControlMask, "\033[2;5~", +1, 0, 0},
{ XK_Delete, ControlMask, "\033[3;5~", +1, 0}, { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0, 0},
{ XK_Delete, ShiftMask, "\033[2K", -1, 0}, { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0, 0},
{ XK_Delete, ShiftMask, "\033[3;2~", +1, 0}, { XK_Delete, ControlMask, "\033[M", -1, 0, 0},
{ XK_Delete, XK_ANY_MOD, "\033[P", -1, 0}, { XK_Delete, ControlMask, "\033[3;5~", +1, 0, 0},
{ XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, { XK_Delete, ShiftMask, "\033[2K", -1, 0, 0},
{ XK_BackSpace, XK_NO_MOD, "\177", 0, 0}, { XK_Delete, ShiftMask, "\033[3;2~", +1, 0, 0},
{ XK_BackSpace, Mod1Mask, "\033\177", 0, 0}, { XK_Delete, XK_ANY_MOD, "\033[P", -1, 0, 0},
{ XK_Home, ShiftMask, "\033[2J", 0, -1}, { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0, 0},
{ XK_Home, ShiftMask, "\033[1;2H", 0, +1}, { XK_BackSpace, XK_NO_MOD, "\177", 0, 0, 0},
{ XK_Home, XK_ANY_MOD, "\033[H", 0, -1}, { XK_BackSpace, Mod1Mask, "\033\177", 0, 0, 0},
{ XK_Home, XK_ANY_MOD, "\033[1~", 0, +1}, { XK_Home, ShiftMask, "\033[2J", 0, -1, 0},
{ XK_End, ControlMask, "\033[J", -1, 0}, { XK_Home, ShiftMask, "\033[1;2H", 0, +1, 0},
{ XK_End, ControlMask, "\033[1;5F", +1, 0}, { XK_Home, XK_ANY_MOD, "\033[H", 0, -1, 0},
{ XK_End, ShiftMask, "\033[K", -1, 0}, { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1, 0},
{ XK_End, ShiftMask, "\033[1;2F", +1, 0}, { XK_End, ControlMask, "\033[J", -1, 0, 0},
{ XK_End, XK_ANY_MOD, "\033[4~", 0, 0}, { XK_End, ControlMask, "\033[1;5F", +1, 0, 0},
{ XK_Prior, ControlMask, "\033[5;5~", 0, 0}, { XK_End, ShiftMask, "\033[K", -1, 0, 0},
{ XK_Prior, ShiftMask, "\033[5;2~", 0, 0}, { XK_End, ShiftMask, "\033[1;2F", +1, 0, 0},
{ XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, { XK_End, XK_ANY_MOD, "\033[4~", 0, 0, 0},
{ XK_Next, ControlMask, "\033[6;5~", 0, 0}, { XK_Prior, ControlMask, "\033[5;5~", 0, 0, 0},
{ XK_Next, ShiftMask, "\033[6;2~", 0, 0}, { XK_Prior, ShiftMask, "\033[5;2~", 0, 0, 0},
{ XK_Next, XK_ANY_MOD, "\033[6~", 0, 0}, { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0, 0},
{ XK_F1, XK_NO_MOD, "\033OP" , 0, 0}, { XK_Next, ControlMask, "\033[6;5~", 0, 0, 0},
{ XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0}, { XK_Next, ShiftMask, "\033[6;2~", 0, 0, 0},
{ XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0}, { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0, 0},
{ XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0}, { XK_F1, XK_NO_MOD, "\033OP" , 0, 0, 0},
{ XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0}, { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0, 0},
{ XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0}, { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0, 0},
{ XK_F2, XK_NO_MOD, "\033OQ" , 0, 0}, { XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0, 0},
{ XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0}, { XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0, 0},
{ XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0}, { XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0, 0},
{ XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0}, { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0, 0},
{ XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0}, { XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0, 0},
{ XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0}, { XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0, 0},
{ XK_F3, XK_NO_MOD, "\033OR" , 0, 0}, { XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0, 0},
{ XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0}, { XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0, 0},
{ XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0}, { XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0, 0},
{ XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0}, { XK_F3, XK_NO_MOD, "\033OR" , 0, 0, 0},
{ XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0}, { XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0, 0},
{ XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0}, { XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0, 0},
{ XK_F4, XK_NO_MOD, "\033OS" , 0, 0}, { XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0, 0},
{ XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0}, { XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0, 0},
{ XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0}, { XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0, 0},
{ XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0}, { XK_F4, XK_NO_MOD, "\033OS" , 0, 0, 0},
{ XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0}, { XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0, 0},
{ XK_F5, XK_NO_MOD, "\033[15~", 0, 0}, { XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0, 0},
{ XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0}, { XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0, 0},
{ XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0}, { XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0, 0},
{ XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0}, { XK_F5, XK_NO_MOD, "\033[15~", 0, 0, 0},
{ XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0}, { XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0, 0},
{ XK_F6, XK_NO_MOD, "\033[17~", 0, 0}, { XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0, 0},
{ XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0}, { XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0, 0},
{ XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0}, { XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0, 0},
{ XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0}, { XK_F6, XK_NO_MOD, "\033[17~", 0, 0, 0},
{ XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0}, { XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0, 0},
{ XK_F7, XK_NO_MOD, "\033[18~", 0, 0}, { XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0, 0},
{ XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0}, { XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0, 0},
{ XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0}, { XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0, 0},
{ XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0}, { XK_F7, XK_NO_MOD, "\033[18~", 0, 0, 0},
{ XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0}, { XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0, 0},
{ XK_F8, XK_NO_MOD, "\033[19~", 0, 0}, { XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0, 0},
{ XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0}, { XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0, 0},
{ XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0}, { XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0, 0},
{ XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0}, { XK_F8, XK_NO_MOD, "\033[19~", 0, 0, 0},
{ XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0}, { XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0, 0},
{ XK_F9, XK_NO_MOD, "\033[20~", 0, 0}, { XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0, 0},
{ XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0}, { XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0, 0},
{ XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0}, { XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0, 0},
{ XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0}, { XK_F9, XK_NO_MOD, "\033[20~", 0, 0, 0},
{ XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0}, { XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0, 0},
{ XK_F10, XK_NO_MOD, "\033[21~", 0, 0}, { XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0, 0},
{ XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0}, { XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0, 0},
{ XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0}, { XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0, 0},
{ XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0}, { XK_F10, XK_NO_MOD, "\033[21~", 0, 0, 0},
{ XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0}, { XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0, 0},
{ XK_F11, XK_NO_MOD, "\033[23~", 0, 0}, { XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0, 0},
{ XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0}, { XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0, 0},
{ XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0}, { XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0, 0},
{ XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0}, { XK_F11, XK_NO_MOD, "\033[23~", 0, 0, 0},
{ XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0}, { XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0, 0},
{ XK_F12, XK_NO_MOD, "\033[24~", 0, 0}, { XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0, 0},
{ XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0}, { XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0, 0},
{ XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0}, { XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0, 0},
{ XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0}, { XK_F12, XK_NO_MOD, "\033[24~", 0, 0, 0},
{ XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0}, { XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0, 0},
{ XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0}, { XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0, 0},
{ XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0}, { XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0, 0},
{ XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0}, { XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0, 0},
{ XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0}, { XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0, 0},
{ XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0}, { XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0, 0},
{ XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0}, { XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0, 0},
{ XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0}, { XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0, 0},
{ XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0}, { XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0, 0},
{ XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0}, { XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0, 0},
{ XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0}, { XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0, 0},
{ XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0}, { XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0, 0},
{ XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0}, { XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0, 0},
{ XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0}, { XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0, 0},
{ XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0}, { XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0, 0},
{ XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0}, { XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0, 0},
{ XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0}, { XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0, 0},
{ XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0}, { XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0, 0},
{ XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0}, { XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0, 0},
{ XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0}, { XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0, 0},
{ XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0}, { XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0, 0},
{ XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0}, { XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0, 0},
{ XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0}, { XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0, 0},
{ XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0}, { XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0, 0},
{ XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0, 0},
{ XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0, 0},
{ XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0, 0},
}; };
/* /*
@ -460,3 +455,4 @@ static char ascii_printable[] =
" !\"#$%&'()*+,-./0123456789:;<=>?" " !\"#$%&'()*+,-./0123456789:;<=>?"
"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
"`abcdefghijklmnopqrstuvwxyz{|}~"; "`abcdefghijklmnopqrstuvwxyz{|}~";

458
config.h Normal file
View File

@ -0,0 +1,458 @@
/* See LICENSE file for copyright and license details. */
/*
* appearance
*
* font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
*/
static char font[] = "Inconsolata:size=10:antialias=true:hinting=true";
static int borderpx = 2;
/*
* What program is execed by st depends of these precedence rules:
* 1: program passed with -e
* 2: utmp option
* 3: SHELL environment variable
* 4: value of shell in /etc/passwd
* 5: value of shell in config.h
*/
static char shell[] = "/bin/sh";
static char *utmp = NULL;
static char stty_args[] = "stty raw pass8 nl -echo -iexten -cstopb 38400";
/* identification sequence returned in DA and DECID */
static char vtiden[] = "\033[?6c";
/* Kerning / character bounding-box multipliers */
static float cwscale = 1.0;
static float chscale = 1.0;
/*
* word delimiter string
*
* More advanced example: " `'\"()[]{}"
*/
static char worddelimiters[] = " │`'\"()[]{}";
/* selection timeouts (in milliseconds) */
static unsigned int doubleclicktimeout = 300;
static unsigned int tripleclicktimeout = 600;
/* alt screens */
static int allowaltscreen = 1;
/* frames per second st should at maximum draw to the screen */
static unsigned int xfps = 120;
static unsigned int actionfps = 30;
/*
* blinking timeout (set to 0 to disable blinking) for the terminal blinking
* attribute.
*/
static unsigned int blinktimeout = 800;
/*
* thickness of underline and bar cursors
*/
static unsigned int cursorthickness = 2;
/*
* bell volume. It must be a value between -100 and 100. Use 0 for disabling
* it
*/
static int bellvolume = 0;
/* default TERM value */
static char termname[] = "st-256color";
/*
* spaces per tab
*
* When you are changing this value, don't forget to adapt the »it« value in
* the st.info and appropriately install the st.info in the environment where
* you use this st version.
*
* it#$tabspaces,
*
* Secondly make sure your kernel is not expanding tabs. When running `stty
* -a` »tab0« should appear. You can tell the terminal to not expand tabs by
* running following command:
*
* stty tabs
*/
static unsigned int tabspaces = 4;
/* Terminal colors (16 first used in escape sequence) */
static const char *colorname[] = {
/* solarized dark */
"#03171d", /* 0: black */
"#dc322f", /* 1: red */
"#859900", /* 2: green */
"#b58900", /* 3: yellow */
"#268bd2", /* 4: blue */
"#d33682", /* 5: magenta */
"#2aa198", /* 6: cyan */
"#eee8d5", /* 7: white */
"#001014", /* 8: brblack */
"#cb4b16", /* 9: brred */
"#586e75", /* 10: brgreen */
"#657b83", /* 11: bryellow */
"#839496", /* 12: brblue */
"#6c71c4", /* 13: brmagenta*/
"#93a1a1", /* 14: brcyan */
"#fdf6e3", /* 15: brwhite */
};
/*
* Default colors (colorname index)
* foreground, background, cursor, reverse cursor
*/
static unsigned int defaultfg = 12;
static unsigned int defaultbg = 8;
static unsigned int defaultcs = 14;
static unsigned int defaultrcs = 15;
/*
* Default shape of cursor
* 2: Block ("█")
* 4: Underline ("_")
* 6: Bar ("|")
* 7: Snowman ("☃")
*/
static unsigned int cursorshape = 2;
/*
* Default columns and rows numbers
*/
static unsigned int cols = 80;
static unsigned int rows = 24;
/*
* Default colour and shape of the mouse cursor
*/
static unsigned int mouseshape = XC_xterm;
static unsigned int mousefg = 7;
static unsigned int mousebg = 0;
/*
* Color used to display font attributes when fontconfig selected a font which
* doesn't match the ones requested.
*/
static unsigned int defaultattr = 11;
/*
* Internal mouse shortcuts.
* Beware that overloading Button1 will disable the selection.
*/
static MouseShortcut mshortcuts[] = {
/* button mask string */
{ Button4, XK_ANY_MOD, "\031" },
{ Button5, XK_ANY_MOD, "\005" },
};
/* Internal keyboard shortcuts. */
#define MODKEY Mod1Mask
static Shortcut shortcuts[] = {
/* mask keysym function argument */
{ XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} },
{ ControlMask, XK_Print, toggleprinter, {.i = 0} },
{ ShiftMask, XK_Print, printscreen, {.i = 0} },
{ XK_ANY_MOD, XK_Print, printsel, {.i = 0} },
{ MODKEY|ShiftMask, XK_Prior, xzoom, {.f = +2} },
{ MODKEY|ShiftMask, XK_Next, xzoom, {.f = -2} },
{ MODKEY|ShiftMask, XK_Home, xzoomreset, {.f = 0} },
{ ShiftMask, XK_Insert, selpaste, {.i = 0} },
{ MODKEY|ShiftMask, XK_Insert, clippaste, {.i = 0} },
{ MODKEY|ShiftMask, XK_C, clipcopy, {.i = 0} },
{ MODKEY|ShiftMask, XK_V, clippaste, {.i = 0} },
{ MODKEY, XK_Num_Lock, numlock, {.i = 0} },
{ MODKEY, XK_Control_L, iso14755, {.i = 0} },
};
/*
* Special keys (change & recompile st.info accordingly)
*
* Mask value:
* * Use XK_ANY_MOD to match the key no matter modifiers state
* * Use XK_NO_MOD to match the key alone (no modifiers)
* appkey value:
* * 0: no value
* * > 0: keypad application mode enabled
* * = 2: term.numlock = 1
* * < 0: keypad application mode disabled
* appcursor value:
* * 0: no value
* * > 0: cursor application mode enabled
* * < 0: cursor application mode disabled
* crlf value
* * 0: no value
* * > 0: crlf mode is enabled
* * < 0: crlf mode is disabled
*
* Be careful with the order of the definitions because st searches in
* this table sequentially, so any XK_ANY_MOD must be in the last
* position for a key.
*/
/*
* If you want keys other than the X11 function keys (0xFD00 - 0xFFFF)
* to be mapped below, add them to this array.
*/
static KeySym mappedkeys[] = { -1 };
/*
* State bits to ignore when matching key or button events. By default,
* numlock (Mod2Mask) and keyboard layout (XK_SWITCH_MOD) are ignored.
*/
static uint ignoremod = Mod2Mask|XK_SWITCH_MOD;
/*
* Override mouse-select while mask is active (when MODE_MOUSE is set).
* Note that if you want to use ShiftMask with selmasks, set this to an other
* modifier, set to 0 to not use it.
*/
static uint forceselmod = ShiftMask;
/*
* This is the huge key array which defines all compatibility to the Linux
* world. Please decide about changes wisely.
*/
static Key key[] = {
/* keysym mask string appkey appcursor crlf */
{ XK_KP_Home, ShiftMask, "\033[2J", 0, -1, 0},
{ XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1, 0},
{ XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1, 0},
{ XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1, 0},
{ XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0, 0},
{ XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1, 0},
{ XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1, 0},
{ XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0, 0},
{ XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1, 0},
{ XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1, 0},
{ XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0, 0},
{ XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1, 0},
{ XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1, 0},
{ XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0, 0},
{ XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1, 0},
{ XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1, 0},
{ XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0, 0},
{ XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0, 0},
{ XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0, 0},
{ XK_KP_End, ControlMask, "\033[J", -1, 0, 0},
{ XK_KP_End, ControlMask, "\033[1;5F", +1, 0, 0},
{ XK_KP_End, ShiftMask, "\033[K", -1, 0, 0},
{ XK_KP_End, ShiftMask, "\033[1;2F", +1, 0, 0},
{ XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0, 0},
{ XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0, 0},
{ XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0, 0},
{ XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0, 0},
{ XK_KP_Insert, ShiftMask, "\033[4l", -1, 0, 0},
{ XK_KP_Insert, ControlMask, "\033[L", -1, 0, 0},
{ XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0, 0},
{ XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0, 0},
{ XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0, 0},
{ XK_KP_Delete, ControlMask, "\033[M", -1, 0, 0},
{ XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0, 0},
{ XK_KP_Delete, ShiftMask, "\033[2K", -1, 0, 0},
{ XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0, 0},
{ XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0, 0},
{ XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0, 0},
{ XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0, 0},
{ XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0, 0},
{ XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0, 0},
{ XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0, -1},
{ XK_KP_Enter, XK_ANY_MOD, "\r\n", -1, 0, +1},
{ XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0, 0},
{ XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0, 0},
{ XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0, 0},
{ XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0, 0},
{ XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0, 0},
{ XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0, 0},
{ XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0, 0},
{ XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0, 0},
{ XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0, 0},
{ XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0, 0},
{ XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0, 0},
{ XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0, 0},
{ XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0, 0},
{ XK_Up, ShiftMask, "\033[1;2A", 0, 0, 0},
{ XK_Up, Mod1Mask, "\033[1;3A", 0, 0, 0},
{ XK_Up, ShiftMask|Mod1Mask,"\033[1;4A", 0, 0, 0},
{ XK_Up, ControlMask, "\033[1;5A", 0, 0, 0},
{ XK_Up, ShiftMask|ControlMask,"\033[1;6A", 0, 0, 0},
{ XK_Up, ControlMask|Mod1Mask,"\033[1;7A", 0, 0, 0},
{ XK_Up,ShiftMask|ControlMask|Mod1Mask,"\033[1;8A", 0, 0, 0},
{ XK_Up, XK_ANY_MOD, "\033[A", 0, -1, 0},
{ XK_Up, XK_ANY_MOD, "\033OA", 0, +1, 0},
{ XK_Down, ShiftMask, "\033[1;2B", 0, 0, 0},
{ XK_Down, Mod1Mask, "\033[1;3B", 0, 0, 0},
{ XK_Down, ShiftMask|Mod1Mask,"\033[1;4B", 0, 0, 0},
{ XK_Down, ControlMask, "\033[1;5B", 0, 0, 0},
{ XK_Down, ShiftMask|ControlMask,"\033[1;6B", 0, 0, 0},
{ XK_Down, ControlMask|Mod1Mask,"\033[1;7B", 0, 0, 0},
{ XK_Down,ShiftMask|ControlMask|Mod1Mask,"\033[1;8B",0, 0, 0},
{ XK_Down, XK_ANY_MOD, "\033[B", 0, -1, 0},
{ XK_Down, XK_ANY_MOD, "\033OB", 0, +1, 0},
{ XK_Left, ShiftMask, "\033[1;2D", 0, 0, 0},
{ XK_Left, Mod1Mask, "\033[1;3D", 0, 0, 0},
{ XK_Left, ShiftMask|Mod1Mask,"\033[1;4D", 0, 0, 0},
{ XK_Left, ControlMask, "\033[1;5D", 0, 0, 0},
{ XK_Left, ShiftMask|ControlMask,"\033[1;6D", 0, 0, 0},
{ XK_Left, ControlMask|Mod1Mask,"\033[1;7D", 0, 0, 0},
{ XK_Left,ShiftMask|ControlMask|Mod1Mask,"\033[1;8D",0, 0, 0},
{ XK_Left, XK_ANY_MOD, "\033[D", 0, -1, 0},
{ XK_Left, XK_ANY_MOD, "\033OD", 0, +1, 0},
{ XK_Right, ShiftMask, "\033[1;2C", 0, 0, 0},
{ XK_Right, Mod1Mask, "\033[1;3C", 0, 0, 0},
{ XK_Right, ShiftMask|Mod1Mask,"\033[1;4C", 0, 0, 0},
{ XK_Right, ControlMask, "\033[1;5C", 0, 0, 0},
{ XK_Right, ShiftMask|ControlMask,"\033[1;6C", 0, 0, 0},
{ XK_Right, ControlMask|Mod1Mask,"\033[1;7C", 0, 0, 0},
{ XK_Right,ShiftMask|ControlMask|Mod1Mask,"\033[1;8C",0, 0, 0},
{ XK_Right, XK_ANY_MOD, "\033[C", 0, -1, 0},
{ XK_Right, XK_ANY_MOD, "\033OC", 0, +1, 0},
{ XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0, 0},
{ XK_Return, Mod1Mask, "\033\r", 0, 0, -1},
{ XK_Return, Mod1Mask, "\033\r\n", 0, 0, +1},
{ XK_Return, XK_ANY_MOD, "\r", 0, 0, -1},
{ XK_Return, XK_ANY_MOD, "\r\n", 0, 0, +1},
{ XK_Insert, ShiftMask, "\033[4l", -1, 0, 0},
{ XK_Insert, ShiftMask, "\033[2;2~", +1, 0, 0},
{ XK_Insert, ControlMask, "\033[L", -1, 0, 0},
{ XK_Insert, ControlMask, "\033[2;5~", +1, 0, 0},
{ XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0, 0},
{ XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0, 0},
{ XK_Delete, ControlMask, "\033[M", -1, 0, 0},
{ XK_Delete, ControlMask, "\033[3;5~", +1, 0, 0},
{ XK_Delete, ShiftMask, "\033[2K", -1, 0, 0},
{ XK_Delete, ShiftMask, "\033[3;2~", +1, 0, 0},
{ XK_Delete, XK_ANY_MOD, "\033[P", -1, 0, 0},
{ XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0, 0},
{ XK_BackSpace, XK_NO_MOD, "\177", 0, 0, 0},
{ XK_BackSpace, Mod1Mask, "\033\177", 0, 0, 0},
{ XK_Home, ShiftMask, "\033[2J", 0, -1, 0},
{ XK_Home, ShiftMask, "\033[1;2H", 0, +1, 0},
{ XK_Home, XK_ANY_MOD, "\033[H", 0, -1, 0},
{ XK_Home, XK_ANY_MOD, "\033[1~", 0, +1, 0},
{ XK_End, ControlMask, "\033[J", -1, 0, 0},
{ XK_End, ControlMask, "\033[1;5F", +1, 0, 0},
{ XK_End, ShiftMask, "\033[K", -1, 0, 0},
{ XK_End, ShiftMask, "\033[1;2F", +1, 0, 0},
{ XK_End, XK_ANY_MOD, "\033[4~", 0, 0, 0},
{ XK_Prior, ControlMask, "\033[5;5~", 0, 0, 0},
{ XK_Prior, ShiftMask, "\033[5;2~", 0, 0, 0},
{ XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0, 0},
{ XK_Next, ControlMask, "\033[6;5~", 0, 0, 0},
{ XK_Next, ShiftMask, "\033[6;2~", 0, 0, 0},
{ XK_Next, XK_ANY_MOD, "\033[6~", 0, 0, 0},
{ XK_F1, XK_NO_MOD, "\033OP" , 0, 0, 0},
{ XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0, 0},
{ XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0, 0},
{ XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0, 0},
{ XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0, 0},
{ XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0, 0},
{ XK_F2, XK_NO_MOD, "\033OQ" , 0, 0, 0},
{ XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0, 0},
{ XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0, 0},
{ XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0, 0},
{ XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0, 0},
{ XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0, 0},
{ XK_F3, XK_NO_MOD, "\033OR" , 0, 0, 0},
{ XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0, 0},
{ XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0, 0},
{ XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0, 0},
{ XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0, 0},
{ XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0, 0},
{ XK_F4, XK_NO_MOD, "\033OS" , 0, 0, 0},
{ XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0, 0},
{ XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0, 0},
{ XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0, 0},
{ XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0, 0},
{ XK_F5, XK_NO_MOD, "\033[15~", 0, 0, 0},
{ XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0, 0},
{ XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0, 0},
{ XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0, 0},
{ XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0, 0},
{ XK_F6, XK_NO_MOD, "\033[17~", 0, 0, 0},
{ XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0, 0},
{ XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0, 0},
{ XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0, 0},
{ XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0, 0},
{ XK_F7, XK_NO_MOD, "\033[18~", 0, 0, 0},
{ XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0, 0},
{ XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0, 0},
{ XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0, 0},
{ XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0, 0},
{ XK_F8, XK_NO_MOD, "\033[19~", 0, 0, 0},
{ XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0, 0},
{ XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0, 0},
{ XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0, 0},
{ XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0, 0},
{ XK_F9, XK_NO_MOD, "\033[20~", 0, 0, 0},
{ XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0, 0},
{ XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0, 0},
{ XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0, 0},
{ XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0, 0},
{ XK_F10, XK_NO_MOD, "\033[21~", 0, 0, 0},
{ XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0, 0},
{ XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0, 0},
{ XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0, 0},
{ XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0, 0},
{ XK_F11, XK_NO_MOD, "\033[23~", 0, 0, 0},
{ XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0, 0},
{ XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0, 0},
{ XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0, 0},
{ XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0, 0},
{ XK_F12, XK_NO_MOD, "\033[24~", 0, 0, 0},
{ XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0, 0},
{ XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0, 0},
{ XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0, 0},
{ XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0, 0},
{ XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0, 0},
{ XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0, 0},
{ XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0, 0},
{ XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0, 0},
{ XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0, 0},
{ XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0, 0},
{ XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0, 0},
{ XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0, 0},
{ XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0, 0},
{ XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0, 0},
{ XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0, 0},
{ XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0, 0},
{ XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0, 0},
{ XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0, 0},
{ XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0, 0},
{ XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0, 0},
{ XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0, 0},
{ XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0, 0},
{ XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0, 0},
{ XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0, 0},
{ XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0, 0},
{ XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0, 0},
{ XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0, 0},
};
/*
* Selection types' masks.
* Use the same masks as usual.
* Button1Mask is always unset, to make masks match between ButtonPress.
* ButtonRelease and MotionNotify.
* If no match is found, regular selection is used.
*/
static uint selmasks[] = {
[SEL_RECTANGULAR] = Mod1Mask,
};
/*
* Printable characters in ASCII, used to estimate the advance width
* of single wide characters.
*/
static char ascii_printable[] =
" !\"#$%&'()*+,-./0123456789:;<=>?"
"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
"`abcdefghijklmnopqrstuvwxyz{|}~";

View File

@ -1,28 +1,28 @@
# st version # st version
VERSION = 0.8.1 VERSION = 0.7
# Customize below to fit your system # Customize below to fit your system
# paths # paths
PREFIX = /usr/local PREFIX = /usr/local
MANPREFIX = $(PREFIX)/share/man MANPREFIX = ${PREFIX}/share/man
X11INC = /usr/X11R6/include X11INC = /usr/X11R6/include
X11LIB = /usr/X11R6/lib X11LIB = /usr/X11R6/lib
# includes and libs # includes and libs
INCS = -I$(X11INC) \ INCS = -I. -I/usr/include -I${X11INC} \
`pkg-config --cflags fontconfig` \ `pkg-config --cflags fontconfig` \
`pkg-config --cflags freetype2` `pkg-config --cflags freetype2`
LIBS = -L$(X11LIB) -lm -lrt -lX11 -lutil -lXft \ LIBS = -L/usr/lib -lc -L${X11LIB} -lm -lrt -lX11 -lutil -lXft \
`pkg-config --libs fontconfig` \ `pkg-config --libs fontconfig` \
`pkg-config --libs freetype2` `pkg-config --libs freetype2`
# flags # flags
CPPFLAGS = -DVERSION=\"$(VERSION)\" -D_XOPEN_SOURCE=600 CPPFLAGS = -DVERSION=\"${VERSION}\" -D_XOPEN_SOURCE=600
STCFLAGS = $(INCS) $(CPPFLAGS) $(CFLAGS) CFLAGS += -g -std=c99 -pedantic -Wall -Wvariadic-macros -Os ${INCS} ${CPPFLAGS}
STLDFLAGS = $(LIBS) $(LDFLAGS) LDFLAGS += -g ${LIBS}
# compiler and linker # compiler and linker
# CC = c99 # CC = cc

19
st.1
View File

@ -120,7 +120,7 @@ st executes
instead of the shell. If this is used it instead of the shell. If this is used it
.B must be the last option .B must be the last option
on the command line, as in xterm / rxvt. on the command line, as in xterm / rxvt.
This option is only intended for compatibility, This option is only intended for compability,
and all the remaining arguments are used as a command and all the remaining arguments are used as a command
even without it. even without it.
.SH SHORTCUTS .SH SHORTCUTS
@ -142,25 +142,28 @@ Print the full screen to the
Print the selection to the Print the selection to the
.I iofile. .I iofile.
.TP .TP
.B Ctrl-Shift-Page Up .B Alt-Shift-Page Up
Increase font size. Increase font size.
.TP .TP
.B Ctrl-Shift-Page Down .B Alt-Shift-Page Down
Decrease font size. Decrease font size.
.TP .TP
.B Ctrl-Shift-Home .B Alt-Shift-Home
Reset to default font size. Reset to default font size.
.TP .TP
.B Ctrl-Shift-y .B Shift-Insert
Paste from primary selection (middle mouse button). Paste from primary selection (middle mouse button).
.TP .TP
.B Ctrl-Shift-c .B Alt-Shift-Insert
Paste from clipboard selection.
.TP
.B Alt-Shift-c
Copy the selected text to the clipboard selection. Copy the selected text to the clipboard selection.
.TP .TP
.B Ctrl-Shift-v .B Alt-Shift-v
Paste from the clipboard selection. Paste from the clipboard selection.
.TP .TP
.B Ctrl-Shift-i .B Alt-Ctrl
Launch dmenu to enter a unicode codepoint and send the corresponding glyph Launch dmenu to enter a unicode codepoint and send the corresponding glyph
to st. to st.
.SH CUSTOMIZATION .SH CUSTOMIZATION

2613
st.c

File diff suppressed because it is too large Load Diff

123
st.h
View File

@ -1,123 +0,0 @@
/* See LICENSE for license details. */
#include <stdint.h>
#include <sys/types.h>
/* macros */
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#define MAX(a, b) ((a) < (b) ? (b) : (a))
#define LEN(a) (sizeof(a) / sizeof(a)[0])
#define BETWEEN(x, a, b) ((a) <= (x) && (x) <= (b))
#define DIVCEIL(n, d) (((n) + ((d) - 1)) / (d))
#define DEFAULT(a, b) (a) = (a) ? (a) : (b)
#define LIMIT(x, a, b) (x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x)
#define ATTRCMP(a, b) ((a).mode != (b).mode || (a).fg != (b).fg || \
(a).bg != (b).bg)
#define TIMEDIFF(t1, t2) ((t1.tv_sec-t2.tv_sec)*1000 + \
(t1.tv_nsec-t2.tv_nsec)/1E6)
#define MODBIT(x, set, bit) ((set) ? ((x) |= (bit)) : ((x) &= ~(bit)))
#define TRUECOLOR(r,g,b) (1 << 24 | (r) << 16 | (g) << 8 | (b))
#define IS_TRUECOL(x) (1 << 24 & (x))
enum glyph_attribute {
ATTR_NULL = 0,
ATTR_BOLD = 1 << 0,
ATTR_FAINT = 1 << 1,
ATTR_ITALIC = 1 << 2,
ATTR_UNDERLINE = 1 << 3,
ATTR_BLINK = 1 << 4,
ATTR_REVERSE = 1 << 5,
ATTR_INVISIBLE = 1 << 6,
ATTR_STRUCK = 1 << 7,
ATTR_WRAP = 1 << 8,
ATTR_WIDE = 1 << 9,
ATTR_WDUMMY = 1 << 10,
ATTR_BOLD_FAINT = ATTR_BOLD | ATTR_FAINT,
};
enum selection_mode {
SEL_IDLE = 0,
SEL_EMPTY = 1,
SEL_READY = 2
};
enum selection_type {
SEL_REGULAR = 1,
SEL_RECTANGULAR = 2
};
enum selection_snap {
SNAP_WORD = 1,
SNAP_LINE = 2
};
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
typedef unsigned short ushort;
typedef uint_least32_t Rune;
#define Glyph Glyph_
typedef struct {
Rune u; /* character code */
ushort mode; /* attribute flags */
uint32_t fg; /* foreground */
uint32_t bg; /* background */
} Glyph;
typedef Glyph *Line;
typedef union {
int i;
uint ui;
float f;
const void *v;
} Arg;
void die(const char *, ...);
void redraw(void);
void draw(void);
void iso14755(const Arg *);
void printscreen(const Arg *);
void printsel(const Arg *);
void sendbreak(const Arg *);
void toggleprinter(const Arg *);
int tattrset(int);
void tnew(int, int);
void tresize(int, int);
void tsetdirtattr(int);
void ttyhangup(void);
int ttynew(char *, char *, char *, char **);
size_t ttyread(void);
void ttyresize(int, int);
void ttywrite(const char *, size_t, int);
void resettitle(void);
void selclear(void);
void selinit(void);
void selstart(int, int, int);
void selextend(int, int, int, int);
int selected(int, int);
char *getsel(void);
size_t utf8encode(Rune, char *);
void *xmalloc(size_t);
void *xrealloc(void *, size_t);
char *xstrdup(char *);
/* config.h globals */
extern char *utmp;
extern char *stty_args;
extern char *vtiden;
extern char *worddelimiters;
extern int allowaltscreen;
extern char *termname;
extern unsigned int tabspaces;
extern unsigned int defaultfg;
extern unsigned int defaultbg;

11
st.info
View File

@ -25,7 +25,6 @@ st| simpleterm,
cuu=\E[%p1%dA, cuu=\E[%p1%dA,
dch=\E[%p1%dP, dch=\E[%p1%dP,
dch1=\E[P, dch1=\E[P,
dim=\E[2m,
dl=\E[%p1%dM, dl=\E[%p1%dM,
dl1=\E[M, dl1=\E[M,
ech=\E[%p1%dX, ech=\E[%p1%dX,
@ -143,6 +142,7 @@ st| simpleterm,
khome=\E[1~, khome=\E[1~,
kil1=\E[2;5~, kil1=\E[2;5~,
krmir=\E[2;2~, krmir=\E[2;2~,
kich1=\E[2~,
knp=\E[6~, knp=\E[6~,
kmous=\E[M, kmous=\E[M,
kpp=\E[5~, kpp=\E[5~,
@ -185,23 +185,16 @@ st| simpleterm,
tsl=\E]0;, tsl=\E]0;,
xenl, xenl,
vpa=\E[%i%p1%dd, vpa=\E[%i%p1%dd,
# XTerm extensions # Tmux unofficial extensions, see TERMINFO EXTENSIONS in tmux(1)
rmxx=\E[29m,
smxx=\E[9m,
# tmux extensions, see TERMINFO EXTENSIONS in tmux(1)
Se, Se,
Ss, Ss,
Tc, Tc,
Ms=\E]52;%p1%s;%p2%s\007,
st-256color| simpleterm with 256 colors, st-256color| simpleterm with 256 colors,
use=st, use=st,
ccc,
colors#256, colors#256,
oc=\E]104\007,
pairs#32767, pairs#32767,
# Nicked from xterm-256color # Nicked from xterm-256color
initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,
setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m, setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,
setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m, setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,

38
win.h
View File

@ -1,38 +0,0 @@
/* See LICENSE for license details. */
enum win_mode {
MODE_VISIBLE = 1 << 0,
MODE_FOCUSED = 1 << 1,
MODE_APPKEYPAD = 1 << 2,
MODE_MOUSEBTN = 1 << 3,
MODE_MOUSEMOTION = 1 << 4,
MODE_REVERSE = 1 << 5,
MODE_KBDLOCK = 1 << 6,
MODE_HIDE = 1 << 7,
MODE_APPCURSOR = 1 << 8,
MODE_MOUSESGR = 1 << 9,
MODE_8BIT = 1 << 10,
MODE_BLINK = 1 << 11,
MODE_FBLINK = 1 << 12,
MODE_FOCUS = 1 << 13,
MODE_MOUSEX10 = 1 << 14,
MODE_MOUSEMANY = 1 << 15,
MODE_BRCKTPASTE = 1 << 16,
MODE_NUMLOCK = 1 << 17,
MODE_MOUSE = MODE_MOUSEBTN|MODE_MOUSEMOTION|MODE_MOUSEX10\
|MODE_MOUSEMANY,
};
void xbell(void);
void xclipcopy(void);
void xdrawcursor(int, int, Glyph, int, int, Glyph);
void xdrawline(Line, int, int, int);
void xfinishdraw(void);
void xloadcols(void);
int xsetcolorname(int, const char *);
void xsettitle(char *);
int xsetcursor(int);
void xsetmode(int, unsigned int);
void xsetpointermotion(int);
void xsetsel(char *);
int xstartdraw(void);

1952
x.c

File diff suppressed because it is too large Load Diff