mirror of
https://codeberg.org/hyperreal/dotfiles
synced 2024-11-25 11:53:43 +01:00
128 lines
3.2 KiB
Bash
128 lines
3.2 KiB
Bash
# Create a bookmark.
|
|
function mark() {
|
|
|
|
if ! test -f "${HOME}/.shellmarks"; then
|
|
touch "${HOME}/.shellmarks"
|
|
fi
|
|
|
|
mark_to_add="$(pwd)"
|
|
|
|
if grep -qxFe "${mark_to_add}" "${HOME}/.shellmarks"; then
|
|
gum style \
|
|
--foreground 210 \
|
|
--margin "1 2" \
|
|
"This bookmark already exists: ${mark_to_add}"
|
|
else
|
|
echo "${mark_to_add}" >> "${HOME}/.shellmarks"
|
|
gum style \
|
|
--foreground "#73F59F" \
|
|
--margin "1 2" \
|
|
"${mark_to_add} added to shellmarks file"
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
# Remove bookmarks.
|
|
function delmark() {
|
|
selection=$(cat "${HOME}/.shellmarks" | gum choose --no-limit)
|
|
|
|
if test -n "${selection}"; then
|
|
while read -r line; do
|
|
perl -n -i -e "print unless /^\\Q${line//\//\\/}\\E\$/" "${HOME}/.shellmarks"
|
|
done <<< "${selection}"
|
|
else
|
|
return 0
|
|
fi
|
|
|
|
gum format -t markdown -- \
|
|
"# The following bookmarks were deleted:" \
|
|
"$(printf "%s\n" "${selection}")"
|
|
|
|
return 0
|
|
}
|
|
|
|
# Goto a bookmark.
|
|
function gotomark() {
|
|
if ! test -f "${HOME}/.shellmarks"; then
|
|
echo "No bookmarks exist yet. Add some!"
|
|
return 1
|
|
fi
|
|
|
|
echo
|
|
builtin cd $(cat "${HOME}/.shellmarks" | gum choose --limit=1)
|
|
|
|
local precmd
|
|
for precmd in $precmd_functions; do
|
|
$precmd
|
|
done
|
|
zle && zle reset-prompt
|
|
}
|
|
zle -N gotomark
|
|
bindkey '^[g' gotomark
|
|
|
|
# Choose a directory from the directory stack.
|
|
function dstack() {
|
|
echo "# Choose a directory" | gum format -t markdown
|
|
selection=$(dirs -lp | gum choose --limit=1)
|
|
cd $selection
|
|
}
|
|
|
|
# Print timestamp as %Y-%m-%d %H:%M:%S.
|
|
function tstamp() {
|
|
emulate -L zsh
|
|
date '+%Y-%m-%d %H:%M:%S'
|
|
}
|
|
|
|
# Print timestamp as %Y-%m-%dT%H:%M:%S%:z
|
|
function tstampz() {
|
|
emulate -L zsh
|
|
date '+%Y-%m-%dT%H:%M:%S%:z'
|
|
}
|
|
|
|
# Create a /overview/ of all available function()'s; the description for
|
|
# each funtion() *must* be the first line above the string `function'!
|
|
# Otherwise it wont work.
|
|
# Display all function()'s with their descriptions.
|
|
function funlist() {
|
|
grep -B 1 "^function" $HOME/.zshrc.d/functions.zsh | \
|
|
grep -v "^\-\-$" | \
|
|
awk '{ if(/^#/) { gsub(/^#[:space:]*/, ""); ht=$0 }; getline; gsub(/ ?\(\)/, ":"); printf("-> %-20s %s\n", $2, ht); }' | \
|
|
sort -u -k 3
|
|
}
|
|
|
|
# zrmcomp() remove *.zwc files.
|
|
function zrmcomp() {
|
|
local i
|
|
for i in ${HOME}/*.zwc(N); do
|
|
printf "Removing $i\n"
|
|
command rm -f $i
|
|
done
|
|
}
|
|
|
|
# Invoke this every time you change .zshrc to recompile it.
|
|
function src() {
|
|
autoload -U zrecompile
|
|
[ -f ~/.zshrc ] && zrecompile -p ~/.zshrc
|
|
[ -f ~/.zcompdump ] && zrecompile -p ~/.zcompdump
|
|
[ -f ~/.zcompdump ] && zrecompile -p ~/.zcompdump
|
|
[ -f ~/.zshrc.zwc.old ] && command rm -f ~/.zshrc.zwc.old
|
|
[ -f ~/.zcompdump.zwc.old ] && command rm -f ~/.zcompdump.zwc.old
|
|
source ~/.zshrc
|
|
}
|
|
|
|
# Do an ls after cd.
|
|
function cd() { builtin cd "$@" && ls; }
|
|
|
|
# Create new directory and enter it.
|
|
function mkd() { mkdir -p "$@" && cd "$_"; }
|
|
|
|
# Display pids of commands.
|
|
function pids() { pgrep -a "$@"; }
|
|
|
|
# Restart zsh.
|
|
function restart() { exec $SHELL $SHELL_ARGS "$@"; }
|
|
|
|
# cd to ~, clear screen, and restart zsh.
|
|
function rsrc() { cd && clear && restart; }
|