Add file offset support to emacs-bookmark.zsh
This commit is contained in:
parent
79695758a5
commit
6cf3c3c740
@ -5,11 +5,37 @@ autoload colors && colors
|
||||
autoload regexp-replace
|
||||
zmodload -F zsh/stat b:zstat
|
||||
zmodload zsh/datetime
|
||||
zmodload zsh/mapfile
|
||||
|
||||
local __bm_bookmark_cache=()
|
||||
local __bm_res=()
|
||||
let __bm_last_read_time=-1
|
||||
|
||||
function __bm_offset_to_row_col {
|
||||
let off="${2}"
|
||||
let row=1
|
||||
let col=0
|
||||
for line in "${(@f)mapfile[${1}]}"; do
|
||||
let len="${#line}"
|
||||
if (( off > len )); then
|
||||
off='off - (len + 1)'
|
||||
if (( off <= 0 )); then
|
||||
(( len == 0 )) && col=0 || col='len - 1'
|
||||
break
|
||||
fi
|
||||
row+=1
|
||||
else
|
||||
col='off'
|
||||
off=0
|
||||
break;
|
||||
fi
|
||||
done <"${1}"
|
||||
if (( off > 0 )); then
|
||||
row+=-1
|
||||
fi
|
||||
printf '%d\0%d' "${row}" "${col}"
|
||||
}
|
||||
|
||||
function __bm_find_user_emacs_dir {
|
||||
[[ -f "${HOME}/.emacs.d/var/bookmark-default.el" ]] &&
|
||||
{ printf '%s' "${HOME}/.emacs.d/var/bookmark-default.el"; return 0 }
|
||||
@ -29,7 +55,6 @@ function __bm_find_user_emacs_dir {
|
||||
}
|
||||
BM_BOOKMARK_PATH="${BM_BOOKMARK_PATH:-"$(__bm_find_user_emacs_dir)"}"
|
||||
|
||||
|
||||
function __bm_hash_dirs {
|
||||
# First empty the hash table
|
||||
hash -dr
|
||||
@ -132,8 +157,10 @@ function bm {
|
||||
if [[ -d "${target}" ]]; then
|
||||
cd "${target}"
|
||||
(( "${BM_CWD_LS:-0}" )) && ls || true
|
||||
elif [[ -e "${target}" ]]; then
|
||||
${=EDITOR} "${target}"
|
||||
elif [[ -e "${bm_loc}" ]]; then
|
||||
let offset="${__bm_res[2]}"
|
||||
local rowcol=(${(0)"$(__bm_offset_to_row_col "${bm_loc}" "${offset}")"})
|
||||
${=EDITOR} "+${rowcol[1]}:${rowcol[2]}" "${bm_loc}"
|
||||
else
|
||||
printf 'Bookmark exists, but trailing path doesn'"'"'t: "%s"\n' \
|
||||
"${(q)__bm_res[3]}"
|
||||
|
Loading…
Reference in New Issue
Block a user