Convert some of the rc/ scripts to the new list syntax
Other scripts relying on lists are broken at the moment, and will be fixed. This commit is a proof of concept of the new way to work with lists.
This commit is contained in:
parent
b548dd3a6f
commit
e9fc54538d
|
@ -3,14 +3,14 @@
|
||||||
# This script requires the readtags command available in ctags source but
|
# This script requires the readtags command available in ctags source but
|
||||||
# not installed by default
|
# not installed by default
|
||||||
|
|
||||||
declare-option -docstring "colon separated list of paths to tag files to parse when looking up a symbol" \
|
declare-option -docstring "list of paths to tag files to parse when looking up a symbol" \
|
||||||
str-list ctagsfiles 'tags'
|
str-list ctagsfiles 'tags'
|
||||||
|
|
||||||
define-command -params ..1 \
|
define-command -params ..1 \
|
||||||
-shell-candidates %{
|
-shell-candidates %{
|
||||||
realpath() { ( path=$(readlink "$1"); cd "$(dirname "$1")"; printf "%s/%s\n" "$(pwd -P)" "$(basename "$1")" ) }
|
realpath() { ( path=$(readlink "$1"); cd "$(dirname "$1")"; printf "%s/%s\n" "$(pwd -P)" "$(basename "$1")" ) }
|
||||||
printf %s\\n "$kak_opt_ctagsfiles" | tr ':' '\n' |
|
eval "set -- $kak_opt_ctagsfiles"
|
||||||
while read -r candidate; do
|
for candidate in "$@"; do
|
||||||
[ -f "$candidate" ] && realpath "$candidate"
|
[ -f "$candidate" ] && realpath "$candidate"
|
||||||
done | awk '!x[$0]++' | # remove duplicates
|
done | awk '!x[$0]++' | # remove duplicates
|
||||||
while read -r tags; do
|
while read -r tags; do
|
||||||
|
@ -26,8 +26,8 @@ If no symbol is passed then the current selection is used as symbol name} \
|
||||||
%{ evaluate-commands %sh{
|
%{ evaluate-commands %sh{
|
||||||
realpath() { ( path=$(readlink "$1"); cd "$(dirname "$1")"; printf "%s/%s\n" "$(pwd -P)" "$(basename "$1")" ) }
|
realpath() { ( path=$(readlink "$1"); cd "$(dirname "$1")"; printf "%s/%s\n" "$(pwd -P)" "$(basename "$1")" ) }
|
||||||
export tagname=${1:-${kak_selection}}
|
export tagname=${1:-${kak_selection}}
|
||||||
printf %s\\n "$kak_opt_ctagsfiles" | tr ':' '\n' |
|
eval "set -- $kak_opt_ctagsfiles"
|
||||||
while read -r candidate; do
|
for candidate in "$@"; do
|
||||||
[ -f "$candidate" ] && realpath "$candidate"
|
[ -f "$candidate" ] && realpath "$candidate"
|
||||||
done | awk '!x[$0]++' | # remove duplicates
|
done | awk '!x[$0]++' | # remove duplicates
|
||||||
while read -r tags; do
|
while read -r tags; do
|
||||||
|
|
|
@ -330,17 +330,19 @@ define-command -hidden c-family-insert-include-guards %{
|
||||||
hook -group c-family-insert global BufNewFile .*\.(h|hh|hpp|hxx|H) c-family-insert-include-guards
|
hook -group c-family-insert global BufNewFile .*\.(h|hh|hpp|hxx|H) c-family-insert-include-guards
|
||||||
|
|
||||||
declare-option -docstring "colon separated list of path in which header files will be looked for" \
|
declare-option -docstring "colon separated list of path in which header files will be looked for" \
|
||||||
str-list alt_dirs ".:.."
|
str-list alt_dirs '.' '..'
|
||||||
|
|
||||||
define-command c-family-alternative-file -docstring "Jump to the alternate file (header/implementation)" %{ evaluate-commands %sh{
|
define-command c-family-alternative-file -docstring "Jump to the alternate file (header/implementation)" %{ evaluate-commands %sh{
|
||||||
alt_dirs=$(printf %s\\n "${kak_opt_alt_dirs}" | tr ':' '\n')
|
|
||||||
file="${kak_buffile##*/}"
|
file="${kak_buffile##*/}"
|
||||||
file_noext="${file%.*}"
|
file_noext="${file%.*}"
|
||||||
dir=$(dirname "${kak_buffile}")
|
dir=$(dirname "${kak_buffile}")
|
||||||
|
|
||||||
|
# Set $@ to alt_dirs
|
||||||
|
eval "set -- ${kak_opt_alt_dirs}"
|
||||||
|
|
||||||
case ${file} in
|
case ${file} in
|
||||||
*.c|*.cc|*.cpp|*.cxx|*.C|*.inl|*.m)
|
*.c|*.cc|*.cpp|*.cxx|*.C|*.inl|*.m)
|
||||||
for alt_dir in ${alt_dirs}; do
|
for alt_dir in "$@"; do
|
||||||
for ext in h hh hpp hxx H; do
|
for ext in h hh hpp hxx H; do
|
||||||
altname="${dir}/${alt_dir}/${file_noext}.${ext}"
|
altname="${dir}/${alt_dir}/${file_noext}.${ext}"
|
||||||
if [ -f ${altname} ]; then
|
if [ -f ${altname} ]; then
|
||||||
|
@ -351,7 +353,7 @@ define-command c-family-alternative-file -docstring "Jump to the alternate file
|
||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
*.h|*.hh|*.hpp|*.hxx|*.H)
|
*.h|*.hh|*.hpp|*.hxx|*.H)
|
||||||
for alt_dir in ${alt_dirs}; do
|
for alt_dir in "$@"; do
|
||||||
for ext in c cc cpp cxx C m; do
|
for ext in c cc cpp cxx C m; do
|
||||||
altname="${dir}/${alt_dir}/${file_noext}.${ext}"
|
altname="${dir}/${alt_dir}/${file_noext}.${ext}"
|
||||||
if [ -f ${altname} ]; then
|
if [ -f ${altname} ]; then
|
||||||
|
|
|
@ -43,7 +43,7 @@ evaluate-commands %sh{
|
||||||
|
|
||||||
# Add the language's grammar to the static completion list
|
# Add the language's grammar to the static completion list
|
||||||
printf '%s\n' "hook global WinSetOption filetype=kak %{
|
printf '%s\n' "hook global WinSetOption filetype=kak %{
|
||||||
set-option window static_words '$(join "${keywords}:${attributes}:${types}:${values}" ':')'
|
set-option window static_words $(join "${keywords} ${attributes} ${types} ${values}" ' ')'
|
||||||
set-option -- window extra_word_chars '-'
|
set-option -- window extra_word_chars '-'
|
||||||
}"
|
}"
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ The syntaxic errors detected during parsing are shown when auto-diagnostics are
|
||||||
/^COMPLETION:/ && ! /\(Hidden\)/ {
|
/^COMPLETION:/ && ! /\(Hidden\)/ {
|
||||||
id=$2
|
id=$2
|
||||||
gsub(/ +$/, "", id)
|
gsub(/ +$/, "", id)
|
||||||
gsub(/:/, "\\:", id)
|
gsub(/~/, "~~", id)
|
||||||
gsub(/\|/, "\\|", id)
|
gsub(/\|/, "\\|", id)
|
||||||
|
|
||||||
gsub(/[[{<]#|#[}>]/, "", $3)
|
gsub(/[[{<]#|#[}>]/, "", $3)
|
||||||
|
@ -59,10 +59,10 @@ The syntaxic errors detected during parsing are shown when auto-diagnostics are
|
||||||
gsub(/ +$/, "", $3)
|
gsub(/ +$/, "", $3)
|
||||||
desc=$4 ? $3 "\\n" $4 : $3
|
desc=$4 ? $3 "\\n" $4 : $3
|
||||||
|
|
||||||
gsub(/:/, "\\:", desc)
|
gsub(/~/, "~~", desc)
|
||||||
gsub(/\|/, "\\|", desc)
|
gsub(/\|/, "\\|", desc)
|
||||||
if (id in docstrings)
|
if (id in docstrings)
|
||||||
docstrings[id]=docstrings[id] "\\n" desc
|
docstrings[id]=docstrings[id] "\n" desc
|
||||||
else
|
else
|
||||||
docstrings[id]=desc
|
docstrings[id]=desc
|
||||||
}
|
}
|
||||||
|
@ -72,31 +72,30 @@ The syntaxic errors detected during parsing are shown when auto-diagnostics are
|
||||||
gsub(/(^|[^[:alnum:]_])(operator|new|delete)($|[^{}_[:alnum:]]+)/, "{keyword}&{}", menu)
|
gsub(/(^|[^[:alnum:]_])(operator|new|delete)($|[^{}_[:alnum:]]+)/, "{keyword}&{}", menu)
|
||||||
gsub(/(^|[[:space:]])(int|size_t|bool|char|unsigned|signed|long)($|[[:space:]])/, "{type}&{}", menu)
|
gsub(/(^|[[:space:]])(int|size_t|bool|char|unsigned|signed|long)($|[[:space:]])/, "{type}&{}", menu)
|
||||||
gsub(/[^{}_[:alnum:]]+/, "{operator}&{}", menu)
|
gsub(/[^{}_[:alnum:]]+/, "{operator}&{}", menu)
|
||||||
print id "|" docstrings[id] "|" menu
|
printf "%%~%s|%s|%s~ ", id, docstrings[id], menu
|
||||||
}
|
}
|
||||||
}' | paste -s -d ':' - | sed -e "s/\\\\n/\\n/g; s/'/\\\\'/g")
|
}')
|
||||||
printf %s\\n "evaluate-commands -client ${kak_client} echo 'clang completion done'
|
printf %s\\n "evaluate-commands -client ${kak_client} echo 'clang completion done'
|
||||||
set-option 'buffer=${kak_buffile}' clang_completions '${header}:${compl}'" | kak -p ${kak_session}
|
set-option 'buffer=${kak_buffile}' clang_completions ${header} ${compl}" | kak -p ${kak_session}
|
||||||
else
|
else
|
||||||
clang++ -x ${ft} -fsyntax-only ${kak_opt_clang_options} - < ${dir}/buf 2> ${dir}/stderr
|
clang++ -x ${ft} -fsyntax-only ${kak_opt_clang_options} - < ${dir}/buf 2> ${dir}/stderr
|
||||||
printf %s\\n "evaluate-commands -client ${kak_client} echo 'clang parsing done'" | kak -p ${kak_session}
|
printf %s\\n "evaluate-commands -client ${kak_client} echo 'clang parsing done'" | kak -p ${kak_session}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
flags=$(cat ${dir}/stderr | sed -rne "
|
flags=$(cat ${dir}/stderr | sed -rne "
|
||||||
/^<stdin>:[0-9]+:([0-9]+:)? (fatal )?error/ { s/^<stdin>:([0-9]+):.*/\1|{red}█/; p }
|
/^<stdin>:[0-9]+:([0-9]+:)? (fatal )?error/ { s/^<stdin>:([0-9]+):.*/'\1|{red}█'/; p }
|
||||||
/^<stdin>:[0-9]+:([0-9]+:)? warning/ { s/^<stdin>:([0-9]+):.*/\1|{yellow}█/; p }
|
/^<stdin>:[0-9]+:([0-9]+:)? warning/ { s/^<stdin>:([0-9]+):.*/'\1|{yellow}█'/; p }
|
||||||
" | paste -s -d ':' -)
|
" | paste -s -d ' ' -)
|
||||||
|
|
||||||
errors=$(cat ${dir}/stderr | sed -rne "
|
errors=$(cat ${dir}/stderr | sed -rne "
|
||||||
/^<stdin>:[0-9]+:([0-9]+:)? ((fatal )?error|warning)/ {
|
/^<stdin>:[0-9]+:([0-9]+:)? ((fatal )?error|warning)/ {
|
||||||
s/^<stdin>:([0-9]+):([0-9]+:)? (.*)/\1|\3/
|
s/'/''/g; s/^<stdin>:([0-9]+):([0-9]+:)? (.*)/'\1|\3'/; p
|
||||||
s/'/\\\\'/g; s/:/\\\\:/g; p
|
}" | sort -n | paste -s -d ' ' -)
|
||||||
}" | sort -n | paste -s -d ':' -)
|
|
||||||
|
|
||||||
sed -e "s|<stdin>|${kak_bufname}|g" < ${dir}/stderr > ${dir}/fifo
|
sed -e "s|<stdin>|${kak_bufname}|g" < ${dir}/stderr > ${dir}/fifo
|
||||||
|
|
||||||
printf %s\\n "set-option 'buffer=${kak_buffile}' clang_flags %{${kak_timestamp}:${flags}}
|
printf %s\\n "set-option 'buffer=${kak_buffile}' clang_flags ${kak_timestamp} ${flags}
|
||||||
set-option 'buffer=${kak_buffile}' clang_errors '${kak_timestamp}:${errors}'" | kak -p ${kak_session}
|
set-option 'buffer=${kak_buffile}' clang_errors ${kak_timestamp} ${errors}" | kak -p ${kak_session}
|
||||||
) > /dev/null 2>&1 < /dev/null &
|
) > /dev/null 2>&1 < /dev/null &
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,7 +114,7 @@ define-command -hidden clang-show-completion-info %[ try %[
|
||||||
] ]
|
] ]
|
||||||
|
|
||||||
define-command clang-enable-autocomplete -docstring "Enable automatic clang completion" %{
|
define-command clang-enable-autocomplete -docstring "Enable automatic clang completion" %{
|
||||||
set-option window completers "option=clang_completions:%opt{completers}"
|
set-option window completers "option=clang_completions" %opt{completers}
|
||||||
hook window -group clang-autocomplete InsertIdle .* %{
|
hook window -group clang-autocomplete InsertIdle .* %{
|
||||||
try %{
|
try %{
|
||||||
execute-keys -draft <a-h><a-k>(\.|->|::).\z<ret>
|
execute-keys -draft <a-h><a-k>(\.|->|::).\z<ret>
|
||||||
|
@ -128,7 +127,7 @@ define-command clang-enable-autocomplete -docstring "Enable automatic clang comp
|
||||||
}
|
}
|
||||||
|
|
||||||
define-command clang-disable-autocomplete -docstring "Disable automatic clang completion" %{
|
define-command clang-disable-autocomplete -docstring "Disable automatic clang completion" %{
|
||||||
set-option window completers %sh{ printf %s\\n "'${kak_opt_completers}'" | sed -e 's/option=clang_completions://g' }
|
evaluate-commands %sh{ printf "set-option window completers "; printf %s\\n "'${kak_opt_completers}'" | sed -e "s/'option=clang_completions'//g" }
|
||||||
remove-hooks window clang-autocomplete
|
remove-hooks window clang-autocomplete
|
||||||
unalias window complete clang-complete
|
unalias window complete clang-complete
|
||||||
}
|
}
|
||||||
|
@ -136,11 +135,15 @@ define-command clang-disable-autocomplete -docstring "Disable automatic clang co
|
||||||
define-command -hidden clang-show-error-info %{
|
define-command -hidden clang-show-error-info %{
|
||||||
update-option buffer clang_errors # Ensure we are up to date with buffer changes
|
update-option buffer clang_errors # Ensure we are up to date with buffer changes
|
||||||
evaluate-commands %sh{
|
evaluate-commands %sh{
|
||||||
desc=$(printf %s\\n "${kak_opt_clang_errors}" |
|
eval "set -- ${kak_opt_clang_errors}"
|
||||||
sed -e "s/\([^\\]\):/\1\n/g" |
|
shift # skip timestamp
|
||||||
sed -ne "/^${kak_cursor_line}|.*/ { s/^[[:digit:]]\+|//g; s/'/\\\\'/g; s/\\\\:/:/g; p }")
|
for error in "$@"; do
|
||||||
|
if [ "${error%%|*}" == "$kak_cursor_line" ]; then
|
||||||
|
desc=$(printf '%s%s\n' "$desc" "${error##*|}")
|
||||||
|
fi
|
||||||
|
done
|
||||||
if [ -n "$desc" ]; then
|
if [ -n "$desc" ]; then
|
||||||
printf %s\\n "info -anchor ${kak_cursor_line}.${kak_cursor_column} '${desc}'"
|
printf %s\\n "info -anchor ${kak_cursor_line}.${kak_cursor_column} '$desc'"
|
||||||
fi
|
fi
|
||||||
} }
|
} }
|
||||||
|
|
||||||
|
@ -160,19 +163,20 @@ define-command clang-disable-diagnostics -docstring "Disable automatic error rep
|
||||||
define-command clang-diagnostics-next -docstring "Jump to the next line that contains an error" %{
|
define-command clang-diagnostics-next -docstring "Jump to the next line that contains an error" %{
|
||||||
update-option buffer clang_errors # Ensure we are up to date with buffer changes
|
update-option buffer clang_errors # Ensure we are up to date with buffer changes
|
||||||
evaluate-commands %sh{
|
evaluate-commands %sh{
|
||||||
printf "%s\n" "${kak_opt_clang_errors}" | sed -e 's/\([^\\]\):/\1\n/g' | tail -n +2 | (
|
eval "set -- ${kak_opt_clang_errors}"
|
||||||
while IFS='|' read candidate rest; do
|
shift # skip timestamp
|
||||||
first_line=${first_line-$candidate}
|
for error in "$@"; do
|
||||||
if [ "$candidate" -gt $kak_cursor_line ]; then
|
candidate=${error%%|*}
|
||||||
line=$candidate
|
first_line=${first_line-$candidate}
|
||||||
break
|
if [ "$candidate" -gt $kak_cursor_line ]; then
|
||||||
fi
|
line=$candidate
|
||||||
done
|
break
|
||||||
line=${line-$first_line}
|
|
||||||
if [ -n "$line" ]; then
|
|
||||||
printf %s\\n "execute-keys ${line} g"
|
|
||||||
else
|
|
||||||
echo "echo -markup '{Error}no next clang diagnostic'"
|
|
||||||
fi
|
fi
|
||||||
)
|
done
|
||||||
|
line=${line-$first_line}
|
||||||
|
if [ -n "$line" ]; then
|
||||||
|
printf %s\\n "execute-keys ${line} g"
|
||||||
|
else
|
||||||
|
echo "echo -markup '{Error}no next clang diagnostic'"
|
||||||
|
fi
|
||||||
} }
|
} }
|
||||||
|
|
|
@ -70,14 +70,14 @@ Available commands:\n add\n rm\n blame\n commit\n checkout\n diff\n hide-
|
||||||
function send_flags(text, flag, i) {
|
function send_flags(text, flag, i) {
|
||||||
if (line == "") { return; }
|
if (line == "") { return; }
|
||||||
text=substr(sha,1,8) " " dates[sha] " " authors[sha]
|
text=substr(sha,1,8) " " dates[sha] " " authors[sha]
|
||||||
gsub(":", "\\:", text)
|
|
||||||
# gsub("|", "\\|", text)
|
# gsub("|", "\\|", text)
|
||||||
flag=line "|" text
|
gsub("~", "~~", text)
|
||||||
|
flag="%~" line "|" text "~"
|
||||||
for ( i=1; i < count; i++ ) {
|
for ( i=1; i < count; i++ ) {
|
||||||
flag=flag ":" line+i "|" text
|
flag=flag " %~" line+i "|" text "~"
|
||||||
}
|
}
|
||||||
cmd = "kak -p " ENVIRON["kak_session"]
|
cmd = "kak -p " ENVIRON["kak_session"]
|
||||||
print "set-option -add buffer=" ENVIRON["kak_bufname"] " git_blame_flags %{" flag "}" | cmd
|
print "set-option -add buffer=" ENVIRON["kak_bufname"] " git_blame_flags " flag | cmd
|
||||||
close(cmd)
|
close(cmd)
|
||||||
}
|
}
|
||||||
/^([0-9a-f]{40}) ([0-9]+) ([0-9]+) ([0-9]+)/ {
|
/^([0-9a-f]{40}) ([0-9]+) ([0-9]+) ([0-9]+)/ {
|
||||||
|
@ -109,39 +109,39 @@ Available commands:\n add\n rm\n blame\n commit\n checkout\n diff\n hide-
|
||||||
if ($from_count == 0 and $to_count > 0) {
|
if ($from_count == 0 and $to_count > 0) {
|
||||||
for $i (0..$to_count - 1) {
|
for $i (0..$to_count - 1) {
|
||||||
$line = $to_line + $i;
|
$line = $to_line + $i;
|
||||||
$flags .= ":$line|\{green\}+";
|
$flags .= " $line|\{green\}+";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif ($from_count > 0 and $to_count == 0) {
|
elsif ($from_count > 0 and $to_count == 0) {
|
||||||
if ($to_line == 0) {
|
if ($to_line == 0) {
|
||||||
$flags .= ":1|\{red\}‾";
|
$flags .= " 1|\{red\}‾";
|
||||||
} else {
|
} else {
|
||||||
$flags .= ":$to_line|\{red\}_";
|
$flags .= " $to_line|\{red\}_";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif ($from_count > 0 and $from_count == $to_count) {
|
elsif ($from_count > 0 and $from_count == $to_count) {
|
||||||
for $i (0..$to_count - 1) {
|
for $i (0..$to_count - 1) {
|
||||||
$line = $to_line + $i;
|
$line = $to_line + $i;
|
||||||
$flags .= ":$line|\{blue\}~";
|
$flags .= " $line|\{blue\}~";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif ($from_count > 0 and $from_count < $to_count) {
|
elsif ($from_count > 0 and $from_count < $to_count) {
|
||||||
for $i (0..$from_count - 1) {
|
for $i (0..$from_count - 1) {
|
||||||
$line = $to_line + $i;
|
$line = $to_line + $i;
|
||||||
$flags .= ":$line|\{blue\}~";
|
$flags .= " $line|\{blue\}~";
|
||||||
}
|
}
|
||||||
for $i ($from_count..$to_count - 1) {
|
for $i ($from_count..$to_count - 1) {
|
||||||
$line = $to_line + $i;
|
$line = $to_line + $i;
|
||||||
$flags .= ":$line|\{green\}+";
|
$flags .= " $line|\{green\}+";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif ($to_count > 0 and $from_count > $to_count) {
|
elsif ($to_count > 0 and $from_count > $to_count) {
|
||||||
for $i (0..$to_count - 2) {
|
for $i (0..$to_count - 2) {
|
||||||
$line = $to_line + $i;
|
$line = $to_line + $i;
|
||||||
$flags .= ":$line|\{blue\}~";
|
$flags .= " $line|\{blue\}~";
|
||||||
}
|
}
|
||||||
$last = $to_line + $to_count - 1;
|
$last = $to_line + $to_count - 1;
|
||||||
$flags .= ":$last|\{blue+u\}~";
|
$flags .= " $last|\{blue+u\}~";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
declare-option -hidden str jedi_tmp_dir
|
declare-option -hidden str jedi_tmp_dir
|
||||||
declare-option -hidden completions jedi_completions
|
declare-option -hidden completions jedi_completions
|
||||||
declare-option -docstring "colon separated list of path added to `python`'s $PYTHONPATH environment variable" \
|
declare-option -docstring "colon separated list of path added to `python`'s $PYTHONPATH environment variable" \
|
||||||
str-list jedi_python_path
|
str jedi_python_path
|
||||||
|
|
||||||
define-command jedi-complete -docstring "Complete the current selection" %{
|
define-command jedi-complete -docstring "Complete the current selection" %{
|
||||||
evaluate-commands %sh{
|
evaluate-commands %sh{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user