From 898dfea8a15bc1b06a0e0f16c601aa7e6e3b4fb8 Mon Sep 17 00:00:00 2001 From: Marc Date: Thu, 15 Mar 2018 20:37:27 +0000 Subject: [PATCH] racer-go-definition forces readonly on files external to the project --- rc/extra/racer.kak | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/rc/extra/racer.kak b/rc/extra/racer.kak index 8ca9eafc..6e2b07b5 100644 --- a/rc/extra/racer.kak +++ b/rc/extra/racer.kak @@ -104,13 +104,20 @@ define-command racer-go-definition -docstring "Jump to where the rust identifier dir=${kak_opt_racer_tmp_dir} cursor="${kak_cursor_line} $((${kak_cursor_column} - 1))" racer_data=$(racer --interface tab-text find-definition ${cursor} "${kak_buffile}" "${dir}/buf" | head -n 1) + racer_match=$(printf %s\\n "$racer_data" | cut -f1 ) if [ "$racer_match" = "MATCH" ]; then racer_line=$(printf %s\\n "$racer_data" | cut -f3 ) racer_column=$(printf %s\\n "$racer_data" | cut -f4 ) racer_file=$(printf %s\\n "$racer_data" | cut -f5 ) printf %s\\n "edit -existing '$racer_file' $racer_line $racer_column" - #printf %s\\n "set-option buffer readonly true" + if [[ "$racer_file" == ${RUST_SRC_PATH}* ]]; then + printf %s\\n "set-option buffer readonly true" # The definition resides on the standard library, and the new buffer should be readonly + else + if [[ "$racer_file" == ${HOME}/.cargo/registry/src* ]]; then + printf %s\\n "set-option buffer readonly true" # The definition resides on an external crate, and the new buffer should be readonly + fi + fi else printf %s\\n "echo -debug 'racer could not find a definition'" fi @@ -126,12 +133,13 @@ define-command racer-show-doc -docstring "Show the documentation about the rust %sh{ dir=${kak_opt_racer_tmp_dir} cursor="${kak_cursor_line} ${kak_cursor_column}" - racer_data=$(racer --interface tab-text complete-with-snippet ${cursor} "${kak_buffile}" "${dir}/buf" | head -n 2 | tail -n 1) + racer_data=$(racer --interface tab-text complete-with-snippet ${cursor} "${kak_buffile}" "${dir}/buf" | sed -n 2p ) racer_match=$(printf %s\\n "$racer_data" | cut -f1) if [ "$racer_match" = "MATCH" ]; then racer_doc=$(printf %s\\n "$racer_data" | cut -f9 ) - racer_doc=$(printf %s\\n "$racer_doc" | sed -e 's/^"\(.*\)"$/\1/g') - racer_doc=$(printf %s\\n "$racer_doc" | sed -e "s/@/\\\\@/g") + racer_doc=$(printf %s\\n "$racer_doc" | + sed -e 's/^"\(.*\)"$/\1/g' | # Remove leading and trailing quotes + sed -e "s/@/\\\\@/g") # Escape all @ so that it can be properly used in the string expansion printf "info %%@$racer_doc@" else printf %s\\n "echo -debug 'racer could not find a definition'"