Change st zoom keybind

This commit is contained in:
davidovski 2023-11-08 00:33:43 +00:00
parent 57aad4d528
commit 90a7d7ceb3
17 changed files with 82 additions and 529 deletions

View File

@ -378,7 +378,7 @@ o(^_-)O Boxer
{{|└(>o< )┘|}} Up In Arms
(^^)// Applause (2)
( `_)?(_' ) Dueling
(´~`) WearY
(´~`) Weary
v(^_^)v Victory (3)
(ノ_ _)ノ Surrender
<( ・ェ-)<} Bow and Arrow

View File

@ -4,7 +4,7 @@
! #define font1 xft:minecraft enchantment:minispace=False:size=10:antialias=true
! #define spacing -2
#define font1 xft:mononoki:minispace=False:size=10:antialias=true
#define font1 xft:mononoki:minispace=False:size=14:antialias=true
#define spacing 2
#define font2 xft:MesloLGM Nerd Font Mono:minispace=False:size=10
@ -100,3 +100,10 @@ URxvt*scrollTtyKeypress: true
URxvt.keysym.Shift-Control-V: eval:paste_clipboard
URxvt.keysym.Shift-Control-C: eval:selection_to_clipboard
*label.renderTable: variable
*.renderTable.variable.fontName: Sans
*.renderTable.variable.fontSize: 10
*.renderTable.variable.fontType: FONT_IS_XFT

View File

@ -4,17 +4,16 @@ setup=0
COLOR_BACKGROUND="#282a2e"
COLOR_PRIMARY="#fefefe"
COLOR_SECONDARY="#707880"
BORDER=3
BORDER=2
hsetroot -solid $COLOR_BACKGROUND &
xsetroot -cursor_name left_ptr &
xrdb ~/.config/Xdefaults
pgrep -x sxhkd > /dev/null || sxhkd &
#pgrep -x picom > /dev/null || picom &
pgrep -x picom > /dev/null || picom &
pgrep -x xss-lock > /dev/null || xss-lock slock &
pgrep -x bg.sh > /dev/null || $HOME/.scripts/bg.sh > /dev/null &
pgrep -x xcompmgr > /dev/null || xcompmgr -c -C -t-5 -l-5 -r4.2 -o.55 &
[ -f "$HOME/.config/xrandr.sh" ] && . $HOME/.config/xrandr.sh
@ -30,6 +29,7 @@ for m in $(bspc query -M --names); do
bspc monitor $m -d ${m}1 ${m}2 ${m}3 ${m}4 ${m}5 ${m}6 ${m}7 ${m}8 ${m}9
done
$HOME/.config/polybar/launch.sh &
bspc config border_width $BORDER
@ -38,19 +38,19 @@ $HOME/.scripts/toggle-gap.sh
## individual rules
bspc rule -a Zathura state=tiled
bspc rule -a feh state=fullscreen
bspc rule -a feh state=floating
bspc config focus_follows_pointer false
bspc config normal_border_color "$COLOR_SECONDARY"
bspc config active_border_color "$COLOR_SECONDARY"
bspc config focused_border_color "$COLOR_PRIMARY"
wmname
wmname bspwm
sleep 1
pgrep -x pipewire > /dev/null || pipewire &
pgrep -x pipewire-pulse > /dev/null || pipewire-pulse &
pgrep -x wireplumber > /dev/null || wireplumber &
#pgrep -x pipewire > /dev/null || pipewire &
#pgrep -x pipewire-pulse > /dev/null || pipewire-pulse &
#pgrep -x wireplumber > /dev/null || wireplumber &
$HOME/.scripts/start-mpd

View File

@ -56,10 +56,10 @@
# For alsa 'source' will be the capture device.
# For fifo 'source' will be the path to fifo-file.
# For shmem 'source' will be /squeezelite-AA:BB:CC:DD:EE:FF where 'AA:BB:CC:DD:EE:FF' will be squeezelite's MAC address
source = auto
; source = auto
; method = alsa
; source = hw:Loopback,1
method = alsa
source = hw:Loopback,1
; method = fifo
; source = /tmp/mpd.fifo

View File

@ -1,11 +1,5 @@
file:///home/david/docs/lmms
file:///home/david/docs docs
file:///home/david/pics pics
file:///home/david/dl dl
file:///home/david/video video
file:///home/david/music music
file:///home/david/pics/screenshot screenshot
file:///home/david/docs/proj proj
file:///tmp tmp
file:///home/david/video/anime
file:///home/david/docs/proj/ardour
file:///home/x/docs/proj
file:///home/x/dl
file:///tmp
file:///
file:///home/x/pics/screenshot

View File

@ -13,6 +13,7 @@ application/x-extension-shtml=userapp-Firefox-AK3I01.desktop
application/xhtml+xml=userapp-Firefox-AK3I01.desktop
application/x-extension-xhtml=userapp-Firefox-AK3I01.desktop
application/x-extension-xht=userapp-Firefox-AK3I01.desktop
x-scheme-handler/eclipse+command x-scheme-handler/eclipse+mpc=_usr_lib_eclipse_.desktop
[Added Associations]
x-scheme-handler/http=userapp-Firefox-AK3I01.desktop;

View File

@ -15,24 +15,14 @@ audio_output {
audio_output {
type "pulse"
name "mpd pulse"
name "mpd"
}
#audio_output {
# type "jack"
# name "MPD jack"
#}
#audio_output {
#type "pipewire"
#name "MPD pipewire"
#}
audio_output {
type "fifo"
name "Visualizer feed"
path "/tmp/mpd.fifo"
format "22050:16:2"
format "44100:16:2"
}
db_file "~/.config/mpd/database"

View File

@ -1 +1,5 @@
vo=x11
#vo=gpu
hwdec=auto
screenshot-directory=~/pics/screenshot
glsl-shaders="~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN.glsl:~~/shaders/Anime4K_Restore_CNN_Moderate_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_S.glsl"

View File

@ -185,7 +185,7 @@ opacity-rule = [
# Bad in performance, with driver-dependent behavior.
# The name of the switch may change without prior notifications.
#
blur-background = false;
blur-background = true;
# Blur background of windows when the window frame is not opaque.
# Implies:
@ -237,7 +237,7 @@ daemon = true
# `xrender` is the default one.
#
experimental-backends = true;
backend = "xrender";
backend = "glx";
vsync = true
@ -439,8 +439,8 @@ log-level = "info";
#
wintypes:
{
normal = { fade = false; shadow = true;}
tooltip = { fade = false; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
normal = { fade = true; shadow = true;}
tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
dock = { full-shadow = true; }
dnd = { shadow = true; }
popup_menu = { shadow = true; }

View File

@ -40,7 +40,7 @@ modules-right = time
[bar/ws]
inherit = bar/base
width = 2510
width = 1870
offset-x = 25
offset-y = 10
modules-left = workspaces xwindow
@ -140,7 +140,7 @@ label-muted = "%{T3} %{T-}--%"
type = custom/script
exec = pactl list sources | grep -qi 'Mute: yes' && echo "" || echo ""
interval = 1
click-left = $HOME/.scripts/toggle-mute.sh
click-left = $HOME/.scripts/toggle-mic.sh
[module/vpn]
type = custom/script
@ -153,7 +153,7 @@ format-prefix-foreground = #5b
[module/temperature]
type = custom/script
exec = sensors | awk '/^Tctl:/ { print substr($2, 2) }'
exec = sensors | awk '/^Core 0:/ { print substr($3, 2) }'
format-prefix = " "
interval = 1

View File

@ -1,4 +1,4 @@
xrdb ~/.config/Xdefaults
setxkbmap -option caps:none
setxkbmap -option caps:backspace
xmodmap -e "clear Lock"
exec bspwm

View File

@ -21,12 +21,11 @@ super + ctrl + alt + f
light -U {10,1}
{_, super} + XF86MonBrightnessUp
light -A {10,1}
super + r
rofi -show drun -show-icons
rofi -show drun -show-icons
super + shift + r
rofi -show ssh -show-icons
@ -35,13 +34,13 @@ super + ctrl + Tab
rofi -show window
super + g
$HOME/.scripts/toggle-gap.sh
$HOME/.scripts/toggle-gap.sh
super + shift + g
$HOME/.scripts/toggle-size-hints.sh
# open terminal
super + Return
super + Return
$TERMINAL
# open pdf viewer
@ -67,6 +66,11 @@ super + m
super + n
$FILE_MANAGER
# open dmenu iwd
super + i
$HOME/.scripts/dmenu-iwd
# open audio mixer
super + semicolon
bspc rule -a \* -o state=floating && $TERMINAL -e pulsemixer
@ -225,6 +229,12 @@ super + f
bspc node focused -t floating || \
bspc node focused -t tiled;
# make the node sticky
super + d
[ -z "$(bspc query -N -n focused.sticky)" ] && \
bspc node focused -g sticky=on || \
bspc node focused -g stick=off;
super + ctrl + f
bspc node -t \~fullscreen

View File

@ -14,7 +14,7 @@ set spelllang=en_gb
set number relativenumber
syntax on
syntax on
nnoremap <silent> <C-l> :nohl<CR><C-l>
@ -50,7 +50,7 @@ Plug 'preservim/vim-markdown'
Plug 'neoclide/coc.nvim'
hi CocInlayHint ctermbg=Black ctermfg=Gray
hi CocInlayHint ctermbg=Black ctermfg=Gray
set updatetime=300
set signcolumn=yes
@ -118,4 +118,5 @@ call plug#end()
highlight Pmenu ctermbg=black guibg=black ctermfg=white
hi TrailingWhitespace ctermbg=red guibg=red
call matchadd("TrailingWhitespace", '\v\s+$')

View File

@ -30,3 +30,5 @@ set selection-clipboard clipboard
set guioptions none
set recolor true
set first-page-column 1:1

View File

@ -11,8 +11,10 @@ alias editor=vim
export TERMINAL="st"
export BROWSER="/usr/bin/firefox"
export FILE_MANAGER="/usr/bin/thunar"
export EMAIL_CLIENT="/usr/bin/thunderbird"
export EMAIL_CLIENT="/usr/bin/claws-mail"
export EDITOR="/usr/bin/vim"
export JAVA_HOME=/usr/lib/jvm/java-19-openjdk/
export XINITRC="$HOME/.config/sx/sxrc"
[ "$(fgconsole 2>/dev/null)" = "1" ] && exec sx

View File

@ -18,8 +18,6 @@ alias gosumemory-default="sudo /home/david/.local/share/gosumemory/gosumemory -p
alias yta="yt-dlp --no-mtime --add-metadata --no-check-certificate --embed-thumbnail -x -f bestaudio/best"
alias suspend="i3lock-fancy -p -t ''; systemctl suspend"
alias vim="nvim"
#alias tablet2='tablet 18 156 2.4'
@ -75,3 +73,5 @@ passthrough_enable () {
}
alias links="links -g -html-g-text-color 0xfefefe -html-g-background-color 0x191919 -font /home/david/.fonts/ttf-mononoki/mononoki-Regular.ttf"
alias weechat="weechat -d ~/.weechat"
alias manfzf="man -k . | fzf | cut -d'(' -f1 | xargs man"

View File

@ -1,26 +1,5 @@
From a2c7269200007dc73d2a832544836d6aa2d324ea Mon Sep 17 00:00:00 2001
From: davidovski <david@davidovski.xyz>
Date: Sun, 16 Jul 2023 01:51:26 +0100
Subject: [PATCH] davidovski
---
Makefile | 6 +-
boxdraw.c | 194 +++++++++++++++++++++++++++++++++++++++
boxdraw_data.h | 214 +++++++++++++++++++++++++++++++++++++++++++
config.def.h | 60 +++++++++++-
st.c | 164 ++++++++++++++++++++++++++-------
st.desktop | 8 ++
st.h | 12 +++
st.info | 4 +-
win.h | 4 +-
x.c | 243 ++++++++++++++++++++++++++++++++++++++++++++++---
10 files changed, 861 insertions(+), 48 deletions(-)
create mode 100644 boxdraw.c
create mode 100644 boxdraw_data.h
create mode 100644 st.desktop
diff --git a/Makefile b/Makefile
index 470ac86..be32361 100644
index 15db421..bc75c1d 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@
@ -31,8 +10,8 @@ index 470ac86..be32361 100644
+SRC = st.c x.c boxdraw.c
OBJ = $(SRC:.c=.o)
all: options st
@@ -23,6 +23,7 @@ config.h:
all: st
@@ -17,6 +17,7 @@ config.h:
st.o: config.h st.h win.h
x.o: arg.h config.h st.h win.h
@ -40,7 +19,7 @@ index 470ac86..be32361 100644
$(OBJ): config.h config.mk
@@ -49,9 +50,12 @@ install: st
@@ -43,9 +44,12 @@ install: st
chmod 644 $(DESTDIR)$(MANPREFIX)/man1/st.1
tic -sx st.info
@echo Please see the README file regarding the terminfo entry of st.
@ -52,427 +31,7 @@ index 470ac86..be32361 100644
rm -f $(DESTDIR)$(MANPREFIX)/man1/st.1
+ rm -f $(DESTDIR)$(PREFIX)/share/applications/st.desktop
.PHONY: all options clean dist install uninstall
diff --git a/boxdraw.c b/boxdraw.c
new file mode 100644
index 0000000..28a92d0
--- /dev/null
+++ b/boxdraw.c
@@ -0,0 +1,194 @@
+/*
+ * Copyright 2018 Avi Halachmi (:avih) avihpit@yahoo.com https://github.com/avih
+ * MIT/X Consortium License
+ */
+
+#include <X11/Xft/Xft.h>
+#include "st.h"
+#include "boxdraw_data.h"
+
+/* Rounded non-negative integers division of n / d */
+#define DIV(n, d) (((n) + (d) / 2) / (d))
+
+static Display *xdpy;
+static Colormap xcmap;
+static XftDraw *xd;
+static Visual *xvis;
+
+static void drawbox(int, int, int, int, XftColor *, XftColor *, ushort);
+static void drawboxlines(int, int, int, int, XftColor *, ushort);
+
+/* public API */
+
+void
+boxdraw_xinit(Display *dpy, Colormap cmap, XftDraw *draw, Visual *vis)
+{
+ xdpy = dpy; xcmap = cmap; xd = draw, xvis = vis;
+}
+
+int
+isboxdraw(Rune u)
+{
+ Rune block = u & ~0xff;
+ return (boxdraw && block == 0x2500 && boxdata[(uint8_t)u]) ||
+ (boxdraw_braille && block == 0x2800);
+}
+
+/* the "index" is actually the entire shape data encoded as ushort */
+ushort
+boxdrawindex(const Glyph *g)
+{
+ if (boxdraw_braille && (g->u & ~0xff) == 0x2800)
+ return BRL | (uint8_t)g->u;
+ if (boxdraw_bold && (g->mode & ATTR_BOLD))
+ return BDB | boxdata[(uint8_t)g->u];
+ return boxdata[(uint8_t)g->u];
+}
+
+void
+drawboxes(int x, int y, int cw, int ch, XftColor *fg, XftColor *bg,
+ const XftGlyphFontSpec *specs, int len)
+{
+ for ( ; len-- > 0; x += cw, specs++)
+ drawbox(x, y, cw, ch, fg, bg, (ushort)specs->glyph);
+}
+
+/* implementation */
+
+void
+drawbox(int x, int y, int w, int h, XftColor *fg, XftColor *bg, ushort bd)
+{
+ ushort cat = bd & ~(BDB | 0xff); /* mask out bold and data */
+ if (bd & (BDL | BDA)) {
+ /* lines (light/double/heavy/arcs) */
+ drawboxlines(x, y, w, h, fg, bd);
+
+ } else if (cat == BBD) {
+ /* lower (8-X)/8 block */
+ int d = DIV((uint8_t)bd * h, 8);
+ XftDrawRect(xd, fg, x, y + d, w, h - d);
+
+ } else if (cat == BBU) {
+ /* upper X/8 block */
+ XftDrawRect(xd, fg, x, y, w, DIV((uint8_t)bd * h, 8));
+
+ } else if (cat == BBL) {
+ /* left X/8 block */
+ XftDrawRect(xd, fg, x, y, DIV((uint8_t)bd * w, 8), h);
+
+ } else if (cat == BBR) {
+ /* right (8-X)/8 block */
+ int d = DIV((uint8_t)bd * w, 8);
+ XftDrawRect(xd, fg, x + d, y, w - d, h);
+
+ } else if (cat == BBQ) {
+ /* Quadrants */
+ int w2 = DIV(w, 2), h2 = DIV(h, 2);
+ if (bd & TL)
+ XftDrawRect(xd, fg, x, y, w2, h2);
+ if (bd & TR)
+ XftDrawRect(xd, fg, x + w2, y, w - w2, h2);
+ if (bd & BL)
+ XftDrawRect(xd, fg, x, y + h2, w2, h - h2);
+ if (bd & BR)
+ XftDrawRect(xd, fg, x + w2, y + h2, w - w2, h - h2);
+
+ } else if (bd & BBS) {
+ /* Shades - data is 1/2/3 for 25%/50%/75% alpha, respectively */
+ int d = (uint8_t)bd;
+ XftColor xfc;
+ XRenderColor xrc = { .alpha = 0xffff };
+
+ xrc.red = DIV(fg->color.red * d + bg->color.red * (4 - d), 4);
+ xrc.green = DIV(fg->color.green * d + bg->color.green * (4 - d), 4);
+ xrc.blue = DIV(fg->color.blue * d + bg->color.blue * (4 - d), 4);
+
+ XftColorAllocValue(xdpy, xvis, xcmap, &xrc, &xfc);
+ XftDrawRect(xd, &xfc, x, y, w, h);
+ XftColorFree(xdpy, xvis, xcmap, &xfc);
+
+ } else if (cat == BRL) {
+ /* braille, each data bit corresponds to one dot at 2x4 grid */
+ int w1 = DIV(w, 2);
+ int h1 = DIV(h, 4), h2 = DIV(h, 2), h3 = DIV(3 * h, 4);
+
+ if (bd & 1) XftDrawRect(xd, fg, x, y, w1, h1);
+ if (bd & 2) XftDrawRect(xd, fg, x, y + h1, w1, h2 - h1);
+ if (bd & 4) XftDrawRect(xd, fg, x, y + h2, w1, h3 - h2);
+ if (bd & 8) XftDrawRect(xd, fg, x + w1, y, w - w1, h1);
+ if (bd & 16) XftDrawRect(xd, fg, x + w1, y + h1, w - w1, h2 - h1);
+ if (bd & 32) XftDrawRect(xd, fg, x + w1, y + h2, w - w1, h3 - h2);
+ if (bd & 64) XftDrawRect(xd, fg, x, y + h3, w1, h - h3);
+ if (bd & 128) XftDrawRect(xd, fg, x + w1, y + h3, w - w1, h - h3);
+
+ }
+}
+
+void
+drawboxlines(int x, int y, int w, int h, XftColor *fg, ushort bd)
+{
+ /* s: stem thickness. width/8 roughly matches underscore thickness. */
+ /* We draw bold as 1.5 * normal-stem and at least 1px thicker. */
+ /* doubles draw at least 3px, even when w or h < 3. bold needs 6px. */
+ int mwh = MIN(w, h);
+ int base_s = MAX(1, DIV(mwh, 8));
+ int bold = (bd & BDB) && mwh >= 6; /* possibly ignore boldness */
+ int s = bold ? MAX(base_s + 1, DIV(3 * base_s, 2)) : base_s;
+ int w2 = DIV(w - s, 2), h2 = DIV(h - s, 2);
+ /* the s-by-s square (x + w2, y + h2, s, s) is the center texel. */
+ /* The base length (per direction till edge) includes this square. */
+
+ int light = bd & (LL | LU | LR | LD);
+ int double_ = bd & (DL | DU | DR | DD);
+
+ if (light) {
+ /* d: additional (negative) length to not-draw the center */
+ /* texel - at arcs and avoid drawing inside (some) doubles */
+ int arc = bd & BDA;
+ int multi_light = light & (light - 1);
+ int multi_double = double_ & (double_ - 1);
+ /* light crosses double only at DH+LV, DV+LH (ref. shapes) */
+ int d = arc || (multi_double && !multi_light) ? -s : 0;
+
+ if (bd & LL)
+ XftDrawRect(xd, fg, x, y + h2, w2 + s + d, s);
+ if (bd & LU)
+ XftDrawRect(xd, fg, x + w2, y, s, h2 + s + d);
+ if (bd & LR)
+ XftDrawRect(xd, fg, x + w2 - d, y + h2, w - w2 + d, s);
+ if (bd & LD)
+ XftDrawRect(xd, fg, x + w2, y + h2 - d, s, h - h2 + d);
+ }
+
+ /* double lines - also align with light to form heavy when combined */
+ if (double_) {
+ /*
+ * going clockwise, for each double-ray: p is additional length
+ * to the single-ray nearer to the previous direction, and n to
+ * the next. p and n adjust from the base length to lengths
+ * which consider other doubles - shorter to avoid intersections
+ * (p, n), or longer to draw the far-corner texel (n).
+ */
+ int dl = bd & DL, du = bd & DU, dr = bd & DR, dd = bd & DD;
+ if (dl) {
+ int p = dd ? -s : 0, n = du ? -s : dd ? s : 0;
+ XftDrawRect(xd, fg, x, y + h2 + s, w2 + s + p, s);
+ XftDrawRect(xd, fg, x, y + h2 - s, w2 + s + n, s);
+ }
+ if (du) {
+ int p = dl ? -s : 0, n = dr ? -s : dl ? s : 0;
+ XftDrawRect(xd, fg, x + w2 - s, y, s, h2 + s + p);
+ XftDrawRect(xd, fg, x + w2 + s, y, s, h2 + s + n);
+ }
+ if (dr) {
+ int p = du ? -s : 0, n = dd ? -s : du ? s : 0;
+ XftDrawRect(xd, fg, x + w2 - p, y + h2 - s, w - w2 + p, s);
+ XftDrawRect(xd, fg, x + w2 - n, y + h2 + s, w - w2 + n, s);
+ }
+ if (dd) {
+ int p = dr ? -s : 0, n = dl ? -s : dr ? s : 0;
+ XftDrawRect(xd, fg, x + w2 + s, y + h2 - p, s, h - h2 + p);
+ XftDrawRect(xd, fg, x + w2 - s, y + h2 - n, s, h - h2 + n);
+ }
+ }
+}
diff --git a/boxdraw_data.h b/boxdraw_data.h
new file mode 100644
index 0000000..7890500
--- /dev/null
+++ b/boxdraw_data.h
@@ -0,0 +1,214 @@
+/*
+ * Copyright 2018 Avi Halachmi (:avih) avihpit@yahoo.com https://github.com/avih
+ * MIT/X Consortium License
+ */
+
+/*
+ * U+25XX codepoints data
+ *
+ * References:
+ * http://www.unicode.org/charts/PDF/U2500.pdf
+ * http://www.unicode.org/charts/PDF/U2580.pdf
+ *
+ * Test page:
+ * https://github.com/GNOME/vte/blob/master/doc/boxes.txt
+ */
+
+/* Each shape is encoded as 16-bits. Higher bits are category, lower are data */
+/* Categories (mutually exclusive except BDB): */
+/* For convenience, BDL/BDA/BBS/BDB are 1 bit each, the rest are enums */
+#define BDL (1<<8) /* Box Draw Lines (light/double/heavy) */
+#define BDA (1<<9) /* Box Draw Arc (light) */
+
+#define BBD (1<<10) /* Box Block Down (lower) X/8 */
+#define BBL (2<<10) /* Box Block Left X/8 */
+#define BBU (3<<10) /* Box Block Upper X/8 */
+#define BBR (4<<10) /* Box Block Right X/8 */
+#define BBQ (5<<10) /* Box Block Quadrants */
+#define BRL (6<<10) /* Box Braille (data is lower byte of U28XX) */
+
+#define BBS (1<<14) /* Box Block Shades */
+#define BDB (1<<15) /* Box Draw is Bold */
+
+/* (BDL/BDA) Light/Double/Heavy x Left/Up/Right/Down/Horizontal/Vertical */
+/* Heavy is light+double (literally drawing light+double align to form heavy) */
+#define LL (1<<0)
+#define LU (1<<1)
+#define LR (1<<2)
+#define LD (1<<3)
+#define LH (LL+LR)
+#define LV (LU+LD)
+
+#define DL (1<<4)
+#define DU (1<<5)
+#define DR (1<<6)
+#define DD (1<<7)
+#define DH (DL+DR)
+#define DV (DU+DD)
+
+#define HL (LL+DL)
+#define HU (LU+DU)
+#define HR (LR+DR)
+#define HD (LD+DD)
+#define HH (HL+HR)
+#define HV (HU+HD)
+
+/* (BBQ) Quadrants Top/Bottom x Left/Right */
+#define TL (1<<0)
+#define TR (1<<1)
+#define BL (1<<2)
+#define BR (1<<3)
+
+/* Data for U+2500 - U+259F except dashes/diagonals */
+static const unsigned short boxdata[256] = {
+ /* light lines */
+ [0x00] = BDL + LH, /* light horizontal */
+ [0x02] = BDL + LV, /* light vertical */
+ [0x0c] = BDL + LD + LR, /* light down and right */
+ [0x10] = BDL + LD + LL, /* light down and left */
+ [0x14] = BDL + LU + LR, /* light up and right */
+ [0x18] = BDL + LU + LL, /* light up and left */
+ [0x1c] = BDL + LV + LR, /* light vertical and right */
+ [0x24] = BDL + LV + LL, /* light vertical and left */
+ [0x2c] = BDL + LH + LD, /* light horizontal and down */
+ [0x34] = BDL + LH + LU, /* light horizontal and up */
+ [0x3c] = BDL + LV + LH, /* light vertical and horizontal */
+ [0x74] = BDL + LL, /* light left */
+ [0x75] = BDL + LU, /* light up */
+ [0x76] = BDL + LR, /* light right */
+ [0x77] = BDL + LD, /* light down */
+
+ /* heavy [+light] lines */
+ [0x01] = BDL + HH,
+ [0x03] = BDL + HV,
+ [0x0d] = BDL + HR + LD,
+ [0x0e] = BDL + HD + LR,
+ [0x0f] = BDL + HD + HR,
+ [0x11] = BDL + HL + LD,
+ [0x12] = BDL + HD + LL,
+ [0x13] = BDL + HD + HL,
+ [0x15] = BDL + HR + LU,
+ [0x16] = BDL + HU + LR,
+ [0x17] = BDL + HU + HR,
+ [0x19] = BDL + HL + LU,
+ [0x1a] = BDL + HU + LL,
+ [0x1b] = BDL + HU + HL,
+ [0x1d] = BDL + HR + LV,
+ [0x1e] = BDL + HU + LD + LR,
+ [0x1f] = BDL + HD + LR + LU,
+ [0x20] = BDL + HV + LR,
+ [0x21] = BDL + HU + HR + LD,
+ [0x22] = BDL + HD + HR + LU,
+ [0x23] = BDL + HV + HR,
+ [0x25] = BDL + HL + LV,
+ [0x26] = BDL + HU + LD + LL,
+ [0x27] = BDL + HD + LU + LL,
+ [0x28] = BDL + HV + LL,
+ [0x29] = BDL + HU + HL + LD,
+ [0x2a] = BDL + HD + HL + LU,
+ [0x2b] = BDL + HV + HL,
+ [0x2d] = BDL + HL + LD + LR,
+ [0x2e] = BDL + HR + LL + LD,
+ [0x2f] = BDL + HH + LD,
+ [0x30] = BDL + HD + LH,
+ [0x31] = BDL + HD + HL + LR,
+ [0x32] = BDL + HR + HD + LL,
+ [0x33] = BDL + HH + HD,
+ [0x35] = BDL + HL + LU + LR,
+ [0x36] = BDL + HR + LU + LL,
+ [0x37] = BDL + HH + LU,
+ [0x38] = BDL + HU + LH,
+ [0x39] = BDL + HU + HL + LR,
+ [0x3a] = BDL + HU + HR + LL,
+ [0x3b] = BDL + HH + HU,
+ [0x3d] = BDL + HL + LV + LR,
+ [0x3e] = BDL + HR + LV + LL,
+ [0x3f] = BDL + HH + LV,
+ [0x40] = BDL + HU + LH + LD,
+ [0x41] = BDL + HD + LH + LU,
+ [0x42] = BDL + HV + LH,
+ [0x43] = BDL + HU + HL + LD + LR,
+ [0x44] = BDL + HU + HR + LD + LL,
+ [0x45] = BDL + HD + HL + LU + LR,
+ [0x46] = BDL + HD + HR + LU + LL,
+ [0x47] = BDL + HH + HU + LD,
+ [0x48] = BDL + HH + HD + LU,
+ [0x49] = BDL + HV + HL + LR,
+ [0x4a] = BDL + HV + HR + LL,
+ [0x4b] = BDL + HV + HH,
+ [0x78] = BDL + HL,
+ [0x79] = BDL + HU,
+ [0x7a] = BDL + HR,
+ [0x7b] = BDL + HD,
+ [0x7c] = BDL + HR + LL,
+ [0x7d] = BDL + HD + LU,
+ [0x7e] = BDL + HL + LR,
+ [0x7f] = BDL + HU + LD,
+
+ /* double [+light] lines */
+ [0x50] = BDL + DH,
+ [0x51] = BDL + DV,
+ [0x52] = BDL + DR + LD,
+ [0x53] = BDL + DD + LR,
+ [0x54] = BDL + DR + DD,
+ [0x55] = BDL + DL + LD,
+ [0x56] = BDL + DD + LL,
+ [0x57] = BDL + DL + DD,
+ [0x58] = BDL + DR + LU,
+ [0x59] = BDL + DU + LR,
+ [0x5a] = BDL + DU + DR,
+ [0x5b] = BDL + DL + LU,
+ [0x5c] = BDL + DU + LL,
+ [0x5d] = BDL + DL + DU,
+ [0x5e] = BDL + DR + LV,
+ [0x5f] = BDL + DV + LR,
+ [0x60] = BDL + DV + DR,
+ [0x61] = BDL + DL + LV,
+ [0x62] = BDL + DV + LL,
+ [0x63] = BDL + DV + DL,
+ [0x64] = BDL + DH + LD,
+ [0x65] = BDL + DD + LH,
+ [0x66] = BDL + DD + DH,
+ [0x67] = BDL + DH + LU,
+ [0x68] = BDL + DU + LH,
+ [0x69] = BDL + DH + DU,
+ [0x6a] = BDL + DH + LV,
+ [0x6b] = BDL + DV + LH,
+ [0x6c] = BDL + DH + DV,
+
+ /* (light) arcs */
+ [0x6d] = BDA + LD + LR,
+ [0x6e] = BDA + LD + LL,
+ [0x6f] = BDA + LU + LL,
+ [0x70] = BDA + LU + LR,
+
+ /* Lower (Down) X/8 block (data is 8 - X) */
+ [0x81] = BBD + 7, [0x82] = BBD + 6, [0x83] = BBD + 5, [0x84] = BBD + 4,
+ [0x85] = BBD + 3, [0x86] = BBD + 2, [0x87] = BBD + 1, [0x88] = BBD + 0,
+
+ /* Left X/8 block (data is X) */
+ [0x89] = BBL + 7, [0x8a] = BBL + 6, [0x8b] = BBL + 5, [0x8c] = BBL + 4,
+ [0x8d] = BBL + 3, [0x8e] = BBL + 2, [0x8f] = BBL + 1,
+
+ /* upper 1/2 (4/8), 1/8 block (X), right 1/2, 1/8 block (8-X) */
+ [0x80] = BBU + 4, [0x94] = BBU + 1,
+ [0x90] = BBR + 4, [0x95] = BBR + 7,
+
+ /* Quadrants */
+ [0x96] = BBQ + BL,
+ [0x97] = BBQ + BR,
+ [0x98] = BBQ + TL,
+ [0x99] = BBQ + TL + BL + BR,
+ [0x9a] = BBQ + TL + BR,
+ [0x9b] = BBQ + TL + TR + BL,
+ [0x9c] = BBQ + TL + TR + BR,
+ [0x9d] = BBQ + TR,
+ [0x9e] = BBQ + BL + TR,
+ [0x9f] = BBQ + BL + TR + BR,
+
+ /* Shades, data is an alpha value in 25% units (1/4, 1/2, 3/4) */
+ [0x91] = BBS + 1, [0x92] = BBS + 2, [0x93] = BBS + 3,
+
+ /* U+2504 - U+250B, U+254C - U+254F: unsupported (dashes) */
+ /* U+2571 - U+2573: unsupported (diagonals) */
+};
.PHONY: all clean dist install uninstall
diff --git a/config.def.h b/config.def.h
index 91ab8ca..b55e689 100644
--- a/config.def.h
@ -572,7 +131,7 @@ index 91ab8ca..b55e689 100644
/*
diff --git a/st.c b/st.c
index 623376e..bc95e89 100644
index d6478f5..1fd732e 100644
--- a/st.c
+++ b/st.c
@@ -35,6 +35,7 @@
@ -929,8 +488,8 @@ index 623376e..bc95e89 100644
+ xfreetitlestack();
resettitle();
xloadcols();
break;
@@ -2537,7 +2630,7 @@ twrite(const char *buf, int buflen, int show_ctrl)
xsetmode(0, MODE_HIDE);
@@ -2541,7 +2634,7 @@ twrite(const char *buf, int buflen, int show_ctrl)
void
tresize(int col, int row)
{
@ -939,7 +498,7 @@ index 623376e..bc95e89 100644
int minrow = MIN(row, term.row);
int mincol = MIN(col, term.col);
int *bp;
@@ -2574,6 +2667,14 @@ tresize(int col, int row)
@@ -2578,6 +2671,14 @@ tresize(int col, int row)
term.dirty = xrealloc(term.dirty, row * sizeof(*term.dirty));
term.tabs = xrealloc(term.tabs, col * sizeof(*term.tabs));
@ -954,7 +513,7 @@ index 623376e..bc95e89 100644
/* resize each row to new width, zero-pad if needed */
for (i = 0; i < minrow; i++) {
term.line[i] = xrealloc(term.line[i], col * sizeof(Glyph));
@@ -2619,7 +2720,7 @@ tresize(int col, int row)
@@ -2623,7 +2724,7 @@ tresize(int col, int row)
void
resettitle(void)
{
@ -963,7 +522,7 @@ index 623376e..bc95e89 100644
}
void
@@ -2632,7 +2733,7 @@ drawregion(int x1, int y1, int x2, int y2)
@@ -2636,7 +2737,7 @@ drawregion(int x1, int y1, int x2, int y2)
continue;
term.dirty[y] = 0;
@ -972,7 +531,7 @@ index 623376e..bc95e89 100644
}
}
@@ -2653,8 +2754,9 @@ draw(void)
@@ -2657,8 +2758,9 @@ draw(void)
cx--;
drawregion(0, 0, term.col, term.row);
@ -984,20 +543,6 @@ index 623376e..bc95e89 100644
term.ocx = cx;
term.ocy = term.c.y;
xfinishdraw();
diff --git a/st.desktop b/st.desktop
new file mode 100644
index 0000000..49029d8
--- /dev/null
+++ b/st.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Name=st
+Comment=st is a simple terminal implementation for X
+Exec=st
+Icon=utilities-terminal
+Terminal=false
+Type=Application
+Categories=System;TerminalEmulator;
diff --git a/st.h b/st.h
index fd3b0d8..f6bd3b4 100644
--- a/st.h
@ -1040,7 +585,7 @@ index fd3b0d8..f6bd3b4 100644
extern unsigned int defaultcs;
+extern const int boxdraw, boxdraw_bold, boxdraw_braille;
diff --git a/st.info b/st.info
index 8201ad6..aeef606 100644
index efab2cf..24dfc7d 100644
--- a/st.info
+++ b/st.info
@@ -161,7 +161,7 @@ st-mono| simpleterm monocolor,
@ -1077,7 +622,7 @@ index 6de960d..2a40aa0 100644
void xsetmode(int, unsigned int);
void xsetpointermotion(int);
diff --git a/x.c b/x.c
index aa09997..5d2c640 100644
index b36fb8c..ccfb7e7 100644
--- a/x.c
+++ b/x.c
@@ -14,6 +14,7 @@
@ -1457,6 +1002,3 @@ index aa09997..5d2c640 100644
cols = MAX(cols, 1);
rows = MAX(rows, 1);
tnew(cols, rows);
--
2.41.0