Compare commits
26
Commits
master
..
dccdd5397d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dccdd5397d | ||
|
|
797fdcfa45 | ||
|
|
36046d614f | ||
|
|
414cd21a1b | ||
|
|
ca50d03061 | ||
|
|
efa8e6b667 | ||
|
|
53bfbefa24 | ||
|
|
312d7e8f48 | ||
|
|
2788c027f8 | ||
|
|
965a87fa2d | ||
|
|
5c3900fb53 | ||
|
|
0f24ff5263 | ||
|
|
7ea7533f91 | ||
|
|
604b0c6f10 | ||
|
|
ad3598afbd | ||
|
|
f34e54b0d4 | ||
|
|
499f8bc1d0 | ||
|
|
2639054bbf | ||
|
|
b55750c2b0 | ||
|
|
6707a7fe91 | ||
|
|
066e1d364b | ||
|
|
ea29931305 | ||
|
|
01802617da | ||
|
|
ff4fd8469b | ||
|
|
7979ecf01c | ||
|
|
ccd0a6d220 |
No files matched your search
+3
-2
@@ -1,3 +1,4 @@
|
|||||||
|
st
|
||||||
*.o
|
*.o
|
||||||
|
*.orig
|
||||||
*.diff
|
*.rej
|
||||||
@@ -7,7 +7,13 @@ include config.mk
|
|||||||
SRC = st.c x.c hb.c
|
SRC = st.c x.c hb.c
|
||||||
OBJ = $(SRC:.c=.o)
|
OBJ = $(SRC:.c=.o)
|
||||||
|
|
||||||
all: st
|
all: options st
|
||||||
|
|
||||||
|
options:
|
||||||
|
@echo st build options:
|
||||||
|
@echo "CFLAGS = $(STCFLAGS)"
|
||||||
|
@echo "LDFLAGS = $(STLDFLAGS)"
|
||||||
|
@echo "CC = $(CC)"
|
||||||
|
|
||||||
config.h:
|
config.h:
|
||||||
cp config.def.h config.h
|
cp config.def.h config.h
|
||||||
@@ -25,7 +31,7 @@ st: $(OBJ)
|
|||||||
$(CC) -o $@ $(OBJ) $(STLDFLAGS)
|
$(CC) -o $@ $(OBJ) $(STLDFLAGS)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f st $(OBJ) st-$(VERSION).tar.gz
|
rm -f st $(OBJ) st-$(VERSION).tar.gz config.h
|
||||||
|
|
||||||
dist: clean
|
dist: clean
|
||||||
mkdir -p st-$(VERSION)
|
mkdir -p st-$(VERSION)
|
||||||
@@ -49,4 +55,4 @@ uninstall:
|
|||||||
rm -f $(DESTDIR)$(PREFIX)/bin/st
|
rm -f $(DESTDIR)$(PREFIX)/bin/st
|
||||||
rm -f $(DESTDIR)$(MANPREFIX)/man1/st.1
|
rm -f $(DESTDIR)$(MANPREFIX)/man1/st.1
|
||||||
|
|
||||||
.PHONY: all clean dist install uninstall
|
.PHONY: all options clean dist install uninstall
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
st - simple terminal
|
|
||||||
--------------------
|
|
||||||
st is a simple terminal emulator for X which sucks less.
|
|
||||||
|
|
||||||
|
|
||||||
Requirements
|
|
||||||
------------
|
|
||||||
In order to build st you need the Xlib header files.
|
|
||||||
|
|
||||||
|
|
||||||
Installation
|
|
||||||
------------
|
|
||||||
Edit config.mk to match your local setup (st is installed into
|
|
||||||
the /usr/local namespace by default).
|
|
||||||
|
|
||||||
Afterwards enter the following command to build and install st (if
|
|
||||||
necessary as root):
|
|
||||||
|
|
||||||
make clean install
|
|
||||||
|
|
||||||
|
|
||||||
Running st
|
|
||||||
----------
|
|
||||||
If you did not install st with make clean install, you must compile
|
|
||||||
the st terminfo entry with the following command:
|
|
||||||
|
|
||||||
tic -sx st.info
|
|
||||||
|
|
||||||
See the man page for additional details.
|
|
||||||
|
|
||||||
Credits
|
|
||||||
-------
|
|
||||||
Based on Aurélien APTEL <aurelien dot aptel at gmail dot com> bt source code.
|
|
||||||
|
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
# st - simple terminal
|
||||||
|
|
||||||
|
st is a simple terminal emulator for X which sucks less.
|
||||||
|
|
||||||
|
## Notes about this fork
|
||||||
|
|
||||||
|
This is a fork of st, the original repo can be found here: [https://git.suckless.org/st/](https://git.suckless.org/st/)
|
||||||
|
|
||||||
|
The original st webpage is here: [https://st.suckless.org/](https://st.suckless.org/)
|
||||||
|
|
||||||
|
### Available patches
|
||||||
|
|
||||||
|
* [Alpha](https://st.suckless.org/patches/alpha/) : This patch allows users to change the opacity of the background. Note that you need an X composite manager (e.g. compton, xcompmgr) to make this patch effective.
|
||||||
|
* [Clipboard](https://st.suckless.org/patches/clipboard/) : This trivial patch sets CLIPBOARD on selection.
|
||||||
|
* [font2](https://st.suckless.org/patches/font2/) : This patch allows to add spare font besides default.
|
||||||
|
* [Wide glyph](https://st.suckless.org/patches/glyph_wide_support/) : This patch allows to display the full glyph instead of it being cut off. See also [here](https://github.com/LukeSmithxyz/st/pull/349)
|
||||||
|
|
||||||
|
#### Colorscheme patch
|
||||||
|
The colorscheme patch is a custom patch, it is not the ones from [colorscheme](https://st.suckless.org/patches/colorschemes/)
|
||||||
|
It is `solarized.dark` exported from https://terminal.sexy with a different bg and fg color.
|
||||||
|
Also the `defaultfg`, `defaultbg` and `defaultcs` are not `static`s, otherwise it won't compile.
|
||||||
|
|
||||||
|
### Previous available patches
|
||||||
|
|
||||||
|
* [Fix Keyboard Input](https://st.suckless.org/patches/fix_keyboard_input/) : Add a few previously undefined keys.
|
||||||
|
Removed as this was used for additional keys for zooming.
|
||||||
|
|
||||||
|
### Applying/Removing Patches
|
||||||
|
Applying patches from this repository use:
|
||||||
|
|
||||||
|
- applied all at once without committing:
|
||||||
|
```
|
||||||
|
git apply patches/*
|
||||||
|
```
|
||||||
|
|
||||||
|
- applied as individual commits
|
||||||
|
```
|
||||||
|
git am patches/*
|
||||||
|
```
|
||||||
|
|
||||||
|
Applying patches from https://st.suckless.org/patches/ use:
|
||||||
|
```
|
||||||
|
# Add custom patch
|
||||||
|
patch -Np1 -i patches/custom.diff
|
||||||
|
or
|
||||||
|
patch < patch.diff
|
||||||
|
|
||||||
|
# Remove st-alpha-201806-16-0.81 patch
|
||||||
|
patch -R patches/st-alpha-20180616-0.8.1.diff
|
||||||
|
```
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
In order to build st you need the Xlib header files.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Edit config.mk to match your local setup (st is installed into
|
||||||
|
the /usr/local namespace by default).
|
||||||
|
|
||||||
|
Afterwards enter the following command to build and install st (if
|
||||||
|
necessary as root):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make clean install
|
||||||
|
```
|
||||||
|
|
||||||
|
## Running st
|
||||||
|
|
||||||
|
Start `st` from a launcher like dmenu or rofi.
|
||||||
|
|
||||||
|
If you did not install st with make clean install, you must compile
|
||||||
|
the st terminfo entry with the following command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
tic -sx st.info
|
||||||
|
```
|
||||||
|
|
||||||
|
See the man page for additional details.
|
||||||
|
|
||||||
|
### Keyboard Shortcuts
|
||||||
|
Action | Key Combination
|
||||||
|
--- | ---
|
||||||
|
Copy | `ctrl` + `shift` + `c`
|
||||||
|
Paste | `ctrl` + `shift` + `v`
|
||||||
|
Zoom In | `ctrl` + `shift` + `PageUp`
|
||||||
|
Zoom Out | `ctrl` + `shift` + `PageDown`
|
||||||
|
Reset Zoom | `ctrl` + `shift` + `Home`
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
* Forked from [https://st.suckless.org/](https://st.suckless.org/)
|
||||||
|
* Based on Aurélien APTEL aurelien.aptel@gmail.com bt source code.
|
||||||
+272
-267
@@ -5,12 +5,8 @@
|
|||||||
*
|
*
|
||||||
* font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
|
* font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
|
||||||
*/
|
*/
|
||||||
static char *font =
|
static char *font = "FiraCode Nerd Font Propo:pixelsize=13";
|
||||||
"JetBrainsMono NFP:pixelsize=15:antialias=true:autohint=true";
|
static int borderpx = 5;
|
||||||
static char *font2[] = {
|
|
||||||
"Noto Color Emoji:pixelsize=15:antialias=true:autohint=true",
|
|
||||||
};
|
|
||||||
static int borderpx = 2;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* What program is execed by st depends of these precedence rules:
|
* What program is execed by st depends of these precedence rules:
|
||||||
@@ -20,7 +16,7 @@ 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/bash";
|
static char *shell = "/bin/sh";
|
||||||
char *utmp = NULL;
|
char *utmp = NULL;
|
||||||
/* scroll program: to enable use a string like "scroll" */
|
/* scroll program: to enable use a string like "scroll" */
|
||||||
char *scroll = NULL;
|
char *scroll = NULL;
|
||||||
@@ -57,7 +53,7 @@ int allowwindowops = 0;
|
|||||||
* near minlatency, but it waits longer for slow updates to avoid partial draw.
|
* near minlatency, but it waits longer for slow updates to avoid partial draw.
|
||||||
* low minlatency will tear/flicker more, as it can "detect" idle too early.
|
* low minlatency will tear/flicker more, as it can "detect" idle too early.
|
||||||
*/
|
*/
|
||||||
static double minlatency = 2;
|
static double minlatency = 8;
|
||||||
static double maxlatency = 33;
|
static double maxlatency = 33;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -100,46 +96,47 @@ 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 */
|
/* 8 normal colors */
|
||||||
[0] = "#282828", /* hard contrast: #1d2021 / soft contrast: #32302f */
|
"#323437",
|
||||||
[1] = "#cc241d", /* red */
|
"#ff5454",
|
||||||
[2] = "#98971a", /* green */
|
"#8cc85f",
|
||||||
[3] = "#d79921", /* yellow */
|
"#e3c78a",
|
||||||
[4] = "#458588", /* blue */
|
"#80a0ff",
|
||||||
[5] = "#b16286", /* magenta */
|
"#d183e8",
|
||||||
[6] = "#689d6a", /* cyan */
|
"#79dac8",
|
||||||
[7] = "#a89984", /* white */
|
"#a1aab8",
|
||||||
[8] = "#928374", /* black */
|
"#7c8f8f",
|
||||||
[9] = "#fb4934", /* red */
|
"#ff5189",
|
||||||
[10] = "#b8bb26", /* green */
|
"#36c692",
|
||||||
[11] = "#fabd2f", /* yellow */
|
"#bfbf97",
|
||||||
[12] = "#83a598", /* blue */
|
"#74b2ff",
|
||||||
[13] = "#d3869b", /* magenta */
|
"#ae81ff",
|
||||||
[14] = "#8ec07c", /* cyan */
|
"#85dc85",
|
||||||
[15] = "#ebdbb2", /* white */
|
"#e2637f",
|
||||||
[255] = 0,
|
[255] = 0,
|
||||||
|
|
||||||
|
/* more colors can be added after 255 to use with DefaultXX */
|
||||||
|
"#272727",
|
||||||
|
"#f8f8f2",
|
||||||
|
"#080808",
|
||||||
|
"#eeeeee",
|
||||||
};
|
};
|
||||||
/*
|
/*
|
||||||
* Default colors (colorname index)
|
* Default colors (colorname index)
|
||||||
* foreground, background, cursor, reverse cursor
|
* foreground, background, cursor, reverse cursor
|
||||||
*/
|
*/
|
||||||
unsigned int defaultfg = 15;
|
unsigned int defaultfg = 259;
|
||||||
unsigned int defaultbg = 0;
|
unsigned int defaultbg = 256;
|
||||||
unsigned int defaultcs = 15;
|
unsigned int defaultcs = 257;
|
||||||
static unsigned int defaultrcs = 257;
|
static unsigned int defaultrcs = 257;
|
||||||
|
|
||||||
/* https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h4-Functions-using-CSI-_-ordered-by-the-final-character-lparen-s-rparen:CSI-Ps-SP-q.1D81
|
/*
|
||||||
* Default style of cursor
|
* Default shape of cursor
|
||||||
* 0: blinking block
|
* 2: Block ("█")
|
||||||
* 1: blinking block (default)
|
* 4: Underline ("_")
|
||||||
* 2: steady block ("█")
|
* 6: Bar ("|")
|
||||||
* 3: blinking underline
|
* 7: Snowman ("☃")
|
||||||
* 4: steady underline ("_")
|
|
||||||
* 5: blinking bar
|
|
||||||
* 6: steady bar ("|")
|
|
||||||
* 7: blinking st cursor
|
|
||||||
* 8: steady st cursor
|
|
||||||
*/
|
*/
|
||||||
static unsigned int cursorshape = 0;
|
static unsigned int cursorshape = 2;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Default columns and rows numbers
|
* Default columns and rows numbers
|
||||||
@@ -174,29 +171,36 @@ static uint forcemousemod = ShiftMask;
|
|||||||
*/
|
*/
|
||||||
static MouseShortcut mshortcuts[] = {
|
static MouseShortcut mshortcuts[] = {
|
||||||
/* mask button function argument release */
|
/* mask button function argument release */
|
||||||
{XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1},
|
{ ShiftMask, Button4, kscrollup, {.i = 1} },
|
||||||
{ShiftMask, Button4, kscrollup, {.i = 1}},
|
{ ShiftMask, Button5, kscrolldown, {.i = 1} },
|
||||||
{ShiftMask, Button5, kscrolldown, {.i = 1}},
|
{ XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 },
|
||||||
|
{ ShiftMask, Button4, ttysend, {.s = "\033[5;2~"} },
|
||||||
|
|
||||||
|
{ XK_ANY_MOD, Button4, ttysend, {.s = "\031"} },
|
||||||
|
{ XK_ANY_MOD, Button5, ttysend, {.s = "\033[6;2~"}, 0, -1 },
|
||||||
|
{ XK_ANY_MOD, Button5, ttysend, {.s = "\005"} },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Internal keyboard shortcuts. */
|
/* Internal keyboard shortcuts. */
|
||||||
#define MODKEY Mod1Mask
|
#define MODKEY Mod1Mask
|
||||||
#define TERMMOD (ControlMask | ShiftMask)
|
#define TERMMOD (ControlMask|ShiftMask)
|
||||||
|
|
||||||
static Shortcut shortcuts[] = {
|
static Shortcut shortcuts[] = {
|
||||||
/* mask keysym function argument */
|
/* mask keysym function argument */
|
||||||
{XK_ANY_MOD, XK_Break, sendbreak, {.i = 0}},
|
{ XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} },
|
||||||
{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} },
|
||||||
{ControlMask, XK_KP_Add, zoom, {.f = +1}},
|
{ ControlMask, XK_KP_Add, zoom, {.f = +1} },
|
||||||
{ControlMask, XK_minus, zoom, {.f = -1}},
|
{ ControlMask, XK_minus, zoom, {.f = -1} },
|
||||||
{TERMMOD, XK_Home, zoomreset, {.f = 0}},
|
{ TERMMOD, XK_Home, zoomreset, {.f = 0} },
|
||||||
{TERMMOD, XK_C, clipcopy, {.i = 0}},
|
{ TERMMOD, XK_C, clipcopy, {.i = 0} },
|
||||||
{TERMMOD, XK_V, clippaste, {.i = 0}},
|
{ TERMMOD, XK_V, clippaste, {.i = 0} },
|
||||||
{TERMMOD, XK_Y, selpaste, {.i = 0}},
|
{ TERMMOD, XK_Y, selpaste, {.i = 0} },
|
||||||
{ShiftMask, XK_Insert, selpaste, {.i = 0}},
|
{ ShiftMask, XK_Insert, selpaste, {.i = 0} },
|
||||||
{TERMMOD, XK_Num_Lock, numlock, {.i = 0}},
|
{ TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
|
||||||
|
{ ShiftMask, XK_Page_Up, kscrollup, {.i = -1} },
|
||||||
|
{ ShiftMask, XK_Page_Down, kscrolldown, {.i = -1} },
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -224,13 +228,13 @@ static Shortcut shortcuts[] = {
|
|||||||
* If you want keys other than the X11 function keys (0xFD00 - 0xFFFF)
|
* If you want keys other than the X11 function keys (0xFD00 - 0xFFFF)
|
||||||
* to be mapped below, add them to this array.
|
* to be mapped below, add them to this array.
|
||||||
*/
|
*/
|
||||||
static KeySym mappedkeys[] = {-1};
|
static KeySym mappedkeys[] = { -1 };
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* State bits to ignore when matching key or button events. By default,
|
* State bits to ignore when matching key or button events. By default,
|
||||||
* numlock (Mod2Mask) and keyboard layout (XK_SWITCH_MOD) are ignored.
|
* numlock (Mod2Mask) and keyboard layout (XK_SWITCH_MOD) are ignored.
|
||||||
*/
|
*/
|
||||||
static uint ignoremod = Mod2Mask | XK_SWITCH_MOD;
|
static uint ignoremod = Mod2Mask|XK_SWITCH_MOD;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is the huge key array which defines all compatibility to the Linux
|
* This is the huge key array which defines all compatibility to the Linux
|
||||||
@@ -238,215 +242,215 @@ static uint ignoremod = Mod2Mask | XK_SWITCH_MOD;
|
|||||||
*/
|
*/
|
||||||
static Key key[] = {
|
static Key key[] = {
|
||||||
/* keysym mask string appkey appcursor */
|
/* keysym mask string appkey appcursor */
|
||||||
{XK_KP_Home, ShiftMask, "\033[2J", 0, -1},
|
{ XK_KP_Home, ShiftMask, "\033[2J", 0, -1},
|
||||||
{XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1},
|
{ XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1},
|
||||||
{XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1},
|
{ XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1},
|
||||||
{XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1},
|
{ XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1},
|
||||||
{XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0},
|
{ XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0},
|
||||||
{XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1},
|
{ XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1},
|
||||||
{XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1},
|
{ XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1},
|
||||||
{XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0},
|
{ XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0},
|
||||||
{XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1},
|
{ XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1},
|
||||||
{XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1},
|
{ XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1},
|
||||||
{XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0},
|
{ XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0},
|
||||||
{XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1},
|
{ XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1},
|
||||||
{XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1},
|
{ XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1},
|
||||||
{XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0},
|
{ XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0},
|
||||||
{XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1},
|
{ XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1},
|
||||||
{XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1},
|
{ XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1},
|
||||||
{XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0},
|
{ XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0},
|
||||||
{XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
|
{ XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
|
||||||
{XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0},
|
{ XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0},
|
||||||
{XK_KP_End, ControlMask, "\033[J", -1, 0},
|
{ XK_KP_End, ControlMask, "\033[J", -1, 0},
|
||||||
{XK_KP_End, ControlMask, "\033[1;5F", +1, 0},
|
{ XK_KP_End, ControlMask, "\033[1;5F", +1, 0},
|
||||||
{XK_KP_End, ShiftMask, "\033[K", -1, 0},
|
{ XK_KP_End, ShiftMask, "\033[K", -1, 0},
|
||||||
{XK_KP_End, ShiftMask, "\033[1;2F", +1, 0},
|
{ XK_KP_End, ShiftMask, "\033[1;2F", +1, 0},
|
||||||
{XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0},
|
{ XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0},
|
||||||
{XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0},
|
{ XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0},
|
||||||
{XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0},
|
{ XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0},
|
||||||
{XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0},
|
{ XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0},
|
||||||
{XK_KP_Insert, ShiftMask, "\033[4l", -1, 0},
|
{ XK_KP_Insert, ShiftMask, "\033[4l", -1, 0},
|
||||||
{XK_KP_Insert, ControlMask, "\033[L", -1, 0},
|
{ XK_KP_Insert, ControlMask, "\033[L", -1, 0},
|
||||||
{XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0},
|
{ XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0},
|
||||||
{XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
|
{ XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
|
||||||
{XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
|
{ XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
|
||||||
{XK_KP_Delete, ControlMask, "\033[M", -1, 0},
|
{ XK_KP_Delete, ControlMask, "\033[M", -1, 0},
|
||||||
{XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0},
|
{ XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0},
|
||||||
{XK_KP_Delete, ShiftMask, "\033[2K", -1, 0},
|
{ XK_KP_Delete, ShiftMask, "\033[2K", -1, 0},
|
||||||
{XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0},
|
{ XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0},
|
||||||
{XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0},
|
{ XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0},
|
||||||
{XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
|
{ XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
|
||||||
{XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0},
|
{ XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0},
|
||||||
{XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0},
|
{ XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0},
|
||||||
{XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0},
|
{ XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0},
|
||||||
{XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0},
|
{ XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0},
|
||||||
{XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0},
|
{ XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0},
|
||||||
{XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0},
|
{ XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0},
|
||||||
{XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0},
|
{ XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0},
|
||||||
{XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0},
|
{ XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0},
|
||||||
{XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0},
|
{ XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0},
|
||||||
{XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0},
|
{ XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0},
|
||||||
{XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0},
|
{ XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0},
|
||||||
{XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0},
|
{ XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0},
|
||||||
{XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0},
|
{ XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0},
|
||||||
{XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0},
|
{ XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0},
|
||||||
{XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0},
|
{ XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0},
|
||||||
{XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0},
|
{ XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0},
|
||||||
{XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0},
|
{ XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0},
|
||||||
{XK_Up, ShiftMask, "\033[1;2A", 0, 0},
|
{ XK_Up, ShiftMask, "\033[1;2A", 0, 0},
|
||||||
{XK_Up, Mod1Mask, "\033[1;3A", 0, 0},
|
{ XK_Up, Mod1Mask, "\033[1;3A", 0, 0},
|
||||||
{XK_Up, ShiftMask | Mod1Mask, "\033[1;4A", 0, 0},
|
{ XK_Up, ShiftMask|Mod1Mask,"\033[1;4A", 0, 0},
|
||||||
{XK_Up, ControlMask, "\033[1;5A", 0, 0},
|
{ XK_Up, ControlMask, "\033[1;5A", 0, 0},
|
||||||
{XK_Up, ShiftMask | ControlMask, "\033[1;6A", 0, 0},
|
{ XK_Up, ShiftMask|ControlMask,"\033[1;6A", 0, 0},
|
||||||
{XK_Up, ControlMask | Mod1Mask, "\033[1;7A", 0, 0},
|
{ XK_Up, ControlMask|Mod1Mask,"\033[1;7A", 0, 0},
|
||||||
{XK_Up, ShiftMask | ControlMask | Mod1Mask, "\033[1;8A", 0, 0},
|
{ XK_Up,ShiftMask|ControlMask|Mod1Mask,"\033[1;8A", 0, 0},
|
||||||
{XK_Up, XK_ANY_MOD, "\033[A", 0, -1},
|
{ XK_Up, XK_ANY_MOD, "\033[A", 0, -1},
|
||||||
{XK_Up, XK_ANY_MOD, "\033OA", 0, +1},
|
{ XK_Up, XK_ANY_MOD, "\033OA", 0, +1},
|
||||||
{XK_Down, ShiftMask, "\033[1;2B", 0, 0},
|
{ XK_Down, ShiftMask, "\033[1;2B", 0, 0},
|
||||||
{XK_Down, Mod1Mask, "\033[1;3B", 0, 0},
|
{ XK_Down, Mod1Mask, "\033[1;3B", 0, 0},
|
||||||
{XK_Down, ShiftMask | Mod1Mask, "\033[1;4B", 0, 0},
|
{ XK_Down, ShiftMask|Mod1Mask,"\033[1;4B", 0, 0},
|
||||||
{XK_Down, ControlMask, "\033[1;5B", 0, 0},
|
{ XK_Down, ControlMask, "\033[1;5B", 0, 0},
|
||||||
{XK_Down, ShiftMask | ControlMask, "\033[1;6B", 0, 0},
|
{ XK_Down, ShiftMask|ControlMask,"\033[1;6B", 0, 0},
|
||||||
{XK_Down, ControlMask | Mod1Mask, "\033[1;7B", 0, 0},
|
{ XK_Down, ControlMask|Mod1Mask,"\033[1;7B", 0, 0},
|
||||||
{XK_Down, ShiftMask | ControlMask | Mod1Mask, "\033[1;8B", 0, 0},
|
{ XK_Down,ShiftMask|ControlMask|Mod1Mask,"\033[1;8B",0, 0},
|
||||||
{XK_Down, XK_ANY_MOD, "\033[B", 0, -1},
|
{ XK_Down, XK_ANY_MOD, "\033[B", 0, -1},
|
||||||
{XK_Down, XK_ANY_MOD, "\033OB", 0, +1},
|
{ XK_Down, XK_ANY_MOD, "\033OB", 0, +1},
|
||||||
{XK_Left, ShiftMask, "\033[1;2D", 0, 0},
|
{ XK_Left, ShiftMask, "\033[1;2D", 0, 0},
|
||||||
{XK_Left, Mod1Mask, "\033[1;3D", 0, 0},
|
{ XK_Left, Mod1Mask, "\033[1;3D", 0, 0},
|
||||||
{XK_Left, ShiftMask | Mod1Mask, "\033[1;4D", 0, 0},
|
{ XK_Left, ShiftMask|Mod1Mask,"\033[1;4D", 0, 0},
|
||||||
{XK_Left, ControlMask, "\033[1;5D", 0, 0},
|
{ XK_Left, ControlMask, "\033[1;5D", 0, 0},
|
||||||
{XK_Left, ShiftMask | ControlMask, "\033[1;6D", 0, 0},
|
{ XK_Left, ShiftMask|ControlMask,"\033[1;6D", 0, 0},
|
||||||
{XK_Left, ControlMask | Mod1Mask, "\033[1;7D", 0, 0},
|
{ XK_Left, ControlMask|Mod1Mask,"\033[1;7D", 0, 0},
|
||||||
{XK_Left, ShiftMask | ControlMask | Mod1Mask, "\033[1;8D", 0, 0},
|
{ XK_Left,ShiftMask|ControlMask|Mod1Mask,"\033[1;8D",0, 0},
|
||||||
{XK_Left, XK_ANY_MOD, "\033[D", 0, -1},
|
{ XK_Left, XK_ANY_MOD, "\033[D", 0, -1},
|
||||||
{XK_Left, XK_ANY_MOD, "\033OD", 0, +1},
|
{ XK_Left, XK_ANY_MOD, "\033OD", 0, +1},
|
||||||
{XK_Right, ShiftMask, "\033[1;2C", 0, 0},
|
{ XK_Right, ShiftMask, "\033[1;2C", 0, 0},
|
||||||
{XK_Right, Mod1Mask, "\033[1;3C", 0, 0},
|
{ XK_Right, Mod1Mask, "\033[1;3C", 0, 0},
|
||||||
{XK_Right, ShiftMask | Mod1Mask, "\033[1;4C", 0, 0},
|
{ XK_Right, ShiftMask|Mod1Mask,"\033[1;4C", 0, 0},
|
||||||
{XK_Right, ControlMask, "\033[1;5C", 0, 0},
|
{ XK_Right, ControlMask, "\033[1;5C", 0, 0},
|
||||||
{XK_Right, ShiftMask | ControlMask, "\033[1;6C", 0, 0},
|
{ XK_Right, ShiftMask|ControlMask,"\033[1;6C", 0, 0},
|
||||||
{XK_Right, ControlMask | Mod1Mask, "\033[1;7C", 0, 0},
|
{ XK_Right, ControlMask|Mod1Mask,"\033[1;7C", 0, 0},
|
||||||
{XK_Right, ShiftMask | ControlMask | Mod1Mask, "\033[1;8C", 0, 0},
|
{ XK_Right,ShiftMask|ControlMask|Mod1Mask,"\033[1;8C",0, 0},
|
||||||
{XK_Right, XK_ANY_MOD, "\033[C", 0, -1},
|
{ XK_Right, XK_ANY_MOD, "\033[C", 0, -1},
|
||||||
{XK_Right, XK_ANY_MOD, "\033OC", 0, +1},
|
{ XK_Right, XK_ANY_MOD, "\033OC", 0, +1},
|
||||||
{XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0},
|
{ XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0},
|
||||||
{XK_Return, Mod1Mask, "\033\r", 0, 0},
|
{ XK_Return, Mod1Mask, "\033\r", 0, 0},
|
||||||
{XK_Return, XK_ANY_MOD, "\r", 0, 0},
|
{ XK_Return, XK_ANY_MOD, "\r", 0, 0},
|
||||||
{XK_Insert, ShiftMask, "\033[4l", -1, 0},
|
{ XK_Insert, ShiftMask, "\033[4l", -1, 0},
|
||||||
{XK_Insert, ShiftMask, "\033[2;2~", +1, 0},
|
{ XK_Insert, ShiftMask, "\033[2;2~", +1, 0},
|
||||||
{XK_Insert, ControlMask, "\033[L", -1, 0},
|
{ XK_Insert, ControlMask, "\033[L", -1, 0},
|
||||||
{XK_Insert, ControlMask, "\033[2;5~", +1, 0},
|
{ XK_Insert, ControlMask, "\033[2;5~", +1, 0},
|
||||||
{XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
|
{ XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
|
||||||
{XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
|
{ XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
|
||||||
{XK_Delete, ControlMask, "\033[M", -1, 0},
|
{ XK_Delete, ControlMask, "\033[M", -1, 0},
|
||||||
{XK_Delete, ControlMask, "\033[3;5~", +1, 0},
|
{ XK_Delete, ControlMask, "\033[3;5~", +1, 0},
|
||||||
{XK_Delete, ShiftMask, "\033[2K", -1, 0},
|
{ XK_Delete, ShiftMask, "\033[2K", -1, 0},
|
||||||
{XK_Delete, ShiftMask, "\033[3;2~", +1, 0},
|
{ XK_Delete, ShiftMask, "\033[3;2~", +1, 0},
|
||||||
{XK_Delete, XK_ANY_MOD, "\033[P", -1, 0},
|
{ XK_Delete, XK_ANY_MOD, "\033[P", -1, 0},
|
||||||
{XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
|
{ XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
|
||||||
{XK_BackSpace, XK_NO_MOD, "\177", 0, 0},
|
{ XK_BackSpace, XK_NO_MOD, "\177", 0, 0},
|
||||||
{XK_BackSpace, Mod1Mask, "\033\177", 0, 0},
|
{ XK_BackSpace, Mod1Mask, "\033\177", 0, 0},
|
||||||
{XK_Home, ShiftMask, "\033[2J", 0, -1},
|
{ XK_Home, ShiftMask, "\033[2J", 0, -1},
|
||||||
{XK_Home, ShiftMask, "\033[1;2H", 0, +1},
|
{ XK_Home, ShiftMask, "\033[1;2H", 0, +1},
|
||||||
{XK_Home, XK_ANY_MOD, "\033[H", 0, -1},
|
{ XK_Home, XK_ANY_MOD, "\033[H", 0, -1},
|
||||||
{XK_Home, XK_ANY_MOD, "\033[1~", 0, +1},
|
{ XK_Home, XK_ANY_MOD, "\033[1~", 0, +1},
|
||||||
{XK_End, ControlMask, "\033[J", -1, 0},
|
{ XK_End, ControlMask, "\033[J", -1, 0},
|
||||||
{XK_End, ControlMask, "\033[1;5F", +1, 0},
|
{ XK_End, ControlMask, "\033[1;5F", +1, 0},
|
||||||
{XK_End, ShiftMask, "\033[K", -1, 0},
|
{ XK_End, ShiftMask, "\033[K", -1, 0},
|
||||||
{XK_End, ShiftMask, "\033[1;2F", +1, 0},
|
{ XK_End, ShiftMask, "\033[1;2F", +1, 0},
|
||||||
{XK_End, XK_ANY_MOD, "\033[4~", 0, 0},
|
{ XK_End, XK_ANY_MOD, "\033[4~", 0, 0},
|
||||||
{XK_Prior, ControlMask, "\033[5;5~", 0, 0},
|
{ XK_Prior, ControlMask, "\033[5;5~", 0, 0},
|
||||||
{XK_Prior, ShiftMask, "\033[5;2~", 0, 0},
|
{ XK_Prior, ShiftMask, "\033[5;2~", 0, 0},
|
||||||
{XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
|
{ XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
|
||||||
{XK_Next, ControlMask, "\033[6;5~", 0, 0},
|
{ XK_Next, ControlMask, "\033[6;5~", 0, 0},
|
||||||
{XK_Next, ShiftMask, "\033[6;2~", 0, 0},
|
{ XK_Next, ShiftMask, "\033[6;2~", 0, 0},
|
||||||
{XK_Next, XK_ANY_MOD, "\033[6~", 0, 0},
|
{ XK_Next, XK_ANY_MOD, "\033[6~", 0, 0},
|
||||||
{XK_F1, XK_NO_MOD, "\033OP", 0, 0},
|
{ XK_F1, XK_NO_MOD, "\033OP" , 0, 0},
|
||||||
{XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0},
|
{ XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0},
|
||||||
{XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0},
|
{ XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0},
|
||||||
{XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0},
|
{ XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0},
|
||||||
{XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0},
|
{ XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0},
|
||||||
{XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0},
|
{ XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0},
|
||||||
{XK_F2, XK_NO_MOD, "\033OQ", 0, 0},
|
{ XK_F2, XK_NO_MOD, "\033OQ" , 0, 0},
|
||||||
{XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0},
|
{ XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0},
|
||||||
{XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0},
|
{ XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0},
|
||||||
{XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0},
|
{ XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0},
|
||||||
{XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0},
|
{ XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0},
|
||||||
{XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0},
|
{ XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0},
|
||||||
{XK_F3, XK_NO_MOD, "\033OR", 0, 0},
|
{ XK_F3, XK_NO_MOD, "\033OR" , 0, 0},
|
||||||
{XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0},
|
{ XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0},
|
||||||
{XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0},
|
{ XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0},
|
||||||
{XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0},
|
{ XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0},
|
||||||
{XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0},
|
{ XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0},
|
||||||
{XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0},
|
{ XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0},
|
||||||
{XK_F4, XK_NO_MOD, "\033OS", 0, 0},
|
{ XK_F4, XK_NO_MOD, "\033OS" , 0, 0},
|
||||||
{XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0},
|
{ XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0},
|
||||||
{XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0},
|
{ XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0},
|
||||||
{XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0},
|
{ XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0},
|
||||||
{XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0},
|
{ XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0},
|
||||||
{XK_F5, XK_NO_MOD, "\033[15~", 0, 0},
|
{ XK_F5, XK_NO_MOD, "\033[15~", 0, 0},
|
||||||
{XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0},
|
{ XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0},
|
||||||
{XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0},
|
{ XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0},
|
||||||
{XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0},
|
{ XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0},
|
||||||
{XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0},
|
{ XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0},
|
||||||
{XK_F6, XK_NO_MOD, "\033[17~", 0, 0},
|
{ XK_F6, XK_NO_MOD, "\033[17~", 0, 0},
|
||||||
{XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0},
|
{ XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0},
|
||||||
{XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0},
|
{ XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0},
|
||||||
{XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0},
|
{ XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0},
|
||||||
{XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0},
|
{ XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0},
|
||||||
{XK_F7, XK_NO_MOD, "\033[18~", 0, 0},
|
{ XK_F7, XK_NO_MOD, "\033[18~", 0, 0},
|
||||||
{XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0},
|
{ XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0},
|
||||||
{XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0},
|
{ XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0},
|
||||||
{XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0},
|
{ XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0},
|
||||||
{XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0},
|
{ XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0},
|
||||||
{XK_F8, XK_NO_MOD, "\033[19~", 0, 0},
|
{ XK_F8, XK_NO_MOD, "\033[19~", 0, 0},
|
||||||
{XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0},
|
{ XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0},
|
||||||
{XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0},
|
{ XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0},
|
||||||
{XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0},
|
{ XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0},
|
||||||
{XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0},
|
{ XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0},
|
||||||
{XK_F9, XK_NO_MOD, "\033[20~", 0, 0},
|
{ XK_F9, XK_NO_MOD, "\033[20~", 0, 0},
|
||||||
{XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0},
|
{ XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0},
|
||||||
{XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0},
|
{ XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0},
|
||||||
{XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0},
|
{ XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0},
|
||||||
{XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0},
|
{ XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0},
|
||||||
{XK_F10, XK_NO_MOD, "\033[21~", 0, 0},
|
{ XK_F10, XK_NO_MOD, "\033[21~", 0, 0},
|
||||||
{XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0},
|
{ XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0},
|
||||||
{XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0},
|
{ XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0},
|
||||||
{XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0},
|
{ XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0},
|
||||||
{XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0},
|
{ XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0},
|
||||||
{XK_F11, XK_NO_MOD, "\033[23~", 0, 0},
|
{ XK_F11, XK_NO_MOD, "\033[23~", 0, 0},
|
||||||
{XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0},
|
{ XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0},
|
||||||
{XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0},
|
{ XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0},
|
||||||
{XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0},
|
{ XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0},
|
||||||
{XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0},
|
{ XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0},
|
||||||
{XK_F12, XK_NO_MOD, "\033[24~", 0, 0},
|
{ XK_F12, XK_NO_MOD, "\033[24~", 0, 0},
|
||||||
{XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0},
|
{ XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0},
|
||||||
{XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0},
|
{ XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0},
|
||||||
{XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0},
|
{ XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0},
|
||||||
{XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0},
|
{ XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0},
|
||||||
{XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0},
|
{ XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0},
|
||||||
{XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0},
|
{ XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0},
|
||||||
{XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0},
|
{ XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0},
|
||||||
{XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0},
|
{ XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0},
|
||||||
{XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0},
|
{ XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0},
|
||||||
{XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0},
|
{ XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0},
|
||||||
{XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0},
|
{ XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0},
|
||||||
{XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0},
|
{ XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0},
|
||||||
{XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0},
|
{ XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0},
|
||||||
{XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0},
|
{ XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0},
|
||||||
{XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0},
|
{ XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0},
|
||||||
{XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0},
|
{ XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0},
|
||||||
{XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0},
|
{ XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0},
|
||||||
{XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0},
|
{ XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0},
|
||||||
{XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0},
|
{ XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0},
|
||||||
{XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0},
|
{ XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0},
|
||||||
{XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0},
|
{ XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0},
|
||||||
{XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0},
|
{ XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0},
|
||||||
{XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0},
|
{ XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0},
|
||||||
{XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0},
|
{ XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0},
|
||||||
{XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0},
|
{ XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0},
|
||||||
{XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0},
|
{ XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0},
|
||||||
{XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0},
|
{ XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -464,6 +468,7 @@ static uint selmasks[] = {
|
|||||||
* Printable characters in ASCII, used to estimate the advance width
|
* Printable characters in ASCII, used to estimate the advance width
|
||||||
* of single wide characters.
|
* of single wide characters.
|
||||||
*/
|
*/
|
||||||
static char ascii_printable[] = " !\"#$%&'()*+,-./0123456789:;<=>?"
|
static char ascii_printable[] =
|
||||||
|
" !\"#$%&'()*+,-./0123456789:;<=>?"
|
||||||
"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
|
"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
|
||||||
"`abcdefghijklmnopqrstuvwxyz{|}~";
|
"`abcdefghijklmnopqrstuvwxyz{|}~";
|
||||||
@@ -5,12 +5,8 @@
|
|||||||
*
|
*
|
||||||
* font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
|
* font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
|
||||||
*/
|
*/
|
||||||
static char *font =
|
static char *font = "FiraCode Nerd Font Propo:pixelsize=13";
|
||||||
"JetBrainsMono NFP:pixelsize=15:antialias=true:autohint=true";
|
static int borderpx = 5;
|
||||||
static char *font2[] = {
|
|
||||||
"Noto Color Emoji:pixelsize=15:antialias=true:autohint=true",
|
|
||||||
};
|
|
||||||
static int borderpx = 2;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* What program is execed by st depends of these precedence rules:
|
* What program is execed by st depends of these precedence rules:
|
||||||
@@ -20,7 +16,7 @@ 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/bash";
|
static char *shell = "/bin/sh";
|
||||||
char *utmp = NULL;
|
char *utmp = NULL;
|
||||||
/* scroll program: to enable use a string like "scroll" */
|
/* scroll program: to enable use a string like "scroll" */
|
||||||
char *scroll = NULL;
|
char *scroll = NULL;
|
||||||
@@ -57,7 +53,7 @@ int allowwindowops = 0;
|
|||||||
* near minlatency, but it waits longer for slow updates to avoid partial draw.
|
* near minlatency, but it waits longer for slow updates to avoid partial draw.
|
||||||
* low minlatency will tear/flicker more, as it can "detect" idle too early.
|
* low minlatency will tear/flicker more, as it can "detect" idle too early.
|
||||||
*/
|
*/
|
||||||
static double minlatency = 2;
|
static double minlatency = 8;
|
||||||
static double maxlatency = 33;
|
static double maxlatency = 33;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -100,46 +96,47 @@ 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 */
|
/* 8 normal colors */
|
||||||
[0] = "#282828", /* hard contrast: #1d2021 / soft contrast: #32302f */
|
"#323437",
|
||||||
[1] = "#cc241d", /* red */
|
"#ff5454",
|
||||||
[2] = "#98971a", /* green */
|
"#8cc85f",
|
||||||
[3] = "#d79921", /* yellow */
|
"#e3c78a",
|
||||||
[4] = "#458588", /* blue */
|
"#80a0ff",
|
||||||
[5] = "#b16286", /* magenta */
|
"#d183e8",
|
||||||
[6] = "#689d6a", /* cyan */
|
"#79dac8",
|
||||||
[7] = "#a89984", /* white */
|
"#a1aab8",
|
||||||
[8] = "#928374", /* black */
|
"#7c8f8f",
|
||||||
[9] = "#fb4934", /* red */
|
"#ff5189",
|
||||||
[10] = "#b8bb26", /* green */
|
"#36c692",
|
||||||
[11] = "#fabd2f", /* yellow */
|
"#bfbf97",
|
||||||
[12] = "#83a598", /* blue */
|
"#74b2ff",
|
||||||
[13] = "#d3869b", /* magenta */
|
"#ae81ff",
|
||||||
[14] = "#8ec07c", /* cyan */
|
"#85dc85",
|
||||||
[15] = "#ebdbb2", /* white */
|
"#e2637f",
|
||||||
[255] = 0,
|
[255] = 0,
|
||||||
|
|
||||||
|
/* more colors can be added after 255 to use with DefaultXX */
|
||||||
|
"#272727",
|
||||||
|
"#f8f8f2",
|
||||||
|
"#080808",
|
||||||
|
"#eeeeee",
|
||||||
};
|
};
|
||||||
/*
|
/*
|
||||||
* Default colors (colorname index)
|
* Default colors (colorname index)
|
||||||
* foreground, background, cursor, reverse cursor
|
* foreground, background, cursor, reverse cursor
|
||||||
*/
|
*/
|
||||||
unsigned int defaultfg = 15;
|
unsigned int defaultfg = 259;
|
||||||
unsigned int defaultbg = 0;
|
unsigned int defaultbg = 256;
|
||||||
unsigned int defaultcs = 15;
|
unsigned int defaultcs = 257;
|
||||||
static unsigned int defaultrcs = 257;
|
static unsigned int defaultrcs = 257;
|
||||||
|
|
||||||
/* https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h4-Functions-using-CSI-_-ordered-by-the-final-character-lparen-s-rparen:CSI-Ps-SP-q.1D81
|
/*
|
||||||
* Default style of cursor
|
* Default shape of cursor
|
||||||
* 0: blinking block
|
* 2: Block ("█")
|
||||||
* 1: blinking block (default)
|
* 4: Underline ("_")
|
||||||
* 2: steady block ("█")
|
* 6: Bar ("|")
|
||||||
* 3: blinking underline
|
* 7: Snowman ("☃")
|
||||||
* 4: steady underline ("_")
|
|
||||||
* 5: blinking bar
|
|
||||||
* 6: steady bar ("|")
|
|
||||||
* 7: blinking st cursor
|
|
||||||
* 8: steady st cursor
|
|
||||||
*/
|
*/
|
||||||
static unsigned int cursorshape = 0;
|
static unsigned int cursorshape = 2;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Default columns and rows numbers
|
* Default columns and rows numbers
|
||||||
@@ -174,29 +171,36 @@ static uint forcemousemod = ShiftMask;
|
|||||||
*/
|
*/
|
||||||
static MouseShortcut mshortcuts[] = {
|
static MouseShortcut mshortcuts[] = {
|
||||||
/* mask button function argument release */
|
/* mask button function argument release */
|
||||||
{XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1},
|
{ ShiftMask, Button4, kscrollup, {.i = 1} },
|
||||||
{ShiftMask, Button4, kscrollup, {.i = 1}},
|
{ ShiftMask, Button5, kscrolldown, {.i = 1} },
|
||||||
{ShiftMask, Button5, kscrolldown, {.i = 1}},
|
{ XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 },
|
||||||
|
{ ShiftMask, Button4, ttysend, {.s = "\033[5;2~"} },
|
||||||
|
|
||||||
|
{ XK_ANY_MOD, Button4, ttysend, {.s = "\031"} },
|
||||||
|
{ XK_ANY_MOD, Button5, ttysend, {.s = "\033[6;2~"}, 0, -1 },
|
||||||
|
{ XK_ANY_MOD, Button5, ttysend, {.s = "\005"} },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Internal keyboard shortcuts. */
|
/* Internal keyboard shortcuts. */
|
||||||
#define MODKEY Mod1Mask
|
#define MODKEY Mod1Mask
|
||||||
#define TERMMOD (ControlMask | ShiftMask)
|
#define TERMMOD (ControlMask|ShiftMask)
|
||||||
|
|
||||||
static Shortcut shortcuts[] = {
|
static Shortcut shortcuts[] = {
|
||||||
/* mask keysym function argument */
|
/* mask keysym function argument */
|
||||||
{XK_ANY_MOD, XK_Break, sendbreak, {.i = 0}},
|
{ XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} },
|
||||||
{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} },
|
||||||
{ControlMask, XK_KP_Add, zoom, {.f = +1}},
|
{ ControlMask, XK_KP_Add, zoom, {.f = +1} },
|
||||||
{ControlMask, XK_minus, zoom, {.f = -1}},
|
{ ControlMask, XK_minus, zoom, {.f = -1} },
|
||||||
{TERMMOD, XK_Home, zoomreset, {.f = 0}},
|
{ TERMMOD, XK_Home, zoomreset, {.f = 0} },
|
||||||
{TERMMOD, XK_C, clipcopy, {.i = 0}},
|
{ TERMMOD, XK_C, clipcopy, {.i = 0} },
|
||||||
{TERMMOD, XK_V, clippaste, {.i = 0}},
|
{ TERMMOD, XK_V, clippaste, {.i = 0} },
|
||||||
{TERMMOD, XK_Y, selpaste, {.i = 0}},
|
{ TERMMOD, XK_Y, selpaste, {.i = 0} },
|
||||||
{ShiftMask, XK_Insert, selpaste, {.i = 0}},
|
{ ShiftMask, XK_Insert, selpaste, {.i = 0} },
|
||||||
{TERMMOD, XK_Num_Lock, numlock, {.i = 0}},
|
{ TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
|
||||||
|
{ ShiftMask, XK_Page_Up, kscrollup, {.i = -1} },
|
||||||
|
{ ShiftMask, XK_Page_Down, kscrolldown, {.i = -1} },
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -224,13 +228,13 @@ static Shortcut shortcuts[] = {
|
|||||||
* If you want keys other than the X11 function keys (0xFD00 - 0xFFFF)
|
* If you want keys other than the X11 function keys (0xFD00 - 0xFFFF)
|
||||||
* to be mapped below, add them to this array.
|
* to be mapped below, add them to this array.
|
||||||
*/
|
*/
|
||||||
static KeySym mappedkeys[] = {-1};
|
static KeySym mappedkeys[] = { -1 };
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* State bits to ignore when matching key or button events. By default,
|
* State bits to ignore when matching key or button events. By default,
|
||||||
* numlock (Mod2Mask) and keyboard layout (XK_SWITCH_MOD) are ignored.
|
* numlock (Mod2Mask) and keyboard layout (XK_SWITCH_MOD) are ignored.
|
||||||
*/
|
*/
|
||||||
static uint ignoremod = Mod2Mask | XK_SWITCH_MOD;
|
static uint ignoremod = Mod2Mask|XK_SWITCH_MOD;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is the huge key array which defines all compatibility to the Linux
|
* This is the huge key array which defines all compatibility to the Linux
|
||||||
@@ -238,215 +242,215 @@ static uint ignoremod = Mod2Mask | XK_SWITCH_MOD;
|
|||||||
*/
|
*/
|
||||||
static Key key[] = {
|
static Key key[] = {
|
||||||
/* keysym mask string appkey appcursor */
|
/* keysym mask string appkey appcursor */
|
||||||
{XK_KP_Home, ShiftMask, "\033[2J", 0, -1},
|
{ XK_KP_Home, ShiftMask, "\033[2J", 0, -1},
|
||||||
{XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1},
|
{ XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1},
|
||||||
{XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1},
|
{ XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1},
|
||||||
{XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1},
|
{ XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1},
|
||||||
{XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0},
|
{ XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0},
|
||||||
{XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1},
|
{ XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1},
|
||||||
{XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1},
|
{ XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1},
|
||||||
{XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0},
|
{ XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0},
|
||||||
{XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1},
|
{ XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1},
|
||||||
{XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1},
|
{ XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1},
|
||||||
{XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0},
|
{ XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0},
|
||||||
{XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1},
|
{ XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1},
|
||||||
{XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1},
|
{ XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1},
|
||||||
{XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0},
|
{ XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0},
|
||||||
{XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1},
|
{ XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1},
|
||||||
{XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1},
|
{ XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1},
|
||||||
{XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0},
|
{ XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0},
|
||||||
{XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
|
{ XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
|
||||||
{XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0},
|
{ XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0},
|
||||||
{XK_KP_End, ControlMask, "\033[J", -1, 0},
|
{ XK_KP_End, ControlMask, "\033[J", -1, 0},
|
||||||
{XK_KP_End, ControlMask, "\033[1;5F", +1, 0},
|
{ XK_KP_End, ControlMask, "\033[1;5F", +1, 0},
|
||||||
{XK_KP_End, ShiftMask, "\033[K", -1, 0},
|
{ XK_KP_End, ShiftMask, "\033[K", -1, 0},
|
||||||
{XK_KP_End, ShiftMask, "\033[1;2F", +1, 0},
|
{ XK_KP_End, ShiftMask, "\033[1;2F", +1, 0},
|
||||||
{XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0},
|
{ XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0},
|
||||||
{XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0},
|
{ XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0},
|
||||||
{XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0},
|
{ XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0},
|
||||||
{XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0},
|
{ XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0},
|
||||||
{XK_KP_Insert, ShiftMask, "\033[4l", -1, 0},
|
{ XK_KP_Insert, ShiftMask, "\033[4l", -1, 0},
|
||||||
{XK_KP_Insert, ControlMask, "\033[L", -1, 0},
|
{ XK_KP_Insert, ControlMask, "\033[L", -1, 0},
|
||||||
{XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0},
|
{ XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0},
|
||||||
{XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
|
{ XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
|
||||||
{XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
|
{ XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
|
||||||
{XK_KP_Delete, ControlMask, "\033[M", -1, 0},
|
{ XK_KP_Delete, ControlMask, "\033[M", -1, 0},
|
||||||
{XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0},
|
{ XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0},
|
||||||
{XK_KP_Delete, ShiftMask, "\033[2K", -1, 0},
|
{ XK_KP_Delete, ShiftMask, "\033[2K", -1, 0},
|
||||||
{XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0},
|
{ XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0},
|
||||||
{XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0},
|
{ XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0},
|
||||||
{XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
|
{ XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
|
||||||
{XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0},
|
{ XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0},
|
||||||
{XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0},
|
{ XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0},
|
||||||
{XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0},
|
{ XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0},
|
||||||
{XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0},
|
{ XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0},
|
||||||
{XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0},
|
{ XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0},
|
||||||
{XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0},
|
{ XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0},
|
||||||
{XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0},
|
{ XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0},
|
||||||
{XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0},
|
{ XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0},
|
||||||
{XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0},
|
{ XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0},
|
||||||
{XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0},
|
{ XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0},
|
||||||
{XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0},
|
{ XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0},
|
||||||
{XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0},
|
{ XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0},
|
||||||
{XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0},
|
{ XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0},
|
||||||
{XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0},
|
{ XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0},
|
||||||
{XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0},
|
{ XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0},
|
||||||
{XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0},
|
{ XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0},
|
||||||
{XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0},
|
{ XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0},
|
||||||
{XK_Up, ShiftMask, "\033[1;2A", 0, 0},
|
{ XK_Up, ShiftMask, "\033[1;2A", 0, 0},
|
||||||
{XK_Up, Mod1Mask, "\033[1;3A", 0, 0},
|
{ XK_Up, Mod1Mask, "\033[1;3A", 0, 0},
|
||||||
{XK_Up, ShiftMask | Mod1Mask, "\033[1;4A", 0, 0},
|
{ XK_Up, ShiftMask|Mod1Mask,"\033[1;4A", 0, 0},
|
||||||
{XK_Up, ControlMask, "\033[1;5A", 0, 0},
|
{ XK_Up, ControlMask, "\033[1;5A", 0, 0},
|
||||||
{XK_Up, ShiftMask | ControlMask, "\033[1;6A", 0, 0},
|
{ XK_Up, ShiftMask|ControlMask,"\033[1;6A", 0, 0},
|
||||||
{XK_Up, ControlMask | Mod1Mask, "\033[1;7A", 0, 0},
|
{ XK_Up, ControlMask|Mod1Mask,"\033[1;7A", 0, 0},
|
||||||
{XK_Up, ShiftMask | ControlMask | Mod1Mask, "\033[1;8A", 0, 0},
|
{ XK_Up,ShiftMask|ControlMask|Mod1Mask,"\033[1;8A", 0, 0},
|
||||||
{XK_Up, XK_ANY_MOD, "\033[A", 0, -1},
|
{ XK_Up, XK_ANY_MOD, "\033[A", 0, -1},
|
||||||
{XK_Up, XK_ANY_MOD, "\033OA", 0, +1},
|
{ XK_Up, XK_ANY_MOD, "\033OA", 0, +1},
|
||||||
{XK_Down, ShiftMask, "\033[1;2B", 0, 0},
|
{ XK_Down, ShiftMask, "\033[1;2B", 0, 0},
|
||||||
{XK_Down, Mod1Mask, "\033[1;3B", 0, 0},
|
{ XK_Down, Mod1Mask, "\033[1;3B", 0, 0},
|
||||||
{XK_Down, ShiftMask | Mod1Mask, "\033[1;4B", 0, 0},
|
{ XK_Down, ShiftMask|Mod1Mask,"\033[1;4B", 0, 0},
|
||||||
{XK_Down, ControlMask, "\033[1;5B", 0, 0},
|
{ XK_Down, ControlMask, "\033[1;5B", 0, 0},
|
||||||
{XK_Down, ShiftMask | ControlMask, "\033[1;6B", 0, 0},
|
{ XK_Down, ShiftMask|ControlMask,"\033[1;6B", 0, 0},
|
||||||
{XK_Down, ControlMask | Mod1Mask, "\033[1;7B", 0, 0},
|
{ XK_Down, ControlMask|Mod1Mask,"\033[1;7B", 0, 0},
|
||||||
{XK_Down, ShiftMask | ControlMask | Mod1Mask, "\033[1;8B", 0, 0},
|
{ XK_Down,ShiftMask|ControlMask|Mod1Mask,"\033[1;8B",0, 0},
|
||||||
{XK_Down, XK_ANY_MOD, "\033[B", 0, -1},
|
{ XK_Down, XK_ANY_MOD, "\033[B", 0, -1},
|
||||||
{XK_Down, XK_ANY_MOD, "\033OB", 0, +1},
|
{ XK_Down, XK_ANY_MOD, "\033OB", 0, +1},
|
||||||
{XK_Left, ShiftMask, "\033[1;2D", 0, 0},
|
{ XK_Left, ShiftMask, "\033[1;2D", 0, 0},
|
||||||
{XK_Left, Mod1Mask, "\033[1;3D", 0, 0},
|
{ XK_Left, Mod1Mask, "\033[1;3D", 0, 0},
|
||||||
{XK_Left, ShiftMask | Mod1Mask, "\033[1;4D", 0, 0},
|
{ XK_Left, ShiftMask|Mod1Mask,"\033[1;4D", 0, 0},
|
||||||
{XK_Left, ControlMask, "\033[1;5D", 0, 0},
|
{ XK_Left, ControlMask, "\033[1;5D", 0, 0},
|
||||||
{XK_Left, ShiftMask | ControlMask, "\033[1;6D", 0, 0},
|
{ XK_Left, ShiftMask|ControlMask,"\033[1;6D", 0, 0},
|
||||||
{XK_Left, ControlMask | Mod1Mask, "\033[1;7D", 0, 0},
|
{ XK_Left, ControlMask|Mod1Mask,"\033[1;7D", 0, 0},
|
||||||
{XK_Left, ShiftMask | ControlMask | Mod1Mask, "\033[1;8D", 0, 0},
|
{ XK_Left,ShiftMask|ControlMask|Mod1Mask,"\033[1;8D",0, 0},
|
||||||
{XK_Left, XK_ANY_MOD, "\033[D", 0, -1},
|
{ XK_Left, XK_ANY_MOD, "\033[D", 0, -1},
|
||||||
{XK_Left, XK_ANY_MOD, "\033OD", 0, +1},
|
{ XK_Left, XK_ANY_MOD, "\033OD", 0, +1},
|
||||||
{XK_Right, ShiftMask, "\033[1;2C", 0, 0},
|
{ XK_Right, ShiftMask, "\033[1;2C", 0, 0},
|
||||||
{XK_Right, Mod1Mask, "\033[1;3C", 0, 0},
|
{ XK_Right, Mod1Mask, "\033[1;3C", 0, 0},
|
||||||
{XK_Right, ShiftMask | Mod1Mask, "\033[1;4C", 0, 0},
|
{ XK_Right, ShiftMask|Mod1Mask,"\033[1;4C", 0, 0},
|
||||||
{XK_Right, ControlMask, "\033[1;5C", 0, 0},
|
{ XK_Right, ControlMask, "\033[1;5C", 0, 0},
|
||||||
{XK_Right, ShiftMask | ControlMask, "\033[1;6C", 0, 0},
|
{ XK_Right, ShiftMask|ControlMask,"\033[1;6C", 0, 0},
|
||||||
{XK_Right, ControlMask | Mod1Mask, "\033[1;7C", 0, 0},
|
{ XK_Right, ControlMask|Mod1Mask,"\033[1;7C", 0, 0},
|
||||||
{XK_Right, ShiftMask | ControlMask | Mod1Mask, "\033[1;8C", 0, 0},
|
{ XK_Right,ShiftMask|ControlMask|Mod1Mask,"\033[1;8C",0, 0},
|
||||||
{XK_Right, XK_ANY_MOD, "\033[C", 0, -1},
|
{ XK_Right, XK_ANY_MOD, "\033[C", 0, -1},
|
||||||
{XK_Right, XK_ANY_MOD, "\033OC", 0, +1},
|
{ XK_Right, XK_ANY_MOD, "\033OC", 0, +1},
|
||||||
{XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0},
|
{ XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0},
|
||||||
{XK_Return, Mod1Mask, "\033\r", 0, 0},
|
{ XK_Return, Mod1Mask, "\033\r", 0, 0},
|
||||||
{XK_Return, XK_ANY_MOD, "\r", 0, 0},
|
{ XK_Return, XK_ANY_MOD, "\r", 0, 0},
|
||||||
{XK_Insert, ShiftMask, "\033[4l", -1, 0},
|
{ XK_Insert, ShiftMask, "\033[4l", -1, 0},
|
||||||
{XK_Insert, ShiftMask, "\033[2;2~", +1, 0},
|
{ XK_Insert, ShiftMask, "\033[2;2~", +1, 0},
|
||||||
{XK_Insert, ControlMask, "\033[L", -1, 0},
|
{ XK_Insert, ControlMask, "\033[L", -1, 0},
|
||||||
{XK_Insert, ControlMask, "\033[2;5~", +1, 0},
|
{ XK_Insert, ControlMask, "\033[2;5~", +1, 0},
|
||||||
{XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
|
{ XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
|
||||||
{XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
|
{ XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
|
||||||
{XK_Delete, ControlMask, "\033[M", -1, 0},
|
{ XK_Delete, ControlMask, "\033[M", -1, 0},
|
||||||
{XK_Delete, ControlMask, "\033[3;5~", +1, 0},
|
{ XK_Delete, ControlMask, "\033[3;5~", +1, 0},
|
||||||
{XK_Delete, ShiftMask, "\033[2K", -1, 0},
|
{ XK_Delete, ShiftMask, "\033[2K", -1, 0},
|
||||||
{XK_Delete, ShiftMask, "\033[3;2~", +1, 0},
|
{ XK_Delete, ShiftMask, "\033[3;2~", +1, 0},
|
||||||
{XK_Delete, XK_ANY_MOD, "\033[P", -1, 0},
|
{ XK_Delete, XK_ANY_MOD, "\033[P", -1, 0},
|
||||||
{XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
|
{ XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
|
||||||
{XK_BackSpace, XK_NO_MOD, "\177", 0, 0},
|
{ XK_BackSpace, XK_NO_MOD, "\177", 0, 0},
|
||||||
{XK_BackSpace, Mod1Mask, "\033\177", 0, 0},
|
{ XK_BackSpace, Mod1Mask, "\033\177", 0, 0},
|
||||||
{XK_Home, ShiftMask, "\033[2J", 0, -1},
|
{ XK_Home, ShiftMask, "\033[2J", 0, -1},
|
||||||
{XK_Home, ShiftMask, "\033[1;2H", 0, +1},
|
{ XK_Home, ShiftMask, "\033[1;2H", 0, +1},
|
||||||
{XK_Home, XK_ANY_MOD, "\033[H", 0, -1},
|
{ XK_Home, XK_ANY_MOD, "\033[H", 0, -1},
|
||||||
{XK_Home, XK_ANY_MOD, "\033[1~", 0, +1},
|
{ XK_Home, XK_ANY_MOD, "\033[1~", 0, +1},
|
||||||
{XK_End, ControlMask, "\033[J", -1, 0},
|
{ XK_End, ControlMask, "\033[J", -1, 0},
|
||||||
{XK_End, ControlMask, "\033[1;5F", +1, 0},
|
{ XK_End, ControlMask, "\033[1;5F", +1, 0},
|
||||||
{XK_End, ShiftMask, "\033[K", -1, 0},
|
{ XK_End, ShiftMask, "\033[K", -1, 0},
|
||||||
{XK_End, ShiftMask, "\033[1;2F", +1, 0},
|
{ XK_End, ShiftMask, "\033[1;2F", +1, 0},
|
||||||
{XK_End, XK_ANY_MOD, "\033[4~", 0, 0},
|
{ XK_End, XK_ANY_MOD, "\033[4~", 0, 0},
|
||||||
{XK_Prior, ControlMask, "\033[5;5~", 0, 0},
|
{ XK_Prior, ControlMask, "\033[5;5~", 0, 0},
|
||||||
{XK_Prior, ShiftMask, "\033[5;2~", 0, 0},
|
{ XK_Prior, ShiftMask, "\033[5;2~", 0, 0},
|
||||||
{XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
|
{ XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
|
||||||
{XK_Next, ControlMask, "\033[6;5~", 0, 0},
|
{ XK_Next, ControlMask, "\033[6;5~", 0, 0},
|
||||||
{XK_Next, ShiftMask, "\033[6;2~", 0, 0},
|
{ XK_Next, ShiftMask, "\033[6;2~", 0, 0},
|
||||||
{XK_Next, XK_ANY_MOD, "\033[6~", 0, 0},
|
{ XK_Next, XK_ANY_MOD, "\033[6~", 0, 0},
|
||||||
{XK_F1, XK_NO_MOD, "\033OP", 0, 0},
|
{ XK_F1, XK_NO_MOD, "\033OP" , 0, 0},
|
||||||
{XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0},
|
{ XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0},
|
||||||
{XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0},
|
{ XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0},
|
||||||
{XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0},
|
{ XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0},
|
||||||
{XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0},
|
{ XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0},
|
||||||
{XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0},
|
{ XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0},
|
||||||
{XK_F2, XK_NO_MOD, "\033OQ", 0, 0},
|
{ XK_F2, XK_NO_MOD, "\033OQ" , 0, 0},
|
||||||
{XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0},
|
{ XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0},
|
||||||
{XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0},
|
{ XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0},
|
||||||
{XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0},
|
{ XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0},
|
||||||
{XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0},
|
{ XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0},
|
||||||
{XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0},
|
{ XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0},
|
||||||
{XK_F3, XK_NO_MOD, "\033OR", 0, 0},
|
{ XK_F3, XK_NO_MOD, "\033OR" , 0, 0},
|
||||||
{XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0},
|
{ XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0},
|
||||||
{XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0},
|
{ XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0},
|
||||||
{XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0},
|
{ XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0},
|
||||||
{XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0},
|
{ XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0},
|
||||||
{XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0},
|
{ XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0},
|
||||||
{XK_F4, XK_NO_MOD, "\033OS", 0, 0},
|
{ XK_F4, XK_NO_MOD, "\033OS" , 0, 0},
|
||||||
{XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0},
|
{ XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0},
|
||||||
{XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0},
|
{ XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0},
|
||||||
{XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0},
|
{ XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0},
|
||||||
{XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0},
|
{ XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0},
|
||||||
{XK_F5, XK_NO_MOD, "\033[15~", 0, 0},
|
{ XK_F5, XK_NO_MOD, "\033[15~", 0, 0},
|
||||||
{XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0},
|
{ XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0},
|
||||||
{XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0},
|
{ XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0},
|
||||||
{XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0},
|
{ XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0},
|
||||||
{XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0},
|
{ XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0},
|
||||||
{XK_F6, XK_NO_MOD, "\033[17~", 0, 0},
|
{ XK_F6, XK_NO_MOD, "\033[17~", 0, 0},
|
||||||
{XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0},
|
{ XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0},
|
||||||
{XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0},
|
{ XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0},
|
||||||
{XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0},
|
{ XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0},
|
||||||
{XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0},
|
{ XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0},
|
||||||
{XK_F7, XK_NO_MOD, "\033[18~", 0, 0},
|
{ XK_F7, XK_NO_MOD, "\033[18~", 0, 0},
|
||||||
{XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0},
|
{ XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0},
|
||||||
{XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0},
|
{ XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0},
|
||||||
{XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0},
|
{ XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0},
|
||||||
{XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0},
|
{ XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0},
|
||||||
{XK_F8, XK_NO_MOD, "\033[19~", 0, 0},
|
{ XK_F8, XK_NO_MOD, "\033[19~", 0, 0},
|
||||||
{XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0},
|
{ XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0},
|
||||||
{XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0},
|
{ XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0},
|
||||||
{XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0},
|
{ XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0},
|
||||||
{XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0},
|
{ XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0},
|
||||||
{XK_F9, XK_NO_MOD, "\033[20~", 0, 0},
|
{ XK_F9, XK_NO_MOD, "\033[20~", 0, 0},
|
||||||
{XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0},
|
{ XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0},
|
||||||
{XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0},
|
{ XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0},
|
||||||
{XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0},
|
{ XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0},
|
||||||
{XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0},
|
{ XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0},
|
||||||
{XK_F10, XK_NO_MOD, "\033[21~", 0, 0},
|
{ XK_F10, XK_NO_MOD, "\033[21~", 0, 0},
|
||||||
{XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0},
|
{ XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0},
|
||||||
{XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0},
|
{ XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0},
|
||||||
{XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0},
|
{ XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0},
|
||||||
{XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0},
|
{ XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0},
|
||||||
{XK_F11, XK_NO_MOD, "\033[23~", 0, 0},
|
{ XK_F11, XK_NO_MOD, "\033[23~", 0, 0},
|
||||||
{XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0},
|
{ XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0},
|
||||||
{XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0},
|
{ XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0},
|
||||||
{XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0},
|
{ XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0},
|
||||||
{XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0},
|
{ XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0},
|
||||||
{XK_F12, XK_NO_MOD, "\033[24~", 0, 0},
|
{ XK_F12, XK_NO_MOD, "\033[24~", 0, 0},
|
||||||
{XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0},
|
{ XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0},
|
||||||
{XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0},
|
{ XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0},
|
||||||
{XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0},
|
{ XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0},
|
||||||
{XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0},
|
{ XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0},
|
||||||
{XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0},
|
{ XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0},
|
||||||
{XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0},
|
{ XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0},
|
||||||
{XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0},
|
{ XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0},
|
||||||
{XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0},
|
{ XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0},
|
||||||
{XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0},
|
{ XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0},
|
||||||
{XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0},
|
{ XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0},
|
||||||
{XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0},
|
{ XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0},
|
||||||
{XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0},
|
{ XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0},
|
||||||
{XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0},
|
{ XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0},
|
||||||
{XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0},
|
{ XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0},
|
||||||
{XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0},
|
{ XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0},
|
||||||
{XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0},
|
{ XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0},
|
||||||
{XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0},
|
{ XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0},
|
||||||
{XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0},
|
{ XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0},
|
||||||
{XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0},
|
{ XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0},
|
||||||
{XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0},
|
{ XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0},
|
||||||
{XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0},
|
{ XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0},
|
||||||
{XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0},
|
{ XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0},
|
||||||
{XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0},
|
{ XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0},
|
||||||
{XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0},
|
{ XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0},
|
||||||
{XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0},
|
{ XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0},
|
||||||
{XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0},
|
{ XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0},
|
||||||
{XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0},
|
{ XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -464,6 +468,7 @@ static uint selmasks[] = {
|
|||||||
* Printable characters in ASCII, used to estimate the advance width
|
* Printable characters in ASCII, used to estimate the advance width
|
||||||
* of single wide characters.
|
* of single wide characters.
|
||||||
*/
|
*/
|
||||||
static char ascii_printable[] = " !\"#$%&'()*+,-./0123456789:;<=>?"
|
static char ascii_printable[] =
|
||||||
|
" !\"#$%&'()*+,-./0123456789:;<=>?"
|
||||||
"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
|
"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
|
||||||
"`abcdefghijklmnopqrstuvwxyz{|}~";
|
"`abcdefghijklmnopqrstuvwxyz{|}~";
|
||||||
@@ -36,4 +36,3 @@ STLDFLAGS = $(LIBS) $(LDFLAGS)
|
|||||||
|
|
||||||
# compiler and linker
|
# compiler and linker
|
||||||
# CC = c99
|
# CC = c99
|
||||||
|
|
||||||
@@ -0,0 +1,251 @@
|
|||||||
|
From 5770f2fc02afca341c275fc340bbc5003ecc3df8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Iskustvo <iskustvo@yahoo.com>
|
||||||
|
Date: Sat, 7 Jan 2023 01:23:37 +0100
|
||||||
|
Subject: [PATCH] [PATCH] add glyph wide support patch
|
||||||
|
|
||||||
|
---
|
||||||
|
st.c | 3 +-
|
||||||
|
st.h | 6 +++
|
||||||
|
win.h | 2 +-
|
||||||
|
x.c | 141 ++++++++++++++++++++++++++++++----------------------------
|
||||||
|
4 files changed, 81 insertions(+), 71 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/st.c b/st.c
|
||||||
|
index 62def59..cc6c78e 100644
|
||||||
|
--- a/st.c
|
||||||
|
+++ b/st.c
|
||||||
|
@@ -2640,7 +2640,8 @@ draw(void)
|
||||||
|
|
||||||
|
drawregion(0, 0, term.col, term.row);
|
||||||
|
xdrawcursor(cx, term.c.y, term.line[term.c.y][cx],
|
||||||
|
- term.ocx, term.ocy, term.line[term.ocy][term.ocx]);
|
||||||
|
+ term.ocx, term.ocy, term.line[term.ocy][term.ocx],
|
||||||
|
+ term.line[term.ocy], term.col);
|
||||||
|
term.ocx = cx;
|
||||||
|
term.ocy = term.c.y;
|
||||||
|
xfinishdraw();
|
||||||
|
diff --git a/st.h b/st.h
|
||||||
|
index fd3b0d8..0053050 100644
|
||||||
|
--- a/st.h
|
||||||
|
+++ b/st.h
|
||||||
|
@@ -36,6 +36,12 @@ enum glyph_attribute {
|
||||||
|
ATTR_BOLD_FAINT = ATTR_BOLD | ATTR_FAINT,
|
||||||
|
};
|
||||||
|
|
||||||
|
+enum drawing_mode {
|
||||||
|
+ DRAW_NONE = 0,
|
||||||
|
+ DRAW_BG = 1 << 0,
|
||||||
|
+ DRAW_FG = 1 << 1,
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
enum selection_mode {
|
||||||
|
SEL_IDLE = 0,
|
||||||
|
SEL_EMPTY = 1,
|
||||||
|
diff --git a/win.h b/win.h
|
||||||
|
index 6de960d..94679e4 100644
|
||||||
|
--- a/win.h
|
||||||
|
+++ b/win.h
|
||||||
|
@@ -25,7 +25,7 @@ enum win_mode {
|
||||||
|
|
||||||
|
void xbell(void);
|
||||||
|
void xclipcopy(void);
|
||||||
|
-void xdrawcursor(int, int, Glyph, int, int, Glyph);
|
||||||
|
+void xdrawcursor(int, int, Glyph, int, int, Glyph, Line, int);
|
||||||
|
void xdrawline(Line, int, int, int);
|
||||||
|
void xfinishdraw(void);
|
||||||
|
void xloadcols(void);
|
||||||
|
diff --git a/x.c b/x.c
|
||||||
|
index aa09997..85deee6 100644
|
||||||
|
--- a/x.c
|
||||||
|
+++ b/x.c
|
||||||
|
@@ -142,7 +142,7 @@ typedef struct {
|
||||||
|
|
||||||
|
static inline ushort sixd_to_16bit(int);
|
||||||
|
static int xmakeglyphfontspecs(XftGlyphFontSpec *, const Glyph *, int, int, int);
|
||||||
|
-static void xdrawglyphfontspecs(const XftGlyphFontSpec *, Glyph, int, int, int);
|
||||||
|
+static void xdrawglyphfontspecs(const XftGlyphFontSpec *, Glyph, int, int, int, int);
|
||||||
|
static void xdrawglyph(Glyph, int, int);
|
||||||
|
static void xclear(int, int, int, int);
|
||||||
|
static int xgeommasktogravity(int);
|
||||||
|
@@ -1372,7 +1372,7 @@ xmakeglyphfontspecs(XftGlyphFontSpec *specs, const Glyph *glyphs, int len, int x
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
-xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, int y)
|
||||||
|
+xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, int y, int dmode)
|
||||||
|
{
|
||||||
|
int charlen = len * ((base.mode & ATTR_WIDE) ? 2 : 1);
|
||||||
|
int winx = borderpx + x * win.cw, winy = borderpx + y * win.ch,
|
||||||
|
@@ -1463,47 +1463,40 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i
|
||||||
|
if (base.mode & ATTR_INVISIBLE)
|
||||||
|
fg = bg;
|
||||||
|
|
||||||
|
- /* Intelligent cleaning up of the borders. */
|
||||||
|
- if (x == 0) {
|
||||||
|
- xclear(0, (y == 0)? 0 : winy, borderpx,
|
||||||
|
- winy + win.ch +
|
||||||
|
- ((winy + win.ch >= borderpx + win.th)? win.h : 0));
|
||||||
|
- }
|
||||||
|
- if (winx + width >= borderpx + win.tw) {
|
||||||
|
- xclear(winx + width, (y == 0)? 0 : winy, win.w,
|
||||||
|
- ((winy + win.ch >= borderpx + win.th)? win.h : (winy + win.ch)));
|
||||||
|
- }
|
||||||
|
- if (y == 0)
|
||||||
|
- xclear(winx, 0, winx + width, borderpx);
|
||||||
|
- if (winy + win.ch >= borderpx + win.th)
|
||||||
|
- xclear(winx, winy + win.ch, winx + width, win.h);
|
||||||
|
-
|
||||||
|
- /* Clean up the region we want to draw to. */
|
||||||
|
- XftDrawRect(xw.draw, bg, winx, winy, width, win.ch);
|
||||||
|
-
|
||||||
|
- /* Set the clip region because Xft is sometimes dirty. */
|
||||||
|
- r.x = 0;
|
||||||
|
- r.y = 0;
|
||||||
|
- r.height = win.ch;
|
||||||
|
- r.width = width;
|
||||||
|
- XftDrawSetClipRectangles(xw.draw, winx, winy, &r, 1);
|
||||||
|
-
|
||||||
|
- /* Render the glyphs. */
|
||||||
|
- XftDrawGlyphFontSpec(xw.draw, fg, specs, len);
|
||||||
|
-
|
||||||
|
- /* Render underline and strikethrough. */
|
||||||
|
- if (base.mode & ATTR_UNDERLINE) {
|
||||||
|
- XftDrawRect(xw.draw, fg, winx, winy + dc.font.ascent * chscale + 1,
|
||||||
|
- width, 1);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (base.mode & ATTR_STRUCK) {
|
||||||
|
- XftDrawRect(xw.draw, fg, winx, winy + 2 * dc.font.ascent * chscale / 3,
|
||||||
|
- width, 1);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /* Reset clip to none. */
|
||||||
|
- XftDrawSetClip(xw.draw, 0);
|
||||||
|
+ if (dmode & DRAW_BG) {
|
||||||
|
+ /* Intelligent cleaning up of the borders. */
|
||||||
|
+ if (x == 0) {
|
||||||
|
+ xclear(0, (y == 0)? 0 : winy, borderpx,
|
||||||
|
+ winy + win.ch +
|
||||||
|
+ ((winy + win.ch >= borderpx + win.th)? win.h : 0));
|
||||||
|
+ }
|
||||||
|
+ if (winx + width >= borderpx + win.tw) {
|
||||||
|
+ xclear(winx + width, (y == 0)? 0 : winy, win.w,
|
||||||
|
+ ((winy + win.ch >= borderpx + win.th)? win.h : (winy + win.ch)));
|
||||||
|
+ }
|
||||||
|
+ if (y == 0)
|
||||||
|
+ xclear(winx, 0, winx + width, borderpx);
|
||||||
|
+ if (winy + win.ch >= borderpx + win.th)
|
||||||
|
+ xclear(winx, winy + win.ch, winx + width, win.h);
|
||||||
|
+ /* Fill the background */
|
||||||
|
+ XftDrawRect(xw.draw, bg, winx, winy, width, win.ch);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (dmode & DRAW_FG) {
|
||||||
|
+ /* Render the glyphs. */
|
||||||
|
+ XftDrawGlyphFontSpec(xw.draw, fg, specs, len);
|
||||||
|
+
|
||||||
|
+ /* Render underline and strikethrough. */
|
||||||
|
+ if (base.mode & ATTR_UNDERLINE) {
|
||||||
|
+ XftDrawRect(xw.draw, fg, winx, winy + dc.font.ascent + 1,
|
||||||
|
+ width, 1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (base.mode & ATTR_STRUCK) {
|
||||||
|
+ XftDrawRect(xw.draw, fg, winx, winy + 2 * dc.font.ascent / 3,
|
||||||
|
+ width, 1);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
@@ -1513,18 +1506,21 @@ xdrawglyph(Glyph g, int x, int y)
|
||||||
|
XftGlyphFontSpec spec;
|
||||||
|
|
||||||
|
numspecs = xmakeglyphfontspecs(&spec, &g, 1, x, y);
|
||||||
|
- xdrawglyphfontspecs(&spec, g, numspecs, x, y);
|
||||||
|
+ xdrawglyphfontspecs(&spec, g, numspecs, x, y, DRAW_BG | DRAW_FG);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
-xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og)
|
||||||
|
+xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og, Line line, int len)
|
||||||
|
{
|
||||||
|
Color drawcol;
|
||||||
|
|
||||||
|
/* remove the old cursor */
|
||||||
|
if (selected(ox, oy))
|
||||||
|
og.mode ^= ATTR_REVERSE;
|
||||||
|
- xdrawglyph(og, ox, oy);
|
||||||
|
+
|
||||||
|
+ /* Redraw the line where cursor was previously.
|
||||||
|
+ * It will restore wide glyphs and ligatures broken by the cursor. */
|
||||||
|
+ xdrawline(line, 0, oy, len);
|
||||||
|
|
||||||
|
if (IS_SET(MODE_HIDE))
|
||||||
|
return;
|
||||||
|
@@ -1648,32 +1644,39 @@ xstartdraw(void)
|
||||||
|
void
|
||||||
|
xdrawline(Line line, int x1, int y1, int x2)
|
||||||
|
{
|
||||||
|
- int i, x, ox, numspecs;
|
||||||
|
+ int i, x, ox, numspecs, numspecs_cached;
|
||||||
|
Glyph base, new;
|
||||||
|
- XftGlyphFontSpec *specs = xw.specbuf;
|
||||||
|
-
|
||||||
|
- numspecs = xmakeglyphfontspecs(specs, &line[x1], x2 - x1, x1, y1);
|
||||||
|
- i = ox = 0;
|
||||||
|
- for (x = x1; x < x2 && i < numspecs; x++) {
|
||||||
|
- new = line[x];
|
||||||
|
- if (new.mode == ATTR_WDUMMY)
|
||||||
|
- continue;
|
||||||
|
- if (selected(x, y1))
|
||||||
|
- new.mode ^= ATTR_REVERSE;
|
||||||
|
- if (i > 0 && ATTRCMP(base, new)) {
|
||||||
|
- xdrawglyphfontspecs(specs, base, i, ox, y1);
|
||||||
|
- specs += i;
|
||||||
|
- numspecs -= i;
|
||||||
|
- i = 0;
|
||||||
|
- }
|
||||||
|
- if (i == 0) {
|
||||||
|
- ox = x;
|
||||||
|
- base = new;
|
||||||
|
+ XftGlyphFontSpec *specs;
|
||||||
|
+
|
||||||
|
+ numspecs_cached = xmakeglyphfontspecs(xw.specbuf, &line[x1], x2 - x1, x1, y1);
|
||||||
|
+
|
||||||
|
+ /* Draw line in 2 passes: background and foreground. This way wide glyphs
|
||||||
|
+ won't get truncated (#223) */
|
||||||
|
+ for (int dmode = DRAW_BG; dmode <= DRAW_FG; dmode <<= 1) {
|
||||||
|
+ specs = xw.specbuf;
|
||||||
|
+ numspecs = numspecs_cached;
|
||||||
|
+ i = ox = 0;
|
||||||
|
+ for (x = x1; x < x2 && i < numspecs; x++) {
|
||||||
|
+ new = line[x];
|
||||||
|
+ if (new.mode == ATTR_WDUMMY)
|
||||||
|
+ continue;
|
||||||
|
+ if (selected(x, y1))
|
||||||
|
+ new.mode ^= ATTR_REVERSE;
|
||||||
|
+ if (i > 0 && ATTRCMP(base, new)) {
|
||||||
|
+ xdrawglyphfontspecs(specs, base, i, ox, y1, dmode);
|
||||||
|
+ specs += i;
|
||||||
|
+ numspecs -= i;
|
||||||
|
+ i = 0;
|
||||||
|
+ }
|
||||||
|
+ if (i == 0) {
|
||||||
|
+ ox = x;
|
||||||
|
+ base = new;
|
||||||
|
+ }
|
||||||
|
+ i++;
|
||||||
|
}
|
||||||
|
- i++;
|
||||||
|
+ if (i > 0)
|
||||||
|
+ xdrawglyphfontspecs(specs, base, i, ox, y1, dmode);
|
||||||
|
}
|
||||||
|
- if (i > 0)
|
||||||
|
- xdrawglyphfontspecs(specs, base, i, ox, y1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
--
|
||||||
|
2.39.0
|
||||||
|
|
||||||
@@ -90,6 +90,7 @@ void sendbreak(const Arg *);
|
|||||||
void toggleprinter(const Arg *);
|
void toggleprinter(const Arg *);
|
||||||
|
|
||||||
int tattrset(int);
|
int tattrset(int);
|
||||||
|
int tisaltscr(void);
|
||||||
void tnew(int, int);
|
void tnew(int, int);
|
||||||
void tresize(int, int);
|
void tresize(int, int);
|
||||||
void tsetdirtattr(int);
|
void tsetdirtattr(int);
|
||||||
|
|||||||
@@ -1,129 +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 & (~ATTR_WRAP)) != ((b).mode & (~ATTR_WRAP)) || \
|
|
||||||
(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;
|
|
||||||
const char *s;
|
|
||||||
} Arg;
|
|
||||||
|
|
||||||
void die(const char *, ...);
|
|
||||||
void redraw(void);
|
|
||||||
void draw(void);
|
|
||||||
|
|
||||||
void kscrolldown(const Arg *);
|
|
||||||
void kscrollup(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(const char *, char *, const 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(const char *);
|
|
||||||
|
|
||||||
/* config.h globals */
|
|
||||||
extern char *utmp;
|
|
||||||
extern char *scroll;
|
|
||||||
extern char *stty_args;
|
|
||||||
extern char *vtiden;
|
|
||||||
extern wchar_t *worddelimiters;
|
|
||||||
extern int allowaltscreen;
|
|
||||||
extern int allowwindowops;
|
|
||||||
extern char *termname;
|
|
||||||
extern unsigned int tabspaces;
|
|
||||||
extern unsigned int defaultfg;
|
|
||||||
extern unsigned int defaultbg;
|
|
||||||
extern unsigned int defaultcs;
|
|
||||||
@@ -184,10 +184,6 @@ st-mono| simpleterm monocolor,
|
|||||||
# XTerm extensions
|
# XTerm extensions
|
||||||
rmxx=\E[29m,
|
rmxx=\E[29m,
|
||||||
smxx=\E[9m,
|
smxx=\E[9m,
|
||||||
BE=\E[?2004h,
|
|
||||||
BD=\E[?2004l,
|
|
||||||
PS=\E[200~,
|
|
||||||
PE=\E[201~,
|
|
||||||
# disabled rep for now: causes some issues with older ncurses versions.
|
# disabled rep for now: causes some issues with older ncurses versions.
|
||||||
# rep=%p1%c\E[%p2%{1}%-%db,
|
# rep=%p1%c\E[%p2%{1}%-%db,
|
||||||
# tmux extensions, see TERMINFO EXTENSIONS in tmux(1)
|
# tmux extensions, see TERMINFO EXTENSIONS in tmux(1)
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/select.h>
|
#include <sys/select.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@@ -36,6 +35,7 @@ typedef struct {
|
|||||||
void (*func)(const Arg *);
|
void (*func)(const Arg *);
|
||||||
const Arg arg;
|
const Arg arg;
|
||||||
uint release;
|
uint release;
|
||||||
|
int altscrn; /* 0: don't care, -1: not alt screen, 1: alt screen */
|
||||||
} MouseShortcut;
|
} MouseShortcut;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -160,8 +160,6 @@ static void xhints(void);
|
|||||||
static int xloadcolor(int, const char *, Color *);
|
static int xloadcolor(int, const char *, Color *);
|
||||||
static int xloadfont(Font *, FcPattern *);
|
static int xloadfont(Font *, FcPattern *);
|
||||||
static void xloadfonts(const char *, double);
|
static void xloadfonts(const char *, double);
|
||||||
static int xloadsparefont(FcPattern *, int);
|
|
||||||
static void xloadsparefonts(void);
|
|
||||||
static void xunloadfont(Font *);
|
static void xunloadfont(Font *);
|
||||||
static void xunloadfonts(void);
|
static void xunloadfonts(void);
|
||||||
static void xsetenv(void);
|
static void xsetenv(void);
|
||||||
@@ -258,7 +256,6 @@ static char *opt_name = NULL;
|
|||||||
static char *opt_title = NULL;
|
static char *opt_title = NULL;
|
||||||
|
|
||||||
static uint buttons; /* bit field of pressed buttons */
|
static uint buttons; /* bit field of pressed buttons */
|
||||||
static int cursorblinks = 0;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
clipcopy(const Arg *dummy)
|
clipcopy(const Arg *dummy)
|
||||||
@@ -312,7 +309,6 @@ zoomabs(const Arg *arg)
|
|||||||
{
|
{
|
||||||
xunloadfonts();
|
xunloadfonts();
|
||||||
xloadfonts(usedfont, arg->f);
|
xloadfonts(usedfont, arg->f);
|
||||||
xloadsparefonts();
|
|
||||||
cresize(0, 0);
|
cresize(0, 0);
|
||||||
redraw();
|
redraw();
|
||||||
xhints();
|
xhints();
|
||||||
@@ -462,6 +458,7 @@ mouseaction(XEvent *e, uint release)
|
|||||||
for (ms = mshortcuts; ms < mshortcuts + LEN(mshortcuts); ms++) {
|
for (ms = mshortcuts; ms < mshortcuts + LEN(mshortcuts); ms++) {
|
||||||
if (ms->release == release &&
|
if (ms->release == release &&
|
||||||
ms->button == e->xbutton.button &&
|
ms->button == e->xbutton.button &&
|
||||||
|
(!ms->altscrn || (ms->altscrn == (tisaltscr() ? 1 : -1))) &&
|
||||||
(match(ms->mod, state) || /* exact or forced */
|
(match(ms->mod, state) || /* exact or forced */
|
||||||
match(ms->mod, state & ~forcemousemod))) {
|
match(ms->mod, state & ~forcemousemod))) {
|
||||||
ms->func(&(ms->arg));
|
ms->func(&(ms->arg));
|
||||||
@@ -825,7 +822,7 @@ xloadcols(void)
|
|||||||
int
|
int
|
||||||
xgetcolor(int x, unsigned char *r, unsigned char *g, unsigned char *b)
|
xgetcolor(int x, unsigned char *r, unsigned char *g, unsigned char *b)
|
||||||
{
|
{
|
||||||
if (!BETWEEN(x, 0, dc.collen - 1))
|
if (!BETWEEN(x, 0, dc.collen))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
*r = dc.col[x].color.red >> 8;
|
*r = dc.col[x].color.red >> 8;
|
||||||
@@ -840,7 +837,7 @@ xsetcolorname(int x, const char *name)
|
|||||||
{
|
{
|
||||||
Color ncolor;
|
Color ncolor;
|
||||||
|
|
||||||
if (!BETWEEN(x, 0, dc.collen - 1))
|
if (!BETWEEN(x, 0, dc.collen))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (!xloadcolor(x, name, &ncolor))
|
if (!xloadcolor(x, name, &ncolor))
|
||||||
@@ -1057,101 +1054,6 @@ xloadfonts(const char *fontstr, double fontsize)
|
|||||||
FcPatternDestroy(pattern);
|
FcPatternDestroy(pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
xloadsparefont(FcPattern *pattern, int flags)
|
|
||||||
{
|
|
||||||
FcPattern *match;
|
|
||||||
FcResult result;
|
|
||||||
|
|
||||||
match = FcFontMatch(NULL, pattern, &result);
|
|
||||||
if (!match) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(frc[frclen].font = XftFontOpenPattern(xw.dpy, match))) {
|
|
||||||
FcPatternDestroy(match);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
frc[frclen].flags = flags;
|
|
||||||
/* Believe U+0000 glyph will present in each default font */
|
|
||||||
frc[frclen].unicodep = 0;
|
|
||||||
frclen++;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
xloadsparefonts(void)
|
|
||||||
{
|
|
||||||
FcPattern *pattern;
|
|
||||||
double sizeshift, fontval;
|
|
||||||
int fc;
|
|
||||||
char **fp;
|
|
||||||
|
|
||||||
if (frclen != 0)
|
|
||||||
die("can't embed spare fonts. cache isn't empty");
|
|
||||||
|
|
||||||
/* Calculate count of spare fonts */
|
|
||||||
fc = sizeof(font2) / sizeof(*font2);
|
|
||||||
if (fc == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Allocate memory for cache entries. */
|
|
||||||
if (frccap < 4 * fc) {
|
|
||||||
frccap += 4 * fc - frccap;
|
|
||||||
frc = xrealloc(frc, frccap * sizeof(Fontcache));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (fp = font2; fp - font2 < fc; ++fp) {
|
|
||||||
|
|
||||||
if (**fp == '-')
|
|
||||||
pattern = XftXlfdParse(*fp, False, False);
|
|
||||||
else
|
|
||||||
pattern = FcNameParse((FcChar8 *)*fp);
|
|
||||||
|
|
||||||
if (!pattern)
|
|
||||||
die("can't open spare font %s\n", *fp);
|
|
||||||
|
|
||||||
if (defaultfontsize > 0) {
|
|
||||||
sizeshift = usedfontsize - defaultfontsize;
|
|
||||||
if (sizeshift != 0 &&
|
|
||||||
FcPatternGetDouble(pattern, FC_PIXEL_SIZE, 0, &fontval) ==
|
|
||||||
FcResultMatch) {
|
|
||||||
fontval += sizeshift;
|
|
||||||
FcPatternDel(pattern, FC_PIXEL_SIZE);
|
|
||||||
FcPatternDel(pattern, FC_SIZE);
|
|
||||||
FcPatternAddDouble(pattern, FC_PIXEL_SIZE, fontval);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FcPatternAddBool(pattern, FC_SCALABLE, 1);
|
|
||||||
|
|
||||||
FcConfigSubstitute(NULL, pattern, FcMatchPattern);
|
|
||||||
XftDefaultSubstitute(xw.dpy, xw.scr, pattern);
|
|
||||||
|
|
||||||
if (xloadsparefont(pattern, FRC_NORMAL))
|
|
||||||
die("can't open spare font %s\n", *fp);
|
|
||||||
|
|
||||||
FcPatternDel(pattern, FC_SLANT);
|
|
||||||
FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ITALIC);
|
|
||||||
if (xloadsparefont(pattern, FRC_ITALIC))
|
|
||||||
die("can't open spare font %s\n", *fp);
|
|
||||||
|
|
||||||
FcPatternDel(pattern, FC_WEIGHT);
|
|
||||||
FcPatternAddInteger(pattern, FC_WEIGHT, FC_WEIGHT_BOLD);
|
|
||||||
if (xloadsparefont(pattern, FRC_ITALICBOLD))
|
|
||||||
die("can't open spare font %s\n", *fp);
|
|
||||||
|
|
||||||
FcPatternDel(pattern, FC_SLANT);
|
|
||||||
FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ROMAN);
|
|
||||||
if (xloadsparefont(pattern, FRC_BOLD))
|
|
||||||
die("can't open spare font %s\n", *fp);
|
|
||||||
|
|
||||||
FcPatternDestroy(pattern);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
xunloadfont(Font *f)
|
xunloadfont(Font *f)
|
||||||
{
|
{
|
||||||
@@ -1236,7 +1138,7 @@ xinit(int cols, int rows)
|
|||||||
{
|
{
|
||||||
XGCValues gcvalues;
|
XGCValues gcvalues;
|
||||||
Cursor cursor;
|
Cursor cursor;
|
||||||
Window parent, root;
|
Window parent;
|
||||||
pid_t thispid = getpid();
|
pid_t thispid = getpid();
|
||||||
XColor xmousefg, xmousebg;
|
XColor xmousefg, xmousebg;
|
||||||
|
|
||||||
@@ -1250,11 +1152,7 @@ xinit(int cols, int rows)
|
|||||||
die("could not init fontconfig.\n");
|
die("could not init fontconfig.\n");
|
||||||
|
|
||||||
usedfont = (opt_font == NULL)? font : opt_font;
|
usedfont = (opt_font == NULL)? font : opt_font;
|
||||||
|
xloadfonts(usedfont, 0);
|
||||||
xloadfonts(usedfont, defaultfontsize);
|
|
||||||
|
|
||||||
/* spare fonts */
|
|
||||||
xloadsparefonts();
|
|
||||||
|
|
||||||
/* colors */
|
/* colors */
|
||||||
xw.cmap = XDefaultColormap(xw.dpy, xw.scr);
|
xw.cmap = XDefaultColormap(xw.dpy, xw.scr);
|
||||||
@@ -1277,19 +1175,16 @@ xinit(int cols, int rows)
|
|||||||
| ButtonMotionMask | ButtonPressMask | ButtonReleaseMask;
|
| ButtonMotionMask | ButtonPressMask | ButtonReleaseMask;
|
||||||
xw.attrs.colormap = xw.cmap;
|
xw.attrs.colormap = xw.cmap;
|
||||||
|
|
||||||
root = XRootWindow(xw.dpy, xw.scr);
|
|
||||||
if (!(opt_embed && (parent = strtol(opt_embed, NULL, 0))))
|
if (!(opt_embed && (parent = strtol(opt_embed, NULL, 0))))
|
||||||
parent = root;
|
parent = XRootWindow(xw.dpy, xw.scr);
|
||||||
xw.win = XCreateWindow(xw.dpy, root, xw.l, xw.t,
|
xw.win = XCreateWindow(xw.dpy, parent, xw.l, xw.t,
|
||||||
win.w, win.h, 0, XDefaultDepth(xw.dpy, xw.scr), InputOutput,
|
win.w, win.h, 0, XDefaultDepth(xw.dpy, xw.scr), InputOutput,
|
||||||
xw.vis, CWBackPixel | CWBorderPixel | CWBitGravity
|
xw.vis, CWBackPixel | CWBorderPixel | CWBitGravity
|
||||||
| CWEventMask | CWColormap, &xw.attrs);
|
| CWEventMask | CWColormap, &xw.attrs);
|
||||||
if (parent != root)
|
|
||||||
XReparentWindow(xw.dpy, xw.win, parent, xw.l, xw.t);
|
|
||||||
|
|
||||||
memset(&gcvalues, 0, sizeof(gcvalues));
|
memset(&gcvalues, 0, sizeof(gcvalues));
|
||||||
gcvalues.graphics_exposures = False;
|
gcvalues.graphics_exposures = False;
|
||||||
dc.gc = XCreateGC(xw.dpy, xw.win, GCGraphicsExposures,
|
dc.gc = XCreateGC(xw.dpy, parent, GCGraphicsExposures,
|
||||||
&gcvalues);
|
&gcvalues);
|
||||||
xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h,
|
xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h,
|
||||||
DefaultDepth(xw.dpy, xw.scr));
|
DefaultDepth(xw.dpy, xw.scr));
|
||||||
@@ -1717,44 +1612,29 @@ xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og, Line line, int le
|
|||||||
/* draw the new one */
|
/* draw the new one */
|
||||||
if (IS_SET(MODE_FOCUSED)) {
|
if (IS_SET(MODE_FOCUSED)) {
|
||||||
switch (win.cursor) {
|
switch (win.cursor) {
|
||||||
default:
|
case 7: /* st extension */
|
||||||
case 0: /* blinking block */
|
g.u = 0x2603; /* snowman (U+2603) */
|
||||||
case 1: /* blinking block (default) */
|
|
||||||
if (IS_SET(MODE_BLINK))
|
|
||||||
break;
|
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
case 2: /* steady block */
|
case 0: /* Blinking Block */
|
||||||
|
case 1: /* Blinking Block (Default) */
|
||||||
|
case 2: /* Steady Block */
|
||||||
xdrawglyph(g, cx, cy);
|
xdrawglyph(g, cx, cy);
|
||||||
break;
|
break;
|
||||||
case 3: /* blinking underline */
|
case 3: /* Blinking Underline */
|
||||||
if (IS_SET(MODE_BLINK))
|
case 4: /* Steady Underline */
|
||||||
break;
|
|
||||||
/* FALLTHROUGH */
|
|
||||||
case 4: /* steady underline */
|
|
||||||
XftDrawRect(xw.draw, &drawcol,
|
XftDrawRect(xw.draw, &drawcol,
|
||||||
borderpx + cx * win.cw,
|
borderpx + cx * win.cw,
|
||||||
borderpx + (cy + 1) * win.ch - \
|
borderpx + (cy + 1) * win.ch - \
|
||||||
cursorthickness,
|
cursorthickness,
|
||||||
win.cw, cursorthickness);
|
win.cw, cursorthickness);
|
||||||
break;
|
break;
|
||||||
case 5: /* blinking bar */
|
case 5: /* Blinking bar */
|
||||||
if (IS_SET(MODE_BLINK))
|
case 6: /* Steady bar */
|
||||||
break;
|
|
||||||
/* FALLTHROUGH */
|
|
||||||
case 6: /* steady bar */
|
|
||||||
XftDrawRect(xw.draw, &drawcol,
|
XftDrawRect(xw.draw, &drawcol,
|
||||||
borderpx + cx * win.cw,
|
borderpx + cx * win.cw,
|
||||||
borderpx + cy * win.ch,
|
borderpx + cy * win.ch,
|
||||||
cursorthickness, win.ch);
|
cursorthickness, win.ch);
|
||||||
break;
|
break;
|
||||||
case 7: /* blinking st cursor */
|
|
||||||
if (IS_SET(MODE_BLINK))
|
|
||||||
break;
|
|
||||||
/* FALLTHROUGH */
|
|
||||||
case 8: /* steady st cursor */
|
|
||||||
g.u = (unsigned int) xsetcursor;
|
|
||||||
xdrawglyph(g, cx, cy);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
XftDrawRect(xw.draw, &drawcol,
|
XftDrawRect(xw.draw, &drawcol,
|
||||||
@@ -1791,9 +1671,6 @@ xseticontitle(char *p)
|
|||||||
XTextProperty prop;
|
XTextProperty prop;
|
||||||
DEFAULT(p, opt_title);
|
DEFAULT(p, opt_title);
|
||||||
|
|
||||||
if (p[0] == '\0')
|
|
||||||
p = opt_title;
|
|
||||||
|
|
||||||
if (Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle,
|
if (Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle,
|
||||||
&prop) != Success)
|
&prop) != Success)
|
||||||
return;
|
return;
|
||||||
@@ -1808,9 +1685,6 @@ xsettitle(char *p)
|
|||||||
XTextProperty prop;
|
XTextProperty prop;
|
||||||
DEFAULT(p, opt_title);
|
DEFAULT(p, opt_title);
|
||||||
|
|
||||||
if (p[0] == '\0')
|
|
||||||
p = opt_title;
|
|
||||||
|
|
||||||
if (Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle,
|
if (Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle,
|
||||||
&prop) != Success)
|
&prop) != Success)
|
||||||
return;
|
return;
|
||||||
@@ -1917,12 +1791,9 @@ xsetmode(int set, unsigned int flags)
|
|||||||
int
|
int
|
||||||
xsetcursor(int cursor)
|
xsetcursor(int cursor)
|
||||||
{
|
{
|
||||||
if (!BETWEEN(cursor, 0, 8)) /* 7-8: st extensions */
|
if (!BETWEEN(cursor, 0, 7)) /* 7: st extension */
|
||||||
return 1;
|
return 1;
|
||||||
win.cursor = cursor;
|
win.cursor = cursor;
|
||||||
cursorblinks = win.cursor == 0 || win.cursor == 1 ||
|
|
||||||
win.cursor == 3 || win.cursor == 5 ||
|
|
||||||
win.cursor == 7;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2169,10 +2040,6 @@ run(void)
|
|||||||
if (FD_ISSET(ttyfd, &rfd) || xev) {
|
if (FD_ISSET(ttyfd, &rfd) || xev) {
|
||||||
if (!drawing) {
|
if (!drawing) {
|
||||||
trigger = now;
|
trigger = now;
|
||||||
if (IS_SET(MODE_BLINK)) {
|
|
||||||
win.mode ^= MODE_BLINK;
|
|
||||||
}
|
|
||||||
lastblink = now;
|
|
||||||
drawing = 1;
|
drawing = 1;
|
||||||
}
|
}
|
||||||
timeout = (maxlatency - TIMEDIFF(now, trigger)) \
|
timeout = (maxlatency - TIMEDIFF(now, trigger)) \
|
||||||
@@ -2183,7 +2050,7 @@ run(void)
|
|||||||
|
|
||||||
/* idle detected or maxlatency exhausted -> draw */
|
/* idle detected or maxlatency exhausted -> draw */
|
||||||
timeout = -1;
|
timeout = -1;
|
||||||
if (blinktimeout && (cursorblinks || tattrset(ATTR_BLINK))) {
|
if (blinktimeout && tattrset(ATTR_BLINK)) {
|
||||||
timeout = blinktimeout - TIMEDIFF(now, lastblink);
|
timeout = blinktimeout - TIMEDIFF(now, lastblink);
|
||||||
if (timeout <= 0) {
|
if (timeout <= 0) {
|
||||||
if (-timeout > blinktimeout) /* start visible */
|
if (-timeout > blinktimeout) /* start visible */
|
||||||
@@ -2261,11 +2128,6 @@ main(int argc, char *argv[])
|
|||||||
case 'v':
|
case 'v':
|
||||||
die("%s " VERSION "\n", argv0);
|
die("%s " VERSION "\n", argv0);
|
||||||
break;
|
break;
|
||||||
case 'z':
|
|
||||||
defaultfontsize = strtod(EARGF(usage()), NULL);
|
|
||||||
if (!(defaultfontsize > 0))
|
|
||||||
usage();
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
usage();
|
usage();
|
||||||
} ARGEND;
|
} ARGEND;
|
||||||
|
|||||||
Reference in new issue
Block a user