zsh: consistent function naming

This commit is contained in:
Fernando Schauenburg 2024-07-29 12:57:29 +02:00
parent a5ee1b137b
commit bc602776af
3 changed files with 85 additions and 85 deletions

View file

@ -21,7 +21,7 @@ prepend_unique() {
esac esac
} }
setup_environment() { fs_setup_environment() {
export XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}" export XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}"
export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}" export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
export XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}" export XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
@ -40,7 +40,7 @@ setup_environment() {
export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/startup.py" export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/startup.py"
} }
setup_path_and_manpath() { fs_setup_path_and_manpath() {
# Prevent path_helper from messing with the PATH when starting tmux. # Prevent path_helper from messing with the PATH when starting tmux.
# #
# Clearing PATH before path_helper executes (from /etc/profile) will prevent it # Clearing PATH before path_helper executes (from /etc/profile) will prevent it
@ -78,7 +78,7 @@ setup_path_and_manpath() {
# Some packages are installed by Homebrew in non-standard locations, in order to # Some packages are installed by Homebrew in non-standard locations, in order to
# prevent conflicts with their system versions. # prevent conflicts with their system versions.
setup_brew_keg_only_packages() { fs_setup_brew_keg_only_packages() {
have brew || return have brew || return
local packages=( local packages=(
@ -102,7 +102,7 @@ setup_brew_keg_only_packages() {
done done
} }
setup_tools() { fs_setup_tools() {
have nvim && EDITOR="nvim" have nvim && EDITOR="nvim"
[ -z $EDITOR ] && have vim && EDITOR="vim" [ -z $EDITOR ] && have vim && EDITOR="vim"
[ -z $EDITOR ] && have vi && EDITOR="vi" [ -z $EDITOR ] && have vi && EDITOR="vi"
@ -123,7 +123,7 @@ setup_tools() {
# #
# How to configure Windows Firewall for Xserver: https://skeptric.com/wsl2-xserver/ # How to configure Windows Firewall for Xserver: https://skeptric.com/wsl2-xserver/
# How to check if running in WSL: https://stackoverflow.com/a/61014411 # How to check if running in WSL: https://stackoverflow.com/a/61014411
setup_wsl_display() { fs_setup_wsl_display() {
if [ -n "$(uname -r | sed -n 's/.*\( *Microsoft *\).*/\1/ip')" ] && have xset; then if [ -n "$(uname -r | sed -n 's/.*\( *Microsoft *\).*/\1/ip')" ] && have xset; then
local xdisplay="$(awk '/nameserver/ {print $2; exit}' /etc/resolv.conf 2>/dev/null):0.0" local xdisplay="$(awk '/nameserver/ {print $2; exit}' /etc/resolv.conf 2>/dev/null):0.0"
if DISPLAY="$xdisplay" timeout '0.2s' xset q >/dev/null 2>&1; then if DISPLAY="$xdisplay" timeout '0.2s' xset q >/dev/null 2>&1; then
@ -134,16 +134,16 @@ setup_wsl_display() {
} }
# Load additional local configuration if present. # Load additional local configuration if present.
setup_local_profile() { fs_setup_local_profile() {
local profile="$HOME/.local/etc/zsh/zprofile" local profile="$HOME/.local/etc/zsh/zprofile"
[ -r "$profile" ] && source "$profile" [ -r "$profile" ] && source "$profile"
} }
# zmodload zsh/zprof # zmodload zsh/zprof
setup_environment fs_setup_environment
setup_path_and_manpath fs_setup_path_and_manpath
setup_brew_keg_only_packages fs_setup_brew_keg_only_packages
setup_tools # NOTE: this must be done _after_ `setup_environment`. fs_setup_tools # NOTE: this must be done _after_ `fs_setup_environment`.
setup_wsl_display fs_setup_wsl_display
setup_local_profile fs_setup_local_profile
# zprof # zprof

View file

@ -1,9 +1,9 @@
setup_terminal() { fs_setup_terminal() {
# Make ctrl-q and ctrl-s available to terminal applications. # Make ctrl-q and ctrl-s available to terminal applications.
stty start undef stop undef stty start undef stop undef
} }
setup_aliases() { fs_setup_aliases() {
# ls: make `ls` group directories first if supported. # ls: make `ls` group directories first if supported.
# lsc: force `ls` to use color output (e.g. for piping into `less`). # lsc: force `ls` to use color output (e.g. for piping into `less`).
@ -51,7 +51,7 @@ setup_aliases() {
} }
# source "$ZDOTDIR/completion.zsh" # source "$ZDOTDIR/completion.zsh"
setup_completion() { fs_setup_completion() {
# Enable additional completions from packages in `/usr/local`. # Enable additional completions from packages in `/usr/local`.
local vendor="/usr/local/share/zsh/vendor-completions" local vendor="/usr/local/share/zsh/vendor-completions"
[ -d "$vendor" ] && fpath=("$vendor" $fpath) [ -d "$vendor" ] && fpath=("$vendor" $fpath)
@ -128,7 +128,7 @@ setup_completion() {
bindkey -M menuselect 'b' vi-backward-word bindkey -M menuselect 'b' vi-backward-word
} }
setup_history() { fs_setup_history() {
setopt APPEND_HISTORY # Append history rather than overwrite. setopt APPEND_HISTORY # Append history rather than overwrite.
setopt EXTENDED_HISTORY # Save beginning timestamp and duration. setopt EXTENDED_HISTORY # Save beginning timestamp and duration.
setopt INC_APPEND_HISTORY # Don't wait until shell exits to save history. setopt INC_APPEND_HISTORY # Don't wait until shell exits to save history.
@ -139,14 +139,14 @@ setup_history() {
SAVEHIST=1000000 SAVEHIST=1000000
} }
setup_zle() { fs_setup_zle() {
bindkey -v # Use vi mode for line editing. bindkey -v # Use vi mode for line editing.
export KEYTIMEOUT=1 # 10ms delay for <esc> to switch to command mode. export KEYTIMEOUT=1 # 10ms delay for <esc> to switch to command mode.
############################# #############################
# ZLE Widgets # ZLE Widgets
############################# #############################
fs-set-cursor-shape() { fs_set_cursor_shape() {
local block='\e[1 q' # blinking block local block='\e[1 q' # blinking block
local underline='\e[3 q' # blinking underline, 4 for steady local underline='\e[3 q' # blinking underline, 4 for steady
local bar='\e[5 q' # blinkind bar, 6 for steady local bar='\e[5 q' # blinkind bar, 6 for steady
@ -166,27 +166,27 @@ setup_zle() {
autoload -Uz add-zle-hook-widget autoload -Uz add-zle-hook-widget
# Start new prompts with bar shaped cursor. # Start new prompts with bar shaped cursor.
add-zle-hook-widget line-init fs-zle-line-init add-zle-hook-widget line-init fs_zle_line_init
fs-zle-line-init() { fs_zle_line_init() {
fs-set-cursor-shape bar fs_set_cursor_shape bar
} }
# Switch cursor shape depending on editing mode. # Switch cursor shape depending on editing mode.
add-zle-hook-widget keymap-select fs-zle-keymap-select add-zle-hook-widget keymap-select fs_zle_keymap_select
fs-zle-keymap-select() { fs_zle_keymap_select() {
case $KEYMAP in case $KEYMAP in
vicmd) fs-set-cursor-shape block ;; vicmd) fs_set_cursor_shape block ;;
viins|main) fs-set-cursor-shape bar ;; viins|main) fs_set_cursor_shape bar ;;
esac esac
} }
# Clear completion menus and other status line text. # Clear completion menus and other status line text.
zle -N fs-zle-clear-status-line zle -N fs_zle_clear_status_line
fs-zle-clear-status-line() { zle -R -c; } fs_zle_clear_status_line() { zle -R -c; }
# Change root directory of the current git repository, if in one. # Change root directory of the current git repository, if in one.
zle -N fs-zle-cd-git-root zle -N fs_zle_cd_git_root
fs-zle-cd-git-root() { fs_zle_cd_git_root() {
local top_level="$(git rev-parse --show-toplevel 2>/dev/null)" local top_level="$(git rev-parse --show-toplevel 2>/dev/null)"
[[ -z "$top_level" ]] && return 1 [[ -z "$top_level" ]] && return 1
zle push-line zle push-line
@ -203,11 +203,11 @@ setup_zle() {
# -------------- CTRL ------------------------------- # -------------- CTRL -------------------------------
bindkey -M viins '^a' vi-beginning-of-line bindkey -M viins '^a' vi-beginning-of-line
bindkey -M viins '^e' vi-end-of-line bindkey -M viins '^e' vi-end-of-line
bindkey -M viins '^g' fs-zle-cd-git-root bindkey -M viins '^g' fs_zle_cd_git_root
bindkey -M viins '^j' history-beginning-search-forward bindkey -M viins '^j' history-beginning-search-forward
bindkey -M viins '^k' history-beginning-search-backward bindkey -M viins '^k' history-beginning-search-backward
bindkey -M viins '^l' clear-screen bindkey -M viins '^l' clear-screen
bindkey -M viins '^q' fs-zle-clear-status-line bindkey -M viins '^q' fs_zle_clear_status_line
# ^r history search using fzf # ^r history search using fzf
# ^t paste file/directory using fzf # ^t paste file/directory using fzf
bindkey -M viins '^u' kill-whole-line bindkey -M viins '^u' kill-whole-line
@ -228,7 +228,7 @@ setup_zle() {
# fzf # fzf
############################# #############################
if type -p fzf >/dev/null; then if type -p fzf >/dev/null; then
setup_zle_fzf fs_setup_zle_fzf
else else
# Fall back to incremental search # Fall back to incremental search
bindkey -M viins '^r' history-incremental-search-backward bindkey -M viins '^r' history-incremental-search-backward
@ -238,11 +238,11 @@ setup_zle() {
fi fi
} }
setup_zle_fzf() { fs_setup_zle_fzf() {
local fzf_config="$ZDOTDIR/fzf/key-bindings.zsh" local fzf_config="$ZDOTDIR/fzf/key-bindings.zsh"
[ -r "$fzf_config" ] || return [ -r "$fzf_config" ] || return
fzf_find() { fs_fzf_find() {
local excluded_dirs=("-name '.*'") # Exclude hidden directories. local excluded_dirs=("-name '.*'") # Exclude hidden directories.
if [ "$(uname -s)" = "Darwin" ] && [ "$(pwd)" = "$HOME" ]; then if [ "$(uname -s)" = "Darwin" ] && [ "$(pwd)" = "$HOME" ]; then
# These macOS directories would make the find command unusable (too slow). # These macOS directories would make the find command unusable (too slow).
@ -271,24 +271,24 @@ setup_zle_fzf() {
eval "command find -L . -mindepth 1 $excluded -o $included 2>/dev/null | cut -c3-" eval "command find -L . -mindepth 1 $excluded -o $included 2>/dev/null | cut -c3-"
} }
fzf_find_files() { fs_fzf_find_files() {
fzf_find "-type d" "-type f" fs_fzf_find "-type d" "-type f"
} }
fzf_find_dirs() { fs_fzf_find_dirs() {
fzf_find "-type d" fs_fzf_find "-type d"
} }
source "$fzf_config" source "$fzf_config"
export FZF_CTRL_T_COMMAND=fzf_find_files export FZF_CTRL_T_COMMAND=fs_fzf_find_files
export FZF_ALT_C_COMMAND=fzf_find_dirs export FZF_ALT_C_COMMAND=fs_fzf_find_dirs
export FZF_CTRL_T_OPTS=--border-label='" Select file(s) "' export FZF_CTRL_T_OPTS=--border-label='" Select file(s) "'
export FZF_CTRL_R_OPTS=--border-label='" History search "' export FZF_CTRL_R_OPTS=--border-label='" History search "'
export FZF_ALT_C_OPTS=--border-label='" Change directory "' export FZF_ALT_C_OPTS=--border-label='" Change directory "'
} }
# Colorful man pages. # Colorful man pages.
setup_man_pages() { fs_setup_man_pages() {
# Foreground colors # Foreground colors
typeset -A fg typeset -A fg
fg[black]='\e[30m' fg[black]='\e[30m'
@ -356,11 +356,11 @@ setup_man_pages() {
export GROFF_NO_SGR=1 export GROFF_NO_SGR=1
} }
setup_prompt() { fs_setup_prompt() {
source "$ZDOTDIR/prompt.zsh" source "$ZDOTDIR/prompt.zsh"
} }
setup_eza() { fs_setup_eza() {
type -p eza >/dev/null || return type -p eza >/dev/null || return
local black=30 local black=30
@ -470,7 +470,7 @@ setup_eza() {
export EZA_COLORS="${(pj.:.)colors}" export EZA_COLORS="${(pj.:.)colors}"
} }
setup_fzf() { fs_setup_fzf() {
type -p fzf >/dev/null || return type -p fzf >/dev/null || return
local colors=( local colors=(
@ -514,7 +514,7 @@ setup_fzf() {
} }
# Set up autoload for custom functions. # Set up autoload for custom functions.
setup_functions() { fs_setup_functions() {
fpath=("$ZDOTDIR/functions" $fpath) fpath=("$ZDOTDIR/functions" $fpath)
local filepath local filepath
for filepath in $ZDOTDIR/functions/*; do for filepath in $ZDOTDIR/functions/*; do
@ -523,27 +523,27 @@ setup_functions() {
} }
# Load additional local configuration if present. # Load additional local configuration if present.
setup_local_config() { fs_setup_local_config() {
local config="$HOME/.local/etc/zsh/zshrc" local config="$HOME/.local/etc/zsh/zshrc"
[ -r "$config" ] && source "$config" || true [ -r "$config" ] && source "$config" || true
} }
# Set up zsh for interactive use (options, prompt, aliases, etc.) # Set up zsh for interactive use (options, prompt, aliases, etc.)
setup_zsh_interactive() { fs_setup_zsh_interactive() {
setopt INTERACTIVE_COMMENTS # Allow comments in interactive use. setopt INTERACTIVE_COMMENTS # Allow comments in interactive use.
setup_terminal fs_setup_terminal
setup_aliases fs_setup_aliases
setup_completion fs_setup_completion
setup_history fs_setup_history
setup_zle fs_setup_zle
setup_man_pages fs_setup_man_pages
setup_prompt fs_setup_prompt
setup_functions fs_setup_functions
setup_eza fs_setup_eza
setup_fzf fs_setup_fzf
setup_local_config fs_setup_local_config
} }
# zmodload zsh/zprof # zmodload zsh/zprof
setup_zsh_interactive fs_setup_zsh_interactive
# zprof # zprof

View file

@ -27,16 +27,16 @@ typeset -gA icons=(
[clock]=" " [clock]=" "
) )
fs-prompt-render-full() { fs_prompt_render_full() {
local separator="${zfg[faded]} " local separator="${zfg[faded]} "
local sections=( local sections=(
"$(fs-prompt-exit-code)" "$(fs_prompt_exit_code)"
"$(fs-prompt-user-and-hostname)" "$(fs_prompt_user_and_hostname)"
"$(fs-prompt-pwd)" "$(fs_prompt_pwd)"
"$(fs-prompt-git)" "$(fs_prompt_git)"
"$(fs-prompt-virtualenv)" "$(fs_prompt_virtualenv)"
"$(fs-prompt-jobs)" "$(fs_prompt_jobs)"
"$(fs-prompt-exec-time)" "$(fs_prompt_exec_time)"
) )
echo "\n${(@pj.$separator.)sections:#}${zfg[rst]}" echo "\n${(@pj.$separator.)sections:#}${zfg[rst]}"
@ -51,11 +51,11 @@ fs-prompt-render-full() {
echo -n " ${zfg[rst]}" echo -n " ${zfg[rst]}"
} }
fs-prompt-render-compact() { fs_prompt_render_compact() {
echo -n "${zfg[magenta]} ${zfg[rst]}" echo -n "${zfg[magenta]} ${zfg[rst]}"
} }
fs-prompt-exit-code() { fs_prompt_exit_code() {
((PROMPT_EXIT_CODE == 0)) && return ((PROMPT_EXIT_CODE == 0)) && return
if ((PROMPT_EXIT_CODE > 128 && PROMPT_EXIT_CODE < 160)); then if ((PROMPT_EXIT_CODE > 128 && PROMPT_EXIT_CODE < 160)); then
@ -65,7 +65,7 @@ fs-prompt-exit-code() {
fi fi
} }
fs-prompt-user-and-hostname() { fs_prompt_user_and_hostname() {
local parts=() local parts=()
# username in red if root, yellow if otherwise relevant # username in red if root, yellow if otherwise relevant
@ -84,11 +84,11 @@ fs-prompt-user-and-hostname() {
} }
} }
fs-prompt-pwd() { fs_prompt_pwd() {
print "${zfg[cyan]}${icons[folder]}%~" print "${zfg[cyan]}${icons[folder]}%~"
} }
fs-prompt-git() { fs_prompt_git() {
local gitstatus # local swallows git's exit code if not on its own line local gitstatus # local swallows git's exit code if not on its own line
gitstatus=$(command git status --porcelain -b 2>/dev/null) || return gitstatus=$(command git status --porcelain -b 2>/dev/null) || return
@ -168,15 +168,15 @@ fs-prompt-git() {
print "${(j: :)gitinfo}" print "${(j: :)gitinfo}"
} }
fs-prompt-virtualenv() { fs_prompt_virtualenv() {
[[ -n "$VIRTUAL_ENV" ]] && print "${zfg[green]}${icons[python]}${VIRTUAL_ENV:t}" [[ -n "$VIRTUAL_ENV" ]] && print "${zfg[green]}${icons[python]}${VIRTUAL_ENV:t}"
} }
fs-prompt-jobs() { fs_prompt_jobs() {
(($PROMPT_JOB_COUNT > 0)) && print "${zfg[magenta]}${icons[background]}%j" (($PROMPT_JOB_COUNT > 0)) && print "${zfg[magenta]}${icons[background]}%j"
} }
fs-prompt-exec-time() { fs_prompt_exec_time() {
(($PROMPT_EXEC_TIME <= 3)) && return # don't print time if under 3s (($PROMPT_EXEC_TIME <= 3)) && return # don't print time if under 3s
local parts=( local parts=(
@ -189,12 +189,12 @@ fs-prompt-exec-time() {
} }
# Hook triggered when a command is about to be executed. # Hook triggered when a command is about to be executed.
fs-prompt-preexec() { fs_prompt_preexec() {
PROMPT_EXEC_START=$EPOCHSECONDS PROMPT_EXEC_START=$EPOCHSECONDS
} }
# Hook triggered right before the prompt is drawn. # Hook triggered right before the prompt is drawn.
fs-prompt-precmd() { fs_prompt_precmd() {
PROMPT_EXIT_CODE=$? # this needs to be captured before anything else runs PROMPT_EXIT_CODE=$? # this needs to be captured before anything else runs
local stop=$EPOCHSECONDS local stop=$EPOCHSECONDS
@ -204,16 +204,16 @@ fs-prompt-precmd() {
local job_count='%j'; PROMPT_JOB_COUNT=${(%)job_count} local job_count='%j'; PROMPT_JOB_COUNT=${(%)job_count}
PS1='$(fs-prompt-render-full)' PS1='$(fs_prompt_render_full)'
} }
# This hook is only used if transient prompt is enabled. # This hook is only used if transient prompt is enabled.
fs-prompt-zle-line-finish() { fs_prompt_zle_line_finish() {
PS1='$(fs-prompt-render-compact)' PS1='$(fs_prompt_render_compact)'
zle reset-prompt zle reset-prompt
} }
fs-setup-prompt() { fs_setup_prompt() {
setopt NO_PROMPT_BANG PROMPT_CR PROMPT_PERCENT PROMPT_SP PROMPT_SUBST setopt NO_PROMPT_BANG PROMPT_CR PROMPT_PERCENT PROMPT_SP PROMPT_SUBST
export PROMPT_EOL_MARK='' # don't show % when a partial line is preserved export PROMPT_EOL_MARK='' # don't show % when a partial line is preserved
export VIRTUAL_ENV_DISABLE_PROMPT=1 # we're doing it ourselves export VIRTUAL_ENV_DISABLE_PROMPT=1 # we're doing it ourselves
@ -221,16 +221,16 @@ fs-setup-prompt() {
zmodload zsh/datetime # so that $EPOCHSECONDS is available zmodload zsh/datetime # so that $EPOCHSECONDS is available
autoload -Uz add-zsh-hook autoload -Uz add-zsh-hook
add-zsh-hook preexec fs-prompt-preexec add-zsh-hook preexec fs_prompt_preexec
add-zsh-hook precmd fs-prompt-precmd add-zsh-hook precmd fs_prompt_precmd
# Change to false to disable transient prompt. # Change to false to disable transient prompt.
local use_transient_prompt=true local use_transient_prompt=true
if $use_transient_prompt; then if $use_transient_prompt; then
autoload -Uz add-zle-hook-widget autoload -Uz add-zle-hook-widget
add-zle-hook-widget line-finish fs-prompt-zle-line-finish add-zle-hook-widget line-finish fs_prompt_zle_line_finish
PS2="${zfg[magenta]}%_${zfg[rst]} " PS2="${zfg[magenta]}%_${zfg[rst]} "
fi fi
} }
fs-setup-prompt fs_setup_prompt