mirror of
https://github.com/gaschz/dotfiles.git
synced 2025-11-01 03:58:59 +01:00
feat: support truecolor
- Standardize capability usage with the terminfo database for portability. POSIX tput does declare only the basic options such as 'init', 'reset' and 'clear', leaving the rest unspecified, that is not ideal but hard coding escape sequences is way worse. - Set colorization options based on number of colors the terminal supports and not the TERM variable when possible. This is incomplete, terminal emulators may support or adapt more than it is advertised, but involves using DECRQSS queries and delays, as an example, 'resize' utility from XTerm uses 3 seconds as delay, this is worrisome. - Term with only '-direct' variants without ending with 256 means it only supports direct-color indexing, therefore 'tmux-direct' cannot be used, but the non-multiplexer terminal 'xterm-direct256' can.
This commit is contained in:
parent
0bae3d94b2
commit
45a0acb222
@ -19,6 +19,7 @@ if ! command -v sensors >/dev/null; then
|
||||
fi
|
||||
|
||||
redraw(){
|
||||
# shellcheck disable=SC2312
|
||||
stty size </dev/null 2>&1 >&2 | read -r LINES COLUMNS
|
||||
tput ed home
|
||||
}
|
||||
@ -44,7 +45,7 @@ get_header(){
|
||||
if test "${sensors}" != "0"; then
|
||||
sensors | grep -E -e "^(fan[1-9]+|[C|G]PU|temp[1-9]+):" |
|
||||
grep -v -e "0 RPM" -e "+0\.0.C" |
|
||||
tr -s "\t" " " | tr "\n" "\t" | sed "s/\s\+$/\n/"
|
||||
tr -s "\t" " " | tr "\n" "\t" | sed "s/\s\+$/\n/" || true
|
||||
fi
|
||||
printf '%s%-40s %-6s %6s %8s%s\n' "${bold}" 'Qube' 'State' 'CPU(%)' \
|
||||
'MEM(MiB)' "${nobold}"
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
##
|
||||
## SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
## SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
##
|
||||
## SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
##
|
||||
@ -28,14 +28,14 @@ test -f ./setup.sh ||
|
||||
|
||||
if test "${qube}" = "dom0"; then
|
||||
sh ./dotfiles/setup.sh
|
||||
user_name="$(getent group qubes | awk -F "[:,]" '{print $4}')"
|
||||
user_home="$(getent passwd "${user_name}" | awk -F ":" '{print $6}')"
|
||||
sudo -u "${user_name}" mkdir -pv -- "${user_home}/.cache"
|
||||
tmpdir="$(sudo -u "${user_name}" -- mktemp -d -- "${user_home}/.cache/XXXXXX")"
|
||||
user="$(getent group qubes | awk -F "[:,]" '{print $4}')"
|
||||
home="$(getent passwd "${user}" | awk -F ":" '{print $6}')"
|
||||
sudo -u "${user}" mkdir -pv -- "${home}/.cache"
|
||||
tmpdir="$(sudo -u "${user}" -- mktemp -d -- "${home}/.cache/XXXXXX")"
|
||||
trap 'rm -rf -- "${tmpdir}"' EXIT INT HUP QUIT ABRT
|
||||
cp -r -- ./dotfiles "${tmpdir}"
|
||||
chown -R -- "${user_name}:${user_name}" "${tmpdir}"
|
||||
sudo -u "${user_name}" -- "${tmpdir}/dotfiles/setup.sh"
|
||||
chown -R -- "${user}:${user}" "${tmpdir}"
|
||||
sudo -u "${user}" -- "${tmpdir}/dotfiles/setup.sh"
|
||||
exit
|
||||
fi
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
## SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
## SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
##
|
||||
## SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
@ -60,15 +60,17 @@ _reset_line() {
|
||||
## On pending input, assume it's been echoed and we're not in first column.
|
||||
## Otherwise ask the terminal for current column and read it from input.
|
||||
if read -t 0 || {
|
||||
IFS='[;' read -s -r -d'R' -p$'\033[6n' _ _ cur_y && [[ ${cur_y} != 1 ]]
|
||||
# shellcheck disable=SC2154
|
||||
IFS='[;' read -s -r -d'R' -p "${_t_u7}" _ _ cur_y && [[ ${cur_y} != 1 ]]
|
||||
}
|
||||
then
|
||||
unset cur_y
|
||||
## Print line ending char with reversed video and end with newline.
|
||||
if test "${color_prompt-}" = "yes"; then
|
||||
printf '%b' "\033[41m\033[0m\033[7m%\033[0m\n\r"
|
||||
# shellcheck disable=SC2154
|
||||
printf '%s\n\r' "${_t_sgr0}${_t_rev}%${_t_sgr0}"
|
||||
else
|
||||
printf '%b' "%\n\r"
|
||||
printf '%s\n\r' "%"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
@ -76,9 +78,11 @@ _reset_line() {
|
||||
_print_ec(){
|
||||
test "${_ec_ps1}" = "0" && return
|
||||
if test "${color_prompt:-}" = "yes"; then
|
||||
printf '%b%s%b' "(\001\033[31m\002" "${_ec_ps1}" "\001\033[0m\002)"
|
||||
# shellcheck disable=SC2154
|
||||
printf '(\001%s\002%s\001%s\002)' "${_t_setaf_1}" "${_ec_ps1}" \
|
||||
"${_t_sgr0}"
|
||||
else
|
||||
printf '%s' "(${_ec_ps1})"
|
||||
printf '(%s)' "${_ec_ps1}"
|
||||
fi
|
||||
unset _ec_ps1
|
||||
}
|
||||
@ -90,10 +94,10 @@ newline=$'\n'
|
||||
# shellcheck disable=SC2154
|
||||
if test "${color_prompt:-}" = "yes"; then
|
||||
# shellcheck disable=SC2154
|
||||
PS1="\$(_reset_line)\$(resize-terminal)\[\033[35m\][\[${reset_color}\]"
|
||||
PS1="\$(_reset_line)\$(resize-terminal)\[${_t_setaf_5}\][\[${_t_sgr0}\]"
|
||||
PS1="${PS1}${debian_chroot:+(${debian_chroot})}\[${usercolor}\]\u@\h "
|
||||
PS1="${PS1}\[${dircolor}\]\w\[${reset_color}\]\$(_git_prompt_info)"
|
||||
PS1="${PS1}\[\033[35m\]]\[${reset_color}\]${newline-}\$(_print_ec)"
|
||||
PS1="${PS1}\[${dircolor}\]\w\[${_t_sgr0}\]\$(_git_prompt_info)"
|
||||
PS1="${PS1}\[${_t_setaf_5}\]]\[${_t_sgr0}\]${newline-}\$(_print_ec)"
|
||||
PS1="${PS1}${ps1_symbol} "
|
||||
else
|
||||
PS1="\$(_reset_line)\$(resize-terminal)"
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
## SPDX-FileCopyrightText: 2004 - 2022 Tim Pope <https://tpo.pe>
|
||||
## SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
## SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
##
|
||||
## SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
@ -157,27 +157,196 @@ fi
|
||||
## }}}
|
||||
## }}}
|
||||
## {{{ Prompt
|
||||
## Set ability to color terminal.
|
||||
# shellcheck disable=2034
|
||||
case "${TERM-}" in
|
||||
iterm|*-truecolor)
|
||||
export COLORTERM=truecolor; color_prompt=yes
|
||||
;;
|
||||
*-color|*-256color|linux*|vt100*|vt220*)
|
||||
color_prompt=yes
|
||||
;;
|
||||
""|dumb)
|
||||
color_prompt=no
|
||||
;;
|
||||
*)
|
||||
color_prompt=no
|
||||
;;
|
||||
esac
|
||||
if test -n "${NO_COLOR-}"; then
|
||||
color_prompt=no
|
||||
fi
|
||||
# shellcheck disable=SC2034
|
||||
_get_term_cap(){
|
||||
## SGR
|
||||
_t_colors="$(tput colors)" 2>/dev/null || true
|
||||
_t_sgr0="$(tput sgr0)" 2>/dev/null || true
|
||||
_t_bold="$(tput bold)" 2>/dev/null || true
|
||||
_t_dim="$(tput dim)" 2>/dev/null || true
|
||||
_t_sitm="$(tput sitm)" 2>/dev/null || true
|
||||
_t_smul="$(tput smul)" 2>/dev/null || true
|
||||
_t_blink="$(tput blink)" 2>/dev/null || true
|
||||
_t_rev="$(tput rev)" 2>/dev/null || true
|
||||
_t_smso="$(tput rmso)" 2>/dev/null || true
|
||||
_t_invis="$(tput invis)" 2>/dev/null || true
|
||||
_t_ritm="$(tput ritm)" 2>/dev/null || true
|
||||
_t_rmul="$(tput rmul)" 2>/dev/null || true
|
||||
_t_rmso="$(tput rmso)" 2>/dev/null || true
|
||||
_t_setaf_0="$(tput setaf 0)" 2>/dev/null || true
|
||||
_t_setaf_1="$(tput setaf 1)" 2>/dev/null || true
|
||||
_t_setaf_2="$(tput setaf 2)" 2>/dev/null || true
|
||||
_t_setaf_3="$(tput setaf 3)" 2>/dev/null || true
|
||||
_t_setaf_4="$(tput setaf 4)" 2>/dev/null || true
|
||||
_t_setaf_5="$(tput setaf 5)" 2>/dev/null || true
|
||||
_t_setaf_6="$(tput setaf 6)" 2>/dev/null || true
|
||||
_t_setaf_7="$(tput setaf 7)" 2>/dev/null || true
|
||||
_t_setab_0="$(tput setab 0)" 2>/dev/null || true
|
||||
_t_setab_1="$(tput setab 1)" 2>/dev/null || true
|
||||
_t_setab_2="$(tput setab 2)" 2>/dev/null || true
|
||||
_t_setab_3="$(tput setab 3)" 2>/dev/null || true
|
||||
_t_setab_4="$(tput setab 4)" 2>/dev/null || true
|
||||
_t_setab_5="$(tput setab 5)" 2>/dev/null || true
|
||||
_t_setab_6="$(tput setab 6)" 2>/dev/null || true
|
||||
_t_setab_7="$(tput setab 7)" 2>/dev/null || true
|
||||
## Movement
|
||||
_t_ed="$(tput ed)" 2>/dev/null || true
|
||||
_t_el="$(tput el)" 2>/dev/null || true
|
||||
_t_home="$(tput home)" 2>/dev/null || true
|
||||
_t_cnorm="$(tput cnorm)" 2>/dev/null || true
|
||||
_t_civis="$(tput civis)" 2>/dev/null || true
|
||||
_t_smcup="$(tput smcup)" 2>/dev/null || true
|
||||
_t_rmcup="$(tput rmcup)" 2>/dev/null || true
|
||||
_t_sc="$(tput sc)" 2>/dev/null || true
|
||||
_t_clear="$(tput clear)" 2>/dev/null || true
|
||||
## Extra
|
||||
_t_cub1="$(tput cub1)" 2>/dev/null || true
|
||||
_t_cud1="$(tput cud1)" 2>/dev/null || true
|
||||
_t_ind="$(tput ind)" 2>/dev/null || true
|
||||
_t_cr="$(tput cr)" 2>/dev/null || true
|
||||
_t_u7="$(tput u7)" 2>/dev/null || true
|
||||
_t_u8="$(tput u8)" 2>/dev/null || true
|
||||
_t_u9="$(tput u9)" 2>/dev/null || true
|
||||
}
|
||||
|
||||
_get_color_support(){
|
||||
if test -n "${NO_COLOR-}"; then
|
||||
color_support=-1
|
||||
return 0
|
||||
fi
|
||||
case "${COLORTERM-}" in
|
||||
truecolor|24bit)
|
||||
color_support=$((1 << 24))
|
||||
return 0
|
||||
;;
|
||||
*) ;;
|
||||
esac
|
||||
if has tput; then
|
||||
if tput RGB >/dev/null 2>&1; then
|
||||
color_support=$((1 << 24))
|
||||
return 0
|
||||
fi
|
||||
color_support=${_t_colors}
|
||||
if test -n "${color_support}"; then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
## Color query from terminfo is relatively new, only available in ncurses
|
||||
## since 2018. Below is a match based on terminfo revision 1.909 to query
|
||||
## number of supported colors in case the terminfo database can't be
|
||||
## queried.
|
||||
case "${TERM-}" in
|
||||
*?-truecolor*|*?-direct*)
|
||||
## TODO: Some terminals such as iTerm should be in this list.
|
||||
color_support=$((1 << 24))
|
||||
;;
|
||||
*?-256color*|absolute|alacritty|Apple_Terminal|domterm|iterm|iterm2|\
|
||||
iTerm2.app|iTerm.app|kitty|mintty|ms-terminal|nsterm|nsterm-build309|\
|
||||
nsterm-build326|nsterm-build343|nsterm-build361|nsterm-build400|\
|
||||
nsterm-build440|scrt|securecrt|terminator|terminology|terminology-0.6.1|\
|
||||
terminology-1.0.0|terminology-1.8.1|termite|vscode|xterm+256setaf|\
|
||||
xterm.js)
|
||||
color_support=256
|
||||
;;
|
||||
*?-88color*|rxvt-unicode)
|
||||
color_support=88
|
||||
;;
|
||||
hpterm-color|wy370|wy370-101k|wy370-105k|wy370-EPC|wy370-nk|wy370-rv|\
|
||||
wy370-vb|wy370-w|wy370-wvb|wyse370)
|
||||
color_support=64
|
||||
;;
|
||||
d430c-dg-ccc|d430c-unix-25-ccc|d430c-unix-ccc|d430c-unix-s-ccc|\
|
||||
d430c-unix-sr-ccc|d430c-unix-w-ccc|d430-dg-ccc|d430-unix-25-ccc|\
|
||||
d430-unix-ccc|d430-unix-s-ccc|d430-unix-sr-ccc|d430-unix-w-ccc|dg+ccc|\
|
||||
dgunix+ccc)
|
||||
color_support=52
|
||||
;;
|
||||
*?-16color*|amiga-vnc|atari-color|atari_st-color|at-color|d430c-dg|\
|
||||
d430c-unix|d430c-unix-25|d430c-unix-s|d430c-unix-sr|d430c-unix-w|d430-dg|\
|
||||
d430-unix|d430-unix-25|d430-unix-s|d430-unix-sr|d430-unix-w|d470|d470-7b|\
|
||||
d470c|d470c-7b|d470c-dg|d470-dg|dg+color|dg+fixed|dgmode+color|\
|
||||
dgunix+fixed|hp2397|hp2397a|hp+color|ncr260wy325pp|ncr260wy325wpp|\
|
||||
ncr260wy350pp|ncr260wy350wpp|nsterm-7-c|nsterm-7-c-s|nsterm-acs-c|\
|
||||
nsterm-acs-c-s|nsterm-bce|nsterm+c|nsterm-c|nsterm-c-7|nsterm-c-acs|\
|
||||
nsterm-c-s|nsterm-c-s-7|nsterm-c-s-acs|st52-color|tt52|tw52|\
|
||||
tw52-color)
|
||||
color_support=16
|
||||
;;
|
||||
*?-color*|color_xterm|386at|aixterm|alacritty+common|ansi|ansi80x25|\
|
||||
ansi80x25-raw|ansi80x30|ansi80x43|ansi80x50|ansi80x60|ansi-emx|ansil|\
|
||||
ansis|ansi.sys|ansi.sysk|ansisysk|ansi.sys-old|ansiw|arm100|arm100-am|\
|
||||
arm100-w|arm100-wam|at386|aterm|att6386|beterm|bsdos-pc|bsdos-pc-nobold|\
|
||||
bsdos-ppc|bterm|cons25|cons25-debian|cons25-iso8859|cons25-koi8-r|\
|
||||
cons25l1|cons25r|cons25w|cons30|cons43|cons50|cons50-iso8859|\
|
||||
cons50-koi8r|cons50l1|cons50r|cons60|cons60-iso|cons60-koi8r|cons60l1|\
|
||||
cons60r|crt|crt-vt220|ctrm|cx|cx100|cygwin|cygwinB19|cygwinDBG|d220|\
|
||||
d220-7b|d220-dg|d230|d230c|d230c-dg|d230-dg|darwin|darwin-100x37|\
|
||||
darwin-112x37|darwin-128x40|darwin-128x48|darwin-144x48|darwin-160x64|\
|
||||
darwin-200x64|darwin-200x75|darwin-256x96|darwin-80x25|darwin-80x30|\
|
||||
darwin-90x30|darwin-b|darwin-f|darwin-f2|decansi|djgpp|djgpp204|dtterm|\
|
||||
dumb-emacs-ansi|dvtm|emots|emx-base|Eterm|gnome|gnome-2007|gnome-2008|\
|
||||
gnome-2012|gnome-fc5|gnome-rh62|gnome-rh72|gnome-rh80|gnome-rh90|gs6300|\
|
||||
hft|hft-c|hft-c-old|hft-old|hterm|hurd|i3164|ibm3164|ibm5081|ibm5154|\
|
||||
ibm6154|ibm8503|ibm8507|ibm8512|ibm8513|ibm8514|ibm8604|ibmpc3|ibmpc3r|\
|
||||
interix|interix-nti|jaixterm|jfbterm|kon|kon2|konsole|konsole-base|\
|
||||
konsole-linux|konsole-solaris|konsole-vt100|konsole-vt420pc|konsole-xf3x|\
|
||||
konsole-xf4x|kterm|kterm-co|kvt|linux|linux2.2|linux2.6|linux2.6.26|\
|
||||
linux3.0|linux-basic|linux-c|linux-c-nc|linux-koi8|linux-koi8r|linux-lat|\
|
||||
linux-m1|linux-nic|linux-s|linux-vt|mgt|mgterm|minitel1|minitel1b|minix|\
|
||||
minix-3.0|mintty+common|mlterm|mlterm2|mlterm3|mosh|mrxvt|ms-vt100+|\
|
||||
ms-vt-utf8|mvterm|nansi.sys|nansisys|nansi.sysk|nansisysk|ncr260intan|\
|
||||
ncr260intpp|ncr260intwan|ncr260intwpp|ncsa|ncsa-ns|ncsa-vt220|netbsd6|\
|
||||
nsterm-7|nsterm-7-s|nsterm-acs|nsterm-acs-s|nsterm+c41|nsterm-old|\
|
||||
nsterm-s|nsterm-s-7|nsterm-s-acs|ntconsole|ntconsole-100|\
|
||||
ntconsole-100-nti|ntconsole-25|ntconsole-25-nti|ntconsole-25-w|\
|
||||
ntconsole-25-w-vt|ntconsole-35|ntconsole-35-nti|ntconsole-35-w|\
|
||||
ntconsole-50|ntconsole-50-nti|ntconsole-50-w|ntconsole-60|\
|
||||
ntconsole-60-nti|ntconsole-60-w|ntconsole-w|ntconsole-w-vt|nxterm|old-st|\
|
||||
opennt|opennt-100|opennt-100-nti|opennt-25|opennt-25-nti|opennt-25-w|\
|
||||
opennt-25-w-vt|opennt-35|opennt-35-nti|opennt-35-w|opennt-50|\
|
||||
opennt-50-nti|opennt-50-w|opennt-60|opennt-60-nti|opennt-60-w|opennt-nti|\
|
||||
opennt-w|opennt-w-vt|pc3|pc3-bold|pc3r|pcansi|pcansi-25|pcansi25|\
|
||||
pcansi-33|pcansi33|pcansi-43|pcansi43|pccon|pccon0|pc-minix|putty|\
|
||||
putty-m1|putty-noapp|putty-sco|putty-screen|putty-vt100|qansi|qansi-g|\
|
||||
qansi-m|qansi-t|qansi-w|qnx|qnx4|qnxm|qnxt|qnxt2|qnxt4|qnxw|rxvt|\
|
||||
rxvt-cygwin|rxvt-cygwin-native|rxvt-xpm|scoansi|scoansi-new|scoansi-old|\
|
||||
screen|screen4|screen5|screen-base|screen-bce|screen-bce.Eterm|\
|
||||
screen-bce.gnome|screen-bce.konsole|screen-bce.linux|screen-bce.mrxvt|\
|
||||
screen-bce.rxvt|screen-bce.xterm-new|screen.Eterm|screen.gnome|\
|
||||
screen.konsole|screen.linux|screen.linux-m1|screen.linux-s|\
|
||||
screen.minitel1|screen.minitel1b|screen.mlterm|screen.mrxvt|screen.putty|\
|
||||
screen.putty-m1|screen.rxvt|screen-s|screen.teraterm|screen.vte|screen-w|\
|
||||
screen.xterm-new|screen.xterm-xfree86|simpleterm|st|st-0.6|st-0.7|st-0.8|\
|
||||
stterm|tek4205|teken|teken-2018|teken-2022|teken-sc|teken-vt|teraterm|\
|
||||
teraterm2.3|teraterm4.59|teraterm4.97|ti928|ti928-8|ti_ansi|tmux|tw100|\
|
||||
uwin|vt100+|vte|vte-2007|vte-2008|vte-2012|vte-2014|vte-2017|vte-2018|\
|
||||
vtnt|vt-utf8|vv100|vwmterm|wsvt25|wsvt25m|wy350|wy350-vb|wy350-w|\
|
||||
wy350-wvb|wyse350|wyse350-vb|wyse350-w|wyse350-wvb|xfce|xiterm|xnuppc|\
|
||||
xnuppc-100x37|xnuppc-112x37|xnuppc-128x40|xnuppc-128x48|xnuppc-144x48|\
|
||||
xnuppc-160x64|xnuppc-200x64|xnuppc-200x75|xnuppc-256x96|xnuppc-80x25|\
|
||||
xnuppc-80x30|xnuppc-90x30|xnuppc-b|xnuppc+c|xnuppc-f|xnuppc-f2|xterm|\
|
||||
xterm1|xterm-1002|xterm-1003|xterm-1005|xterm-1006|xterm-8bit|\
|
||||
xterm-basic|xtermc|xterm-debian|xterm-hp|xterm-new|xterm-nic|xterm-noapp|\
|
||||
xterm+nofkeys|xterm-p370|xterm-p371|xterm-sco|xterms-sun|xterm-sun|\
|
||||
xterm-utf8|xterm-vt220|xterm-x10mouse|xterm-x11hilite|xterm-x11mouse|\
|
||||
xterm-xf86-v32|xterm-xf86-v33|xterm-xf86-v333|xterm-xf86-v40|\
|
||||
xterm-xf86-v43|xterm-xf86-v44|xterm-xfree86|xterm-xi|xwsh)
|
||||
color_support=8
|
||||
;;
|
||||
*)
|
||||
color_support=-1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_get_term_cap
|
||||
_get_color_support
|
||||
case "${color_support}" in
|
||||
$((1 << 24))) export COLORTERM=truecolor; color_prompt=yes;;
|
||||
[1-9]*) color_prompt=yes;;
|
||||
*) color_prompt=no;;
|
||||
esac
|
||||
|
||||
## Colorise "ls" output.
|
||||
if test "${color_prompt-}" = "yes"; then
|
||||
if has dircolors; then
|
||||
## Use dircolors if available.
|
||||
@ -192,7 +361,8 @@ if test "${color_prompt-}" = "yes"; then
|
||||
## Fix bold on some terminals.
|
||||
case "${TERM-}" in
|
||||
xterm*|screen*)
|
||||
LS_COLORS="$(printf '%s\n' "${LS_COLORS}" | sed -e 's/01;3/00;9/g')"
|
||||
LS_COLORS="$(printf '%s' "${LS_COLORS}" |
|
||||
sed -e 's/01;3\([0-9]\)/00;9\1/g')"
|
||||
;;
|
||||
*) ;;
|
||||
esac
|
||||
@ -203,22 +373,21 @@ if test "${color_prompt-}" = "yes"; then
|
||||
export CLICOLOR CLICOLOR_FORCE LSCOLORS
|
||||
fi
|
||||
|
||||
## Set gcc colors.
|
||||
GCC_COLORS="error=00;31:warning=01;35:note=01;36:caret=01;32:locus=01"
|
||||
GCC_COLORS="${GCC_COLORS}:quote=01"
|
||||
export GCC_COLORS
|
||||
|
||||
## Colors for programs that uses less such as 'man'.
|
||||
## Colors for programs that uses 'less' such as 'man'.
|
||||
GROFF_NO_SGR=1
|
||||
LESS_TERMCAP_mb="$(tput bold; tput setaf 2)" # begin blink
|
||||
LESS_TERMCAP_md="$(tput bold; tput setaf 6)" # begin bold
|
||||
LESS_TERMCAP_me="$(tput sgr0)" # reset bold/blink
|
||||
LESS_TERMCAP_so="$(tput bold; tput setaf 7; tput setab 4)" # begin rev video
|
||||
LESS_TERMCAP_se="$(tput rmso; tput sgr0)" # reset rev video
|
||||
LESS_TERMCAP_us="$(tput smul; tput bold; tput setaf 2)" # begin underline
|
||||
LESS_TERMCAP_ue="$(tput rmul; tput sgr0)" # reset underline
|
||||
LESS_TERMCAP_mr="$(tput rev)" # revert
|
||||
LESS_TERMCAP_mh="$(tput dim)" # dimerize
|
||||
LESS_TERMCAP_mb="${_t_bold}${_t_setaf_2}"
|
||||
LESS_TERMCAP_md="${_t_bold}${_t_setaf_6}"
|
||||
LESS_TERMCAP_me="${_t_sgr0}"
|
||||
LESS_TERMCAP_so="${_t_bold}${_t_setaf_7}${_t_setab_4}"
|
||||
LESS_TERMCAP_se="${_t_rmso}${_t_sgr0}"
|
||||
LESS_TERMCAP_us="${_t_smul}${_t_bold}${_t_setaf_2}"
|
||||
LESS_TERMCAP_ue="${_t_rmul}${_t_sgr0}"
|
||||
LESS_TERMCAP_mr="${_t_rev}"
|
||||
LESS_TERMCAP_mh="${_t_dim}"
|
||||
export GROFF_NO_SGR
|
||||
export LESS_TERMCAP_mb LESS_TERMCAP_md LESS_TERMCAP_me
|
||||
export LESS_TERMCAP_so LESS_TERMCAP_se LESS_TERMCAP_us
|
||||
@ -246,46 +415,46 @@ _git_prompt_info(){
|
||||
ref="$(git describe --tags --exact-match HEAD 2>/dev/null)"
|
||||
test "${ref-}" || ref="$(git rev-parse HEAD 2>/dev/null | cut -c 1-7)"
|
||||
test "${ref-}" || return
|
||||
# shellcheck disable=2039,3003
|
||||
case "${TERM-}" in
|
||||
*-256color|xterm-kitty) branchcolor=$'\033[38;5;31m' ;;
|
||||
*-88color|rxvt-unicode) branchcolor=$'\033[38;5;22m' ;;
|
||||
*) branchcolor=$'\033[0;94m' ;;
|
||||
case "${color_support-}" in
|
||||
256|$((1 << 24))) branchcolor="$(printf '%b' "\033[38;5;31m")";;
|
||||
88) branchcolor="$(printf '%b' "\033[38;5;22m")";;
|
||||
[1-9]*) branchcolor="${_t_bold}${_t_setaf_4}";;
|
||||
*) branchcolor="";;
|
||||
esac
|
||||
if test -n "${ZSH_VERSION-}"; then
|
||||
# shellcheck disable=2016
|
||||
if test "${color_prompt-}" = "yes"; then
|
||||
print -Pn '(%%{${branchcolor}%%}%20>...>${ref}%<<%%{\033[0m%%})'
|
||||
print -Pn '(%%{${branchcolor}%%}%20>...>${ref}%<<%%{${_t_sgr0}%%})'
|
||||
else
|
||||
print -Pn '(%20>...>${ref}%<<)'
|
||||
fi
|
||||
else
|
||||
if test "${color_prompt-}" = "yes"; then
|
||||
printf '%s' "(${branchcolor}${ref}${reset_color})"
|
||||
printf '%s' "(${branchcolor}${ref}${_t_sgr0})"
|
||||
else
|
||||
printf '%s' "(${ref})"
|
||||
fi
|
||||
fi
|
||||
unset ref
|
||||
unset ref branchcolor
|
||||
}
|
||||
|
||||
# shellcheck disable=SC2034
|
||||
reset_color="$(printf '%b' '\033[0m')"
|
||||
|
||||
# shellcheck disable=SC2034
|
||||
## Use echotc Co? Only available by default for zsh, not bash.
|
||||
case "${TERM-}" in
|
||||
*-256color|xterm-kitty)
|
||||
case "${color_support-}" in
|
||||
256|$((1 << 24)))
|
||||
usercolor="$(printf '%b' "\033[38;5;184m")"
|
||||
dircolor="$(printf '%b' "\033[38;5;27m")"
|
||||
;;
|
||||
*-88color|rxvt-unicode)
|
||||
88)
|
||||
usercolor="$(printf '%b' "\033[38;5;56m")"
|
||||
dircolor="$(printf '%b' "\033[38;5;23m")"
|
||||
;;
|
||||
[1-9]*)
|
||||
usercolor="${_t_bold}${_t_setaf_3}"
|
||||
dircolor="${_t_bold}${_t_setaf_4}"
|
||||
;;
|
||||
*)
|
||||
usercolor="$(printf '%b' "\033[0;93m")"
|
||||
dircolor="$(printf '%b' "\033[1;34m")"
|
||||
usercolor=""
|
||||
dircolor=""
|
||||
;;
|
||||
esac
|
||||
|
||||
@ -297,16 +466,14 @@ esac
|
||||
# shellcheck disable=SC2034
|
||||
uid="$(id -u)"
|
||||
if test "${uid}" = "0"; then
|
||||
usercolor="$(printf '%b' "\033[0;97m")"
|
||||
usercolor="${_t_bold}${_t_setaf_7}"
|
||||
ps1_symbol="#"
|
||||
fi
|
||||
unset uid
|
||||
|
||||
## Do not colorize this prompt, Sh fails to count the correct number of
|
||||
## characters on the prompt leading to problems.
|
||||
user="$(id -un)"
|
||||
if test "${color_prompt-}" = "yes"; then
|
||||
PS1="[${usercolor}${user} $(hostname -s)${reset_color}]${ps1_symbol} "
|
||||
PS1="[${usercolor}${user} $(hostname -s)${_t_sgr0}]${ps1_symbol} "
|
||||
else
|
||||
PS1="${user}@$(hostname -s)${ps1_symbol} "
|
||||
fi
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
## SPDX-FileCopyrightText: 2004 - 2022 Tim Pope <https://tpo.pe>
|
||||
## SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
## SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
##
|
||||
## SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
@ -20,6 +20,7 @@ source "$HOME/.zprofile"
|
||||
source "$ENV"
|
||||
## }}}
|
||||
## {{{ Options
|
||||
PROMPT_EOL_MARK='%b%B%S%#%s%b'
|
||||
## - Quiet
|
||||
setopt no_beep
|
||||
## - Words
|
||||
@ -74,10 +75,10 @@ if test "${color_prompt-}" = "yes"; then
|
||||
[[ "${COLORTERM-}" == (24bit|truecolor) ||
|
||||
"${terminfo[colors]}" -eq '16777216' ]] || zmodload zsh/nearcolor
|
||||
|
||||
PS1="\$(resize-terminal)%F{magenta}[%{$usercolor%}%n@%m%F{reset_color%}"
|
||||
PS1="\$(resize-terminal)%F{magenta}[%{${usercolor}%}%n@%m%F{reset_color%}"
|
||||
PS1="${PS1} %{$dircolor%}%50<...<%~%<<%F{reset_color%}\$(_git_prompt_info)"
|
||||
PS1="${PS1}%F{magenta}]%F{reset_color}${newline-}${ps1_symbol} "
|
||||
RPS1="%(?..(%{"$'\033[31m'"%}%?%{$reset_color%}%)%<<)"
|
||||
RPS1="%(?..(%F{red%}%?%F{reset_color%}%)%<<)"
|
||||
else
|
||||
PS1="\$(resize-terminal)[%n@%M %~\$(_git_prompt_info)]${newline}"
|
||||
PS1="${PS1}${ps1_symbol} "
|
||||
@ -103,7 +104,6 @@ case "${TERM-}" in
|
||||
precmd() {
|
||||
_set_title "$@"
|
||||
if [ "${STY:-}" -o "${TMUX:-}" ]; then
|
||||
print -Pn '\033]1;\a\033]1;@%m\a'
|
||||
print -Pn '\033k@\033\\'
|
||||
else
|
||||
print -Pn '\033k@%m\033\\'
|
||||
@ -111,17 +111,17 @@ case "${TERM-}" in
|
||||
}
|
||||
preexec() {
|
||||
_set_title "$@"
|
||||
print -n "\033k"
|
||||
print -Pnr '%10>..>$1' | tr '\0-\037' '?'
|
||||
if [ "${STY:-}" -o "${TMUX:-}" ]; then
|
||||
print -Pn '@\033\\'
|
||||
else
|
||||
print -Pn '@%m\033\\'
|
||||
fi
|
||||
return 0
|
||||
#print -Pnr '%10>..>$1' | tr '\0-\037' '?'
|
||||
#if [ "${STY:-}" -o "${TMUX:-}" ]; then
|
||||
# print -Pn '\033k@\033\\'
|
||||
#else
|
||||
# print -Pn '\033k@%m\033\\'
|
||||
#fi
|
||||
}
|
||||
;;
|
||||
|
||||
xterm*|rxvt*|Eterm*|kterm*|putty*|dtterm*|ansi*|cygwin*)
|
||||
*?-direct*|xterm*|rxvt*|Eterm*|kterm*|putty*|dtterm*|ansi*|cygwin*)
|
||||
precmd () { _set_title "$@" }
|
||||
preexec() { _set_title "$@" }
|
||||
;;
|
||||
@ -134,8 +134,8 @@ case "${TERM-}" in
|
||||
;;
|
||||
esac
|
||||
|
||||
unset hostcolor hostletter hostcode dircolor usercolor usercode reset_color \
|
||||
newline ps1_symbol
|
||||
unset hostcolor hostletter hostcode dircolor usercolor usercode newline \
|
||||
ps1_symbol
|
||||
## }}}
|
||||
## {{{ Completions
|
||||
|
||||
@ -224,9 +224,10 @@ if test "${color_prompt-}" = "yes"; then
|
||||
## Enable auto-suggestions based on the history
|
||||
if test -f /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh; then
|
||||
ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=30
|
||||
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=7,bg=8,underline"
|
||||
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="standout"
|
||||
typeset -a ZSH_AUTOSUGGEST_CLEAR_WIDGETS
|
||||
ZSH_AUTOSUGGEST_CLEAR_WIDGETS+=(bracketed-paste)
|
||||
ZSH_AUTOSUGGEST_STRATEGY=(history completion)
|
||||
ZSH_AUTOSUGGEST_CLEAR_WIDGETS+=(bracketed-paste accept-line)
|
||||
source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh
|
||||
fi
|
||||
## Highlight commands as you type
|
||||
@ -236,7 +237,6 @@ if test "${color_prompt-}" = "yes"; then
|
||||
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern regexp)
|
||||
typeset -A ZSH_HIGHLIGHT_STYLES
|
||||
ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red'
|
||||
ZSH_HIGHLIGHT_STYLES[default]='fg=white'
|
||||
ZSH_HIGHLIGHT_STYLES[alias]='fg=cyan'
|
||||
ZSH_HIGHLIGHT_STYLES[function]='fg=cyan'
|
||||
ZSH_HIGHLIGHT_STYLES[builtin]='fg=green'
|
||||
|
||||
@ -14,8 +14,10 @@ if test -n "${TERM_RESIZE_DISABLE:-}"; then
|
||||
fi
|
||||
|
||||
test -t 0 || exit 0
|
||||
|
||||
msg_unsupported="error: cannot resize screen: unsupported terminal emulator"
|
||||
case "${TERM-}" in
|
||||
dumb) exit 0;;
|
||||
*);;
|
||||
esac
|
||||
|
||||
## If argument is provided, allow user to bypass tty check.
|
||||
if test "${#}" -eq 0; then
|
||||
@ -46,15 +48,17 @@ if test "${#}" -eq 0; then
|
||||
unset term_file_active
|
||||
fi
|
||||
|
||||
sc="$(tput sc || printf '%b' '\0337')"
|
||||
rc="$(tput rc || printf '%b' '\0338')"
|
||||
cup="$(tput cup 99999 99999 || printf '%b' '\033[99999;99999H')"
|
||||
csr="$(tput csr || printf '%b' '\033[r')"
|
||||
gc="$(tput u7 || printf '%b' '\033[6n')"
|
||||
get_caps(){
|
||||
sc="$(tput sc || printf '%b' '\0337')"
|
||||
rc="$(tput rc || printf '%b' '\0338')"
|
||||
cup="$(tput cup 99999 99999 || printf '%b' '\033[99999;99999H')"
|
||||
csr="$(tput csr || printf '%b' '\033[r')"
|
||||
gc="$(tput u7 || printf '%b' '\033[6n')"
|
||||
}
|
||||
|
||||
## POSIX compliant.
|
||||
# shellcheck disable=SC3045
|
||||
if ! printf '%s\n' "R" | read -r -t 1 -sd R 2>/dev/null; then
|
||||
if ! (printf '%s\n' "R" | read -r -t 1 -sd R 2>/dev/null); then
|
||||
## Fast but depends on XTerm.
|
||||
if has resize; then
|
||||
resize_cmd="$(resize)"
|
||||
@ -62,6 +66,7 @@ if ! printf '%s\n' "R" | read -r -t 1 -sd R 2>/dev/null; then
|
||||
exit 0
|
||||
fi
|
||||
## Slow due to heavy stty calls.
|
||||
get_caps
|
||||
termios="$(stty -g)"
|
||||
stty raw -echo min 0 time 1
|
||||
printf '%s' "${sc}${csr}${cup}${gc}${rc}" >/dev/tty
|
||||
@ -71,7 +76,9 @@ if ! printf '%s\n' "R" | read -r -t 1 -sd R 2>/dev/null; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
msg_unsupported="error: cannot resize screen: unsupported terminal emulator"
|
||||
## Non-POSIX compliant and fast.
|
||||
get_caps
|
||||
stty -echo
|
||||
printf '%s' "${sc}${csr}${cup}${gc}${rc}" >/dev/tty
|
||||
# shellcheck disable=3045,SC2034
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
## tmux.conf
|
||||
|
||||
## SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
## SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
##
|
||||
## SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
@ -17,7 +17,13 @@ set-option -g history-limit 10000
|
||||
set-option -g repeat-time 2000
|
||||
set-option -g escape-time 50
|
||||
set-option -g status-position top
|
||||
set-option -g default-terminal tmux-256color
|
||||
run-shell '\
|
||||
colors=$(tput colors) || true 2>/dev/null; \
|
||||
if test "$colors" -lt 256; then \
|
||||
tmux set-option -g default-terminal tmux; \
|
||||
elif test "$colors" -ge 256; then \
|
||||
tmux set-option -g default-terminal tmux-256color; \
|
||||
fi'
|
||||
set-option -g display-panes-time 2000
|
||||
set-option -g display-time 2000
|
||||
set-option -g focus-events on
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
" SPDX-FileCopyrightText: 2004 - 2022 Tim Pope <https://tpo.pe>
|
||||
" SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
" SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
"
|
||||
" SPDX-License-Identifier: Vim
|
||||
"
|
||||
@ -556,6 +556,9 @@ if (&t_Co > 2 || has('gui_running')) && has('syntax')
|
||||
endif
|
||||
if has('vim_starting')
|
||||
set list
|
||||
if has('termguicolors') && &t_Co > 256
|
||||
setglobal termguicolors
|
||||
endif
|
||||
if !exists('g:colors_name')
|
||||
colorscheme vividchalk
|
||||
endif
|
||||
|
||||
@ -1,15 +1,14 @@
|
||||
! ~/.Xresources
|
||||
|
||||
! vim:set foldmethod=expr foldexpr=getline(v\:lnum)=~'^!##'?'>1'\:'=':
|
||||
! SPDX-FileCopyrightText: 2004 - 2016 Tim Pope <https://tpo.pe>
|
||||
! SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
! SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
!
|
||||
! SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
!
|
||||
! Credits: https://github.com/tpope/dotfiles/blob/master/.Xresources
|
||||
! vim:set foldmethod=expr foldexpr=getline(v\:lnum)=~'^!##'?'>1'\:'=':
|
||||
|
||||
*international: true
|
||||
*customization: -color
|
||||
*customization: -color
|
||||
|
||||
!## TERMINAL COMMON
|
||||
#ifndef FIXED
|
||||
@ -24,100 +23,6 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
! http://www.calmar.ws/vim/256-xterm-24bit-rgb-color-chart.html
|
||||
! https://en.wikipedia.org/wiki/X11_color_names
|
||||
! https://upload.wikimedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg
|
||||
! RGB to HEX https://unix.stackexchange.com/a/269085
|
||||
! https://misc.flogisoft.com/bash/tip_colors_and_formatting
|
||||
! https://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux
|
||||
! https://unix.stackexchange.com/questions/124407/what-color-codes-can-i-use-in-my-bash-ps1-prompt
|
||||
|
||||
! name dark light
|
||||
! black 0 8
|
||||
! red 1 9
|
||||
! green 2 10
|
||||
! yellow 3 11
|
||||
! blue 4 12
|
||||
! purple 5 13
|
||||
! cyan 6 14
|
||||
! white 7 15
|
||||
|
||||
! Tpope colors
|
||||
*color0: #000000
|
||||
*color1: #aa0000
|
||||
*color2: #00aa00
|
||||
*color3: #aa5522
|
||||
*color4: #0000ee
|
||||
*color5: #aa00aa
|
||||
*color6: #00aaaa
|
||||
*color7: #aaaaaa
|
||||
*color8: #555555
|
||||
*color9: #ff4444
|
||||
*color10: #44ff44
|
||||
*color11: #ffff00
|
||||
*color12: #5c5cff
|
||||
*color13: #ff00ff
|
||||
*color14: #00ffff
|
||||
*color15: #ffffff
|
||||
*colorBD: #ffffff
|
||||
|
||||
! *.cursorColor: #ffffff
|
||||
|
||||
! *color0: #000000
|
||||
! *color1: #aa0000
|
||||
! *color2: #00aa00
|
||||
! *color3: #aa5522
|
||||
! *color4: #0000ee
|
||||
! *color5: #aa00aa
|
||||
! *color6: #00aaaa
|
||||
! *color7: #aaaaaa
|
||||
! *color8: #555555
|
||||
! *color9: #ff4444
|
||||
! *color10: #44ff44
|
||||
! *color11: #ffff00
|
||||
! *color12: #5c5cff
|
||||
! *color13: #ff00ff
|
||||
! *color14: #00ffff
|
||||
! *color15: #ffffff
|
||||
! *colorBD: #ffffff
|
||||
|
||||
! ! Black / Grey
|
||||
! *.color0: #000000
|
||||
! ! *.color8: #808080
|
||||
! *.color8: #767676
|
||||
|
||||
! ! Red / Bright Red
|
||||
! *.color1: #800000
|
||||
! *.color9: #FF0000
|
||||
|
||||
! ! Green + Bright Green
|
||||
! ! *.color2: #008000
|
||||
! *.color2: #00af00
|
||||
! *.color10: #00ff00
|
||||
|
||||
! ! Yellow (Orange) + Bright Yellow (Yellow)
|
||||
! *.color3: #808000
|
||||
! *.color11: #ffff00
|
||||
|
||||
! ! Blue + Bright Blue
|
||||
! *.color4: #000080
|
||||
! *.color12: #0000ff
|
||||
|
||||
! ! Magenta (Purple) + Bright Magenta
|
||||
! ! *.color5: #800080
|
||||
! *.color5: #af00d7
|
||||
! *.color13: #0000ff
|
||||
|
||||
! ! Cyan (Aqua) + Bright Cyan
|
||||
! ! *.color6: #800080
|
||||
! *.color6: #008b8b
|
||||
! ! *.color14: #ff00ff
|
||||
! *.color14: #00d7ff
|
||||
|
||||
! ! Light Grey (Selection) + White (Current Line)
|
||||
! *.color7: #c0c0c0
|
||||
! *.color15: #ffffff
|
||||
|
||||
!## [U]XTERM
|
||||
*.selectToClipboard: true
|
||||
*.VT100saveLines: 4096
|
||||
@ -129,16 +34,20 @@
|
||||
*.VT100.background: black
|
||||
*.foreground: white
|
||||
*.VT100.foreground: white
|
||||
*.termName: xterm-256color
|
||||
*.termName: xterm-direct256
|
||||
*.ttyModes: start ^- stop ^-
|
||||
*.boldMode: false
|
||||
*.allowBoldFonts: false
|
||||
*.colorMode: true
|
||||
*.dynamicColors: true
|
||||
*.colorBDMode: false
|
||||
*.colorULMode: false
|
||||
*.underline: false
|
||||
*.VT100.geometry: 80x24
|
||||
*.VT100.scaleHeight: 1.1
|
||||
! For some reason, '*scrollBar' was not working on Fedora.
|
||||
XTerm*.scrollBar: false
|
||||
UXTerm*.scrollBar: false
|
||||
*.colorBDMode: true
|
||||
*.visualBell: false
|
||||
*.eightBitInput: false
|
||||
*.modifyCursorKeys: 2
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user