mirror of
https://github.com/tiyn/st
synced 2025-12-16 16:49:44 +01:00
Compare commits
7 Commits
font2
...
3ec0bd40b0
| Author | SHA1 | Date | |
|---|---|---|---|
| 3ec0bd40b0 | |||
| c89bbcf33d | |||
| 2ede01a088 | |||
| 5491457642 | |||
| bf7eebfb7d | |||
| bb3d4dba10 | |||
| 7c08bf621b |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -50,3 +50,5 @@ modules.order
|
||||
Module.symvers
|
||||
Mkfile.old
|
||||
dkms.conf
|
||||
|
||||
st
|
||||
|
||||
43
README.md
Normal file
43
README.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# st
|
||||
|
||||
This is my patched version of st. The base version is directly from suckless.org.
|
||||
This belongs to my larbs installation script, but does not directly depend on it.
|
||||
It is supposed to work in the environment after the larbs-base-installation.
|
||||
|
||||
## Patches
|
||||
|
||||
The list below shows the currently applied patches to the master branch.
|
||||
|
||||
- st-alpha-20220206-0.8.5.diff (adds transparency)
|
||||
- st-anysize-20220718-baa9357.diff (st leaves no gaps if the height/width doesn't match a multiple of
|
||||
character height)
|
||||
- st-ligatures-scrollback-20230105-0.9.diff (scrollback compatible addition of ligatures)
|
||||
- st-scrollback-0.8.5.diff (add scrollback functionality)
|
||||
|
||||
## Hotkeys
|
||||
|
||||
There are various shortcuts and hotkeys used in this version. Included in my build are the following.
|
||||
|
||||
| ModKey | Shift | Key | Function |
|
||||
| ------ | ----- | --------------- | --------------- |
|
||||
| Alt | | Break | Send break |
|
||||
| Alt | | Print | Toggle printer |
|
||||
| Alt | | Print | Print screen |
|
||||
| | Shift | Insert | Clipboard paste |
|
||||
| Alt | | c | Clipboard copy |
|
||||
| Alt | | v | Clipboard paste |
|
||||
| Alt | | p | Selected paste |
|
||||
| Alt | | NumLock | Toggle Numlock |
|
||||
| Alt | | k | Scroll up |
|
||||
| Alt | | j | Scroll down |
|
||||
| | | MouseScrollUp | Scroll up |
|
||||
| | | MouseScrollDown | Scroll down |
|
||||
| Alt | Shift | u | Zoom in |
|
||||
| Alt | Shift | i | Zoom out |
|
||||
|
||||
## Installation
|
||||
|
||||
The most basic way is to clone the repository and then invoke make.
|
||||
|
||||
- `git clone https://github.com/tiyn/st`
|
||||
- `make clean install`
|
||||
95
config.def.h
95
config.def.h
@@ -5,15 +5,9 @@
|
||||
*
|
||||
* font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
|
||||
*/
|
||||
static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
|
||||
static char *font = "mono:pixelsize=16:antialias=true:autohint=true";
|
||||
static int borderpx = 2;
|
||||
|
||||
/* Spare fonts */
|
||||
static char *font2[] = {
|
||||
/* "Inconsolata for Powerline:pixelsize=12:antialias=true:autohint=true", */
|
||||
/* "Hack Nerd Font Mono:pixelsize=11:antialias=true:autohint=true", */
|
||||
};
|
||||
|
||||
/*
|
||||
* What program is execed by st depends of these precedence rules:
|
||||
* 1: program passed with -e
|
||||
@@ -102,32 +96,27 @@ unsigned int tabspaces = 8;
|
||||
/* Terminal colors (16 first used in escape sequence) */
|
||||
static const char *colorname[] = {
|
||||
/* 8 normal colors */
|
||||
"black",
|
||||
"red3",
|
||||
"green3",
|
||||
"yellow3",
|
||||
"blue2",
|
||||
"magenta3",
|
||||
"cyan3",
|
||||
"gray90",
|
||||
|
||||
/* 8 bright colors */
|
||||
"gray50",
|
||||
"red",
|
||||
"green",
|
||||
"yellow",
|
||||
"#5c5cff",
|
||||
"magenta",
|
||||
"cyan",
|
||||
"white",
|
||||
|
||||
"#1e1e1e",
|
||||
"#f44747",
|
||||
"#608b4e",
|
||||
"#dcdcaa",
|
||||
"#569cd6",
|
||||
"#c678dd",
|
||||
"#56b6c2",
|
||||
"#d4d4d4",
|
||||
"#808080",
|
||||
"#f44747",
|
||||
"#608b4e",
|
||||
"#dcdcaa",
|
||||
"#569cd6",
|
||||
"#c678dd",
|
||||
"#56b6c2",
|
||||
"#d4d4d4",
|
||||
[255] = 0,
|
||||
|
||||
/* more colors can be added after 255 to use with DefaultXX */
|
||||
"#cccccc",
|
||||
"#555555",
|
||||
"gray90", /* default foreground colour */
|
||||
"black", /* default background colour */
|
||||
"#1e1e1e", /* 256 -> bg */
|
||||
"#d4d4d4", /* 257 -> fg */
|
||||
"#a4a4a4", /* 258 -> cursor */
|
||||
};
|
||||
|
||||
|
||||
@@ -135,10 +124,10 @@ static const char *colorname[] = {
|
||||
* Default colors (colorname index)
|
||||
* foreground, background, cursor, reverse cursor
|
||||
*/
|
||||
unsigned int defaultfg = 258;
|
||||
unsigned int defaultbg = 259;
|
||||
unsigned int defaultcs = 256;
|
||||
static unsigned int defaultrcs = 257;
|
||||
unsigned int defaultfg = 257;
|
||||
unsigned int defaultbg = 256;
|
||||
unsigned int defaultcs = 258;
|
||||
static unsigned int defaultrcs = 0;
|
||||
|
||||
/*
|
||||
* Default shape of cursor
|
||||
@@ -181,12 +170,11 @@ static uint forcemousemod = ShiftMask;
|
||||
* Beware that overloading Button1 will disable the selection.
|
||||
*/
|
||||
static MouseShortcut mshortcuts[] = {
|
||||
/* mask button function argument release */
|
||||
{ XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 },
|
||||
{ ShiftMask, Button4, ttysend, {.s = "\033[5;2~"} },
|
||||
{ XK_ANY_MOD, Button4, ttysend, {.s = "\031"} },
|
||||
{ ShiftMask, Button5, ttysend, {.s = "\033[6;2~"} },
|
||||
{ XK_ANY_MOD, Button5, ttysend, {.s = "\005"} },
|
||||
/* mask button function argument release */
|
||||
{ Button4, XK_NO_MOD, "\031" },
|
||||
{ Button5, XK_NO_MOD, "\005" },
|
||||
{ XK_NO_MOD, Button4, kscrollup, {.i = 1} },
|
||||
{ XK_NO_MOD, Button5, kscrolldown,{.i = 1} },
|
||||
};
|
||||
|
||||
/* Internal keyboard shortcuts. */
|
||||
@@ -195,18 +183,19 @@ static MouseShortcut mshortcuts[] = {
|
||||
|
||||
static Shortcut shortcuts[] = {
|
||||
/* mask keysym function argument */
|
||||
{ XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} },
|
||||
{ ControlMask, XK_Print, toggleprinter, {.i = 0} },
|
||||
{ ShiftMask, XK_Print, printscreen, {.i = 0} },
|
||||
{ XK_ANY_MOD, XK_Print, printsel, {.i = 0} },
|
||||
{ TERMMOD, XK_Prior, zoom, {.f = +1} },
|
||||
{ TERMMOD, XK_Next, zoom, {.f = -1} },
|
||||
{ TERMMOD, XK_Home, zoomreset, {.f = 0} },
|
||||
{ TERMMOD, XK_C, clipcopy, {.i = 0} },
|
||||
{ TERMMOD, XK_V, clippaste, {.i = 0} },
|
||||
{ TERMMOD, XK_Y, selpaste, {.i = 0} },
|
||||
{ ShiftMask, XK_Insert, selpaste, {.i = 0} },
|
||||
{ TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
|
||||
{ MODKEY, XK_Break, sendbreak, {.i = 0} },
|
||||
{ MODKEY, XK_Print, toggleprinter, {.i = 0} },
|
||||
{ MODKEY, XK_Print, printscreen, {.i = 0} },
|
||||
{ ShiftMask, XK_Insert, clippaste, {.i = 0} },
|
||||
{ MODKEY, XK_c, clipcopy, {.i = 0} },
|
||||
{ MODKEY, XK_v, clippaste, {.i = 0} },
|
||||
{ MODKEY, XK_p, selpaste, {.i = 0} },
|
||||
{ MODKEY, XK_Num_Lock, numlock, {.i = 0} },
|
||||
{ MODKEY, XK_k, kscrollup, {.i = 1} },
|
||||
{ MODKEY, XK_j, kscrolldown, {.i = 1} },
|
||||
{ MODKEY, XK_U, zoom, {.f = +1} },
|
||||
{ MODKEY|ShiftMask, XK_U, zoom, {.f = +1} },
|
||||
{ MODKEY|ShiftMask, XK_I, zoom, {.f = -1} },
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -1,163 +0,0 @@
|
||||
From 1635e04d3643dd4caa0c7c2043b585c6d7e4705f Mon Sep 17 00:00:00 2001
|
||||
From: Rizqi Nur Assyaufi <bandithijo@gmail.com>
|
||||
Date: Mon, 18 Jul 2022 01:15:45 +0800
|
||||
Subject: [PATCH] [st][patch][font2] Add patch for st-0.8.5
|
||||
|
||||
---
|
||||
config.def.h | 6 +++
|
||||
x.c | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 107 insertions(+)
|
||||
|
||||
diff --git a/config.def.h b/config.def.h
|
||||
index 91ab8ca..717b2f0 100644
|
||||
--- a/config.def.h
|
||||
+++ b/config.def.h
|
||||
@@ -6,6 +6,12 @@
|
||||
* font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
|
||||
*/
|
||||
static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
|
||||
+/* Spare fonts */
|
||||
+static char *font2[] = {
|
||||
+/* "Inconsolata for Powerline:pixelsize=12:antialias=true:autohint=true", */
|
||||
+/* "Hack Nerd Font Mono:pixelsize=11:antialias=true:autohint=true", */
|
||||
+};
|
||||
+
|
||||
static int borderpx = 2;
|
||||
|
||||
/*
|
||||
diff --git a/x.c b/x.c
|
||||
index 8a16faa..220fc4f 100644
|
||||
--- a/x.c
|
||||
+++ b/x.c
|
||||
@@ -157,6 +157,8 @@ static void xhints(void);
|
||||
static int xloadcolor(int, const char *, Color *);
|
||||
static int xloadfont(Font *, FcPattern *);
|
||||
static void xloadfonts(const char *, double);
|
||||
+static int xloadsparefont(FcPattern *, int);
|
||||
+static void xloadsparefonts(void);
|
||||
static void xunloadfont(Font *);
|
||||
static void xunloadfonts(void);
|
||||
static void xsetenv(void);
|
||||
@@ -306,6 +308,7 @@ zoomabs(const Arg *arg)
|
||||
{
|
||||
xunloadfonts();
|
||||
xloadfonts(usedfont, arg->f);
|
||||
+ xloadsparefonts();
|
||||
cresize(0, 0);
|
||||
redraw();
|
||||
xhints();
|
||||
@@ -1034,6 +1037,101 @@ xloadfonts(const char *fontstr, double fontsize)
|
||||
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
|
||||
xunloadfont(Font *f)
|
||||
{
|
||||
@@ -1131,6 +1229,9 @@ xinit(int cols, int rows)
|
||||
usedfont = (opt_font == NULL)? font : opt_font;
|
||||
xloadfonts(usedfont, 0);
|
||||
|
||||
+ /* spare fonts */
|
||||
+ xloadsparefonts();
|
||||
+
|
||||
/* colors */
|
||||
xw.cmap = XDefaultColormap(xw.dpy, xw.scr);
|
||||
xloadcols();
|
||||
--
|
||||
2.37.1
|
||||
|
||||
102
x.c
102
x.c
@@ -157,8 +157,6 @@ static void xhints(void);
|
||||
static int xloadcolor(int, const char *, Color *);
|
||||
static int xloadfont(Font *, FcPattern *);
|
||||
static void xloadfonts(const char *, double);
|
||||
static int xloadsparefont(FcPattern *, int);
|
||||
static void xloadsparefonts(void);
|
||||
static void xunloadfont(Font *);
|
||||
static void xunloadfonts(void);
|
||||
static void xsetenv(void);
|
||||
@@ -308,7 +306,6 @@ zoomabs(const Arg *arg)
|
||||
{
|
||||
xunloadfonts();
|
||||
xloadfonts(usedfont, arg->f);
|
||||
xloadsparefonts();
|
||||
cresize(0, 0);
|
||||
redraw();
|
||||
xhints();
|
||||
@@ -1053,102 +1050,6 @@ xloadfonts(const char *fontstr, double fontsize)
|
||||
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
|
||||
xunloadfont(Font *f)
|
||||
{
|
||||
@@ -1246,9 +1147,6 @@ xinit(int cols, int rows)
|
||||
usedfont = (opt_font == NULL)? font : opt_font;
|
||||
xloadfonts(usedfont, 0);
|
||||
|
||||
/* spare fonts */
|
||||
xloadsparefonts();
|
||||
|
||||
/* colors */
|
||||
xw.cmap = XDefaultColormap(xw.dpy, xw.scr);
|
||||
xloadcols();
|
||||
|
||||
Reference in New Issue
Block a user