From 6d4c81fc68551d9e1a411efbd2482fd4b276e239 Mon Sep 17 00:00:00 2001 From: Daniel Fichtinger Date: Tue, 24 Jun 2025 20:15:00 -0400 Subject: [PATCH] AutoYADM commit: 2025-06-24 20:15:00 --- .config/kak/autoload/fmt.kak | 71 ++++++++++++++++++++++++++++++++++++ .config/kak/kakrc | 14 +++---- 2 files changed, 78 insertions(+), 7 deletions(-) create mode 100644 .config/kak/autoload/fmt.kak diff --git a/.config/kak/autoload/fmt.kak b/.config/kak/autoload/fmt.kak new file mode 100644 index 00000000..0fcc1f5f --- /dev/null +++ b/.config/kak/autoload/fmt.kak @@ -0,0 +1,71 @@ +declare-option -hidden str fmt_command %{ + fmt -u | perl -CS -pe 's/([.!?])\s{2,}/\1 /g' + # original: + # fmt --uniform-spacing "--goal=$kak_opt_fmt_width" "--width=$kak_opt_fmt_width" | sed "s/\. /. /g" +} + +declare-option -hidden str fmt_mode fail +declare-option int fmt_width 80 + +define-command -docstring "run fmt for each selection" fmt %{ + evaluate-commands -save-regs | %{ + set-register | %opt{fmt_command} + execute-keys -itersel '|' + } +} + +define-command -docstring "disable autofmt at window scope" fmt-disable-window %{ + set-option window fmt_mode fail + trigger-user-hook fmt-disable-window + remove-hooks window fmt +} + +define-command -docstring "enable autofmt at window scope" fmt-enable-window %{ + set-option window fmt_mode nop + trigger-user-hook fmt-enable-window + hook -group fmt window InsertChar [^\s] fmt-impl-window +} + +define-command -hidden fmt-impl-window %{ + evaluate-commands -save-regs "c|s" %{ + evaluate-commands -draft %{ + execute-keys ';' + + # Insert a newline after selections which close a + # paragraph. + try %{ execute-keys -draft 'L\n\n' } + + # If we were to yank newlines and paste them in the below + # 'execute-keys', we would end up typing in reverse, + # as the newline would be repeatedly pasted and removed + # before the typed content. So, we remove them. + evaluate-commands %exp{ set-register c %sh{ + printf %s "$kak_quoted_selections" | tr -d "\n" + }} + + set-register | %opt{fmt_command} + + # We use '' (U+E000) to save and restore the cursor + # position after the pipe. + execute-keys 'cpS\n+\z|sd"cP' + + set-register s "%val{selections_desc}" + } + + evaluate-commands %exp{ select %reg{s} } + } +} + +define-command -docstring "toggle autofmt at window scope" fmt-toggle-window %{ + try %{ + eval %opt{fmt_mode} + fmt-disable-window + } catch %{ + fmt-enable-window + } +} + +declare-option str fmt_info +hook global User fmt-enable-window %{ set-option window fmt_info "fmt " } +hook global User fmt-disable-window %{ set-option window fmt_info "" } + diff --git a/.config/kak/kakrc b/.config/kak/kakrc index a15c3ef1..9c8745ce 100644 --- a/.config/kak/kakrc +++ b/.config/kak/kakrc @@ -26,13 +26,13 @@ try %{ } catch %{ evaluate-commands %sh{ kak-tree-sitter -dks --init $kak_session } evaluate-commands %sh{kak-popup init} - evaluate-commands %sh{ reflow init } - set-option global reflow_command %{ - cat > "${input=$(mktemp)}" - # reflow --width "$kak_opt_reflow_width" --tabstop "$kak_opt_tabstop" < "$input" || cat "$input" - fmt -u < "$input" | perl -CS -pe 's/([.!?])\s{2,}/\1 /g' || cat "$input" - rm -f "$input" - } + # evaluate-commands %sh{ reflow init } + # set-option global reflow_command %{ + # cat > "${input=$(mktemp)}" + # # reflow --width "$kak_opt_reflow_width" --tabstop "$kak_opt_tabstop" < "$input" || cat "$input" + # fmt -u < "$input" | perl -CS -pe 's/([.!?])\s{2,}/\1 /g' || cat "$input" + # rm -f "$input" + # } colorscheme ashen require-module hop-kak