define-command marks-select -params 1 %{ evaluate-commands %sh{ mark=$("$kak_config/scripts/marks.clj" get "${1:-0}") [ -z "$mark" ] || echo "edit $mark" } marks-show } define-command marks-add -params 1..2 %{ nop %sh{ "$kak_config/scripts/marks.clj" add "$1" "$2" } marks-show } define-command marks-delete -params 1 %{ nop %sh{ "$kak_config/scripts/marks.clj" delete "$1" } delete-buffer %arg{1} marks-show } define-command marks-clear %{ nop %sh{ "$kak_config/scripts/marks.clj" clear } } define-command marks-show %{ info -title 'marks' -markup %sh{ path="$kak_opt_marks_path/$kak_opt_marks_name" echo -n "{Default}" marks=$("$kak_config/scripts/marks.clj" show) if [ -z "$marks" ]; then echo "{comment}" && exit 0; fi echo "$marks" | while IFS= read file; do short_path=$(echo "$file" | awk -F/ '{if (NF >= 2) {print $(NF-1) "/" $NF} else {print $NF}}') hl=$([ "$file" = "$kak_buffile" ] && echo "{keyword}" || echo "{Default}") echo "${hl}${short_path} {comment}$(realpath -s --relative-to="$PWD" "$file"){Default}" done | nl | sed 's/^\s*//' } } define-command marks-edit-all %{ edit %sh{ "$kak_config/scripts/marks.clj" show-path } } define-command marks-add-all-buffers %{ eval %sh{ echo "$kak_quoted_buflist" | xargs -n1 | while IFS= read file; do if [ -f "$file" ]; then "$kak_config/scripts/marks.clj" add "$(realpath "$file")" fi done } marks-show } declare-user-mode marks map global user a ': enter-user-mode-with-count marks' -docstring 'Marks mode' map global user ': marks-select %val{count}' -docstring 'Select marks' map global marks a ': marks-add %val{buffile} %opt{user_mode_count}' -docstring 'Create new mark from buffer' map global marks A ': marks-add-all-buffers' -docstring 'Load all buffer files as marks' map global marks d ': marks-delete %val{buffile}' -docstring 'Delete mark' map global marks C ': marks-clear' -docstring 'Clear mark' map global marks e ': marks-edit-all' -docstring 'Open buffer to edit marks'