wip
This commit is contained in:
@@ -1,11 +1,9 @@
|
||||
if [[ $- != *i* ]] ; then
|
||||
# Shell is non-interactive. Be done now!
|
||||
return
|
||||
fi
|
||||
|
||||
export PATH="/usr/lib/llvm/20/bin:$PATH"
|
||||
|
||||
alias ls="ls -a --color"
|
||||
alias comp="sudo rm -rf config.h && make && sudo make install && pkill dwm"
|
||||
alias comp="doas rm -rf config.h && make && doas make install"
|
||||
alias edit="sh /home/andrew/.config/suckless/dwm/scripts/edit-suckless.sh"
|
||||
alias update_world="sudo emerge --ask --update --newuse --deep @world"
|
||||
alias update_world="doas emerge --ask --update --newuse --deep @world"
|
||||
alias env="sh /home/andrew/dotfiles/env.sh"
|
||||
|
||||
+27
-19
@@ -1,3 +1,30 @@
|
||||
-- Bootstrap lazy.nvim
|
||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
||||
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", "https://github.com/folke/lazy.nvim.git", lazypath })
|
||||
end
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
|
||||
vim.g.mapleader = " "
|
||||
require("lazy").setup({
|
||||
spec = {
|
||||
"neovim/nvim-lspconfig",
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
"cohama/lexima.vim",
|
||||
"DarthMoomancer/Polydev",
|
||||
"nvim-telescope/telescope.nvim",
|
||||
"nvim-lua/plenary.nvim",
|
||||
{ "saghen/blink.cmp", version = "v1.*", opts = {
|
||||
completion = {
|
||||
ghost_text = {
|
||||
enabled = true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
checker = { enabled = true },
|
||||
},
|
||||
})
|
||||
vim.opt.mouse = ""
|
||||
vim.opt.completeopt = "noselect"
|
||||
vim.opt.termguicolors = true
|
||||
@@ -9,7 +36,6 @@ vim.opt.hlsearch = false
|
||||
vim.opt.swapfile = false
|
||||
vim.opt.clipboard = unnamedplus
|
||||
|
||||
vim.g.mapleader = " "
|
||||
vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv")
|
||||
vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv")
|
||||
vim.keymap.set("x", "<leader>p", [["_dP]])
|
||||
@@ -32,24 +58,6 @@ vim.api.nvim_create_autocmd("FileType", {
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
vim.pack.add({
|
||||
"neovim/nvim-lspconfig",
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
"cohama/lexima.vim",
|
||||
"DarthMoomancer/Polydev",
|
||||
"nvim-telescope/telescope.nvim",
|
||||
"nvim-lua/plenary.nvim",
|
||||
{ src = "saghen/blink.cmp", version = "v1.*" },
|
||||
})
|
||||
|
||||
require("blink.cmp").setup({
|
||||
completion = {
|
||||
ghost_text = {
|
||||
enabled = true
|
||||
}
|
||||
}
|
||||
})
|
||||
require("nvim-treesitter.configs").setup({
|
||||
highlight = { enable = true },
|
||||
indent = { enable = true }
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "/home/andrew/.config/suckless/dwm/themes/everforest.h"
|
||||
static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */
|
||||
static const char *fonts[] = {
|
||||
"CaskaydiaCove NFM style:Regular:size=12"
|
||||
"CaskaydiaCove NFM style:SemiBold:size=11"
|
||||
};
|
||||
static const char *prompt = NULL; /* -p option; prompt to the left of input field */
|
||||
static const char *colors[SchemeLast][2] = {
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
/* See LICENSE file for copyright and license details. */
|
||||
/* Default settings; can be overriden by command line. */
|
||||
|
||||
static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */
|
||||
/* -fn option overrides fonts[0]; default X11 font or font set */
|
||||
static const char *fonts[] = {
|
||||
"monospace:size=10"
|
||||
};
|
||||
static const char *prompt = NULL; /* -p option; prompt to the left of input field */
|
||||
static const char *colors[SchemeLast][2] = {
|
||||
/* fg bg */
|
||||
[SchemeNorm] = { "#bbbbbb", "#222222" },
|
||||
[SchemeSel] = { "#eeeeee", "#005577" },
|
||||
[SchemeOut] = { "#000000", "#00ffff" },
|
||||
[SchemeCursor] = { "#222222", "#bbbbbb"},
|
||||
};
|
||||
/* -l and -g options; controls number of lines and columns in grid if > 0 */
|
||||
static unsigned int lines = 0;
|
||||
static unsigned int columns = 0;
|
||||
|
||||
/*
|
||||
* Characters not considered part of a word while deleting words
|
||||
* for example: " /?\"&[]"
|
||||
*/
|
||||
static const char worddelimiters[] = " ";
|
||||
|
||||
/*
|
||||
* -vi option; if nonzero, vi mode is always enabled and can be
|
||||
* accessed with the global_esc keysym + mod mask
|
||||
*/
|
||||
static unsigned int vi_mode = 1;
|
||||
static unsigned int start_mode = 0; /* mode to use when -vi is passed. 0 = insert mode, 1 = normal mode */
|
||||
static Key global_esc = { XK_n, Mod1Mask }; /* escape key when vi mode is not enabled explicitly */
|
||||
static Key quit_keys[] = {
|
||||
/* keysym modifier */
|
||||
{ XK_q, 0 }
|
||||
};
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "/home/andrew/.config/suckless/dwm/themes/everforest.h"
|
||||
static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */
|
||||
static const char *fonts[] = {
|
||||
"CaskaydiaCove NFM style:Regular:size=12"
|
||||
"CaskaydiaCove NFM style:SemiBold:size=11"
|
||||
};
|
||||
static const char *prompt = NULL; /* -p option; prompt to the left of input field */
|
||||
static const char *colors[SchemeLast][2] = {
|
||||
|
||||
Binary file not shown.
@@ -1,202 +0,0 @@
|
||||
.TH DMENU 1 dmenu\-VERSION
|
||||
.SH NAME
|
||||
dmenu \- dynamic menu
|
||||
.SH SYNOPSIS
|
||||
.B dmenu
|
||||
.RB [ \-bfiv ]
|
||||
.RB [ \-g
|
||||
.IR columns ]
|
||||
.RB [ \-l
|
||||
.IR lines ]
|
||||
.RB [ \-m
|
||||
.IR monitor ]
|
||||
.RB [ \-p
|
||||
.IR prompt ]
|
||||
.RB [ \-fn
|
||||
.IR font ]
|
||||
.RB [ \-nb
|
||||
.IR color ]
|
||||
.RB [ \-nf
|
||||
.IR color ]
|
||||
.RB [ \-sb
|
||||
.IR color ]
|
||||
.RB [ \-sf
|
||||
.IR color ]
|
||||
.RB [ \-w
|
||||
.IR windowid ]
|
||||
.P
|
||||
.BR dmenu_run " ..."
|
||||
.SH DESCRIPTION
|
||||
.B dmenu
|
||||
is a dynamic menu for X, which reads a list of newline\-separated items from
|
||||
stdin. When the user selects an item and presses Return, their choice is printed
|
||||
to stdout and dmenu terminates. Entering text will narrow the items to those
|
||||
matching the tokens in the input.
|
||||
.P
|
||||
.B dmenu_run
|
||||
is a script used by
|
||||
.IR dwm (1)
|
||||
which lists programs in the user's $PATH and runs the result in their $SHELL.
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.B \-b
|
||||
dmenu appears at the bottom of the screen.
|
||||
.TP
|
||||
.B \-c
|
||||
dmenu appears centered on the screen.
|
||||
.TP
|
||||
.B \-f
|
||||
dmenu grabs the keyboard before reading stdin if not reading from a tty. This
|
||||
is faster, but will lock up X until stdin reaches end\-of\-file.
|
||||
.TP
|
||||
.B \-i
|
||||
dmenu matches menu items case insensitively.
|
||||
.TP
|
||||
.BI \-g " columns"
|
||||
dmenu lists items in a grid with the given number of columns.
|
||||
.TP
|
||||
.BI \-l " lines"
|
||||
dmenu lists items in a grid with the given number of lines.
|
||||
.TP
|
||||
.BI \-m " monitor"
|
||||
dmenu is displayed on the monitor number supplied. Monitor numbers are starting
|
||||
from 0.
|
||||
.TP
|
||||
.BI \-p " prompt"
|
||||
defines the prompt to be displayed to the left of the input field.
|
||||
.TP
|
||||
.BI \-fn " font"
|
||||
defines the font or font set used.
|
||||
.TP
|
||||
.BI \-nb " color"
|
||||
defines the normal background color.
|
||||
.IR #RGB ,
|
||||
.IR #RRGGBB ,
|
||||
and X color names are supported.
|
||||
.TP
|
||||
.BI \-nf " color"
|
||||
defines the normal foreground color.
|
||||
.TP
|
||||
.BI \-sb " color"
|
||||
defines the selected background color.
|
||||
.TP
|
||||
.BI \-sf " color"
|
||||
defines the selected foreground color.
|
||||
.TP
|
||||
.B \-v
|
||||
prints version information to stdout, then exits.
|
||||
.TP
|
||||
.BI \-w " windowid"
|
||||
embed into windowid.
|
||||
.SH USAGE
|
||||
dmenu is completely controlled by the keyboard. Items are selected using the
|
||||
arrow keys, page up, page down, home, and end.
|
||||
.TP
|
||||
.B Tab
|
||||
Copy the selected item to the input field.
|
||||
.TP
|
||||
.B Return
|
||||
Confirm selection. Prints the selected item to stdout and exits, returning
|
||||
success.
|
||||
.TP
|
||||
.B Ctrl-Return
|
||||
Confirm selection. Prints the selected item to stdout and continues.
|
||||
.TP
|
||||
.B Shift\-Return
|
||||
Confirm input. Prints the input text to stdout and exits, returning success.
|
||||
.TP
|
||||
.B Escape
|
||||
Exit without selecting an item, returning failure.
|
||||
.TP
|
||||
.B Ctrl-Left
|
||||
Move cursor to the start of the current word
|
||||
.TP
|
||||
.B Ctrl-Right
|
||||
Move cursor to the end of the current word
|
||||
.TP
|
||||
.B C\-a
|
||||
Home
|
||||
.TP
|
||||
.B C\-b
|
||||
Left
|
||||
.TP
|
||||
.B C\-c
|
||||
Escape
|
||||
.TP
|
||||
.B C\-d
|
||||
Delete
|
||||
.TP
|
||||
.B C\-e
|
||||
End
|
||||
.TP
|
||||
.B C\-f
|
||||
Right
|
||||
.TP
|
||||
.B C\-g
|
||||
Escape
|
||||
.TP
|
||||
.B C\-h
|
||||
Backspace
|
||||
.TP
|
||||
.B C\-i
|
||||
Tab
|
||||
.TP
|
||||
.B C\-j
|
||||
Return
|
||||
.TP
|
||||
.B C\-J
|
||||
Shift-Return
|
||||
.TP
|
||||
.B C\-k
|
||||
Delete line right
|
||||
.TP
|
||||
.B C\-m
|
||||
Return
|
||||
.TP
|
||||
.B C\-M
|
||||
Shift-Return
|
||||
.TP
|
||||
.B C\-n
|
||||
Down
|
||||
.TP
|
||||
.B C\-p
|
||||
Up
|
||||
.TP
|
||||
.B C\-u
|
||||
Delete line left
|
||||
.TP
|
||||
.B C\-w
|
||||
Delete word left
|
||||
.TP
|
||||
.B C\-y
|
||||
Paste from primary X selection
|
||||
.TP
|
||||
.B C\-Y
|
||||
Paste from X clipboard
|
||||
.TP
|
||||
.B M\-b
|
||||
Move cursor to the start of the current word
|
||||
.TP
|
||||
.B M\-f
|
||||
Move cursor to the end of the current word
|
||||
.TP
|
||||
.B M\-g
|
||||
Home
|
||||
.TP
|
||||
.B M\-G
|
||||
End
|
||||
.TP
|
||||
.B M\-h
|
||||
Up
|
||||
.TP
|
||||
.B M\-j
|
||||
Page down
|
||||
.TP
|
||||
.B M\-k
|
||||
Page up
|
||||
.TP
|
||||
.B M\-l
|
||||
Down
|
||||
.SH SEE ALSO
|
||||
.IR dwm (1),
|
||||
.IR stest (1)
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -7,7 +7,6 @@ static const int topbar = 1;
|
||||
static const char *barlayout = "t|s";
|
||||
|
||||
static const char *fonts[] = { "CaskaydiaCove NFM style:SemiBold:size=11" };
|
||||
static const char dmenufont[] = { "CaskaydiaCove NFM style:SemiBold:size=12" };
|
||||
static const char *colors[][3] = {
|
||||
[SchemeNorm] = { foreground, background, aqua },
|
||||
[SchemeSel] = { dark_gray, yellow, green },
|
||||
@@ -17,7 +16,7 @@ static const char *tags[] = { "1", "2", "3", "4" };
|
||||
static const Rule rules[] = {
|
||||
/* class instance title tags mask isfloating monitor */
|
||||
{ "PrismLauncher", "prismlauncher", NULL, 1 << 2, 0, -1 },
|
||||
{ "mercury-browser", "mercury-browser", NULL, 1 << 1, 0, -1 },
|
||||
{ "mercury-default", "Navigator", NULL, 1 << 1, 0, -1 },
|
||||
{ "steam", "steamwebhelper", NULL, 1 << 2, 0, -1 },
|
||||
{ "st-256color", "st-256color", NULL, 1, 0, -1 },
|
||||
};
|
||||
@@ -39,9 +38,8 @@ static const Layout layouts[] = { { "[]=", tile } };
|
||||
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
|
||||
|
||||
static char dmenumon[2] = "0";
|
||||
static const char *dmenucmd[] = { "dmenu_run", "-g", "6", "-l", "3", "-m", dmenumon, "-fn", dmenufont, "-nb", background, "-nf", foreground, "-sb", blue, "-sf", dark_gray, NULL };
|
||||
static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, NULL };
|
||||
static const char *termcmd[] = { "st", NULL };
|
||||
static const char *browser[] = { "firefox-bin", NULL };
|
||||
|
||||
#include "movestack.c"
|
||||
#include "X11/XF86keysym.h"
|
||||
|
||||
@@ -7,7 +7,6 @@ static const int topbar = 1;
|
||||
static const char *barlayout = "t|s";
|
||||
|
||||
static const char *fonts[] = { "CaskaydiaCove NFM style:SemiBold:size=11" };
|
||||
static const char dmenufont[] = { "CaskaydiaCove NFM style:SemiBold:size=12" };
|
||||
static const char *colors[][3] = {
|
||||
[SchemeNorm] = { foreground, background, aqua },
|
||||
[SchemeSel] = { dark_gray, yellow, green },
|
||||
@@ -17,7 +16,7 @@ static const char *tags[] = { "1", "2", "3", "4" };
|
||||
static const Rule rules[] = {
|
||||
/* class instance title tags mask isfloating monitor */
|
||||
{ "PrismLauncher", "prismlauncher", NULL, 1 << 2, 0, -1 },
|
||||
{ "mercury-browser", "mercury-browser", NULL, 1 << 1, 0, -1 },
|
||||
{ "mercury-default", "Navigator", NULL, 1 << 1, 0, -1 },
|
||||
{ "steam", "steamwebhelper", NULL, 1 << 2, 0, -1 },
|
||||
{ "st-256color", "st-256color", NULL, 1, 0, -1 },
|
||||
};
|
||||
@@ -39,9 +38,8 @@ static const Layout layouts[] = { { "[]=", tile } };
|
||||
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
|
||||
|
||||
static char dmenumon[2] = "0";
|
||||
static const char *dmenucmd[] = { "dmenu_run", "-g", "6", "-l", "3", "-m", dmenumon, "-fn", dmenufont, "-nb", background, "-nf", foreground, "-sb", blue, "-sf", dark_gray, NULL };
|
||||
static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, NULL };
|
||||
static const char *termcmd[] = { "st", NULL };
|
||||
static const char *browser[] = { "firefox-bin", NULL };
|
||||
|
||||
#include "movestack.c"
|
||||
#include "X11/XF86keysym.h"
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -19,7 +19,7 @@ done
|
||||
|
||||
shift $((OPTIND - 1))
|
||||
APP="$1"
|
||||
APP_DIR="$HOME/.config/suckless/$APP"
|
||||
APP_DIR="/home/andrew/dotfiles/.config/suckless/$APP"
|
||||
CONFIG_FILE="$APP_DIR/config.def.h"
|
||||
|
||||
if [[ -z "$APP" ]]; then
|
||||
@@ -52,9 +52,9 @@ AFTER_HASH=$(sha256sum config.def.h | cut -d ' ' -f1)
|
||||
|
||||
if [[ "$BEFORE_HASH" != "$AFTER_HASH" || "$REBUILD" == true ]]; then
|
||||
echo "Rebuilding $APP..."
|
||||
sudo rm -f config.h
|
||||
doas rm -f config.h
|
||||
make
|
||||
sudo make install
|
||||
doas make install
|
||||
pkill dwm
|
||||
else
|
||||
echo "No changes detected. Skipping rebuild."
|
||||
|
||||
@@ -1,253 +0,0 @@
|
||||
## Why does st not handle utmp entries?
|
||||
|
||||
Use the excellent tool of [utmp](https://git.suckless.org/utmp/) for this task.
|
||||
|
||||
|
||||
## Some _random program_ complains that st is unknown/not recognised/unsupported/whatever!
|
||||
|
||||
It means that st doesn’t have any terminfo entry on your system. Chances are
|
||||
you did not `make install`. If you just want to test it without installing it,
|
||||
you can manually run `tic -sx st.info`.
|
||||
|
||||
|
||||
## Nothing works, and nothing is said about an unknown terminal!
|
||||
|
||||
* Some programs just assume they’re running in xterm i.e. they don’t rely on
|
||||
terminfo. What you see is the current state of the “xterm compliance”.
|
||||
* Some programs don’t complain about the lacking st description and default to
|
||||
another terminal. In that case see the question about terminfo.
|
||||
|
||||
|
||||
## How do I scroll back up?
|
||||
|
||||
* Using a terminal multiplexer.
|
||||
* `st -e tmux` using C-b [
|
||||
* `st -e screen` using C-a ESC
|
||||
* Using the excellent tool of [scroll](https://git.suckless.org/scroll/).
|
||||
* Using the scrollback [patch](https://st.suckless.org/patches/scrollback/).
|
||||
|
||||
|
||||
## I would like to have utmp and/or scroll functionality by default
|
||||
|
||||
You can add the absolute path of both programs in your config.h file. You only
|
||||
have to modify the value of utmp and scroll variables.
|
||||
|
||||
|
||||
## Why doesn't the Del key work in some programs?
|
||||
|
||||
Taken from the terminfo manpage:
|
||||
|
||||
If the terminal has a keypad that transmits codes when the keys
|
||||
are pressed, this information can be given. Note that it is not
|
||||
possible to handle terminals where the keypad only works in
|
||||
local (this applies, for example, to the unshifted HP 2621 keys).
|
||||
If the keypad can be set to transmit or not transmit, give these
|
||||
codes as smkx and rmkx. Otherwise the keypad is assumed to
|
||||
always transmit.
|
||||
|
||||
In the st case smkx=E[?1hE= and rmkx=E[?1lE>, so it is mandatory that
|
||||
applications which want to test against keypad keys send these
|
||||
sequences.
|
||||
|
||||
But buggy applications (like bash and irssi, for example) don't do this. A fast
|
||||
solution for them is to use the following command:
|
||||
|
||||
$ printf '\033[?1h\033=' >/dev/tty
|
||||
|
||||
or
|
||||
$ tput smkx
|
||||
|
||||
In the case of bash, readline is used. Readline has a different note in its
|
||||
manpage about this issue:
|
||||
|
||||
enable-keypad (Off)
|
||||
When set to On, readline will try to enable the
|
||||
application keypad when it is called. Some systems
|
||||
need this to enable arrow keys.
|
||||
|
||||
Adding this option to your .inputrc will fix the keypad problem for all
|
||||
applications using readline.
|
||||
|
||||
If you are using zsh, then read the zsh FAQ
|
||||
<http://zsh.sourceforge.net/FAQ/zshfaq03.html#l25>:
|
||||
|
||||
It should be noted that the O / [ confusion can occur with other keys
|
||||
such as Home and End. Some systems let you query the key sequences
|
||||
sent by these keys from the system's terminal database, terminfo.
|
||||
Unfortunately, the key sequences given there typically apply to the
|
||||
mode that is not the one zsh uses by default (it's the "application"
|
||||
mode rather than the "raw" mode). Explaining the use of terminfo is
|
||||
outside of the scope of this FAQ, but if you wish to use the key
|
||||
sequences given there you can tell the line editor to turn on
|
||||
"application" mode when it starts and turn it off when it stops:
|
||||
|
||||
function zle-line-init () { echoti smkx }
|
||||
function zle-line-finish () { echoti rmkx }
|
||||
zle -N zle-line-init
|
||||
zle -N zle-line-finish
|
||||
|
||||
Putting these lines into your .zshrc will fix the problems.
|
||||
|
||||
|
||||
## How can I use meta in 8bit mode?
|
||||
|
||||
St supports meta in 8bit mode, but the default terminfo entry doesn't
|
||||
use this capability. If you want it, you have to use the 'st-meta' value
|
||||
in TERM.
|
||||
|
||||
|
||||
## I cannot compile st in OpenBSD
|
||||
|
||||
OpenBSD lacks librt, despite it being mandatory in POSIX
|
||||
<http://pubs.opengroup.org/onlinepubs/9699919799/utilities/c99.html#tag_20_11_13>.
|
||||
If you want to compile st for OpenBSD you have to remove -lrt from config.mk, and
|
||||
st will compile without any loss of functionality, because all the functions are
|
||||
included in libc on this platform.
|
||||
|
||||
|
||||
## The Backspace Case
|
||||
|
||||
St is emulating the Linux way of handling backspace being delete and delete being
|
||||
backspace.
|
||||
|
||||
This is an issue that was discussed in suckless mailing list
|
||||
<https://lists.suckless.org/dev/1404/20697.html>. Here is why some old grumpy
|
||||
terminal users wants its backspace to be how he feels it:
|
||||
|
||||
Well, I am going to comment why I want to change the behaviour
|
||||
of this key. When ASCII was defined in 1968, communication
|
||||
with computers was done using punched cards, or hardcopy
|
||||
terminals (basically a typewriter machine connected with the
|
||||
computer using a serial port). ASCII defines DELETE as 7F,
|
||||
because, in punched-card terms, it means all the holes of the
|
||||
card punched; it is thus a kind of 'physical delete'. In the
|
||||
same way, the BACKSPACE key was a non-destructive backspace,
|
||||
as on a typewriter. So, if you wanted to delete a character,
|
||||
you had to BACKSPACE and then DELETE. Another use of BACKSPACE
|
||||
was to type accented characters, for example 'a BACKSPACE `'.
|
||||
The VT100 had no BACKSPACE key; it was generated using the
|
||||
CONTROL key as another control character (CONTROL key sets to
|
||||
0 b7 b6 b5, so it converts H (code 0x48) into BACKSPACE (code
|
||||
0x08)), but it had a DELETE key in a similar position where
|
||||
the BACKSPACE key is located today on common PC keyboards.
|
||||
All the terminal emulators emulated the difference between
|
||||
these keys correctly: the backspace key generated a BACKSPACE
|
||||
(^H) and delete key generated a DELETE (^?).
|
||||
|
||||
But a problem arose when Linus Torvalds wrote Linux. Unlike
|
||||
earlier terminals, the Linux virtual terminal (the terminal
|
||||
emulator integrated in the kernel) returned a DELETE when
|
||||
backspace was pressed, due to the VT100 having a DELETE key in
|
||||
the same position. This created a lot of problems (see [1]
|
||||
and [2]). Since Linux has become the king, a lot of terminal
|
||||
emulators today generate a DELETE when the backspace key is
|
||||
pressed in order to avoid problems with Linux. The result is
|
||||
that the only way of generating a BACKSPACE on these systems
|
||||
is by using CONTROL + H. (I also think that emacs had an
|
||||
important point here because the CONTROL + H prefix is used
|
||||
in emacs in some commands (help commands).)
|
||||
|
||||
From point of view of the kernel, you can change the key
|
||||
for deleting a previous character with stty erase. When you
|
||||
connect a real terminal into a machine you describe the type
|
||||
of terminal, so getty configures the correct value of stty
|
||||
erase for this terminal. In the case of terminal emulators,
|
||||
however, you don't have any getty that can set the correct
|
||||
value of stty erase, so you always get the default value.
|
||||
For this reason, it is necessary to add 'stty erase ^H' to your
|
||||
profile if you have changed the value of the backspace key.
|
||||
Of course, another solution is for st itself to modify the
|
||||
value of stty erase. I usually have the inverse problem:
|
||||
when I connect to non-Unix machines, I have to press CONTROL +
|
||||
h to get a BACKSPACE. The inverse problem occurs when a user
|
||||
connects to my Unix machines from a different system with a
|
||||
correct backspace key.
|
||||
|
||||
[1] http://www.ibb.net/~anne/keyboard.html
|
||||
[2] http://www.tldp.org/HOWTO/Keyboard-and-Console-HOWTO-5.html
|
||||
|
||||
|
||||
## But I really want the old grumpy behaviour of my terminal
|
||||
|
||||
Apply [1].
|
||||
|
||||
[1] https://st.suckless.org/patches/delkey
|
||||
|
||||
|
||||
## Why do images not work in st using the w3m image hack?
|
||||
|
||||
w3mimg uses a hack that draws an image on top of the terminal emulator Drawable
|
||||
window. The hack relies on the terminal to use a single buffer to draw its
|
||||
contents directly.
|
||||
|
||||
st uses double-buffered drawing so the image is quickly replaced and may show a
|
||||
short flicker effect.
|
||||
|
||||
Below is a patch example to change st double-buffering to a single Drawable
|
||||
buffer.
|
||||
|
||||
diff --git a/x.c b/x.c
|
||||
--- a/x.c
|
||||
+++ b/x.c
|
||||
@@ -732,10 +732,6 @@ xresize(int col, int row)
|
||||
win.tw = col * win.cw;
|
||||
win.th = row * win.ch;
|
||||
|
||||
- XFreePixmap(xw.dpy, xw.buf);
|
||||
- xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h,
|
||||
- DefaultDepth(xw.dpy, xw.scr));
|
||||
- XftDrawChange(xw.draw, xw.buf);
|
||||
xclear(0, 0, win.w, win.h);
|
||||
|
||||
/* resize to new width */
|
||||
@@ -1148,8 +1144,7 @@ xinit(int cols, int rows)
|
||||
gcvalues.graphics_exposures = False;
|
||||
dc.gc = XCreateGC(xw.dpy, parent, GCGraphicsExposures,
|
||||
&gcvalues);
|
||||
- xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h,
|
||||
- DefaultDepth(xw.dpy, xw.scr));
|
||||
+ xw.buf = xw.win;
|
||||
XSetForeground(xw.dpy, dc.gc, dc.col[defaultbg].pixel);
|
||||
XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, win.w, win.h);
|
||||
|
||||
@@ -1632,8 +1627,6 @@ xdrawline(Line line, int x1, int y1, int x2)
|
||||
void
|
||||
xfinishdraw(void)
|
||||
{
|
||||
- XCopyArea(xw.dpy, xw.buf, xw.win, dc.gc, 0, 0, win.w,
|
||||
- win.h, 0, 0);
|
||||
XSetForeground(xw.dpy, dc.gc,
|
||||
dc.col[IS_SET(MODE_REVERSE)?
|
||||
defaultfg : defaultbg].pixel);
|
||||
|
||||
|
||||
## BadLength X error in Xft when trying to render emoji
|
||||
|
||||
Xft makes st crash when rendering color emojis with the following error:
|
||||
|
||||
"X Error of failed request: BadLength (poly request too large or internal Xlib length error)"
|
||||
Major opcode of failed request: 139 (RENDER)
|
||||
Minor opcode of failed request: 20 (RenderAddGlyphs)
|
||||
Serial number of failed request: 1595
|
||||
Current serial number in output stream: 1818"
|
||||
|
||||
This is a known bug in Xft (not st) which happens on some platforms and
|
||||
combination of particular fonts and fontconfig settings.
|
||||
|
||||
See also:
|
||||
https://gitlab.freedesktop.org/xorg/lib/libxft/issues/6
|
||||
https://bugs.freedesktop.org/show_bug.cgi?id=107534
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1498269
|
||||
|
||||
The solution is to remove color emoji fonts or disable this in the fontconfig
|
||||
XML configuration. As an ugly workaround (which may work only on newer
|
||||
fontconfig versions (FC_COLOR)), the following code can be used to mask color
|
||||
fonts:
|
||||
|
||||
FcPatternAddBool(fcpattern, FC_COLOR, FcFalse);
|
||||
|
||||
Please don't bother reporting this bug to st, but notify the upstream Xft
|
||||
developers about fixing this bug.
|
||||
|
||||
As of 2022-09-05 this now seems to be finally fixed in libXft 2.3.5:
|
||||
https://gitlab.freedesktop.org/xorg/lib/libxft/-/blob/libXft-2.3.5/NEWS
|
||||
@@ -1,17 +0,0 @@
|
||||
A STATEMENT ON LEGACY SUPPORT
|
||||
|
||||
In the terminal world there is much cruft that comes from old and unsup‐
|
||||
ported terminals that inherit incompatible modes and escape sequences
|
||||
which noone is able to know, except when he/she comes from that time and
|
||||
developed a graphical vt100 emulator at that time.
|
||||
|
||||
One goal of st is to only support what is really needed. When you en‐
|
||||
counter a sequence which you really need, implement it. But while you
|
||||
are at it, do not add the other cruft you might encounter while sneek‐
|
||||
ing at other terminal emulators. History has bloated them and there is
|
||||
no real evidence that most of the sequences are used today.
|
||||
|
||||
|
||||
Christoph Lohmann <20h@r-36.net>
|
||||
2012-09-13T07:00:36.081271045+02:00
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
MIT/X Consortium License
|
||||
|
||||
© 2014-2022 Hiltjo Posthuma <hiltjo at codemadness dot org>
|
||||
© 2018 Devin J. Pohly <djpohly at gmail dot com>
|
||||
© 2014-2017 Quentin Rameau <quinq at fifth dot space>
|
||||
© 2009-2012 Aurélien APTEL <aurelien dot aptel at gmail dot com>
|
||||
© 2008-2017 Anselm R Garbe <garbeam at gmail dot com>
|
||||
© 2012-2017 Roberto E. Vargas Caballero <k0ga at shike2 dot com>
|
||||
© 2012-2016 Christoph Lohmann <20h at r-36 dot net>
|
||||
© 2013 Eon S. Jeon <esjeon at hyunmu dot am>
|
||||
© 2013 Alexander Sedov <alex0player at gmail dot com>
|
||||
© 2013 Mark Edgar <medgar123 at gmail dot com>
|
||||
© 2013-2014 Eric Pruitt <eric.pruitt at gmail dot com>
|
||||
© 2013 Michael Forney <mforney at mforney dot org>
|
||||
© 2013-2014 Markus Teich <markus dot teich at stusta dot mhn dot de>
|
||||
© 2014-2015 Laslo Hunhold <dev at frign dot de>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
@@ -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.
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
vt emulation
|
||||
------------
|
||||
|
||||
* double-height support
|
||||
|
||||
code & interface
|
||||
----------------
|
||||
|
||||
* add a simple way to do multiplexing
|
||||
|
||||
drawing
|
||||
-------
|
||||
* add diacritics support to xdraws()
|
||||
* switch to a suckless font drawing library
|
||||
* make the font cache simpler
|
||||
* add better support for brightening of the upper colors
|
||||
|
||||
bugs
|
||||
----
|
||||
|
||||
* fix shift up/down (shift selection in emacs)
|
||||
* remove DEC test sequence when appropriate
|
||||
|
||||
misc
|
||||
----
|
||||
|
||||
$ grep -nE 'XXX|TODO' st.c
|
||||
|
||||
@@ -1,14 +1,4 @@
|
||||
/* See LICENSE file for copyright and license details. */
|
||||
|
||||
/*
|
||||
* appearance
|
||||
*
|
||||
* font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
|
||||
*/
|
||||
// static char *font = "CaskaydiaCoveNerdFontMono-Regular:size=11:antialias=true:autohint=true";
|
||||
// static char *font = "CaskaydiaCove Nerd Font Mono:style=SemiBold:size=11:antialias=true:autohint=true";
|
||||
static char *font = "CaskaydiaCove Nerd Font Mono:weight=180:size=11.5:antialias=true:autohint=true";
|
||||
|
||||
static int borderpx = 10;
|
||||
|
||||
/*
|
||||
@@ -76,27 +66,10 @@ static unsigned int cursorthickness = 2;
|
||||
*/
|
||||
static int bellvolume = 0;
|
||||
|
||||
/* default TERM value */
|
||||
char *termname = "st-256color";
|
||||
|
||||
/*
|
||||
* spaces per tab
|
||||
*
|
||||
* When you are changing this value, don't forget to adapt the »it« value in
|
||||
* the st.info and appropriately install the st.info in the environment where
|
||||
* you use this st version.
|
||||
*
|
||||
* it#$tabspaces,
|
||||
*
|
||||
* Secondly make sure your kernel is not expanding tabs. When running `stty
|
||||
* -a` »tab0« should appear. You can tell the terminal to not expand tabs by
|
||||
* running following command:
|
||||
*
|
||||
* stty tabs
|
||||
*/
|
||||
// char *termname = "st-256color";
|
||||
char *termname = "st";
|
||||
unsigned int tabspaces = 8;
|
||||
|
||||
/* Terminal colors (16 first used in escape sequence) */
|
||||
static const char *colorname[] = {
|
||||
/* 8 normal colors */
|
||||
"#343f44", // black
|
||||
@@ -133,24 +106,15 @@ unsigned int defaultcs = 258;
|
||||
static unsigned int defaultrcs = 259;
|
||||
|
||||
/*
|
||||
* Default shape of cursor
|
||||
* 2: Block ("█")
|
||||
* 4: Underline ("_")
|
||||
* 6: Bar ("|")
|
||||
* 7: Snowman ("☃")
|
||||
*/
|
||||
static unsigned int cursorshape = 2;
|
||||
|
||||
/*
|
||||
* Default columns and rows numbers
|
||||
*/
|
||||
|
||||
static unsigned int cols = 80;
|
||||
static unsigned int rows = 30;
|
||||
static unsigned int rows = 24;
|
||||
|
||||
/*
|
||||
* Default colour and shape of the mouse cursor
|
||||
*/
|
||||
static unsigned int mouseshape = XC_xterm;
|
||||
static unsigned int mousefg = 7;
|
||||
static unsigned int mousebg = 0;
|
||||
@@ -278,7 +242,8 @@ static Key key[] = {
|
||||
{ XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0},
|
||||
{ XK_KP_Delete, ShiftMask, "\033[2K", -1, 0},
|
||||
{ XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0},
|
||||
{ XK_KP_Delete, XK_ANY_MOD, "\033[3~", -1, 0},
|
||||
{ XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0},
|
||||
{ XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
|
||||
{ XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0},
|
||||
{ XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0},
|
||||
{ XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0},
|
||||
@@ -345,7 +310,8 @@ static Key key[] = {
|
||||
{ XK_Delete, ControlMask, "\033[3;5~", +1, 0},
|
||||
{ XK_Delete, ShiftMask, "\033[2K", -1, 0},
|
||||
{ XK_Delete, ShiftMask, "\033[3;2~", +1, 0},
|
||||
{ XK_Delete, XK_ANY_MOD, "\033[3~", -1, 0},
|
||||
{ XK_Delete, XK_ANY_MOD, "\033[P", -1, 0},
|
||||
{ XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
|
||||
{ XK_BackSpace, XK_NO_MOD, "\177", 0, 0},
|
||||
{ XK_BackSpace, Mod1Mask, "\033\177", 0, 0},
|
||||
{ XK_Home, ShiftMask, "\033[2J", 0, -1},
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
--- config.def.h
|
||||
+++ config.def.h
|
||||
@@ -201,6 +201,8 @@ static Shortcut shortcuts[] = {
|
||||
{ TERMMOD, XK_Y, selpaste, {.i = 0} },
|
||||
{ ShiftMask, XK_Insert, selpaste, {.i = 0} },
|
||||
{ TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
|
||||
+ { ShiftMask, XK_Page_Up, kscrollup, {.i = -1} },
|
||||
+ { ShiftMask, XK_Page_Down, kscrolldown, {.i = -1} },
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -1,14 +1,4 @@
|
||||
/* See LICENSE file for copyright and license details. */
|
||||
|
||||
/*
|
||||
* appearance
|
||||
*
|
||||
* font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
|
||||
*/
|
||||
// static char *font = "CaskaydiaCoveNerdFontMono-Regular:size=11:antialias=true:autohint=true";
|
||||
// static char *font = "CaskaydiaCove Nerd Font Mono:style=SemiBold:size=11:antialias=true:autohint=true";
|
||||
static char *font = "CaskaydiaCove Nerd Font Mono:weight=180:size=11.5:antialias=true:autohint=true";
|
||||
|
||||
static int borderpx = 10;
|
||||
|
||||
/*
|
||||
@@ -76,27 +66,10 @@ static unsigned int cursorthickness = 2;
|
||||
*/
|
||||
static int bellvolume = 0;
|
||||
|
||||
/* default TERM value */
|
||||
char *termname = "st-256color";
|
||||
|
||||
/*
|
||||
* spaces per tab
|
||||
*
|
||||
* When you are changing this value, don't forget to adapt the »it« value in
|
||||
* the st.info and appropriately install the st.info in the environment where
|
||||
* you use this st version.
|
||||
*
|
||||
* it#$tabspaces,
|
||||
*
|
||||
* Secondly make sure your kernel is not expanding tabs. When running `stty
|
||||
* -a` »tab0« should appear. You can tell the terminal to not expand tabs by
|
||||
* running following command:
|
||||
*
|
||||
* stty tabs
|
||||
*/
|
||||
// char *termname = "st-256color";
|
||||
char *termname = "st";
|
||||
unsigned int tabspaces = 8;
|
||||
|
||||
/* Terminal colors (16 first used in escape sequence) */
|
||||
static const char *colorname[] = {
|
||||
/* 8 normal colors */
|
||||
"#343f44", // black
|
||||
@@ -133,24 +106,15 @@ unsigned int defaultcs = 258;
|
||||
static unsigned int defaultrcs = 259;
|
||||
|
||||
/*
|
||||
* Default shape of cursor
|
||||
* 2: Block ("█")
|
||||
* 4: Underline ("_")
|
||||
* 6: Bar ("|")
|
||||
* 7: Snowman ("☃")
|
||||
*/
|
||||
static unsigned int cursorshape = 2;
|
||||
|
||||
/*
|
||||
* Default columns and rows numbers
|
||||
*/
|
||||
|
||||
static unsigned int cols = 80;
|
||||
static unsigned int rows = 30;
|
||||
static unsigned int rows = 24;
|
||||
|
||||
/*
|
||||
* Default colour and shape of the mouse cursor
|
||||
*/
|
||||
static unsigned int mouseshape = XC_xterm;
|
||||
static unsigned int mousefg = 7;
|
||||
static unsigned int mousebg = 0;
|
||||
@@ -278,7 +242,8 @@ static Key key[] = {
|
||||
{ XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0},
|
||||
{ XK_KP_Delete, ShiftMask, "\033[2K", -1, 0},
|
||||
{ XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0},
|
||||
{ XK_KP_Delete, XK_ANY_MOD, "\033[3~", -1, 0},
|
||||
{ XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0},
|
||||
{ XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
|
||||
{ XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0},
|
||||
{ XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0},
|
||||
{ XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0},
|
||||
@@ -345,7 +310,8 @@ static Key key[] = {
|
||||
{ XK_Delete, ControlMask, "\033[3;5~", +1, 0},
|
||||
{ XK_Delete, ShiftMask, "\033[2K", -1, 0},
|
||||
{ XK_Delete, ShiftMask, "\033[3;2~", +1, 0},
|
||||
{ XK_Delete, XK_ANY_MOD, "\033[3~", -1, 0},
|
||||
{ XK_Delete, XK_ANY_MOD, "\033[P", -1, 0},
|
||||
{ XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
|
||||
{ XK_BackSpace, XK_NO_MOD, "\177", 0, 0},
|
||||
{ XK_BackSpace, Mod1Mask, "\033\177", 0, 0},
|
||||
{ XK_Home, ShiftMask, "\033[2J", 0, -1},
|
||||
|
||||
@@ -1,129 +0,0 @@
|
||||
diff --git a/config.def.h b/config.def.h
|
||||
index 2cd740a..019a4e1 100644
|
||||
--- a/config.def.h
|
||||
+++ b/config.def.h
|
||||
@@ -93,6 +93,9 @@ char *termname = "st-256color";
|
||||
*/
|
||||
unsigned int tabspaces = 8;
|
||||
|
||||
+/* bg opacity */
|
||||
+float alpha = 0.8;
|
||||
+
|
||||
/* Terminal colors (16 first used in escape sequence) */
|
||||
static const char *colorname[] = {
|
||||
/* 8 normal colors */
|
||||
diff --git a/x.c b/x.c
|
||||
index d73152b..f32fd6c 100644
|
||||
--- a/x.c
|
||||
+++ b/x.c
|
||||
@@ -105,6 +105,7 @@ typedef struct {
|
||||
XSetWindowAttributes attrs;
|
||||
int scr;
|
||||
int isfixed; /* is fixed geometry? */
|
||||
+ int depth; /* bit depth */
|
||||
int l, t; /* left and top offset */
|
||||
int gm; /* geometry mask */
|
||||
} XWindow;
|
||||
@@ -752,7 +753,7 @@ xresize(int col, int row)
|
||||
|
||||
XFreePixmap(xw.dpy, xw.buf);
|
||||
xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h,
|
||||
- DefaultDepth(xw.dpy, xw.scr));
|
||||
+ xw.depth);
|
||||
XftDrawChange(xw.draw, xw.buf);
|
||||
xclear(0, 0, win.w, win.h);
|
||||
|
||||
@@ -812,6 +813,10 @@ xloadcols(void)
|
||||
else
|
||||
die("could not allocate color %d\n", i);
|
||||
}
|
||||
+
|
||||
+ dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * alpha);
|
||||
+ dc.col[defaultbg].pixel &= 0x00FFFFFF;
|
||||
+ dc.col[defaultbg].pixel |= (unsigned char)(0xff * alpha) << 24;
|
||||
loaded = 1;
|
||||
}
|
||||
|
||||
@@ -842,6 +847,12 @@ xsetcolorname(int x, const char *name)
|
||||
XftColorFree(xw.dpy, xw.vis, xw.cmap, &dc.col[x]);
|
||||
dc.col[x] = ncolor;
|
||||
|
||||
+ if (x == defaultbg) {
|
||||
+ dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * alpha);
|
||||
+ dc.col[defaultbg].pixel &= 0x00FFFFFF;
|
||||
+ dc.col[defaultbg].pixel |= (unsigned char)(0xff * alpha) << 24;
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1134,11 +1145,25 @@ xinit(int cols, int rows)
|
||||
Window parent, root;
|
||||
pid_t thispid = getpid();
|
||||
XColor xmousefg, xmousebg;
|
||||
+ XWindowAttributes attr;
|
||||
+ XVisualInfo vis;
|
||||
|
||||
if (!(xw.dpy = XOpenDisplay(NULL)))
|
||||
die("can't open display\n");
|
||||
xw.scr = XDefaultScreen(xw.dpy);
|
||||
- xw.vis = XDefaultVisual(xw.dpy, xw.scr);
|
||||
+
|
||||
+ root = XRootWindow(xw.dpy, xw.scr);
|
||||
+ if (!(opt_embed && (parent = strtol(opt_embed, NULL, 0))))
|
||||
+ parent = root;
|
||||
+
|
||||
+ if (XMatchVisualInfo(xw.dpy, xw.scr, 32, TrueColor, &vis) != 0) {
|
||||
+ xw.vis = vis.visual;
|
||||
+ xw.depth = vis.depth;
|
||||
+ } else {
|
||||
+ XGetWindowAttributes(xw.dpy, parent, &attr);
|
||||
+ xw.vis = attr.visual;
|
||||
+ xw.depth = attr.depth;
|
||||
+ }
|
||||
|
||||
/* font */
|
||||
if (!FcInit())
|
||||
@@ -1148,7 +1173,7 @@ xinit(int cols, int rows)
|
||||
xloadfonts(usedfont, 0);
|
||||
|
||||
/* colors */
|
||||
- xw.cmap = XDefaultColormap(xw.dpy, xw.scr);
|
||||
+ xw.cmap = XCreateColormap(xw.dpy, parent, xw.vis, None);
|
||||
xloadcols();
|
||||
|
||||
/* adjust fixed window geometry */
|
||||
@@ -1168,11 +1193,8 @@ xinit(int cols, int rows)
|
||||
| ButtonMotionMask | ButtonPressMask | ButtonReleaseMask;
|
||||
xw.attrs.colormap = xw.cmap;
|
||||
|
||||
- root = XRootWindow(xw.dpy, xw.scr);
|
||||
- if (!(opt_embed && (parent = strtol(opt_embed, NULL, 0))))
|
||||
- parent = root;
|
||||
- xw.win = XCreateWindow(xw.dpy, root, xw.l, xw.t,
|
||||
- win.w, win.h, 0, XDefaultDepth(xw.dpy, xw.scr), InputOutput,
|
||||
+ xw.win = XCreateWindow(xw.dpy, parent, xw.l, xw.t,
|
||||
+ win.w, win.h, 0, xw.depth, InputOutput,
|
||||
xw.vis, CWBackPixel | CWBorderPixel | CWBitGravity
|
||||
| CWEventMask | CWColormap, &xw.attrs);
|
||||
if (parent != root)
|
||||
@@ -1183,7 +1205,7 @@ xinit(int cols, int rows)
|
||||
dc.gc = XCreateGC(xw.dpy, xw.win, GCGraphicsExposures,
|
||||
&gcvalues);
|
||||
xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h,
|
||||
- DefaultDepth(xw.dpy, xw.scr));
|
||||
+ xw.depth);
|
||||
XSetForeground(xw.dpy, dc.gc, dc.col[defaultbg].pixel);
|
||||
XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, win.w, win.h);
|
||||
|
||||
@@ -2047,6 +2069,10 @@ main(int argc, char *argv[])
|
||||
case 'a':
|
||||
allowaltscreen = 0;
|
||||
break;
|
||||
+ case 'A':
|
||||
+ alpha = strtof(EARGF(usage()), NULL);
|
||||
+ LIMIT(alpha, 0.0, 1.0);
|
||||
+ break;
|
||||
case 'c':
|
||||
opt_class = EARGF(usage());
|
||||
break;
|
||||
@@ -1,50 +0,0 @@
|
||||
From 215ec30d6b5fe3319f88f1c9d16a37b6e14e5a53 Mon Sep 17 00:00:00 2001
|
||||
From: Bakkeby <bakkeby@gmail.com>
|
||||
Date: Mon, 19 Dec 2022 10:20:47 +0100
|
||||
Subject: [PATCH] dynamic cursor color: cursor color taken from current
|
||||
character
|
||||
|
||||
---
|
||||
x.c | 17 ++++++++++++++---
|
||||
1 file changed, 14 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/x.c b/x.c
|
||||
index 2a3bd38..21aadce 100644
|
||||
--- a/x.c
|
||||
+++ b/x.c
|
||||
@@ -1520,6 +1520,7 @@ void
|
||||
xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og)
|
||||
{
|
||||
Color drawcol;
|
||||
+ XRenderColor colbg;
|
||||
|
||||
/* remove the old cursor */
|
||||
if (selected(ox, oy))
|
||||
@@ -1548,11 +1549,21 @@ xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og)
|
||||
if (selected(cx, cy)) {
|
||||
g.fg = defaultfg;
|
||||
g.bg = defaultrcs;
|
||||
+ } else if (!(og.mode & ATTR_REVERSE)) {
|
||||
+ unsigned long col = g.bg;
|
||||
+ g.bg = g.fg;
|
||||
+ g.fg = col;
|
||||
+ }
|
||||
+
|
||||
+ if (IS_TRUECOL(g.bg)) {
|
||||
+ colbg.alpha = 0xffff;
|
||||
+ colbg.red = TRUERED(g.bg);
|
||||
+ colbg.green = TRUEGREEN(g.bg);
|
||||
+ colbg.blue = TRUEBLUE(g.bg);
|
||||
+ XftColorAllocValue(xw.dpy, xw.vis, xw.cmap, &colbg, &drawcol);
|
||||
} else {
|
||||
- g.fg = defaultbg;
|
||||
- g.bg = defaultcs;
|
||||
+ drawcol = dc.col[g.bg];
|
||||
}
|
||||
- drawcol = dc.col[g.bg];
|
||||
}
|
||||
|
||||
/* draw the new one */
|
||||
--
|
||||
2.38.1
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[0;33m'
|
||||
RESET='\033[0m'
|
||||
|
||||
DOTFILES_HOME="/home/andrew/dotfiles/"
|
||||
DOTFILES_CONFIG="${DOTFILES_HOME}.config/"
|
||||
DOTFILES_LOCAL="${DOTFILES_HOME}.local/"
|
||||
|
||||
PERSONAL_HOME="/home/andrew/"
|
||||
CONFIG="${PERSONAL_HOME}.config/"
|
||||
LOCAL="${PERSONAL_HOME}.local/"
|
||||
|
||||
ORIGINAL_DOTS=(
|
||||
"${DOTFILES_CONFIG}nvim/"
|
||||
"${DOTFILES_CONFIG}suckless/"
|
||||
"${DOTFILES_LOCAL}share/fonts/"
|
||||
"${DOTFILES_HOME}.xinitrc"
|
||||
"${DOTFILES_HOME}.bashrc")
|
||||
COPY_DOTS=(
|
||||
"${CONFIG}nvim/"
|
||||
"${CONFIG}suckless/"
|
||||
"${LOCAL}share/fonts/"
|
||||
"${PERSONAL_HOME}.xinitrc"
|
||||
"${PERSONAL_HOME}.bashrc")
|
||||
|
||||
for x in "${!COPY_DOTS[@]}"; do
|
||||
i="${COPY_DOTS[${x}]}"
|
||||
if [[ -d ${i} ]]; then
|
||||
echo -e "${i} ${GREEN}exists: Removing${RESET}"
|
||||
rm -rd "${i}"
|
||||
elif [[ -f ${i} ]]; then
|
||||
echo -e "${i} ${GREEN}exists: Removing${RESET}"
|
||||
rm -rf "${i}"
|
||||
else
|
||||
echo -e "${i} ${YELLOW}does not exist: Skipping${RESET}"
|
||||
fi
|
||||
done
|
||||
|
||||
for x in "${!ORIGINAL_DOTS[@]}"; do
|
||||
i="${ORIGINAL_DOTS[${x}]}"
|
||||
if [[ -d ${i} ]]; then
|
||||
echo "Directory: ${i} -> ${COPY_DOTS[${x}]}"
|
||||
cp -r ${i} ${COPY_DOTS[${x}]}
|
||||
fi
|
||||
|
||||
if [[ -f ${i} ]]; then
|
||||
echo "File: ${i} -> ${COPY_DOTS[${x}]}"
|
||||
cp ${i} ${COPY_DOTS[${x}]}
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
echo -e "${GREEN}Re-caching fonts${RESET}"
|
||||
fc-cache -f
|
||||
|
||||
echo -e "${GREEN}Rebuilding Suckless Software${RESET}"
|
||||
for x in "${CONFIG}suckless"/*/; do
|
||||
[[ -d "${x}" ]] || continue
|
||||
cd "${x}" && doas rm -rf config.h && make && doas make install
|
||||
done
|
||||
Reference in New Issue
Block a user