diff --git a/kak/kakrc b/kak/kakrc index f314927..3aff536 100644 --- a/kak/kakrc +++ b/kak/kakrc @@ -6,7 +6,8 @@ add-highlighter global/ number-lines -hlcursor add-highlighter global/ wrap -word -indent -marker ">>>" add-highlighter global/ show-whitespaces -set-option global ui_options terminal_status_on_top=true +set-option -add global ui_options terminal_status_on_top=true +set-option -add global ui_options terminal_assistant=cat set-option global tabstop 4 set-option global indentwidth 4 @@ -27,24 +28,6 @@ map -docstring "Cursor nach unten erweitern" global normal "" map global normal '|echo "$(($kak_selection + 1))"' map global normal '|echo "$(($kak_selection - 1))"' -# hook global InsertCompletionShow .* %{ -# try %{ -# # this command temporarily removes cursors preceded by whitespace; -# # if there are no cursors left, it raises an error, does not -# # continue to execute the mapping commands, and the error is eaten -# # by the `try` command so no warning appears. -# execute-keys -draft 'h\h' -# map window insert -# map window insert -# map window insert -# hook -once -always window InsertCompletionHide .* %{ -# unmap window insert -# unmap window insert -# unmap window insert -# } -# } -# } - # Convert spaces to tabs hook global BufWritePre .* %{ try %{ execute-keys -draft '%@' } @@ -54,16 +37,20 @@ hook global BufWritePre .* %{ # echo %sh{ sassc main.scss > main.css } # } + +eval %sh{kak-debug init --session $kak_session} +map global user d ':enter-user-mode dap' -docstring 'DAP mode' + eval %sh{kak-lsp} lsp-enable lsp-inlay-diagnostics-enable global +# gd -> zur Definition springen +map global goto d ': lsp-definition' -docstring 'definition' +# gr -> Referenzen (Aufrufstellen) auflisten +map global goto r ': lsp-references' -docstring 'references' -declare-option str fim_tmp "/tmp/kak-fim.buf" -define-command fim-complete -docstring "FIM-Completion am Cursor (Mistral)" %{ - write -force %opt{fim_tmp} - execute-keys "!python3 %val{config}/mistral-fim.py %opt{fim_tmp} %val{cursor_line} %val{cursor_column}" -} -map global user f ': fim-complete' -docstring 'FIM complete' +# LLM-Integration (FIM + smartcat) +source "%val{config}/llm.kak" diff --git a/kak/llm.kak b/kak/llm.kak new file mode 100644 index 0000000..3091b48 --- /dev/null +++ b/kak/llm.kak @@ -0,0 +1,53 @@ +# LLM-Integration (Mistral FIM + smartcat) + +declare-option str llm_ctx "/tmp/kak-fim.buf" +declare-option str llm_gen "/tmp/kak-gen.out" + +define-command fim-complete -docstring "FIM-Completion am Cursor (Mistral)" %{ + write -force %opt{llm_ctx} + execute-keys "!python3 %val{config}/mistral-fim.py %opt{llm_ctx} %val{cursor_line} %val{cursor_column}" +} +map global user f ': fim-complete' -docstring 'FIM complete' + +# Codeblock aus Anweisung generieren und am Cursor einfügen +define-command -params 1 gen -docstring 'LLM: Codeblock generieren & einfügen' %{ + write -force %opt{llm_ctx} + nop %sh{ + { printf 'Anweisung: %s\n\nVorhandener Code als Kontext:\n' "$1" + cat "$kak_opt_llm_ctx"; } | sc default > "$kak_opt_llm_gen" + } + execute-keys "!cat %opt{llm_gen}" +} +map global user G ': gen ""' -docstring 'Codeblock generieren' + +# Selektion durch generierten Code ersetzen +define-command -params 1 gen-sel -docstring 'LLM: Selektion neu generieren' %{ + nop %sh{ + printf 'Anweisung: %s\n\nCode:\n%s' "$1" "$kak_selection" \ + | sc default > "$kak_opt_llm_gen" + } + execute-keys "|cat %opt{llm_gen}" +} +map global user g ': gen-sel ""' -docstring 'Selektion neu generieren' + + +# Frage zum GANZEN Buffer (z.B. "welche imports fehlen?") +define-command -params 1 ask -docstring 'LLM-Frage zum Buffer' %{ + write -force %opt{llm_ctx} + evaluate-commands %sh{ + ans=$( { printf 'Frage: %s\n\nCode:\n' "$1"; cat "$kak_opt_llm_ctx"; } \ + | sc ask | sed "s/'/''/g") + printf "info -title 'Le Chat' '%s'" "$ans" + } +} +map global user A ': ask ""' -docstring 'Ask about the buffer' + +# Frage zur SELEKTION (vorher Region markieren) +define-command -params 1 ask-sel -docstring 'LLM-Frage zur Selektion' %{ + evaluate-commands %sh{ + ans=$(printf 'Frage: %s\n\nCode:\n%s' "$1" "$kak_selection" \ + | sc ask | sed "s/'/''/g") + printf "info -title 'Le Chat' '%s'" "$ans" + } +} +map global user a ': ask-sel ""' -docstring 'Ask about selection'