mirror of
https://github.com/ItsDrike/dotfiles.git
synced 2024-11-10 02:39:40 +00:00
POSIX compliance, shellcheck
This commit is contained in:
parent
d843e90462
commit
826cef4e6e
|
@ -81,7 +81,8 @@ alias zbi='z -b -I' # pick parent directory to cd into with fzf
|
||||||
|
|
||||||
## Make aliases for individual cpython/pypy versions
|
## Make aliases for individual cpython/pypy versions
|
||||||
py_versions="\n2\n3\n3.6\n3.7\n3.8\n3.9\n3.10"
|
py_versions="\n2\n3\n3.6\n3.7\n3.8\n3.9\n3.10"
|
||||||
echo "$py_versions" | while read version; do
|
# shellcheck disable=SC2139
|
||||||
|
echo "$py_versions" | while read -r version; do
|
||||||
for python in python pypy; do
|
for python in python pypy; do
|
||||||
[ "$python" = "python" ] && prefix="py" || prefix="pypy"
|
[ "$python" = "python" ] && prefix="py" || prefix="pypy"
|
||||||
|
|
||||||
|
@ -251,7 +252,7 @@ alias tty-clock='tty-clock -Ssc' # Terminal clock screensaver
|
||||||
alias rick='curl -s -L https://raw.githubusercontent.com/ItsDrike/rickrollrc/master/roll.sh| bash' # Terminal rickroll
|
alias rick='curl -s -L https://raw.githubusercontent.com/ItsDrike/rickrollrc/master/roll.sh| bash' # Terminal rickroll
|
||||||
|
|
||||||
# If user is not root, pass all commands via sudo/doas
|
# If user is not root, pass all commands via sudo/doas
|
||||||
if [ $UID -ne 0 ]; then
|
if [ "$(id -u)" -ne 0 ]; then
|
||||||
# Enable aliases to be sudoed/doased
|
# Enable aliases to be sudoed/doased
|
||||||
# with doas having precedence over sudo if found
|
# with doas having precedence over sudo if found
|
||||||
|
|
||||||
|
@ -266,7 +267,7 @@ fi
|
||||||
|
|
||||||
# enable color support
|
# enable color support
|
||||||
if [ -x /usr/bin/dircolors ]; then
|
if [ -x /usr/bin/dircolors ]; then
|
||||||
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
|
(test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)") || eval "$(dircolors -b)"
|
||||||
alias dir='dir --color=auto'
|
alias dir='dir --color=auto'
|
||||||
alias vdir='vdir --color=auto'
|
alias vdir='vdir --color=auto'
|
||||||
|
|
||||||
|
@ -284,7 +285,7 @@ fi
|
||||||
|
|
||||||
# Normalize `open` across Linux, macOS, and Windows.
|
# Normalize `open` across Linux, macOS, and Windows.
|
||||||
# This is needed to make `open` function (see below) cross-platform
|
# This is needed to make `open` function (see below) cross-platform
|
||||||
if [ ! $(uname -s) = 'Darwin' ]; then
|
if [ ! "$(uname -s)" = 'Darwin' ]; then
|
||||||
if grep -q Microsoft /proc/version; then
|
if grep -q Microsoft /proc/version; then
|
||||||
# Ubuntu on Windows using the Linux subsystem
|
# Ubuntu on Windows using the Linux subsystem
|
||||||
alias open='explorer.exe'
|
alias open='explorer.exe'
|
||||||
|
@ -295,10 +296,12 @@ fi
|
||||||
|
|
||||||
# Functions
|
# Functions
|
||||||
if [ -f ~/.config/shell/functions ]; then
|
if [ -f ~/.config/shell/functions ]; then
|
||||||
source ~/.config/shell/functions
|
# shellcheck source=/home/itsdrike/.config/shell/functions
|
||||||
|
. "$HOME/.config/shell/functions"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Extra
|
# Extra
|
||||||
if [ -f ~/.config/shell/extra ]; then
|
if [ -f ~/.config/shell/extra ]; then
|
||||||
source ~/.config/shell/extra
|
# shellcheck source=/home/itsdrike/.config/shell/extra
|
||||||
|
. "$HOME/.config/shell/extra"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env bash
|
#!/bin/sh
|
||||||
|
|
||||||
# Environmental variable definitions.
|
# Environmental variable definitions.
|
||||||
# This file is only sourced once after login, unlike .zshrc/.bashrc
|
# This file is only sourced once after login, unlike .zshrc/.bashrc
|
||||||
|
@ -8,6 +8,8 @@
|
||||||
# which means the XDG definitions will be ignored anyway, and
|
# which means the XDG definitions will be ignored anyway, and
|
||||||
# defining them may break programs when root is actually logged in.
|
# defining them may break programs when root is actually logged in.
|
||||||
|
|
||||||
|
# Define some variables for POSIX compatibility
|
||||||
|
uid="$(id -u)"
|
||||||
|
|
||||||
# Default programs
|
# Default programs
|
||||||
export EDITOR="nvim"
|
export EDITOR="nvim"
|
||||||
|
@ -18,7 +20,7 @@ export TERMINAL="alacritty"
|
||||||
export XDG_CONFIG_HOME="$HOME/.config"
|
export XDG_CONFIG_HOME="$HOME/.config"
|
||||||
export XDG_CACHE_HOME="$HOME/.cache"
|
export XDG_CACHE_HOME="$HOME/.cache"
|
||||||
export XDG_DATA_HOME="$HOME/.local/share"
|
export XDG_DATA_HOME="$HOME/.local/share"
|
||||||
export XDG_RUNTIME_DIR="/run/user/$UID"
|
export XDG_RUNTIME_DIR="/run/user/$uid"
|
||||||
|
|
||||||
# Per-Application XDG settings
|
# Per-Application XDG settings
|
||||||
export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
|
export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
|
||||||
|
@ -44,6 +46,7 @@ export NERDTREE_BOOKMARKS="$XDG_CONFIG_HOME/NERDTreeBookmarks"
|
||||||
|
|
||||||
# Colorful man pages
|
# Colorful man pages
|
||||||
# If bat is installed, use it as manpager
|
# If bat is installed, use it as manpager
|
||||||
|
# shellcheck disable=SC2155
|
||||||
if command -v bat > /dev/null; then
|
if command -v bat > /dev/null; then
|
||||||
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
|
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
|
||||||
else
|
else
|
||||||
|
@ -64,3 +67,6 @@ export XSECURELOCK_SHOW_DATETIME=1 # Show current date and time in xsecurelock
|
||||||
export QT_QPA_PLATFORMTHEME=qt5ct # Have QT use the theme from qt5ct
|
export QT_QPA_PLATFORMTHEME=qt5ct # Have QT use the theme from qt5ct
|
||||||
#export QT_QPA_PLATFORMTHEME="gtk2" # Have QT use gtk2 theme.
|
#export QT_QPA_PLATFORMTHEME="gtk2" # Have QT use gtk2 theme.
|
||||||
|
|
||||||
|
# Remove irrelevant variables added for posix compatibility
|
||||||
|
unset posix
|
||||||
|
|
||||||
|
|
|
@ -1,18 +1,23 @@
|
||||||
#!/usr/bin/env zsh
|
#!/bin/sh
|
||||||
|
# TODO: Currently, this file isn't entirely POSIX compatible,
|
||||||
|
# it will run fine with bash or zsh, however some functions may cause
|
||||||
|
# issues with pure POSIX. The fill will however run fine, the errors
|
||||||
|
# would only occur if the incompatible functions would be started.
|
||||||
|
|
||||||
# Show application listening on given port
|
# Show application listening on given port
|
||||||
function port() {
|
port() {
|
||||||
sudo netstat -pln | grep $1 | awk '{print $NF}'
|
sudo netstat -pln | grep "$1" | awk '{print $NF}'
|
||||||
}
|
}
|
||||||
|
|
||||||
# Create a new directory and enter it
|
# Create a new directory and enter it
|
||||||
function mkd() {
|
mkd() {
|
||||||
mkdir -p "$@" && cd "$_";
|
# shellcheck disable=SC2164
|
||||||
|
mkdir -p "$1" && cd "$1";
|
||||||
}
|
}
|
||||||
|
|
||||||
# `o` with no arguments opens the current directory, otherwise opens the given
|
# `o` with no arguments opens the current directory, otherwise opens the given
|
||||||
# location
|
# location
|
||||||
function o() {
|
o() {
|
||||||
if [ $# -eq 0 ]; then
|
if [ $# -eq 0 ]; then
|
||||||
open .;
|
open .;
|
||||||
else
|
else
|
||||||
|
@ -21,16 +26,16 @@ function o() {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Use bat for nicer git diffs
|
# Use bat for nicer git diffs
|
||||||
function batdiff() {
|
batdiff() {
|
||||||
git diff --name-only --diff-filter=d | xargs bat --diff
|
git diff --name-only --diff-filter=d | xargs bat --diff
|
||||||
}
|
}
|
||||||
|
|
||||||
# Determine size of a file or total size of a directory
|
# Determine size of a file or total size of a directory
|
||||||
function dirsize() {
|
dirsize() {
|
||||||
if du -b /dev/null > /dev/null 2>&1; then
|
if du -b /dev/null > /dev/null 2>&1; then
|
||||||
local arg=-sbh;
|
arg=-sbh;
|
||||||
else
|
else
|
||||||
local arg=-sh;
|
arg=-sh;
|
||||||
fi
|
fi
|
||||||
if [[ -n "$*" ]]; then
|
if [[ -n "$*" ]]; then
|
||||||
\du $arg -- "$@";
|
\du $arg -- "$@";
|
||||||
|
@ -39,10 +44,10 @@ function dirsize() {
|
||||||
fi;
|
fi;
|
||||||
}
|
}
|
||||||
|
|
||||||
function randmac() {
|
randmac() {
|
||||||
sudo ip link set dev $1 down
|
sudo ip link set dev "$1" down
|
||||||
sudo macchanger -A $1
|
sudo macchanger -A "$1"
|
||||||
sudo ip link set dev $1 up
|
sudo ip link set dev "$1" up
|
||||||
}
|
}
|
||||||
|
|
||||||
# Go to the root of a git tree
|
# Go to the root of a git tree
|
||||||
|
@ -59,76 +64,76 @@ cdgit () {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Create a data URL from a file
|
# Create a data URL from a file
|
||||||
function dataurl() {
|
dataurl() {
|
||||||
local mimeType=$(file -b --mime-type "$1");
|
mimeType="$(file -b --mime-type "$1")"
|
||||||
if [[ $mimeType == text/* ]]; then
|
if echo "$mimeType" | grep -e "^text/.*$" >/dev/null; then
|
||||||
mimeType="${mimeType};charset=utf-8";
|
mimeType="${mimeType};charset=utf-8"
|
||||||
fi
|
fi
|
||||||
echo "data:${mimeType};base64,$(openssl base64 -in "$1" | tr -d '\n')";
|
echo "data:${mimeType};base64,$(openssl base64 -in "$1" | tr -d '\n')";
|
||||||
}
|
}
|
||||||
|
|
||||||
# `tre` is a shorthand for `tree` with hidden files and color enabled, ignoring
|
# `tre` is a shorthand for `tree` with hidden files and color enabled, ignoring
|
||||||
# the `.git` directory, listing directories first. The output gets piped into
|
# the `.git` directory, listing directories first. The output gets piped into
|
||||||
# `less` with options to preserve color and line numbers, unless the output is
|
# `less` with options to preserve color and line numbers, unless the output is
|
||||||
# small enough for one screen.
|
# small enough for one screen.
|
||||||
function tre() {
|
tre() {
|
||||||
tree -I '.git|node_modules|bower_components' --group-directories-first "$@" | less -FRNX;
|
tree -I '.git|node_modules|bower_components' --group-directories-first "$@" | less -FRNX;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Show all the names (CNs and SANs) listed in the SSL certificate
|
# Show all the names (CNs and SANs) listed in the SSL certificate
|
||||||
# for a given domain
|
# for a given domain
|
||||||
function getcertnames() {
|
getcertnames() {
|
||||||
if [ -z "${1}" ]; then
|
if [ -z "${1}" ]; then
|
||||||
echo "ERROR: No domain specified.";
|
echo "ERROR: No domain specified.";
|
||||||
return 1;
|
return 1;
|
||||||
fi;
|
fi;
|
||||||
|
|
||||||
local domain="${1}";
|
domain="${1}";
|
||||||
echo "Testing ${domain}…";
|
echo "Testing ${domain}…";
|
||||||
echo ""; # newline
|
echo ""; # newline
|
||||||
|
|
||||||
local tmp=$(echo -e "GET / HTTP/1.0\nEOT" \
|
tmp=$(echo -e "GET / HTTP/1.0\nEOT" \
|
||||||
| openssl s_client -connect "${domain}:443" -servername "${domain}" 2>&1);
|
| openssl s_client -connect "${domain}:443" -servername "${domain}" 2>&1);
|
||||||
|
|
||||||
if [[ "${tmp}" = *"-----BEGIN CERTIFICATE-----"* ]]; then
|
if [[ "${tmp}" = *"-----BEGIN CERTIFICATE-----"* ]]; then
|
||||||
local certText=$(echo "${tmp}" \
|
certText=$(echo "${tmp}" \
|
||||||
| openssl x509 -text -certopt "no_aux, no_header, no_issuer, no_pubkey, \
|
| openssl x509 -text -certopt "no_aux, no_header, no_issuer, no_pubkey, \
|
||||||
no_serial, no_sigdump, no_signame, no_validity, no_version");
|
no_serial, no_sigdump, no_signame, no_validity, no_version");
|
||||||
echo "Common Name:";
|
echo "Common Name:";
|
||||||
echo ""; # newline
|
echo ""; # newline
|
||||||
echo "${certText}" | grep "Subject:" | sed -e "s/^.*CN=//" | sed -e "s/\/emailAddress=.*//";
|
echo "${certText}" | grep "Subject:" | sed -e "s/^.*CN=//" | sed -e "s/\/emailAddress=.*//";
|
||||||
echo ""; # newline
|
echo ""; # newline
|
||||||
echo "Subject Alternative Name(s):";
|
echo "Subject Alternative Name(s):";
|
||||||
echo ""; # newline
|
echo ""; # newline
|
||||||
echo "${certText}" | grep -A 1 "Subject Alternative Name:" \
|
echo "${certText}" | grep -A 1 "Subject Alternative Name:" \
|
||||||
| sed -e "2s/DNS://g" -e "s/ //g" | tr "," "\n" | tail -n +2;
|
| sed -e "2s/DNS://g" -e "s/ //g" | tr "," "\n" | tail -n +2;
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
echo "ERROR: Certificate not found.";
|
echo "ERROR: Certificate not found.";
|
||||||
return 1;
|
return 1;
|
||||||
fi;
|
fi;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Compare original and gzipped file size
|
# Compare original and gzipped file size
|
||||||
function gz-compare() {
|
gz_compare() {
|
||||||
local origsize=$(wc -c < "$1");
|
origsize=$(wc -c < "$1");
|
||||||
local gzipsize=$(gzip -c "$1" | wc -c);
|
gzipsize=$(gzip -c "$1" | wc -c);
|
||||||
local ratio=$(echo "$gzipsize * 100 / $origsize" | bc -l);
|
ratio=$(echo "$gzipsize * 100 / $origsize" | bc -l);
|
||||||
printf "orig: %d bytes\n" "$origsize";
|
printf "orig: %d bytes\n" "$origsize";
|
||||||
printf "gzip: %d bytes (%2.2f%%)\n" "$gzipsize" "$ratio";
|
printf "gzip: %d bytes (%2.2f%%)\n" "$gzipsize" "$ratio";
|
||||||
}
|
}
|
||||||
|
|
||||||
# Extract almost any archive
|
# Extract almost any archive
|
||||||
function extract {
|
extract() {
|
||||||
if [ -z "$1" ]; then
|
if [ -z "$1" ]; then
|
||||||
# display usage if no parameters given
|
# display usage if no parameters given
|
||||||
echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
|
echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
|
||||||
echo " extract <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]"
|
echo " extract <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]"
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
for n in $@
|
for n in "$@"
|
||||||
do
|
do
|
||||||
if [ -f "$n" ] ; then
|
if [ -f "$n" ] ; then
|
||||||
case "${n%,}" in
|
case "${n%,}" in
|
||||||
|
@ -158,17 +163,18 @@ fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Create a .tar.gz archive, using `zopfli`, `pigz` or `gzip` for compression
|
# Create a .tar.gz archive, using `zopfli`, `pigz` or `gzip` for compression
|
||||||
function targz() {
|
targz() {
|
||||||
# Combine given names spearated with spaces as the filename
|
# Combine given names spearated with spaces as the filename
|
||||||
local tmpFile="${@%/}.tar";
|
tmpFile="${*%/}.tar"
|
||||||
tar -cvf "${tmpFile}" "${@}" || return 1;
|
|
||||||
|
tar -cvf "${tmpFile}" "${@}" || return 1
|
||||||
|
|
||||||
size=$(
|
size=$(
|
||||||
stat -f"%z" "${tmpFile}" 2> /dev/null; # macOS `stat`
|
stat -f"%z" "${tmpFile}" 2> /dev/null; # macOS `stat`
|
||||||
stat -c"%s" "${tmpFile}" 2> /dev/null; # GNU `stat`
|
stat -c"%s" "${tmpFile}" 2> /dev/null; # GNU `stat`
|
||||||
);
|
);
|
||||||
|
|
||||||
local cmd="";
|
cmd="";
|
||||||
if (( size < 52428800 )) && hash zopfli 2> /dev/null; then
|
if (( size < 52428800 )) && hash zopfli 2> /dev/null; then
|
||||||
# the .tar file is smaller than 50 MB and Zopfli is available; use it
|
# the .tar file is smaller than 50 MB and Zopfli is available; use it
|
||||||
cmd="zopfli";
|
cmd="zopfli";
|
||||||
|
@ -192,11 +198,12 @@ function targz() {
|
||||||
echo "${tmpFile}.gz ($((zippedSize / 1000)) kB) created successfully.";
|
echo "${tmpFile}.gz ($((zippedSize / 1000)) kB) created successfully.";
|
||||||
}
|
}
|
||||||
|
|
||||||
function anonymize {
|
anonymize() {
|
||||||
# Reset the prompt on initial run to allow this script
|
# Reset the prompt on initial run to allow this script
|
||||||
# to be ran multiple times without user having to reload
|
# to be ran multiple times without user having to reload
|
||||||
# PS1 manually
|
# PS1 manually
|
||||||
source ${XDG_CONFIG_DIR:-$HOME/.config}/shell/prompt
|
# shellcheck source=/home/itsdrike/.config/shell/prompt
|
||||||
|
. "${XDG_CONFIG_DIR:-$HOME/.config}/shell/prompt"
|
||||||
|
|
||||||
# Regular expression to match 0-255 numbers (color)
|
# Regular expression to match 0-255 numbers (color)
|
||||||
color_int_re='^(0+)?([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$'
|
color_int_re='^(0+)?([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$'
|
||||||
|
@ -211,7 +218,7 @@ function anonymize {
|
||||||
AT_COLOR="%F{004}"
|
AT_COLOR="%F{004}"
|
||||||
MACHINE_COLOR="%F{070}"
|
MACHINE_COLOR="%F{070}"
|
||||||
|
|
||||||
while [[ $# -gt 0 ]]; do
|
while [ $# -gt 0 ]; do
|
||||||
key=$1
|
key=$1
|
||||||
|
|
||||||
case $key in
|
case $key in
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#!/usr/bin/env zsh
|
#!/usr/bin/env zsh
|
||||||
|
# shellcheck disable=SC2030,SC2031
|
||||||
# Set default keybindings (mostly from oh-my-zsh)
|
# Set default keybindings (mostly from oh-my-zsh)
|
||||||
|
|
||||||
# Make sure that the terminal is in application mode when zle is active, since
|
# Make sure that the terminal is in application mode when zle is active, since
|
||||||
|
@ -18,30 +19,30 @@ fi
|
||||||
bindkey -e
|
bindkey -e
|
||||||
|
|
||||||
# Start typing + [Up-Arrow] - fuzzy find history forward
|
# Start typing + [Up-Arrow] - fuzzy find history forward
|
||||||
if [[ -n "${terminfo[kcuu1]}" ]]; then
|
if [ -n "${terminfo[kcuu1]}" ]; then
|
||||||
autoload -U up-line-or-beginning-search
|
autoload -U up-line-or-beginning-search
|
||||||
zle -N up-line-or-beginning-search
|
zle -N up-line-or-beginning-search
|
||||||
bindkey "${terminfo[kcuu1]}" up-line-or-beginning-search
|
bindkey "${terminfo[kcuu1]}" up-line-or-beginning-search
|
||||||
fi
|
fi
|
||||||
# Start typing + [Down-Arrow] - fuzzy find history backward
|
# Start typing + [Down-Arrow] - fuzzy find history backward
|
||||||
if [[ -n "${terminfo[kcud1]}" ]]; then
|
if [ -n "${terminfo[kcud1]}" ]; then
|
||||||
autoload -U down-line-or-beginning-search
|
autoload -U down-line-or-beginning-search
|
||||||
zle -N down-line-or-beginning-search
|
zle -N down-line-or-beginning-search
|
||||||
bindkey "${terminfo[kcud1]}" down-line-or-beginning-search
|
bindkey "${terminfo[kcud1]}" down-line-or-beginning-search
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# [Home] - Go to beginning of line
|
# [Home] - Go to beginning of line
|
||||||
[[ -n "${terminfo[khome]}" ]] && bindkey "${terminfo[khome]}" beginning-of-line || bindkey "^[[H" beginning-of-line
|
([ -n "${terminfo[khome]}" ] && bindkey "${terminfo[khome]}" beginning-of-line) || bindkey "^[[H" beginning-of-line
|
||||||
# [End] - Go to end of line
|
# [End] - Go to end of line
|
||||||
[[ -n "${terminfo[kend]}" ]] && bindkey "${terminfo[kend]}" end-of-line || bindkey "^[[F" end-of-line
|
([ -n "${terminfo[kend]}" ] && bindkey "${terminfo[kend]}" end-of-line) || bindkey "^[[F" end-of-line
|
||||||
|
|
||||||
# [Shift-Tab] - move through the completion menu backwards
|
# [Shift-Tab] - move through the completion menu backwards
|
||||||
[[ -n "${terminfo[kcbt]}" ]] && bindkey "${terminfo[kcbt]}" reverse-menu-complete
|
[ -n "${terminfo[kcbt]}" ] && bindkey "${terminfo[kcbt]}" reverse-menu-complete
|
||||||
|
|
||||||
# [Backspace] - delete backward
|
# [Backspace] - delete backward
|
||||||
bindkey '^?' backward-delete-char
|
bindkey '^?' backward-delete-char
|
||||||
# [Delete] - delete forward
|
# [Delete] - delete forward
|
||||||
[[ -n "${terminfo[kdch1]}" ]] && bindkey "${terminfo[kdch1]}" delete-char || bindkey "^[[3~" delete-char
|
([ -n "${terminfo[kdch1]}" ] && bindkey "${terminfo[kdch1]}" delete-char) || bindkey "^[[3~" delete-char
|
||||||
# [Ctrl-Delete] - delete whole forward-word
|
# [Ctrl-Delete] - delete whole forward-word
|
||||||
bindkey '^[[3;5~' kill-word
|
bindkey '^[[3;5~' kill-word
|
||||||
|
|
||||||
|
@ -53,9 +54,9 @@ bindkey '^[[1;5D' backward-word
|
||||||
# [Ctrl-r] - Search backward incrementally for a specified string. The string may begin with ^ to anchor the search to the beginning of the line.
|
# [Ctrl-r] - Search backward incrementally for a specified string. The string may begin with ^ to anchor the search to the beginning of the line.
|
||||||
bindkey '^r' history-incremental-search-backward
|
bindkey '^r' history-incremental-search-backward
|
||||||
# [PageUp] - Up a line of history
|
# [PageUp] - Up a line of history
|
||||||
[[ -n "${terminfo[kpp]}" ]] && bindkey "${terminfo[kpp]}" up-line-or-history
|
[ -n "${terminfo[kpp]}" ] && bindkey "${terminfo[kpp]}" up-line-or-history
|
||||||
# [PageDown] - Down a line of history
|
# [PageDown] - Down a line of history
|
||||||
[[ -n "${terminfo[knp]}" ]] && bindkey "${terminfo[knp]}" down-line-or-history
|
[ -n "${terminfo[knp]}" ] && bindkey "${terminfo[knp]}" down-line-or-history
|
||||||
|
|
||||||
# [Space] - do history expansion on space
|
# [Space] - do history expansion on space
|
||||||
bindkey ' ' magic-space
|
bindkey ' ' magic-space
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#!/usr/bin/env zsh
|
#!/usr/bin/env zsh
|
||||||
|
# shellcheck disable=SC2155
|
||||||
|
|
||||||
# Configuration variables:
|
# Configuration variables:
|
||||||
|
|
||||||
|
@ -75,7 +76,7 @@ working_directory() {
|
||||||
|
|
||||||
if [ $USE_SHORTENED_WORKDIR != 1 ]; then
|
if [ $USE_SHORTENED_WORKDIR != 1 ]; then
|
||||||
echo -n " $BLUE$~"
|
echo -n " $BLUE$~"
|
||||||
elif [ $TERM = "linux" ]; then
|
elif [ "$TERM" = "linux" ]; then
|
||||||
echo -n " $BLUE%(5~|%-1~/.../%3~|%4~)"
|
echo -n " $BLUE%(5~|%-1~/.../%3~|%4~)"
|
||||||
else
|
else
|
||||||
echo -n " $BLUE%(5~|%-1~/…/%3~|%4~)"
|
echo -n " $BLUE%(5~|%-1~/…/%3~|%4~)"
|
||||||
|
@ -96,7 +97,7 @@ exec_time_preexec_hook() {
|
||||||
exec_time_precmd_hook() {
|
exec_time_precmd_hook() {
|
||||||
[[ $SHOW_CMD_TIME == 0 ]] && return
|
[[ $SHOW_CMD_TIME == 0 ]] && return
|
||||||
[[ -z $PROMPT_EXEC_TIME_START ]] && return
|
[[ -z $PROMPT_EXEC_TIME_START ]] && return
|
||||||
local PROMPT_EXEC_TIME_STOP=$(date +%s.%N)
|
local PROMPT_EXEC_TIME_STOP="$(date +%s.%N)"
|
||||||
PROMPT_EXEC_TIME_DURATION=$(echo "($PROMPT_EXEC_TIME_STOP - $PROMPT_EXEC_TIME_START) * 1000" | bc -l)
|
PROMPT_EXEC_TIME_DURATION=$(echo "($PROMPT_EXEC_TIME_STOP - $PROMPT_EXEC_TIME_START) * 1000" | bc -l)
|
||||||
unset PROMPT_EXEC_TIME_START
|
unset PROMPT_EXEC_TIME_START
|
||||||
}
|
}
|
||||||
|
@ -104,24 +105,24 @@ format_time() {
|
||||||
# Do some formatting to get nice time (e.g. 2m 12s) from miliseconds
|
# Do some formatting to get nice time (e.g. 2m 12s) from miliseconds
|
||||||
# $1 is the milisecond amount (int or float)
|
# $1 is the milisecond amount (int or float)
|
||||||
# $2 is the precision (ms/s/m/h/d)
|
# $2 is the precision (ms/s/m/h/d)
|
||||||
local T=$1
|
local T="$1"
|
||||||
local D=$(echo "scale=0;$T/1000/60/60/24" | bc -l)
|
local D="$(echo "scale=0;$T/1000/60/60/24" | bc -l)"
|
||||||
local H=$(echo "scale=0;$T/1000/60/60%24" | bc -l)
|
local H="$(echo "scale=0;$T/1000/60/60%24" | bc -l)"
|
||||||
local M=$(echo "scale=0;$T/1000/60%60" | bc -l)
|
local M="$(echo "scale=0;$T/1000/60%60" | bc -l)"
|
||||||
local S=$(echo "scale=0;$T/1000%60" | bc -l)
|
local S="$(echo "scale=0;$T/1000%60" | bc -l)"
|
||||||
local MS=$(echo "scale=0;$T%1000" | bc -l)
|
local MS="$(echo "scale=0;$T%1000" | bc -l)"
|
||||||
|
|
||||||
local precision=$2
|
local precision=$2
|
||||||
local out=""
|
local out=""
|
||||||
case "$precision" in
|
case "$precision" in
|
||||||
"ms") [[ $MS > 0 ]] && out="$(printf "%dms" $MS) ${out}"; precision="s" ;&
|
"ms") [[ "$MS" -gt 0 ]] && out="$(printf "%dms" "$MS") ${out}"; precision="s" ;&
|
||||||
"s") [[ $S > 0 ]] && out="$(printf "%ds" $S) ${out}"; precision="m" ;&
|
"s") [[ "$S" -gt 0 ]] && out="$(printf "%ds" "$S") ${out}"; precision="m" ;&
|
||||||
"m") [[ $M > 0 ]] && out="$(printf "%dm" $M) ${out}"; precision="h" ;&
|
"m") [[ "$M" -gt 0 ]] && out="$(printf "%dm" "$M") ${out}"; precision="h" ;&
|
||||||
"h") [[ $H > 0 ]] && out="$(printf "%dh" $H) ${out}"; precision="d" ;&
|
"h") [[ "$H" -gt 0 ]] && out="$(printf "%dh" "$H") ${out}"; precision="d" ;&
|
||||||
"d") [[ $D > 0 ]] && out="$(printf "%dd" $D) ${out}" ;;
|
"d") [[ "$D" -gt 0 ]] && out="$(printf "%dd" "$D") ${out}" ;;
|
||||||
*) out="$T" ;; # Return $1 ($T) if precision wasn't specified/valid
|
*) out="$T" ;; # Return $1 ($T) if precision wasn't specified/valid
|
||||||
esac
|
esac
|
||||||
printf "$out"
|
printf "%s" "$out"
|
||||||
}
|
}
|
||||||
display_cmd_time() {
|
display_cmd_time() {
|
||||||
[[ $CMD_TIME_SHOW == 0 ]] && return
|
[[ $CMD_TIME_SHOW == 0 ]] && return
|
||||||
|
@ -134,7 +135,7 @@ display_cmd_time() {
|
||||||
# this happens when all fields (seconds/minutes/...) are 0,
|
# this happens when all fields (seconds/minutes/...) are 0,
|
||||||
# if we use milisecond precision, this will likely never happen
|
# if we use milisecond precision, this will likely never happen
|
||||||
# but with other precisions, it could
|
# but with other precisions, it could
|
||||||
[[ "$(expr length "$time_took")" == 0 ]] && return
|
[ ${#time_took} -eq 0 ] && return
|
||||||
echo -n " ${LBLUE}took ${time_took}"
|
echo -n " ${LBLUE}took ${time_took}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,7 +159,7 @@ PS2="$RED\ $RESET"
|
||||||
|
|
||||||
# Right side prompt
|
# Right side prompt
|
||||||
RPS1=""
|
RPS1=""
|
||||||
if [ $TERM = "linux" ]; then
|
if [ "$TERM" = "linux" ]; then
|
||||||
# Displaying cmd time here works, but often causes issues when we
|
# Displaying cmd time here works, but often causes issues when we
|
||||||
# resize the terminal, since right prompts can be annoying to deal
|
# resize the terminal, since right prompts can be annoying to deal
|
||||||
# with when resizing. This would run relatively often so it makes
|
# with when resizing. This would run relatively often so it makes
|
||||||
|
|
Loading…
Reference in a new issue