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
|
||||
# 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'
|
||||
|
||||
define-command -params ..1 \
|
||||
-shell-candidates %{
|
||||
realpath() { ( path=$(readlink "$1"); cd "$(dirname "$1")"; printf "%s/%s\n" "$(pwd -P)" "$(basename "$1")" ) }
|
||||
printf %s\\n "$kak_opt_ctagsfiles" | tr ':' '\n' |
|
||||
while read -r candidate; do
|
||||
eval "set -- $kak_opt_ctagsfiles"
|
||||
for candidate in "$@"; do
|
||||
[ -f "$candidate" ] && realpath "$candidate"
|
||||
done | awk '!x[$0]++' | # remove duplicates
|
||||
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{
|
||||
realpath() { ( path=$(readlink "$1"); cd "$(dirname "$1")"; printf "%s/%s\n" "$(pwd -P)" "$(basename "$1")" ) }
|
||||
export tagname=${1:-${kak_selection}}
|
||||
printf %s\\n "$kak_opt_ctagsfiles" | tr ':' '\n' |
|
||||
while read -r candidate; do
|
||||
eval "set -- $kak_opt_ctagsfiles"
|
||||
for candidate in "$@"; do
|
||||
[ -f "$candidate" ] && realpath "$candidate"
|
||||
done | awk '!x[$0]++' | # remove duplicates
|
||||
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
|
||||
|
||||
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{
|
||||
alt_dirs=$(printf %s\\n "${kak_opt_alt_dirs}" | tr ':' '\n')
|
||||
file="${kak_buffile##*/}"
|
||||
file_noext="${file%.*}"
|
||||
dir=$(dirname "${kak_buffile}")
|
||||
|
||||
# Set $@ to alt_dirs
|
||||
eval "set -- ${kak_opt_alt_dirs}"
|
||||
|
||||
case ${file} in
|
||||
*.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
|
||||
altname="${dir}/${alt_dir}/${file_noext}.${ext}"
|
||||
if [ -f ${altname} ]; then
|
||||
|
@ -351,7 +353,7 @@ define-command c-family-alternative-file -docstring "Jump to the alternate file
|
|||
done
|
||||
;;
|
||||
*.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
|
||||
altname="${dir}/${alt_dir}/${file_noext}.${ext}"
|
||||
if [ -f ${altname} ]; then
|
||||
|
|
|
@ -43,7 +43,7 @@ evaluate-commands %sh{
|
|||
|
||||
# Add the language's grammar to the static completion list
|
||||
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 '-'
|
||||
}"
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ The syntaxic errors detected during parsing are shown when auto-diagnostics are
|
|||
/^COMPLETION:/ && ! /\(Hidden\)/ {
|
||||
id=$2
|
||||
gsub(/ +$/, "", id)
|
||||
gsub(/:/, "\\:", id)
|
||||
gsub(/~/, "~~", id)
|
||||
gsub(/\|/, "\\|", id)
|
||||
|
||||
gsub(/[[{<]#|#[}>]/, "", $3)
|
||||
|
@ -59,10 +59,10 @@ The syntaxic errors detected during parsing are shown when auto-diagnostics are
|
|||
gsub(/ +$/, "", $3)
|
||||
desc=$4 ? $3 "\\n" $4 : $3
|
||||
|
||||
gsub(/:/, "\\:", desc)
|
||||
gsub(/~/, "~~", desc)
|
||||
gsub(/\|/, "\\|", desc)
|
||||
if (id in docstrings)
|
||||
docstrings[id]=docstrings[id] "\\n" desc
|
||||
docstrings[id]=docstrings[id] "\n" desc
|
||||
else
|
||||
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(/(^|[[:space:]])(int|size_t|bool|char|unsigned|signed|long)($|[[:space:]])/, "{type}&{}", 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'
|
||||
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
|
||||
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}
|
||||
fi
|
||||
|
||||
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]+:)? warning/ { s/^<stdin>:([0-9]+):.*/\1|{yellow}█/; p }
|
||||
" | paste -s -d ':' -)
|
||||
/^<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 }
|
||||
" | paste -s -d ' ' -)
|
||||
|
||||
errors=$(cat ${dir}/stderr | sed -rne "
|
||||
/^<stdin>:[0-9]+:([0-9]+:)? ((fatal )?error|warning)/ {
|
||||
s/^<stdin>:([0-9]+):([0-9]+:)? (.*)/\1|\3/
|
||||
s/'/\\\\'/g; s/:/\\\\:/g; p
|
||||
}" | sort -n | paste -s -d ':' -)
|
||||
s/'/''/g; s/^<stdin>:([0-9]+):([0-9]+:)? (.*)/'\1|\3'/; p
|
||||
}" | sort -n | paste -s -d ' ' -)
|
||||
|
||||
sed -e "s|<stdin>|${kak_bufname}|g" < ${dir}/stderr > ${dir}/fifo
|
||||
|
||||
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}
|
||||
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}
|
||||
) > /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" %{
|
||||
set-option window completers "option=clang_completions:%opt{completers}"
|
||||
set-option window completers "option=clang_completions" %opt{completers}
|
||||
hook window -group clang-autocomplete InsertIdle .* %{
|
||||
try %{
|
||||
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" %{
|
||||
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
|
||||
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 %{
|
||||
update-option buffer clang_errors # Ensure we are up to date with buffer changes
|
||||
evaluate-commands %sh{
|
||||
desc=$(printf %s\\n "${kak_opt_clang_errors}" |
|
||||
sed -e "s/\([^\\]\):/\1\n/g" |
|
||||
sed -ne "/^${kak_cursor_line}|.*/ { s/^[[:digit:]]\+|//g; s/'/\\\\'/g; s/\\\\:/:/g; p }")
|
||||
eval "set -- ${kak_opt_clang_errors}"
|
||||
shift # skip timestamp
|
||||
for error in "$@"; do
|
||||
if [ "${error%%|*}" == "$kak_cursor_line" ]; then
|
||||
desc=$(printf '%s%s\n' "$desc" "${error##*|}")
|
||||
fi
|
||||
done
|
||||
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
|
||||
} }
|
||||
|
||||
|
@ -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" %{
|
||||
update-option buffer clang_errors # Ensure we are up to date with buffer changes
|
||||
evaluate-commands %sh{
|
||||
printf "%s\n" "${kak_opt_clang_errors}" | sed -e 's/\([^\\]\):/\1\n/g' | tail -n +2 | (
|
||||
while IFS='|' read candidate rest; do
|
||||
first_line=${first_line-$candidate}
|
||||
if [ "$candidate" -gt $kak_cursor_line ]; then
|
||||
line=$candidate
|
||||
break
|
||||
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'"
|
||||
eval "set -- ${kak_opt_clang_errors}"
|
||||
shift # skip timestamp
|
||||
for error in "$@"; do
|
||||
candidate=${error%%|*}
|
||||
first_line=${first_line-$candidate}
|
||||
if [ "$candidate" -gt $kak_cursor_line ]; then
|
||||
line=$candidate
|
||||
break
|
||||
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) {
|
||||
if (line == "") { return; }
|
||||
text=substr(sha,1,8) " " dates[sha] " " authors[sha]
|
||||
gsub(":", "\\:", text)
|
||||
# gsub("|", "\\|", text)
|
||||
flag=line "|" text
|
||||
gsub("~", "~~", text)
|
||||
flag="%~" line "|" text "~"
|
||||
for ( i=1; i < count; i++ ) {
|
||||
flag=flag ":" line+i "|" text
|
||||
flag=flag " %~" line+i "|" text "~"
|
||||
}
|
||||
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)
|
||||
}
|
||||
/^([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) {
|
||||
for $i (0..$to_count - 1) {
|
||||
$line = $to_line + $i;
|
||||
$flags .= ":$line|\{green\}+";
|
||||
$flags .= " $line|\{green\}+";
|
||||
}
|
||||
}
|
||||
elsif ($from_count > 0 and $to_count == 0) {
|
||||
if ($to_line == 0) {
|
||||
$flags .= ":1|\{red\}‾";
|
||||
$flags .= " 1|\{red\}‾";
|
||||
} else {
|
||||
$flags .= ":$to_line|\{red\}_";
|
||||
$flags .= " $to_line|\{red\}_";
|
||||
}
|
||||
}
|
||||
elsif ($from_count > 0 and $from_count == $to_count) {
|
||||
for $i (0..$to_count - 1) {
|
||||
$line = $to_line + $i;
|
||||
$flags .= ":$line|\{blue\}~";
|
||||
$flags .= " $line|\{blue\}~";
|
||||
}
|
||||
}
|
||||
elsif ($from_count > 0 and $from_count < $to_count) {
|
||||
for $i (0..$from_count - 1) {
|
||||
$line = $to_line + $i;
|
||||
$flags .= ":$line|\{blue\}~";
|
||||
$flags .= " $line|\{blue\}~";
|
||||
}
|
||||
for $i ($from_count..$to_count - 1) {
|
||||
$line = $to_line + $i;
|
||||
$flags .= ":$line|\{green\}+";
|
||||
$flags .= " $line|\{green\}+";
|
||||
}
|
||||
}
|
||||
elsif ($to_count > 0 and $from_count > $to_count) {
|
||||
for $i (0..$to_count - 2) {
|
||||
$line = $to_line + $i;
|
||||
$flags .= ":$line|\{blue\}~";
|
||||
$flags .= " $line|\{blue\}~";
|
||||
}
|
||||
$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 completions jedi_completions
|
||||
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" %{
|
||||
evaluate-commands %sh{
|
||||
|
|
Loading…
Reference in New Issue
Block a user