286 lines
11 KiB
D
286 lines
11 KiB
D
module config;
|
|
|
|
import st;
|
|
import patches;
|
|
import deimos.X11.X : KeySym, Mod1Mask;
|
|
|
|
// Appearance
|
|
__gshared string font = "TamzenForPowerline:pixelsize=16:style=regular:antialias=false:hinting=false";
|
|
|
|
static if (isPatchEnabled!"FONT2_PATCH") {
|
|
__gshared string[] font2 = [];
|
|
}
|
|
|
|
static if (isPatchEnabled!"BACKGROUND_IMAGE_PATCH") {
|
|
__gshared string bgfile = "/path/to/image.ff";
|
|
__gshared int pseudotransparency = 0;
|
|
}
|
|
|
|
static if (isPatchEnabled!"RELATIVEBORDER_PATCH") {
|
|
__gshared int borderperc = 20;
|
|
} else {
|
|
extern(C) __gshared int borderpx = 2;
|
|
}
|
|
|
|
static if (isPatchEnabled!"OPENURLONCLICK_PATCH") {
|
|
__gshared uint url_opener_modkey = ShiftMask; // Require Shift to be held
|
|
__gshared string url_opener = "xdg-open";
|
|
}
|
|
|
|
// Shell settings
|
|
__gshared string shell = "/bin/sh";
|
|
extern(C) __gshared char*[2] _shell_array = [ cast(char*)"/bin/sh", null ];
|
|
extern(C) __gshared char** shell_ptr;
|
|
extern(C) __gshared char* utmp = null;
|
|
extern(C) __gshared char* scroll = null;
|
|
extern(C) __gshared char* stty_args = cast(char*)"stty raw pass8 nl -echo -iexten -cstopb 38400";
|
|
|
|
// Identification sequence
|
|
static if (isPatchEnabled!"SIXEL_PATCH") {
|
|
extern(C) __gshared char* vtiden = cast(char*)"\033[?62;4c";
|
|
__gshared const int sixelbyteorder = 0; // LSBFirst
|
|
} else {
|
|
extern(C) __gshared char* vtiden = cast(char*)"\033[?6c";
|
|
}
|
|
|
|
// Kerning / character bounding-box multipliers
|
|
__gshared float cwscale = 1.0;
|
|
extern(C) __gshared float chscale = 1.0;
|
|
|
|
// Word delimiters
|
|
extern(C) __gshared wchar* worddelimiters = cast(wchar*)" ";
|
|
|
|
static if (isPatchEnabled!"KEYBOARDSELECT_PATCH" && isPatchEnabled!"REFLOW_PATCH") {
|
|
extern(C) __gshared wchar* kbds_sdelim = cast(wchar*)"!\"#$%&'()*+,-./:;<=>?@[\\]^`{|}~ ";
|
|
extern(C) __gshared wchar* kbds_ldelim = cast(wchar*)" ";
|
|
}
|
|
|
|
// Selection timeouts (in milliseconds)
|
|
extern(C) __gshared uint doubleclicktimeout = 300;
|
|
extern(C) __gshared uint tripleclicktimeout = 600;
|
|
|
|
// Alt screens
|
|
extern(C) __gshared int allowaltscreen = 1;
|
|
|
|
// Window operations
|
|
extern(C) __gshared int allowwindowops = 0;
|
|
|
|
// Draw latency range in ms
|
|
extern(C) __gshared double minlatency = 2;
|
|
extern(C) __gshared double maxlatency = 33;
|
|
|
|
// Tab spaces
|
|
extern(C) __gshared uint tabspaces = 8;
|
|
|
|
// Terminal name
|
|
extern(C) __gshared char* termname = cast(char*)"st-256color";
|
|
|
|
// Colors
|
|
extern(C) __gshared uint defaultfg = 259;
|
|
extern(C) __gshared uint defaultbg = 258;
|
|
extern(C) __gshared uint defaultcs = 256;
|
|
extern(C) __gshared uint defaultrcs = 257;
|
|
extern(C) __gshared uint defaultattr = 11;
|
|
extern(C) __gshared uint mousefg = 7;
|
|
extern(C) __gshared uint mousebg = 0;
|
|
|
|
static if (isPatchEnabled!"ALPHA_PATCH") {
|
|
extern(C) __gshared float alpha = 0.8;
|
|
static if (isPatchEnabled!"ALPHA_FOCUS_HIGHLIGHT_PATCH") {
|
|
extern(C) __gshared float alphaUnfocused = 0.6;
|
|
}
|
|
static if (isPatchEnabled!"ALPHA_GRADIENT_PATCH") {
|
|
extern(C) __gshared float grad_alpha = 0.54; // alpha value that'll change
|
|
extern(C) __gshared float stat_alpha = 0.46; // constant alpha value that'll get added to grad_alpha
|
|
}
|
|
}
|
|
|
|
static if (isPatchEnabled!"BOXDRAW_PATCH") {
|
|
extern(C) __gshared const int boxdraw = 1;
|
|
extern(C) __gshared const int boxdraw_bold = 1;
|
|
extern(C) __gshared const int boxdraw_braille = 1;
|
|
}
|
|
|
|
// ASCII printable characters for font width measurement
|
|
__gshared immutable string ascii_printable =
|
|
" !\"#$%&'()*+,-./0123456789:;<=>?" ~
|
|
"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" ~
|
|
"`abcdefghijklmnopqrstuvwxyz{|}~";
|
|
|
|
// Cursor settings
|
|
__gshared int cursorstyle = 1;
|
|
__gshared int cursorshape = 2;
|
|
extern(C) __gshared uint cursorthickness = 2;
|
|
extern(C) __gshared Rune stcursor = 0x2603; /* snowman (U+2603) */
|
|
|
|
// Window settings
|
|
extern(C) __gshared int bellvolume = 0;
|
|
|
|
// Timing settings
|
|
extern(C) __gshared uint blinktimeout = 800;
|
|
|
|
// Import X11 key symbols and modifiers
|
|
import deimos.X11.keysym;
|
|
import deimos.X11.X : ControlMask, ShiftMask;
|
|
|
|
// Import needed functions
|
|
import st : sendbreak, toggleprinter, printscreen, printsel, kscrollup, kscrolldown;
|
|
import x : clipcopy, clippaste, selpaste;
|
|
|
|
// Keyboard shortcuts
|
|
static if (isPatchEnabled!"SCROLLBACK_PATCH") {
|
|
extern(C) __gshared const(Shortcut)[] shortcuts = [
|
|
// Clipboard shortcuts
|
|
Shortcut(TERMMOD, XK_C, &clipcopy, Arg(0), 0), // Ctrl+Shift+C - copy
|
|
Shortcut(TERMMOD, XK_V, &clippaste, Arg(0), 0), // Ctrl+Shift+V - paste from clipboard
|
|
// Scrollback support
|
|
Shortcut(ShiftMask, XK_Prior, &kscrollup, Arg(-1), 0), // Shift+PageUp
|
|
Shortcut(ShiftMask, XK_Next, &kscrolldown, Arg(-1), 0), // Shift+PageDown
|
|
];
|
|
} else {
|
|
extern(C) __gshared const(Shortcut)[] shortcuts = [
|
|
// Clipboard shortcuts
|
|
Shortcut(TERMMOD, XK_C, &clipcopy, Arg(0), 0), // Ctrl+Shift+C - copy
|
|
Shortcut(TERMMOD, XK_V, &clippaste, Arg(0), 0), // Ctrl+Shift+V - paste from clipboard
|
|
];
|
|
}
|
|
|
|
// Key modifier constants
|
|
enum uint XK_ANY_MOD = uint.max;
|
|
enum uint XK_NO_MOD = 0;
|
|
enum uint TERMMOD = ControlMask | ShiftMask;
|
|
|
|
// Key mappings - essential keys for basic functionality
|
|
extern(C) __gshared const(Key)[] key = [
|
|
// Backspace - standard DEL (0x7F) for Linux terminals
|
|
{ XK_BackSpace, XK_NO_MOD, cast(char*)"\177", 0, 0},
|
|
{ XK_BackSpace, Mod1Mask, cast(char*)"\033\177", 0, 0},
|
|
// Delete
|
|
{ XK_Delete, XK_ANY_MOD, cast(char*)"\033[P", -1, 0},
|
|
{ XK_Delete, XK_ANY_MOD, cast(char*)"\033[3~", +1, 0},
|
|
// Arrow keys
|
|
{ XK_Up, XK_NO_MOD, cast(char*)"\033OA", 0, -1},
|
|
{ XK_Up, XK_NO_MOD, cast(char*)"\033[A", 0, +1},
|
|
{ XK_Down, XK_NO_MOD, cast(char*)"\033OB", 0, -1},
|
|
{ XK_Down, XK_NO_MOD, cast(char*)"\033[B", 0, +1},
|
|
{ XK_Left, XK_NO_MOD, cast(char*)"\033OD", 0, -1},
|
|
{ XK_Left, XK_NO_MOD, cast(char*)"\033[D", 0, +1},
|
|
{ XK_Right, XK_NO_MOD, cast(char*)"\033OC", 0, -1},
|
|
{ XK_Right, XK_NO_MOD, cast(char*)"\033[C", 0, +1},
|
|
// Home/End
|
|
{ XK_Home, XK_ANY_MOD, cast(char*)"\033[H", 0, -1},
|
|
{ XK_Home, XK_ANY_MOD, cast(char*)"\033[1~", 0, +1},
|
|
{ XK_End, XK_ANY_MOD, cast(char*)"\033[4~", 0, 0},
|
|
// Page Up/Down
|
|
{ XK_Prior, XK_ANY_MOD, cast(char*)"\033[5~", 0, 0},
|
|
{ XK_Next, XK_ANY_MOD, cast(char*)"\033[6~", 0, 0},
|
|
];
|
|
|
|
extern(C) __gshared const(KeySym)[] mappedkeys = [
|
|
/* Special keys that need to be handled */
|
|
XK_BackSpace,
|
|
XK_Delete,
|
|
XK_Up,
|
|
XK_Down,
|
|
XK_Left,
|
|
XK_Right,
|
|
XK_Home,
|
|
XK_End,
|
|
XK_Prior,
|
|
XK_Next,
|
|
];
|
|
|
|
// Mouse shortcuts
|
|
import x : MouseShortcut;
|
|
import deimos.X11.X : Button1, Button2, Button3, Button4, Button5;
|
|
|
|
static if (isPatchEnabled!"SCROLLBACK_MOUSE_PATCH") {
|
|
static if (isPatchEnabled!"SCROLLBACK_MOUSE_ALTSCREEN_PATCH") {
|
|
extern(C) __gshared const(MouseShortcut)[] mshortcuts = [
|
|
// Clipboard pasting
|
|
MouseShortcut(XK_NO_MOD, Button2, &selpaste, Arg(0), 1, 0), // Middle-click paste (primary)
|
|
MouseShortcut(ShiftMask, Button2, &clippaste, Arg(0), 1, 0), // Shift+Middle-click paste (clipboard)
|
|
// Primary screen (normal mode) - scroll without modifier
|
|
MouseShortcut(0, Button4, &kscrollup, Arg(1), 0, x.S_PRI), // ScrollUp (no modifier)
|
|
MouseShortcut(0, Button5, &kscrolldown, Arg(1), 0, x.S_PRI), // ScrollDown (no modifier)
|
|
// With Shift for faster scrolling
|
|
MouseShortcut(ShiftMask, Button4, &kscrollup, Arg(2), 0, x.S_PRI), // Shift+ScrollUp
|
|
MouseShortcut(ShiftMask, Button5, &kscrolldown, Arg(2), 0, x.S_PRI), // Shift+ScrollDown
|
|
];
|
|
} else {
|
|
extern(C) __gshared const(MouseShortcut)[] mshortcuts = [
|
|
// Clipboard pasting
|
|
MouseShortcut(XK_NO_MOD, Button2, &selpaste, Arg(0), 1, 0), // Middle-click paste (primary)
|
|
MouseShortcut(ShiftMask, Button2, &clippaste, Arg(0), 1, 0), // Shift+Middle-click paste (clipboard)
|
|
MouseShortcut(ShiftMask, Button4, &kscrollup, Arg(2), 0, x.S_PRI), // Shift+ScrollUp
|
|
MouseShortcut(ShiftMask, Button5, &kscrolldown, Arg(2), 0, x.S_PRI), // Shift+ScrollDown
|
|
];
|
|
}
|
|
} else {
|
|
extern(C) __gshared const(MouseShortcut)[] mshortcuts = [
|
|
// Clipboard pasting (even without scrollback)
|
|
MouseShortcut(XK_NO_MOD, Button2, &selpaste, Arg(0), 1, 0), // Middle-click paste (primary)
|
|
MouseShortcut(ShiftMask, Button2, &clippaste, Arg(0), 1, 0), // Shift+Middle-click paste (clipboard)
|
|
];
|
|
}
|
|
|
|
// Function to get mouse shortcuts (for x.d to access)
|
|
extern(C) const(MouseShortcut)[] getMouseShortcuts() {
|
|
return mshortcuts;
|
|
}
|
|
|
|
// Selection masks
|
|
extern(C) __gshared const(uint)[] selmasks = [
|
|
0, // SEL_REGULAR (placeholder)
|
|
Mod1Mask, // SEL_RECTANGULAR
|
|
];
|
|
extern(C) __gshared int selmaskslen = 2;
|
|
|
|
// Color names (256 standard colors + default fg/bg)
|
|
__gshared const(char)*[260] colorname = [
|
|
// 16 basic colors
|
|
"#202020", "#e84f4f", "#b8d68c", "#e2a959",
|
|
"#7dc1cf", "#9b64fb", "#6d878d", "#bbbbbb",
|
|
"#735264", "#d43131", "#578d3b", "#f39713",
|
|
"#4e9fb1", "#7c1ede", "#42717b", "#cccccc",
|
|
|
|
// 240 extended colors (6x6x6 color cube + 24 grayscale)
|
|
// These will be calculated programmatically
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
null, null, null, null, null, null, null, null,
|
|
|
|
// Special colors at specific indices to match C config
|
|
"#dddddd", // [256] cursor color
|
|
"#555555", // [257] reverse cursor
|
|
"#151515", // [258] default background colour
|
|
"#d5cad5", // [259] default foreground colour
|
|
];
|