Update emacs-bookmark.zsh

This commit is contained in:
Alexander Rosenberg 2024-08-21 01:26:09 -04:00
parent 9b90c216f3
commit 7f7aa9def4
Signed by: Zander671
GPG Key ID: 5FD0394ADBD72730

View File

@ -5,6 +5,7 @@ autoload colors && colors
autoload regexp-replace
__bm_bookmark_cache=()
local __bm_res=()
function __bm_find_user_emacs_dir {
[[ -f "${HOME}/.emacs.d/var/bookmark-default.el" ]] &&
@ -74,12 +75,13 @@ function __bm_bookmark_location {
local rest="${(j:/:)rest_arr}"
for ((i = 1; i < ${#__bm_bookmark_cache}; i+=4)); do
if [[ "${bm_name}" = "${__bm_bookmark_cache[${i}]}" ]]; then
printf '%s\n%d\n%s\n' "${__bm_bookmark_cache[${i} + 2]}" \
"${__bm_bookmark_cache[${i} + 3]}" "${rest}"
__bm_res=("${__bm_bookmark_cache[${i} + 2]}"
"${__bm_bookmark_cache[${i} + 3]}"
"${rest}")
return 0
fi
done
printf '%s\n' "${bm_name}"
__bm_res=()
return 1
}
function __bm_list_bookmarks {
@ -98,7 +100,7 @@ function __bm_list_bookmarks {
function _bookmarks {
for ((i = 1; i < ${#__bm_bookmark_cache}; i+=4)); do
compadd -S '/' "${__bm_bookmark_cache[${i}]}"
compadd -q -S '/' "${__bm_bookmark_cache[${i}]}"
done
}
@ -107,23 +109,22 @@ function bm {
__bm_update_bookmark_list || \
{ printf 'Updating bookmark list failed!\n'; return 1 }
(( ${#} == 0 )) && { __bm_list_bookmarks; return }
local loc=(${(f)"$(__bm_bookmark_location "${1}")"})
if [[ -d "${loc[1]}" ]]; then
cd "${loc[1]}"
if ! [[ -z "${loc[3]}" ]]; then
if ! [[ -d "${loc[3]}" ]]; then
cd - >/dev/null
printf 'Bookmark exists, but trailing path doesn''t: "%s"\n' \
"${loc[3]}"
return 1
fi
cd "${loc[3]}"
__bm_bookmark_location "${1}"
local bm_loc="${__bm_res[1]}"
local target="${__bm_res[1]}/${__bm_res[3]}"
if (( ${#__bm_res} != 0 )) && [[ -e "${bm_loc}" ]]; then
if [[ -d "${target}" ]]; then
cd "${target}"
[[ "${BM_CWD_LS}" = '1' ]] && ls || true
elif [[ -e "${target}" ]]; then
${=EDITOR} "${target}"
else
printf 'Bookmark exists, but trailing path doesn'"'"'t: "%s"\n' \
"${__bm_res[3]}"
return 1
fi
[[ "${BM_CWD_LS}" = '1' ]] && ls || true
elif [[ -e "${loc[1]}" ]]; then
${=EDITOR} "${loc[1]}"
else
printf 'No such bookmark: "%s"\n' "${loc[1]}"
printf 'No such bookmark: "%s"\n' "${__bm_res[1]}"
return 1
fi
}
@ -132,9 +133,9 @@ function _bm {
if ! [[ "${arg}" == */* ]]; then
_arguments '1::bookmark:_bookmarks'
else
local loc=(${(f)"$(__bm_bookmark_location "${arg}")"})
if [[ -d "${loc[1]}" ]]; then
local parts=(${(s:/:)loc[3]})
__bm_bookmark_location "${arg}"
if [[ -d "${__bm_res[1]}" ]]; then
local parts=(${(s:/:)__bm_res[3]})
local bm="${${(s:/:)${arg}}[1]}"
local subdir="${(j:/:)parts[1,${#parts}-1]}"
local search="${parts[${#parts}]}"
@ -143,11 +144,15 @@ function _bm {
subdir="${subdir#/}"
search=""
fi
for file in "${loc[1]}/${subdir}/${search}"*(/); do
local clean_file="${bm}/${file#"${loc[1]}"}"
regexp-replace clean_file '/+' '/'
compadd -U -S '/' "${clean_file}"
done
local pre_path="${__bm_res[1]}/${subdir}/"
local prefix="${bm}/${subdir}"
if ! [[ -z "${subdir}" ]]; then
prefix+='/'
fi
compset -P "${(b)prefix}"
for file in "${pre_path}${search}"*; do
compadd -W "${pre_path}" -f "${file:t}"
done
fi
fi
}