Showing preview only (3,367K chars total). Download the full file or copy to clipboard to get everything.
Repository: mawww/kakoune
Branch: master
Commit: 4d0a484b2d0e
Files: 2572
Total size: 2.8 MB
Directory structure:
gitextract_awc3a_1b/
├── .builds/
│ ├── debian-arm64.yml
│ ├── debian.yml
│ ├── freebsd.yml
│ └── readme.yml
├── .cirrus.yml
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── config.yml
│ │ ├── crash_report.yml
│ │ ├── feature_request.yml
│ │ └── question.yml
│ ├── PULL_REQUEST_TEMPLATE/
│ │ └── pull_request_template.md
│ └── workflows/
│ ├── build-releases-linux.yaml
│ └── makefile.yml
├── .gitignore
├── CONTRIBUTING
├── Makefile
├── README.asciidoc
├── UNLICENSE
├── VIMTOKAK
├── colors/
│ ├── base16.kak
│ ├── black-on-white.kak
│ ├── default.kak
│ ├── desertex.kak
│ ├── github.kak
│ ├── greyscale.kak
│ ├── gruvbox-dark.kak
│ ├── gruvbox-light.kak
│ ├── kaleidoscope-dark.kak
│ ├── kaleidoscope-light.kak
│ ├── lucius.kak
│ ├── palenight.kak
│ ├── plain.kak
│ ├── red-phoenix.kak
│ ├── reeder.kak
│ ├── solarized-dark-termcolors.kak
│ ├── solarized-dark.kak
│ ├── solarized-light-termcolors.kak
│ ├── solarized-light.kak
│ ├── tomorrow-night.kak
│ └── zenburn.kak
├── contrib/
│ ├── TRAMPOLINE
│ ├── Tupfile
│ ├── describe_sessions.sh
│ ├── gendocs.py
│ ├── kakmap.rb
│ ├── kakoune.spec
│ └── tmux-256color.terminfo
├── doc/
│ ├── autoedit.asciidoc
│ ├── coding-style.asciidoc
│ ├── design.asciidoc
│ ├── interfacing.asciidoc
│ ├── json_ui.asciidoc
│ ├── kak.1
│ ├── pages/
│ │ ├── buffers.asciidoc
│ │ ├── changelog.asciidoc
│ │ ├── command-parsing.asciidoc
│ │ ├── commands.asciidoc
│ │ ├── execeval.asciidoc
│ │ ├── expansions.asciidoc
│ │ ├── faces.asciidoc
│ │ ├── faq.asciidoc
│ │ ├── highlighters.asciidoc
│ │ ├── hooks.asciidoc
│ │ ├── keymap.asciidoc
│ │ ├── keys.asciidoc
│ │ ├── mapping.asciidoc
│ │ ├── modes.asciidoc
│ │ ├── options.asciidoc
│ │ ├── regex.asciidoc
│ │ ├── registers.asciidoc
│ │ └── scopes.asciidoc
│ └── writing_scripts.asciidoc
├── gdb/
│ └── kakoune.py
├── rc/
│ ├── detection/
│ │ ├── editorconfig.kak
│ │ ├── file.kak
│ │ └── modeline.kak
│ ├── filetype/
│ │ ├── apl.kak
│ │ ├── arch-linux.kak
│ │ ├── asciidoc.kak
│ │ ├── awk.kak
│ │ ├── c-family.kak
│ │ ├── cabal.kak
│ │ ├── capnp.kak
│ │ ├── clojure.kak
│ │ ├── cmake.kak
│ │ ├── coffee.kak
│ │ ├── conf.kak
│ │ ├── coq.kak
│ │ ├── crystal.kak
│ │ ├── css.kak
│ │ ├── cucumber.kak
│ │ ├── cue.kak
│ │ ├── d.kak
│ │ ├── dart.kak
│ │ ├── dhall.kak
│ │ ├── diff-parse.pl
│ │ ├── diff.kak
│ │ ├── dockerfile.kak
│ │ ├── elixir.kak
│ │ ├── elm.kak
│ │ ├── elvish.kak
│ │ ├── erlang.kak
│ │ ├── eruby.kak
│ │ ├── etc.kak
│ │ ├── exherbo.kak
│ │ ├── fennel.kak
│ │ ├── fidl.kak
│ │ ├── fish.kak
│ │ ├── forth.kak
│ │ ├── fsharp.kak
│ │ ├── gas.kak
│ │ ├── gdscript.kak
│ │ ├── gentoo-linux.kak
│ │ ├── git.kak
│ │ ├── github.kak
│ │ ├── gjs.kak
│ │ ├── gleam.kak
│ │ ├── gluon.kak
│ │ ├── go.kak
│ │ ├── graphql.kak
│ │ ├── gren.kak
│ │ ├── groovy.kak
│ │ ├── haml.kak
│ │ ├── hare.kak
│ │ ├── haskell.kak
│ │ ├── hbs.kak
│ │ ├── hjson.kak
│ │ ├── html.kak
│ │ ├── hyprlang.kak
│ │ ├── i3.kak
│ │ ├── ini.kak
│ │ ├── janet.kak
│ │ ├── java.kak
│ │ ├── javascript.kak
│ │ ├── jinja.kak
│ │ ├── json.kak
│ │ ├── json5.kak
│ │ ├── julia.kak
│ │ ├── just.kak
│ │ ├── kakrc.kak
│ │ ├── kdl.kak
│ │ ├── kickstart.kak
│ │ ├── kitty.kak
│ │ ├── kotlin.kak
│ │ ├── latex.kak
│ │ ├── ledger.kak
│ │ ├── lisp.kak
│ │ ├── lua.kak
│ │ ├── mail.kak
│ │ ├── makefile.kak
│ │ ├── markdown.kak
│ │ ├── mercurial.kak
│ │ ├── mercury.kak
│ │ ├── meson.kak
│ │ ├── mlb.kak
│ │ ├── moon.kak
│ │ ├── nim.kak
│ │ ├── ninja.kak
│ │ ├── nix.kak
│ │ ├── ocaml.kak
│ │ ├── odin.kak
│ │ ├── pascal.kak
│ │ ├── perf.kak
│ │ ├── perl.kak
│ │ ├── php.kak
│ │ ├── pony.kak
│ │ ├── prolog.kak
│ │ ├── protobuf.kak
│ │ ├── prql.kak
│ │ ├── pug.kak
│ │ ├── purescript.kak
│ │ ├── python.kak
│ │ ├── r.kak
│ │ ├── ragel.kak
│ │ ├── restructuredtext.kak
│ │ ├── ron.kak
│ │ ├── ruby.kak
│ │ ├── rust.kak
│ │ ├── sass.kak
│ │ ├── scala.kak
│ │ ├── scheme.kak
│ │ ├── scss.kak
│ │ ├── sh.kak
│ │ ├── sml.kak
│ │ ├── sql.kak
│ │ ├── sshconfig.kak
│ │ ├── svelte.kak
│ │ ├── swift.kak
│ │ ├── systemd.kak
│ │ ├── taskpaper.kak
│ │ ├── tcl.kak
│ │ ├── terraform.kak
│ │ ├── toml.kak
│ │ ├── troff.kak
│ │ ├── ttl.kak
│ │ ├── tupfile.kak
│ │ ├── twig.kak
│ │ ├── typst.kak
│ │ ├── vhdl.kak
│ │ ├── void-linux.kak
│ │ ├── wren.kak
│ │ ├── yaml.kak
│ │ └── zig.kak
│ ├── tools/
│ │ ├── autorestore.asciidoc
│ │ ├── autorestore.kak
│ │ ├── autowrap.kak
│ │ ├── clang.kak
│ │ ├── comment.kak
│ │ ├── ctags.kak
│ │ ├── doc.asciidoc
│ │ ├── doc.kak
│ │ ├── fifo.kak
│ │ ├── format.kak
│ │ ├── git.kak
│ │ ├── go/
│ │ │ └── gopls.kak
│ │ ├── grep.kak
│ │ ├── jump.kak
│ │ ├── lint.asciidoc
│ │ ├── lint.kak
│ │ ├── make.kak
│ │ ├── man.kak
│ │ ├── menu.kak
│ │ ├── patch-range.pl
│ │ ├── patch.kak
│ │ ├── python/
│ │ │ └── jedi.kak
│ │ ├── rust/
│ │ │ └── racer.kak
│ │ └── spell.kak
│ └── windowing/
│ ├── appleterminal.kak
│ ├── detection.kak
│ ├── hyprland.kak
│ ├── iterm.kak
│ ├── kitty.kak
│ ├── new-client.kak
│ ├── niri.kak
│ ├── repl/
│ │ ├── dtach.kak
│ │ ├── kitty.kak
│ │ ├── tmux.kak
│ │ └── x11.kak
│ ├── screen.kak
│ ├── sway.kak
│ ├── tmux.kak
│ ├── wayland.kak
│ ├── wezterm.kak
│ ├── x11.kak
│ └── zellij.kak
├── share/
│ └── kak/
│ └── kakrc
├── src/
│ ├── .gdbinit
│ ├── alias_registry.cc
│ ├── alias_registry.hh
│ ├── array.hh
│ ├── array_view.hh
│ ├── assert.cc
│ ├── assert.hh
│ ├── backtrace.cc
│ ├── backtrace.hh
│ ├── buffer.cc
│ ├── buffer.hh
│ ├── buffer.inl.hh
│ ├── buffer_manager.cc
│ ├── buffer_manager.hh
│ ├── buffer_utils.cc
│ ├── buffer_utils.hh
│ ├── changes.cc
│ ├── changes.hh
│ ├── client.cc
│ ├── client.hh
│ ├── client_manager.cc
│ ├── client_manager.hh
│ ├── clock.hh
│ ├── color.cc
│ ├── color.hh
│ ├── command_manager.cc
│ ├── command_manager.hh
│ ├── commands.cc
│ ├── commands.hh
│ ├── completion.cc
│ ├── completion.hh
│ ├── context.cc
│ ├── context.hh
│ ├── coord.hh
│ ├── debug.cc
│ ├── debug.hh
│ ├── diff.hh
│ ├── display_buffer.cc
│ ├── display_buffer.hh
│ ├── enum.hh
│ ├── env_vars.cc
│ ├── env_vars.hh
│ ├── event_manager.cc
│ ├── event_manager.hh
│ ├── exception.cc
│ ├── exception.hh
│ ├── face.hh
│ ├── face_registry.cc
│ ├── face_registry.hh
│ ├── file.cc
│ ├── file.hh
│ ├── flags.hh
│ ├── format.cc
│ ├── format.hh
│ ├── function.hh
│ ├── hash.cc
│ ├── hash.hh
│ ├── hash_map.cc
│ ├── hash_map.hh
│ ├── highlighter.cc
│ ├── highlighter.hh
│ ├── highlighter_group.cc
│ ├── highlighter_group.hh
│ ├── highlighters.cc
│ ├── highlighters.hh
│ ├── hook_manager.cc
│ ├── hook_manager.hh
│ ├── input_handler.cc
│ ├── input_handler.hh
│ ├── insert_completer.cc
│ ├── insert_completer.hh
│ ├── json.cc
│ ├── json.hh
│ ├── json_ui.cc
│ ├── json_ui.hh
│ ├── keymap_manager.cc
│ ├── keymap_manager.hh
│ ├── keys.cc
│ ├── keys.hh
│ ├── line_modification.cc
│ ├── line_modification.hh
│ ├── main.cc
│ ├── memory.cc
│ ├── memory.hh
│ ├── meta.hh
│ ├── normal.cc
│ ├── normal.hh
│ ├── option.hh
│ ├── option_manager.cc
│ ├── option_manager.hh
│ ├── option_types.cc
│ ├── option_types.hh
│ ├── optional.hh
│ ├── parameters_parser.cc
│ ├── parameters_parser.hh
│ ├── profile.hh
│ ├── range.hh
│ ├── ranges.cc
│ ├── ranges.hh
│ ├── ranked_match.cc
│ ├── ranked_match.hh
│ ├── ref_ptr.hh
│ ├── regex.cc
│ ├── regex.hh
│ ├── regex_vm.cc
│ ├── regex_vm.hh
│ ├── register_manager.cc
│ ├── register_manager.hh
│ ├── remote.cc
│ ├── remote.hh
│ ├── safe_ptr.hh
│ ├── scope.cc
│ ├── scope.hh
│ ├── selection.cc
│ ├── selection.hh
│ ├── selectors.cc
│ ├── selectors.hh
│ ├── shared_string.cc
│ ├── shared_string.hh
│ ├── shell_manager.cc
│ ├── shell_manager.hh
│ ├── string.cc
│ ├── string.hh
│ ├── string_utils.cc
│ ├── string_utils.hh
│ ├── terminal_ui.cc
│ ├── terminal_ui.hh
│ ├── unicode.hh
│ ├── unique_descriptor.hh
│ ├── unique_ptr.hh
│ ├── unit_tests.cc
│ ├── unit_tests.hh
│ ├── units.hh
│ ├── user_interface.hh
│ ├── utf8.hh
│ ├── utf8_iterator.hh
│ ├── utils.hh
│ ├── value.hh
│ ├── vector.hh
│ ├── window.cc
│ ├── window.hh
│ ├── word_db.cc
│ ├── word_db.hh
│ └── word_splitter.hh
└── test/
├── README.asciidoc
├── commands/
│ ├── edit-fifo-noscroll/
│ │ ├── cmd
│ │ ├── out
│ │ └── script
│ ├── edit-fifo-noscroll-noeol/
│ │ ├── cmd
│ │ ├── out
│ │ └── script
│ ├── fifo-read-ranges/
│ │ ├── cmd
│ │ ├── rc
│ │ └── script
│ ├── fifo-read-ranges-noeol/
│ │ ├── cmd
│ │ ├── rc
│ │ └── script
│ ├── fifo-read-ranges-noeol-scroll/
│ │ ├── cmd
│ │ ├── rc
│ │ └── script
│ └── fifo-read-ranges-scroll/
│ ├── cmd
│ ├── rc
│ └── script
├── compose/
│ ├── backward-search/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── catch-error-desc/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── complex-pipe/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_selections
│ │ └── out
│ ├── del-empty-line/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── discard-selections-with-itersel/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── do-not-run-hooks-added-by-parent/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── echo-to-file/
│ │ ├── cmd
│ │ └── out
│ ├── eof-multi-delete/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── eol-at-eof/
│ │ ├── opt-in-no-eol/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ ├── opt-out-no-eol/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ ├── write-after-insert-into-empty-file/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ ├── write-empty-file/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ └── write-no-eol/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── file-expansion/
│ │ ├── cmd
│ │ └── out
│ ├── history/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_history
│ │ └── rc
│ ├── hook-named-captures/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── inline-sort/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── line-completion/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── no-hook-on-unset-option-with-same-parent/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── pipe-at-eof/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── select-codepoints/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_selections_char_desc
│ │ ├── kak_selections_desc
│ │ └── rc
│ ├── select-display-columns/
│ │ ├── cmd
│ │ ├── enabled
│ │ ├── in
│ │ ├── kak_selections_char_desc
│ │ ├── kak_selections_desc
│ │ ├── kak_selections_display_column_desc
│ │ └── rc
│ ├── select-timestamp/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── selections_char_desc-expansion/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_char_desc
│ ├── undo-multi-replace-at-end/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ └── unicode/
│ ├── cmd
│ ├── enabled
│ ├── in
│ └── out
├── display/
│ ├── horizontal-scroll/
│ │ ├── cmd
│ │ ├── in
│ │ └── script
│ ├── horizontal-scroll-onto-tab/
│ │ ├── cmd
│ │ ├── in
│ │ └── script
│ ├── horizontal-scroll-with-tab/
│ │ ├── cmd
│ │ ├── in
│ │ └── script
│ └── vertical-scroll/
│ ├── cmd
│ ├── in
│ └── script
├── highlight/
│ ├── column/
│ │ └── multi-columns/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── face-override/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── named-captures/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── number-lines/
│ │ ├── basic/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ └── full-relative/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── ranges/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── regions/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── regions-recurse/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── replace-ranges/
│ │ ├── replace-empty-range/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── replace-large-with-multiple-lines/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── replace-multiline-range/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── replace-multiline-range-pulls-new-lines/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── replace-multiline-range-scrolls-fine/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── replace-only-fully-selected-ranges/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ └── replace-with-multiple-lines/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── rust/
│ │ ├── comment0/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── doc_comment_hidden/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── doc_comment_hidden_with_empty_line/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── inner_block_comment1/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── inner_block_doc_comment1/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── inner_line_doc_comment1/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── let/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── line_comment1/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── outer_block_doc_comment0/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── pub/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── todo/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ └── value/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── tabulation/
│ │ └── ensure-cursor-on-tab-fully-visible/
│ │ ├── cmd
│ │ ├── in
│ │ └── script
│ └── wrap/
│ ├── avoid-odd-places/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── basic/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── interact-with-number-lines/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── interact-with-replace-ranges/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── interact-with-show-whitespaces/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── interact-with-tabulation/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── marker-and-indent/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── marker-interact-with-long-replace-ranges/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ └── word/
│ ├── cmd
│ ├── in
│ ├── rc
│ └── script
├── hooks/
│ ├── completion-hide/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── completion-hide-using-register/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── module-loaded/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── once/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ └── remove-regex/
│ ├── cmd
│ ├── out
│ └── rc
├── indent/
│ ├── c-family/
│ │ ├── align-while-expr/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── close-block/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── close-function-with-struct-param/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── close-namespace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── comment-line-continuation/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── construct-align/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-function-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-generic-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-if-body/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-if-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-after-parenthesis/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-else-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-if-body/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-if-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── kak_selections_desc
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── move-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── multiline-nested-align/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── nested-align/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── open-function/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── paren-in-literal/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── preserve-tabs/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── clojure/
│ │ └── doubled-brackets/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── comment/
│ │ ├── comment-multiple-lines-indented/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── comment-multiple-lines-unindented/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── comment-multiple-lines-when-partially-commented/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── uncomment-multiple-indented-lines/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── elixir/
│ │ ├── do-keyword/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── following-blocks-should-not-prevent-end/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── function-definition-shouldnt-duplicate/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── insert-comment-hash/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── fidl/
│ │ ├── comments/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── on-closing/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── on-newline/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── go/
│ │ ├── deindent-function-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-generic-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-if-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── insert-comment/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── haskell/
│ │ ├── before-comment/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indented-comment/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── inside-comment/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── html/
│ │ ├── indent-closing-tag/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── indent-on-new-line/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── javascript/
│ │ └── deindent-complex-brace-structure/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── lisp/
│ │ └── doubled-brackets/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── lua/
│ │ ├── insert-end-only-when-needed/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── unindent-after-end/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── markdown/
│ │ ├── inside-complex-blockquote/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── inside-list-item/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── inside-nested-list-item/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── inside-simple-blockquote/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── inside-strong-emphasis/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── list-item/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── open-after-setext-heading-1/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── open-after-setext-heading-2/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── python/
│ │ ├── empty-start-of-file/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── empty-start-of-file-indented/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── exit-block/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── exit-block-indented/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── not-a-comment/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── not-a-comment-indented/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── paragraph-break/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── paragraph-break-indented/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── ruby/
│ │ ├── deindent-on-if-else-end/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── do-keyword/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── following-blocks-should-not-prevent-end/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-after-class/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── insert-comment-hash/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── method-definition-shouldnt-duplicate/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── rust/
│ │ ├── after-open/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── after-open-with-chars/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── after-variable/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── after-where/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── align-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── align-closing-brack/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── align-closing-paren/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── before-where/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── block-comment/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── block-comment-close/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── dedent/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── dedent-async/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── dedent-function-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── dedent-generic-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── dedent-if-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── empty-line/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── empty-match/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── line-comment/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── line-comment-close/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── line-start-with-operator/
│ │ │ ├── bar
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── on-open-paren/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── sh/
│ │ ├── deindent-after-done/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-after-esac/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-after-fi/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-case-option/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-compound-command/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-one-line-case-option/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-only-else/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-after-do/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-after-in/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-after-then/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-block-case/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-compound-command/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── no-deindent-after-else/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── no-deindent-after-fi/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ └── swift/
│ ├── after-open-brace/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── align-closing-brace/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── closure-after-in/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── comment-continuation/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ └── doc-comment-continuation/
│ ├── cmd
│ ├── in
│ ├── out
│ └── rc
├── normal/
│ ├── align/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── align-tab/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── all/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── append/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── append-at-eol/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── change/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── clear-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── codepoint-width/
│ │ ├── tab-width/
│ │ │ ├── cmd
│ │ │ ├── enabled
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ └── vertical-movement/
│ │ ├── cmd
│ │ ├── enabled
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── concat-paste-line/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_selections_desc
│ │ └── out
│ ├── convert-spaces-to-tabs/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── convert-tabs-to-spaces/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── copy-sel-above/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── copy-sel-below/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── copy-sel-below-multi-line/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── deindent/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── delete/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── duplicate-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── extend-lines/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── extra-word-chars/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_selections
│ │ └── rc
│ ├── facedesc-invalid-syntax/
│ │ ├── attributes/
│ │ │ ├── cmd
│ │ │ └── error
│ │ └── bg-color/
│ │ ├── cmd
│ │ └── error
│ ├── find-char-backward/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── find-char-backward-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── find-char-forward/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── find-char-forward-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── goto/
│ │ ├── buffer-bottom/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── buffer-end/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── buffer-top/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── file/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── last-buffer/
│ │ │ ├── cmd
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── last-change/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── line-begin/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ └── line-end/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── goto-extending/
│ │ ├── buffer-bottom/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── buffer-end/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── buffer-top/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── last-change/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── line-begin/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ └── line-end/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── indent/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── insert/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── insert-at-line-start/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── insert-replace/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── jump/
│ │ ├── backward/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ ├── backward-count/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ ├── backward-dirty-middle/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ ├── backward-invalid-count/
│ │ │ ├── cmd
│ │ │ ├── error
│ │ │ └── in
│ │ ├── forward/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ ├── forward-count/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ └── forward-invalid-count/
│ │ ├── cmd
│ │ ├── error
│ │ └── in
│ ├── keep-cmd/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── keep-cmd-reg/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_selections
│ │ └── rc
│ ├── lower-case/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── macro/
│ │ ├── record-macro/
│ │ │ ├── cmd
│ │ │ └── out
│ │ └── replay-macro-mapped-word-completion/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── match-char/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── move/
│ │ ├── down/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── down-extending/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── left/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── left-extending/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── right/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── right-extending/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── up/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ └── up-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── next-big-word/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── next-big-word-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── next-match/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_selections
│ │ └── rc
│ ├── next-match-appending/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_selections
│ │ └── rc
│ ├── next-word/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── next-word-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── object/
│ │ ├── around/
│ │ │ ├── angle/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── argument/
│ │ │ │ ├── multi-level/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── single-level/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── big-word/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── brackets/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── double_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── grave_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── indent/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── paragraph/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── parenthesis/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── sentence/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── single_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── slash/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── word/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── around-parent/
│ │ │ ├── angle/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── brackets/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── parenthesis/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── drop-non-whitespace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── end/
│ │ │ ├── angle/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── argument/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── big-word/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── brackets/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── double_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── grave_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── indent/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── paragraph/
│ │ │ │ ├── count/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── single/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── to-buffer-end/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── parenthesis/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── sentence/
│ │ │ │ ├── count/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── single/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── to-buffer-end/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── single_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── word/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── end-extending/
│ │ │ ├── angle/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── argument/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── big-word/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── brackets/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── double_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── grave_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── indent/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── paragraph/
│ │ │ │ ├── count/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── single/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── parenthesis/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── sentence/
│ │ │ │ ├── count/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── single/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── single_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── word/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── end-extending-parent/
│ │ │ └── braces/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── inner/
│ │ │ ├── angle/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── argument/
│ │ │ │ ├── multi-level/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── single-level/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── big-word/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── brackets/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── double_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── empty-braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── error
│ │ │ │ └── in
│ │ │ ├── empty-double_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── error
│ │ │ │ └── in
│ │ │ ├── grave_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── indent/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── paragraph/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── parenthesis/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── sentence/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── single_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── slash/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── word/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── nested/
│ │ │ ├── around/
│ │ │ │ ├── arguments/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── big-word/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── curly-braces/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── double-quotes/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── number/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── paragraph/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── sentence/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── whitespaces/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── word/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── inner/
│ │ │ ├── arguments/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── big-word/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── curly-braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── double-quotes/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── number/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── paragraph/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── sentence/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── whitespaces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── word/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── on-end/
│ │ │ ├── around/
│ │ │ │ ├── angle/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── braces/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── brackets/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── parenthesis/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── inner/
│ │ │ │ ├── angle/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── braces/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── brackets/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── parenthesis/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── to-end/
│ │ │ ├── angle/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── brackets/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── parenthesis/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── on-start/
│ │ │ ├── around/
│ │ │ │ ├── angle/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── braces/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── brackets/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── double_quote/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── grave_quote/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── parenthesis/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── single_quote/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── slash/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── inner/
│ │ │ │ ├── angle/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── braces/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── brackets/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── double_quote/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── grave_quote/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── parenthesis/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── single_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── to-start/
│ │ │ ├── angle/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── brackets/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── parenthesis/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── start/
│ │ │ ├── angle/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── argument/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── big-word/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── brackets/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── double_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── grave_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── indent/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── paragraph/
│ │ │ │ ├── count/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── single/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── parenthesis/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── sentence/
│ │ │ │ ├── count/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── single/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── to-buffer-begin/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── single_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── word/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ └── start-extending/
│ │ ├── angle/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── argument/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── big-word/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── braces/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── brackets/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── double_quote/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── grave_quote/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── indent/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── paragraph/
│ │ │ ├── count/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── single/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── parenthesis/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── sentence/
│ │ │ ├── count/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── single/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── single_quote/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ └── word/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── open-above/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── open-below/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── open-multiple-above/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── open-multiple-below/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── paste-after/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── paste-all-after/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── paste-all-before/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── paste-all-before-missing-newline/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── paste-all-replace/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── paste-before/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── paste-before-multiple-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── pipe/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── pipe-reg/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── pipe-replaces-all-lines/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── pipe-to/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── pipe-to-reg/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── previous-big-word/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── previous-big-word-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── previous-word/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── previous-word-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── previous-word-no-underscore/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_selections
│ │ └── rc
│ ├── redo/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── reload/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── repeat-insert/
│ │ ├── repeat-insert/
│ │ │ ├── cmd
│ │ │ └── out
│ │ ├── repeat-insert-hooks/
│ │ │ ├── cmd
│ │ │ └── out
│ │ ├── repeat-insert-mapped/
│ │ │ ├── cmd
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── repeat-insert-mapped-word-completion/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── repeat-normal-exec/
│ │ │ ├── cmd
│ │ │ └── out
│ │ └── repeat-normal-movement/
│ │ ├── cmd
│ │ └── out
│ ├── repeat-select/
│ │ ├── repeat-end-paragraph/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_selections_desc
│ │ └── repeat-find-char/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── replace/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── replace-lines/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── replay-complex-insert/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── replay-macro/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── restore-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── rotate/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── rotate-content/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── save-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── search/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── search-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── search-extending-multiple-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── search-reverse/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── search-reverse-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── search-reverse-extending-multiple-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── search-reverse-rightmost/
│ │ ├── missed-match/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ └── overlap/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── select/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── select-horizontal-whitespace/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── select-line/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── selection-undo/
│ │ ├── fold-redundant-entries/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── script
│ │ ├── redo/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── script
│ │ ├── undo/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── script
│ │ └── windisplay-hook/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── split/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── split-at-begin/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── split-multiple-lines/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── switch-case/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── to-char-backward/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── to-char-backward-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── to-char-forward/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── to-char-forward-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── trim/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── table/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── trim-drop-empty/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── trim-lines/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── undo/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── undo-after-replace-lines/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── upper-case/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── user-modes/
│ │ ├── lock/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── once/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ └── yank/
│ ├── cmd
│ ├── in
│ └── out
├── prompt/
│ ├── history-abort-previous/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── history-mapped-keys/
│ │ ├── cmd
│ │ ├── kak_reg_colon
│ │ ├── rc
│ │ └── script
│ ├── history-navigate/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── history-previous/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── history-previous-prefix/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── history-repeat-last/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ └── history-stop-at-first/
│ ├── cmd
│ ├── out
│ ├── rc
│ └── script
├── regression/
│ ├── 0-assert-on-itersel/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 0-autocomplete-overrules-completers/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── 0-comment-after-command/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 0-compute-modified-range-crash/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 0-crash-on-0-height-window/
│ │ ├── cmd
│ │ ├── in
│ │ └── script
│ ├── 0-crash-on-BufSetOption-hook/
│ │ ├── cmd
│ │ └── rc
│ ├── 0-crash-on-backspace-at-buffer-begin/
│ │ └── cmd
│ ├── 0-crash-on-delete-buffer-BufClose/
│ │ ├── cmd
│ │ └── rc
│ ├── 0-crash-on-pipe-with-selection-access/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_selections
│ │ └── out
│ ├── 0-crash-on-regex-prompt-change/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 0-crash-on-specialy-crafted-modeline/
│ │ ├── cmd
│ │ └── rc
│ ├── 0-crash-on-tab-just-before-wrap-column/
│ │ ├── cmd
│ │ ├── in
│ │ └── rc
│ ├── 0-crash-on-vertical-move-with-invalid-utf8-at-eol/
│ │ ├── cmd
│ │ └── in
│ ├── 0-deindent-on-mixed-indent-line/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 0-delete-buffer-while-dragging/
│ │ ├── cmd
│ │ └── script
│ ├── 0-eval-creates-prompt/
│ │ ├── cmd
│ │ └── script
│ ├── 0-intermediate-regex-saved-in-history/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_selection
│ │ └── script
│ ├── 0-mouse-during-insert/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── script
│ ├── 0-no-incsearch/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_selection
│ │ ├── rc
│ │ └── script
│ ├── 0-nothing-selected-on-prompt-initial-shift-tab/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── 0-open-below-should-not-move-cursor-on-eol/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_selections_desc
│ │ └── out
│ ├── 0-replace-last-eol-with-eol/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 0-rotate-at-eof-mutates-selection/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 0-select-object-with-empty-begin-match/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── 0-slow-BufCloseFifo/
│ │ ├── cmd
│ │ ├── rc
│ │ └── script
│ ├── 0-spurious-undo-group-on-external/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 0-undo-change-at-eof/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 1014-ambiguous-kak_selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 1051-crash-on-empty-param/
│ │ └── cmd
│ ├── 1053-crash-on-deletion-and-paste/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 1074-comment-leader-autoinsert-error/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 1105-object-selection-behaviour/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 1111-unexpected-behaviour-on-new-line-in-comment/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 1118-misaligned-comment-start/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 1129-capture-groups-are-broken/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 1195-infinite-loop-in-regex-matching/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 1227-segfault-on-option-access/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 1233-corrent-cursor-handling-for-indent-objects/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 1275-replaced-range-split/
│ │ └── cmd
│ ├── 1308-wrong-behaviour-of-kak-indent-on-newline/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_selections
│ │ └── rc
│ ├── 1382-column-highlighter-broken-on-horizontal-scroll/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 1433-scrolloff-broken-with-soft-wrap/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 1435-misplaced-cursor-with-show_matching-hl/
│ │ ├── cmd
│ │ ├── rc
│ │ └── script
│ ├── 1453-show_whitespaces-highlighter-breaks-tab-alignment/
│ │ ├── cmd
│ │ ├── rc
│ │ └── script
│ ├── 1459-assertion-on-wrapped-long-line/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 1469-assert-on-repeat-insert/
│ │ ├── cmd
│ │ └── error
│ ├── 1504-assertion-on-incorrect-pipe-use/
│ │ ├── cmd
│ │ └── kak_selections_desc
│ ├── 1518-wrong-undo-handling-with-fifo-buffers/
│ │ ├── cmd
│ │ └── error
│ ├── 1525-lua-indent-error/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 1580-A-not-moving-to-eol/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_selections_desc
│ │ └── rc
│ ├── 1680-crash-with-dot-and-alt-semicolon/
│ │ ├── cmd
│ │ └── out
│ ├── 1731-wrap-hidden-buffer/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 1741-scrolloff-hides-end-of-lines/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 1829-unicode-as-string-delimiter/
│ │ ├── cmd
│ │ └── out
│ ├── 1902-regex-lookbehind-ignore-before-current-pos/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── 1904-select-empty-line-indent-gets-whole-buffer/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 1920-crash-on-python-in-docstring/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 1937-opening-missing-file-by-full-path-fails/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 1964-O-does-not-position-cursor-correctly/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 2030-custom-selection-nesting/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 2056-assert-on-small-window/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 2078-assert-on-restoring-invalid-selections/
│ │ ├── cmd
│ │ └── kak_selections_desc
│ ├── 2129-inside-parentheses/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 2133-assert-on-rotate-contents/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 2245-wrap-long-word/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 2367-surround-with-tight-nesting/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 2420-discrepancy-in-star-behaviour/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── 2499-html-regions-assert/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 2562-column-highlighter-bleeding/
│ │ ├── cmd
│ │ ├── rc
│ │ └── script
│ ├── 2711-weird-regex-highlighter-behaviour/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 2737-segfault-on-WinDisplay-hook/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 2755-segfault-on-double-wrap-highlighters/
│ │ ├── cmd
│ │ ├── in
│ │ └── rc
│ ├── 2861-backspace-merges-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 2999-buggy-wrapping/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 3010-extra_word_chars-fails-with-other-buffers/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 3025-last-buffer-does-not-work-in-draft-context/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 3041-invalid-regex-highlight-accross-regions/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 3048-word-wrapping-broken/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 3219-scroll-json-ui/
│ │ ├── cmd
│ │ ├── in
│ │ └── script
│ ├── 3270-crash-in-autocomplete/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 3275-crash-on-replace-at-buffer-start/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 3349-crash-in-completion/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── 3388-command-line-parsing-does-not-preserve-invalid-utf8/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 3398-readonly-fifo-failure/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── 3439-parse-ascii-newline-as-return/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 3472-crash-on-to-sentence-start/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selection_desc
│ ├── 3478-crash-on-scroll/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 3489-crash-on-paragraph-begin/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selection_desc
│ ├── 3495-crash-highlighting-hidden-lines/
│ │ ├── cmd
│ │ ├── in
│ │ └── rc
│ ├── 3544-capture-get-lost/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 3669-pipe-adds-extra-newline/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 3733-modeline-parsing-off-by-one-line/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 3735-modeline-arbitrary-code-execution/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 3757-crash-on-capture-group-select/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 3799-incorrect-region-match/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 3909-crash-on-closing-buffer-with-user-mapping/
│ │ ├── cmd
│ │ └── rc
│ ├── 4052-replace-range-vs-whitespace-highlighter-interaction/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 4086-ruby-deindenting-other-lines-than-keywords/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 4378-line-explicit-completion-buggy/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 4414-crash-on-paste-all/
│ │ ├── cmd
│ │ └── error
│ ├── 4460-nul-byte-in-regex/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 4471-crash-on-alt-t-with-one-char-file/
│ │ ├── cmd
│ │ └── error
│ ├── 4476-invalid-line-join/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 4519-regex-alternation-priority/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections
│ ├── 4521-alt-mapping-broken-in-lower-case-modes/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 4601-int-min-arg/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 4605-fifo-hang/
│ │ ├── cmd
│ │ └── rc
│ ├── 4659-scroll-issue-with-replace-ranges/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 4669-eol-highlight-to-column-highlighter/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 4674-show-whitespaces-horizontal-scroll-assert/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 4750-crash-on-append-empty-output-at-end-of-buffer/
│ │ └── cmd
│ ├── 4753-assert-in-display-line-split/
│ │ ├── cmd
│ │ ├── in
│ │ └── rc
│ ├── 4779-crash-when-pasting-with-multiple-overlapping-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 4839-scroll-invalid-cursor/
│ │ ├── cmd
│ │ ├── in
│ │ └── script
│ ├── 4843-trim-front-split-glyph/
│ │ ├── cmd
│ │ ├── enabled
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 4844-crash-on-empty-paste/
│ │ ├── cmd
│ │ └── out
│ ├── 4859-regex-invalid-behaviour/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 4887-torn-utf8-sequence/
│ │ ├── cmd
│ │ └── out
│ ├── 4896-remap-executing-mapping/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 4896-unmap-executing-mapping/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 4926-crash-with-fold-and-ranges/
│ │ ├── cmd
│ │ ├── in
│ │ └── rc
│ ├── 4927-crash-jumping-to-eol/
│ │ ├── cmd
│ │ ├── in
│ │ └── rc
│ ├── 4959-bad-default-region/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 5001-line-highlighting-breaks-at-region/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 5076-empty-text-should-not-change-prompt-history/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_selections
│ │ └── script
│ ├── 5118-crash-on-scroll-with-insert-completion-and-wrap/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 5120-double-free-or-corruption-crash/
│ │ ├── cmd
│ │ └── in
│ ├── 5122-dot-fails-after-macro-replay/
│ │ ├── cmd
│ │ └── out
│ ├── 5124-assert-in-redo/
│ │ ├── cmd
│ │ ├── error
│ │ └── in
│ ├── 5253-line-and-column-highlighter-issue/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 5298-missing-capture-register/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_reg_0
│ ├── 5316-crash-on-duplicate-cursor-replace-at-end/
│ │ ├── cmd
│ │ └── out
│ ├── 5324-BufSetOption-triggers-twice/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 5338-crash-when-changing-buffer-on-WinDiplay/
│ │ ├── cmd
│ │ └── rc
│ ├── 5364-exec-and-view-commands-anomalous-interaction/
│ │ ├── cmd
│ │ ├── in
│ │ └── script
│ ├── 5383-missing-redraw-with-Gtvv/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 5405-error-face-on-empty-prompt/
│ │ ├── cmd
│ │ └── script
│ ├── 5409-scrolloff-incorrectly-offset-column-highlighter/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 5414-a-p-on-multibyte-character/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 5415-final-fg-attributes-lost-to-final-attr/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 5439-visual-vertical-movement-breaks-on-out-of-screen-target/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selection_desc
│ ├── 595-smart-search-unicode/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── 612-assertion-with-NormalBegin-hook/
│ │ ├── cmd
│ │ └── rc
│ ├── 633-spurious-new-line-inserted-when-replacing-at-end/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 638-highlight-codepoint-with-bracket/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── 643-crash-on-a-@-on-specially-crafted-buffer/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 654-crash-on-undo-after-macro/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 699-to-eol-from-eol/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── 704-crash-when-using-a-hook-on-NormalBegin-and-NormalEnd/
│ │ ├── cmd
│ │ └── rc
│ ├── 733-selection-list-from-string-not-valid/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 743-crash-on-replace-undo/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 751-wrong-selection-after-undo/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 787-crash-after-S/
│ │ ├── cmd
│ │ └── error
│ ├── 809-alt-f-t-to-first-char/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 811-double-width-codepoints/
│ │ ├── cmd
│ │ ├── enabled
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 844-prev-word-at-buffer-start/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 860-python-incorrect-commenting/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 872-indentation-misbeahviour-c++/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 918-wrong-asterisk-inserted/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 921-keep-empty-line-matches-all-lines/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 993-user-text-object/
│ │ ├── cmd
│ │ └── error
│ └── quoted-vals/
│ ├── cmd
│ ├── in
│ └── out
├── run
├── shell/
│ ├── list-syntax/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── prompt-shell-script-candidates/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── prompt-shell-script-completion/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ └── quoted-range/
│ ├── cmd
│ ├── out
│ └── rc
└── tools/
├── git/
│ ├── blame-in-diff/
│ │ ├── cmd
│ │ ├── enabled
│ │ ├── in
│ │ ├── kak_selection
│ │ ├── rc
│ │ └── script
│ ├── blame-jump-message/
│ │ ├── cmd
│ │ ├── enabled
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ └── env
└── patch/
├── ignore-first-file/
│ ├── cmd
│ ├── enabled
│ ├── in
│ ├── out
│ └── rc
└── signature/
├── cmd
├── enabled
├── in
├── out
└── rc
================================================
FILE CONTENTS
================================================
================================================
FILE: .builds/debian-arm64.yml
================================================
image: debian/unstable
arch: arm64
packages:
- clang
- make
- gcc
tasks:
- clang-build: |
cd kakoune
make CXX=clang++ -j$(nproc)
- clang-test: |
cd kakoune
LC_ALL=C.utf8 make test
- gcc-build: |
cd kakoune
make clean
make CXX=g++ -j$(nproc)
- gcc-test: |
cd kakoune
LC_ALL=C.utf8 make test
================================================
FILE: .builds/debian.yml
================================================
image: debian/stable
packages:
- clang
- gcc
- make
tasks:
- clang-build: |
cd kakoune
make CXX=clang++ -j$(nproc)
- clang-test: |
cd kakoune
LC_ALL=C.utf8 make test
- gcc-build: |
cd kakoune
make clean
make CXX=g++ -j$(nproc)
- gcc-test: |
cd kakoune
LC_ALL=C.utf8 make test
================================================
FILE: .builds/freebsd.yml
================================================
image: freebsd/latest
packages:
- gcc
tasks:
- build-clang: |
cd kakoune
make CXX=clang++ -j$(sysctl -n hw.ncpu)
- test-clang: |
cd kakoune
LC_ALL=en_US.UTF-8 make test
- build-gcc: |
cd kakoune
make clean
make CXX=g++ -j$(sysctl -n hw.ncpu)
- test-gcc: |
cd kakoune
LC_ALL=en_US.UTF-8 make test
================================================
FILE: .builds/readme.yml
================================================
image: archlinux
oauth: git.sr.ht/REPOSITORIES:RW git.sr.ht/PROFILE:RO
packages:
- hut
- asciidoctor
tasks:
- update-readme: |
cd kakoune
asciidoctor -e README.asciidoc
hut git update --readme README.html --repo https://git.sr.ht/~mawww/kakoune
================================================
FILE: .cirrus.yml
================================================
# TODO move to Github Actions after https://github.com/actions/runner/issues/385
freebsd_task:
freebsd_instance:
image_family: freebsd-14-3
matrix:
- name: freebsd_clang
env:
CXX: clang++
- name: freebsd_gcc
gcc_script: pkg install -y gcc
env:
CXX: g++
test_script: make CXX=$CXX -j$(sysctl -n hw.ncpu) test
env:
LC_ALL: en_US.UTF-8
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug report
description: Report an unexpected behaviour with the editor
labels: bug
title: "[BUG] "
body:
- type: markdown
attributes:
value: |
Please make sure to [search issues](https://github.com/mawww/kakoune/issues?q=is%3Aissue) before creating a new one, to avoid duplicates and centralise conversations.
If you need to have a question about the editor itself (options, behaviour, code…) answered, make sure to check the [documentation](https://github.com/mawww/kakoune/tree/master/doc/pages) (also available via the `doc` command in the editor) or drop by [IRC](https://web.libera.chat/?channels=#kakoune) to get instant feedback.
- type: input
attributes:
label: "Version of Kakoune"
description: "If unsure, use the output of command: `kak -version`"
placeholder: "v2020.12.31"
validations:
required: true
- type: textarea
attributes:
label: "Reproducer"
description: "What are the steps to follow to reproduce the issue?"
placeholder: |
If any specific configuration or environment settings are required to reproduce the issue, also describe them here.
validations:
required: true
- type: textarea
attributes:
label: "Outcome"
description: "What is the outcome of the reproducing steps above?"
validations:
required: true
- type: textarea
attributes:
label: "Expectations"
description: "What was the expected outcome of the reproducing steps above?"
validations:
required: true
- type: textarea
attributes:
label: "Additional information"
description: "Any other information that may be relevant to diagnosing the issue should be documented here"
placeholder: |
Examples of relevant information:
* What OS and distribution are you using?
* Are you running an experimental branch (i.e. not `master`)?
* Is the issue reproducible in other terminals?
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: true
contact_links:
- name: IRC channel
url: https://web.libera.chat/?channels=#kakoune
about: Ask your questions to get real time support on the official channel
================================================
FILE: .github/ISSUE_TEMPLATE/crash_report.yml
================================================
name: Crash report
description: Report a crash of the editor while in-use
labels: bug, crash
title: "[BUG][CRASH] "
body:
- type: markdown
attributes:
value: |
Please make sure to [search issues](https://github.com/mawww/kakoune/issues?q=is%3Aissue) before creating a new one, to avoid duplicates and centralise conversations.
If you need to have a question about the editor itself (options, behaviour, code…) answered, make sure to check the [documentation](https://github.com/mawww/kakoune/tree/master/doc/pages) (also available via the `doc` command in the editor) or drop by [IRC](https://web.libera.chat/?channels=#kakoune) to get instant feedback.
- type: input
attributes:
label: "Version of Kakoune"
description: "If unsure, use the output of command: `kak -version`"
placeholder: "v2020.12.31"
validations:
required: true
- type: textarea
attributes:
label: "Reproducer"
description: "What are the steps to follow to reproduce the issue?"
placeholder: |
If any specific configuration or environment settings are required to reproduce the issue, also describe them here.
validations:
required: true
- type: textarea
attributes:
label: "Outcome"
description: "What is the outcome of the reproducing steps above?"
placeholder: |
If the editor printed any error messages, or if you managed to obtain a backtrace, also document them here. Make sure to demangle the stacktrace by passing it to the `c++filt` command.
Note that triggering the issue in the editor compiled in debug mode will produce more helpful messages, please consider re-building with `make debug=yes` to help us out.
validations:
required: true
- type: textarea
attributes:
label: "Expectations"
description: "What was the expected outcome of the reproducing steps above?"
placeholder: |
If the reproducing steps are self-evident, the expectations are simply “the editor should not crash”. In that case, you may ignore this field.
validations:
required: false
- type: textarea
attributes:
label: "Additional information"
description: "Any other information that may be relevant to diagnosing the issue should be documented here"
placeholder: |
Examples of relevant information:
* What OS and distribution are you using?
* Are you running an experimental branch (i.e. not `master`)?
* Is the issue reproducible in other terminals?
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: Feature request
description: Ask for a feature to be implemented and included in the next release
labels: feature request
title: "[REQUEST] "
body:
- type: markdown
attributes:
value: |
Please make sure to [search issues](https://github.com/mawww/kakoune/issues?q=is%3Aissue) before creating a new one, to avoid duplicates and centralise conversations.
If you need to have a question about the editor itself (options, behaviour, code…) answered, make sure to check the [documentation](https://github.com/mawww/kakoune/tree/master/doc/pages) (also available via the `doc` command in the editor) or drop by [IRC](https://web.libera.chat/?channels=#kakoune) to get instant feedback.
- type: textarea
attributes:
label: "Feature"
description: "What do you want implemented that is not already available in the development version?"
validations:
required: true
- type: textarea
attributes:
label: "Usecase"
description: "What use do you have for the requested feature?"
placeholder: |
If the feature's usecase is self-evident, such as a hook or an option whose name hints at a functionality unequivocally, you may ignore this field.
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/question.yml
================================================
name: Question
description: Couldn't find an answer in the documentation? Ask away!
labels: question
title: "[QUESTION] "
body:
- type: markdown
attributes:
value: |
Please make sure to [search issues](https://github.com/mawww/kakoune/issues?q=is%3Aissue) before creating a new one, to avoid duplicates and centralise conversations.
If you need to have a question about the editor itself (options, behaviour, code…) answered, make sure to check the [documentation](https://github.com/mawww/kakoune/tree/master/doc/pages) (also available via the `doc` command in the editor) or drop by [IRC](https://web.libera.chat/?channels=#kakoune) to get instant feedback.
- type: textarea
attributes:
label: "Question"
description: "Couldn't find an answer in the documentation? Ask away!"
validations:
required: true
================================================
FILE: .github/PULL_REQUEST_TEMPLATE/pull_request_template.md
================================================
<!--
If this is your first contribution to the Kakoune project, make sure to
include an empty "waiver" commit to your Pull Request, as described in the
following document:
https://github.com/mawww/kakoune/blob/master/CONTRIBUTING
-->
================================================
FILE: .github/workflows/build-releases-linux.yaml
================================================
name: Build static binaries for Linux
on:
release:
types: [published, edited]
jobs:
build:
runs-on: ubuntu-latest
container:
image: alpine:latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: ${{ github.event.release.tag_name }}
- name: Prepare
run: apk add --no-cache binutils bzip2 g++ git make tar
- name: Build
run: |
mkdir -p kakoune-${{ github.event.release.tag_name }}-linux/
make -j$(nproc) PREFIX=$(pwd)/kakoune-${{ github.event.release.tag_name }}-linux static=yes install-strip
tar cvjf kakoune-${{ github.event.release.tag_name }}-linux.tar.bz2 kakoune-${{ github.event.release.tag_name }}-linux/
- name: Upload
uses: softprops/action-gh-release@v2
with:
files: kakoune-${{ github.event.release.tag_name }}-linux.tar.bz2
================================================
FILE: .github/workflows/makefile.yml
================================================
name: Makefile CI
on:
push:
branches: [ "master", "main" ]
pull_request:
branches: [ "master", "main" ]
jobs:
build:
timeout-minutes: 10
strategy:
matrix:
os: [ubuntu, macos]
toolchain: [gcc, llvm]
include:
- os: ubuntu
toolchain: gcc
install_cmd: |
sudo apt update
sudo apt install g++
CXX: g++
- os: ubuntu
toolchain: llvm
install_cmd: |
sudo apt update
sudo apt install clang
CXX: clang++
- os: macos
toolchain: gcc
install_cmd: |
brew update
brew install gcc
CXX: g++
- os: macos
toolchain: llvm
install_cmd: |
brew update
brew install llvm
CXX: clang++
runs-on: ${{ matrix.os }}-latest
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: ${{ matrix.install_cmd }}
- name: Build and test
run: make CXX=${{ matrix.CXX }} -j$(nproc 2>/dev/null || sysctl -n hw.ncpu) test
================================================
FILE: .gitignore
================================================
*.o
*.d
*.pyc
*.1-r
.*.kak.*
*.tar*
src/kak
src/kak.debug
src/kak.debug.*
src/kak.opt
src/kak.opt.*
src/.version*
src/.*.json
doc/kak.1.gz
doc/manpages/*.gz
tags
GPATH
GRTAGS
GTAGS
================================================
FILE: CONTRIBUTING
================================================
The preferred way to contribute would be through GitHub pull requests,
as an alternative patches can be discussed on the IRC channel.
When contributing your first changes, please include an empty commit for
copyright waiver using the following message (replace 'John Doe' with
your name or nickname):
John Doe Copyright Waiver
I dedicate any and all copyright interest in this software to the
public domain. I make this dedication for the benefit of the public at
large and to the detriment of my heirs and successors. I intend this
dedication to be an overt act of relinquishment in perpetuity of all
present and future rights to this software under copyright law.
The command to create an empty commit from the command-line is:
git commit --allow-empty
================================================
FILE: Makefile
================================================
.POSIX:
.SUFFIXES:
CXX = c++
debug = no
static = no
gzip_man = yes
# to get format compatible with GitHub archive use "gzip -S .gz" here
compress_bin = bzip2
tag-static-no=
tag-static-yes=.static
compress-suffix-bzip2 = bz2
compress-suffix-zstd = zst
CPPFLAGS-debug-yes = -DKAK_DEBUG
CXXFLAGS-debug-yes = -O0 -g3
tag-debug-yes = .debug
CXXFLAGS-debug-no = -O3 -g3
tag-debug-no = .opt
CXXFLAGS-sanitize-address = -fsanitize=address
LDFLAGS-sanitize-address = -lasan
tag-sanitize-address = .san_a
CXXFLAGS-sanitize-undefined = -fsanitize=undefined
LDFLAGS-sanitize-undefined = -lasan -lubsan
tag-sanitize-undefined = .san_u
LDFLAGS-static-yes = -static -pthread
version = $(shell cat .version 2>/dev/null || git describe --tags HEAD 2>/dev/null | sed s/^v// || echo unknown)
version != cat .version 2>/dev/null || ( git describe --tags HEAD 2>/dev/null | sed s/^v// ) || echo unknown
PREFIX = /usr/local
DESTDIR = # root dir
bindir = $(DESTDIR)$(PREFIX)/bin
libexecdir = $(DESTDIR)$(PREFIX)/libexec/kak
sharedir = $(DESTDIR)$(PREFIX)/share/kak
docdir = $(DESTDIR)$(PREFIX)/share/doc/kak
mandir = $(DESTDIR)$(PREFIX)/share/man/man1
# Both Cygwin and MSYS2 have "_NT" in their uname.
os = $(shell uname | sed 's/.*_NT.*/Windows/')
os != uname | sed 's/.*_NT.*/Windows/'
LIBS-os-Haiku = -lnetwork -lbe
CPPFLAGS-os-OpenBSD = -DKAK_BIN_PATH=\"$(bindir)/kak\"
mandir-os-OpenBSD = $(DESTDIR)$(PREFIX)/man/man1
LDFLAGS-os-SunOS = -lsocket -rdynamic
CPPFLAGS-os-Windows = -D_XOPEN_SOURCE=700
LIBS-os-Windows = -ldbghelp
CXXFLAGS-default = -std=c++2b -Wall -Wextra -pedantic -Wno-unused-parameter -Wno-sign-compare
compiler = $(shell $(CXX) --version | grep -E -o 'clang|g\+\+|c\+\+' | head -1)
compiler != $(CXX) --version | grep -E -o 'clang|g\+\+|c\+\+' | head -1
CXXFLAGS-compiler-clang = -fsized-deallocation
CXXFLAGS-compiler-g++ = -Wno-init-list-lifetime -Wno-stringop-overflow
CXXFLAGS-compiler-c++ = $(CXXFLAGS-compiler-g++)
KAK_CPPFLAGS = \
$(CPPFLAGS-default) \
$(CPPFLAGS-debug-$(debug)) \
$(CPPFLAGS-os-$(os)) \
$(CPPFLAGS)
KAK_CXXFLAGS = \
$(CXXFLAGS-default) \
$(CXXFLAGS-debug-$(debug)) \
$(CXXFLAGS-sanitize-$(sanitize)) \
$(CXXFLAGS-compiler-$(compiler)) \
$(CXXFLAGS)
KAK_LDFLAGS = \
$(LDFLAGS-default) \
$(LDFLAGS-sanitize-$(sanitize)) \
$(LDFLAGS-static-$(static)) \
$(LDFLAGS-os-$(os)) \
$(LDFLAGS)
KAK_LIBS = \
$(LIBS-os-$(os)) \
$(LIBS)
tag = $(tag-debug-$(debug))$(tag-sanitize-$(sanitize))
tagbin = $(tag)$(tag-static-$(static))
.SUFFIXES: $(tag).o .cc
.PHONY: src/kak
sources = $(shell find src -type f -name '*.cc' | sed -e '/\.version\.cc/d')
sources != find src -type f -name '*.cc' | sed -e '/\.version\.cc/d'
objects = $(sources:.cc=$(tag).o)
all: src/kak
src/kak: src/kak$(tagbin)
ln -sf kak$(tagbin) $@
src/kak$(tagbin): src/.version$(tag).o $(objects)
$(CXX) $(KAK_LDFLAGS) $(KAK_CXXFLAGS) $(objects) src/.version$(tag).o $(KAK_LIBS) -o $@
deps = $(shell touch src/.version$(tag).d && find src -type f -name '.*$(tag).d') # Ensure we find one deps for FreeBSD make
deps != touch src/.version$(tag).d && find src -type f -name '.*$(tag).d' # Ensure we find one deps for FreeBSD make
include $(deps)
.cc$(tag).o:
$(CXX) $(KAK_CPPFLAGS) $(KAK_CXXFLAGS) -MD -MP -MF $(*D)/.$(*F)$(tag).d -c -o $@ $<
src/.version.cc:
echo 'namespace Kakoune { const char *version = "$(version)"; }' > $@
src/.version$(tag).o: src/.version.cc
$(CXX) $(KAK_CPPFLAGS) $(KAK_CXXFLAGS) -c -o $@ src/.version.cc
# Generate the man page
man: gzip-man-$(gzip_man)
gzip-man-yes: doc/kak.1.gz
gzip-man-no: doc/kak.1
doc/kak.1.gz: doc/kak.1
gzip -n -9 -f < doc/kak.1 > $@
check: test
test: src/kak
if [ $(os) = OpenBSD ]; then \
export KAKOUNE_RUNTIME=$$PWD/share/kak; \
fi && \
test/run
TAGS: tags
tags:
ctags -R
clean:
rm -f $(objects) $(deps) src/.version*
dist: kakoune-$(version).tar.$(compress-suffix-$(compress_bin))
kakoune-$(version).tar.$(compress-suffix-$(compress_bin)): kakoune-$(version).tar
$(compress_bin) -f $<
kakoune-$(version).tar:
@if ! [ -d .git ]; then echo "make dist can only run from a git repo"; false; fi
@if git status -s | grep -qEv '^\?\?'; then echo "working tree is not clean"; false; fi
git archive --format=tar --prefix=$(@:.tar=)/ HEAD -o $@
echo "$(version)" > .version
tar --transform "s,^,$(@:.tar=)/," -rf $@ .version
rm -f .version
distclean: clean
rm -f src/kak src/kak$(suffix) src/.*.d src/*.o
find doc -type f -name '*.gz' -exec rm -f '{}' +
installdirs: installdirs-debug-$(debug)
installdirs-debug-no:
mkdir -p \
$(bindir) \
$(libexecdir) \
$(sharedir)/rc \
$(sharedir)/colors \
$(sharedir)/doc \
$(docdir) \
$(mandir)
installdirs-debug-yes: installdirs-debug-no
mkdir -p $(sharedir)/gdb
install: src/kak installdirs install-debug-$(debug) install-gzip-man-$(gzip_man)
cp src/kak$(suffix) $(bindir)
chmod 0755 $(bindir)/kak
ln -sf ../../bin/kak $(libexecdir)/kak
cp share/kak/kakrc $(sharedir)
chmod 0644 $(sharedir)/kakrc
cp -r rc/* $(sharedir)/rc
find $(sharedir)/rc -type f -exec chmod 0644 {} +
[ -e $(sharedir)/autoload ] || ln -s rc $(sharedir)/autoload
cp colors/* $(sharedir)/colors
chmod 0644 $(sharedir)/colors/*
cp README.asciidoc $(docdir)
chmod 0644 $(docdir)/*.asciidoc
cp doc/pages/*.asciidoc $(sharedir)/doc
chmod 0644 $(sharedir)/doc/*.asciidoc
install-gzip-man-yes: gzip-man-yes installdirs
cp -f doc/kak.1.gz $(mandir)
chmod 0644 $(mandir)/kak.1.gz
install-gzip-man-no: gzip-man-no installdirs
cp -f doc/kak.1 $(mandir)
chmod 0644 $(mandir)/kak.1
install-debug-yes: installdirs-debug-yes
cp -f gdb/kakoune.py $(sharedir)/gdb
chmod 0644 $(sharedir)/gdb/kakoune.py
install-debug-no: installdirs-debug-no
install-strip: install
strip -s $(bindir)/kak
uninstall:
rm -rf \
$(bindir)/kak \
$(libexecdir) \
$(sharedir) \
$(docdir) \
$(mandir)/kak.*
================================================
FILE: README.asciidoc
================================================
= image:{logo}[K,32,32,link="{website}",title="Kakoune logo by p0nce"] Kakoune image:{cirrus-img}[link="{cirrus-url}"] image:{srht-img}[link="{srht-url}"] image:{irc-img}[link="{irc-url}"]
ifdef::env-github,env-browser[:outfilesuffix: .asciidoc]
:logo: http://kakoune.org/img/kakoune_logo_32.png
:website: https://kakoune.org
:cirrus-img: https://api.cirrus-ci.com/github/mawww/kakoune.svg
:cirrus-url: https://cirrus-ci.com/github/mawww/kakoune
:srht-img: https://builds.sr.ht/~mawww/kakoune.svg
:srht-url: https://builds.sr.ht/~mawww/kakoune?
:irc-img: https://img.shields.io/badge/IRC-%23kakoune-blue.svg
:irc-url: https://web.libera.chat/?channels=kakoune
:icons: font
:toc: right
:pp: ++
TL;DR
-----
{website}
*Modal editor* -- *Faster as in fewer keystrokes* --
*Multiple selections* -- *Orthogonal design*
---------------------------------------------
git clone https://github.com/mawww/kakoune.git
cd kakoune
make
./src/kak
---------------------------------------------
See https://github.com/mawww/golf for Kakoune solutions to vimgolf challenges,
regularly beating the best Vim solution.
See the link:doc/design.asciidoc[design document] for more information on
Kakoune's philosophy and design.
Introduction
------------
Kakoune is a code editor that implements Vi's "keystrokes as a text editing
language" model. As it is also a modal editor, it is somewhat similar to the
Vim editor (after which Kakoune was originally inspired).
Kakoune can operate in two modes: *normal* and *insertion*. In insertion mode,
keys are directly inserted into the current buffer. In normal mode, keys
are used to manipulate the current selection and to enter insertion mode.
Kakoune has a strong focus on interactivity. Most commands provide immediate
and incremental results, while being competitive with Vim in terms of keystroke count.
Kakoune works on selections, which are oriented, inclusive ranges of characters.
Selections have an anchor and a cursor. Most commands move both of
them except when extending selections, where the anchor character stays fixed
and the cursor moves around.
See https://vimeo.com/82711574
Join us on libera IRC `#Kakoune`
Features
~~~~~~~~
* Multiple selections as a central way of interacting
* Powerful selection manipulation primitives
- Select all regex matches in current selections
- Keep selections containing/not containing a match for a given regex
- Split current selections with a regex
- Text objects (paragraph, sentence, nestable blocks)
* Powerful text manipulation primitives
- Align selections
- Rotate selection contents
- Case manipulation
- Indentation
- Piping each selection to external filter
* Client-Server architecture
- Multiple clients on the same editing session
- Use tmux, zellij, kitty, wezterm or your X11/Wayland window manager to
manage splits/panes by spawning clients connected to the same session
* Simple interaction with external programs
* Automatic contextual help
* Automatic as you type completion
* Macros
* Hooks
* Syntax Highlighting
- Supports multiple languages in the same buffer
- Highlight a buffer differently in different windows
Screenshots
~~~~~~~~~~~
[[screenshot-i3]]
.Kakoune in i3
image::doc/screenshot-i3.gif[Kakoune in i3]
[[screenshot-tmux]]
.Kakoune in tmux
image::doc/screenshot-tmux.gif[Kakoune in tmux]
Getting started
---------------
Building
~~~~~~~~
Kakoune's dependencies are:
* A {cpp}20 compliant compiler (GCC >= 10.3 or clang >= 11) along with its
associated {cpp} standard library (libstdc{pp} >= 10 or libc{pp})
To build, just type *make* in the root directory.
To generate man pages, type *make man* in the root directory.
Kakoune can be built on Linux, MacOS, and Cygwin. Due to Kakoune relying heavily
on being in a Unix-like environment, no native Windows version is planned.
Installing
~~~~~~~~~~
In order to install *kak* on your system, rather than running it directly from
its source directory, type *make install*. You can specify the `PREFIX` and
`DESTDIR` if needed.
[TIP]
.Homebrew (macOS) or Linuxbrew
====
---------------------------------
brew install kakoune
---------------------------------
====
[TIP]
.MacPorts (macOS)
====
---------------------------------
sudo port selfupdate
sudo port install kakoune
---------------------------------
====
[TIP]
.Fedora supported versions and Rawhide
====
---------------------------------
dnf install kakoune
---------------------------------
====
[TIP]
.Fedora daily builds
====
Use the https://copr.fedoraproject.org/coprs/jkonecny/kakoune/[copr] repository.
---------------------------------
dnf copr enable jkonecny/kakoune
dnf install kakoune
---------------------------------
====
[TIP]
.RHEL/CentOS 8
====
Kakoune can be found in the https://src.fedoraproject.org/rpms/kakoune/tree/epel8[EPEL8 repositories].
---------------------------------
dnf install kakoune
---------------------------------
====
[TIP]
.Arch Linux
====
Kakoune is found in the https://www.archlinux.org/packages/community/x86_64/kakoune/[repositories].
--------------------------------------------------
pacman -S kakoune
--------------------------------------------------
====
[TIP]
.Gentoo
====
Kakoune is found in portage as
https://packages.gentoo.org/packages/app-editors/kakoune[app-editors/kakoune].
--------------------------------
emerge kakoune
--------------------------------
https://wiki.gentoo.org/wiki/Kakoune[Installation and Gentoo specific documentation] is available.
====
[TIP]
.Exherbo
====
--------------------------------
cave resolve -x repository/mawww
cave resolve -x kakoune
--------------------------------
====
[TIP]
.openSUSE
====
Kakoune can be found in the https://software.opensuse.org/package/kakoune[repositories].
---------------------------
sudo zypper install kakoune
---------------------------
====
[TIP]
.Ubuntu
====
Kakoune can be found in the Ubuntu repositories.
----------------------------
sudo apt install kakoune
----------------------------
If you want to compile from source on 20.04 or earlier, you must force the build to use GCC 10, which is not the default. Also, make sure you have .local/bin in your path so that kak is available after the installation.
----------------------------------------------------------------
git clone https://github.com/mawww/kakoune.git && cd kakoune/src
CXX=g++-10 make
make PREFIX=$HOME/.local install
----------------------------------------------------------------
====
[TIP]
.Debian
====
Kakoune can be found in Debian 9 (Stretch) and later releases.
---------------------------
sudo apt install kakoune
---------------------------
====
[TIP]
.FreeBSD
====
Kakoune is available in the official ports tree as
https://www.freshports.org/editors/kakoune[editors/kakoune].
A binary package is also available and can be installed with
--------------------------------------------------
pkg install kakoune
--------------------------------------------------
====
[TIP]
.OpenBSD
====
Building on OpenBSD 6.7 amd64.
--------------------------------------------------
# pkg_add git gmake
# git clone https://github.com/mawww/kakoune
# cd kakoune
# export CXX=clang++
# gmake install
--------------------------------------------------
Kakoune is available in the 6.7-current port tree as
http://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/editors/kakoune/[editors/kakoune]
A binary package is also available for -current snapshot and can be installed with
--------------------------------------------------
# pkg_add kakoune
--------------------------------------------------
Running with support for plugins.
--------------------------------------------------
# pkg_add dash
$ export KAKOUNE_POSIX_SHELL=/usr/local/bin/dash
$ kak
--------------------------------------------------
====
[TIP]
.Solus
====
Kakoune is available in the Solus stable repository.
It can be installed with
---------------------
eopkg install kakoune
---------------------
====
[TIP]
.Void
====
Kakoune is available in the repositories.
It can be installed with
-----------------------
xbps-install -S kakoune
-----------------------
====
[TIP]
.Termux
====
Kakoune is available in the repositories.
It can be installed with
-------------------
pkg install kakoune
-------------------
====
[TIP]
.Nix
====
--------------------------------
nix-env -iA nixpkgs.kakoune
--------------------------------
====
[TIP]
.pkgsrc (NetBSD, SmartOS, macOS, Linux, etc)
====
--------------------------------
pkg_add kakoune
--------------------------------
====
https://repology.org/project/kakoune/versions[image:https://repology.org/badge/vertical-allrepos/kakoune.svg[Packaging status]]
Running
~~~~~~~
Running *kak* launches a new kak session with a client on local terminal.
Run *kak -help* to discover the valid command line flags.
Configuration
^^^^^^^^^^^^^
There are two directories containing Kakoune's scripts:
* `runtime`: located in `../share/kak/` relative to the `kak` binary
contains the system scripts, installed with Kakoune.
* `userconf`: located in `$XDG_CONFIG_HOME/kak/`, which will fallback
to `$HOME/.config/kak/` if `$XDG_CONFIG_HOME` is not set, containing
the user configuration.
Unless `-n` is specified, Kakoune will load its startup script located
at `${runtime}/kakrc` relative to the `kak` binary. This startup script
is responsible for loading the user configuration.
First, Kakoune will search recursively for `.kak` files in the `autoload`
directory. It will first look for an `autoload` directory at
`${userconf}/autoload` and will fallback to `${runtime}/autoload` if
it does not exist.
Once all those files are loaded, Kakoune will try to source
`${runtime}/kakrc.local`, which is expected to contain distribution provided
configuration.
Finally, the user configuration will load from `${userconf}/kakrc`.
NOTE: If you create a user `autoload` directory in `${userconf}/autoload`,
the system one at `${runtime}/autoload` will not load anymore. You can
add a symbolic link to it (or to individual scripts) inside
`${userconf}/autoload` to keep loading system scripts.
Basic Interaction
-----------------
Selections
~~~~~~~~~~
The main concept in Kakoune is the selection. A selection is an inclusive,
directed range of characters. A selection has two ends, the anchor and the
cursor.
There is always at least one selection, and a selection is always at least
one character (in which case the anchor and cursor of the selection are
on the same character).
Normal Mode
~~~~~~~~~~~
In normal mode, keys are not inserted directly inside the buffer, but are editing
commands. These commands provide ways to manipulate either the selections themselves
or the selected text.
Insert Mode
~~~~~~~~~~~
When entering insert mode, keys are now directly inserted before each
selection's cursor. Some additional keys are recognised in insert mode:
* `<esc>`: leave insert mode
* `<backspace>`: delete characters before cursors
* `<del>`: delete characters under cursors
* `<left>, <right>, <up>, <down>`: move cursors in given direction
* `<home>`: move cursors to line beginning
* `<end>`: move cursors to line ending
* `<c-n>`: select next completion candidate
* `<c-p>`: select previous completion candidate
* `<c-x>`: explicit insert completion query, followed by:
- `f`: explicit file completion
- `w`: explicit word completion
- `l`: explicit line completion
* `<c-o>`: disable automatic completion for this insert session
* `<c-r>`: insert contents of the register given by next key
* `<c-v>`: insert next keystroke directly into the buffer,
without interpreting it
* `<c-u>`: commit changes up to now as a single undo group
* `<a-;>`: escape to normal mode for a single command
Movement
~~~~~~~~
See <<Appending>> below for instructions on extending (appending to) the current selection in order to select more text.
* `h`: select the character on the left of selection end
* `j`: select the character below the selection end
* `k`: select the character above the selection end
* `l`: select the character on the right of selection end
* `w`: select the word and following whitespaces on the right of selection end
* `b`: select preceding whitespaces and the word on the left of selection end
* `e`: select preceding whitespaces and the word on the right of selection end
* `<a-[wbe]>`: same as [wbe], but select WORD instead of word
* `f`: select to (including) the next occurrence of the given character
* `t`: select until (excluding) the next occurrence of the given character
* `<a-[ft]>`: same as [ft] but in the other direction
* `m`: select to matching character
* `M`: extend selection to matching character
* `x`: expand selections to contain full lines (including end-of-lines)
* `<a-x>`: trim selections to only contain full lines (not including last
end-of-line)
* `%`: select whole buffer
* `<a-h>`: select to line begin
* `<a-l>`: select to line end
* `/`: search (select next match)
* `<a-/>`: search (select previous match)
* `?`: search (extend to next match)
* `<a-?>`: search (extend to previous match)
* `n`: select next match
* `N`: add a new selection with next match
* `<a-n>`: select previous match
* `<a-N>`: add a new selection with previous match
* `pageup, <c-b>`: scroll one page up
* `pagedown, <c-f>`: scroll one page down
* `<c-u>`: scroll half a page up
* `<c-d>`: scroll half a page down
* `)`: rotate selections (the main selection becomes the next one)
* `(`: rotate selections backwards
* `;`: reduce selections to their cursor
* `<a-;>`: flip the selections' direction
* `<a-:>`: ensure selections are in forward direction (cursor after anchor)
* `<a-.>`: repeat last object or `f`/`t` selection command.
* `_`: trim selections
A word is a sequence of alphanumeric characters or underscore, a WORD is a
sequence of non whitespace characters.
Appending
~~~~~~~~~
For most <<Movement>> commands, using `Shift` extends the current selection
instead of replacing it.
Examples:
* `wWW` selects 3 consecutive words: first `w` selects a word, then `WW` extends the selection two words further.
* `f/F/` selects up to and including the second `/` character forward.
Using Counts
~~~~~~~~~~~~
Most selection commands also support counts, which are entered before the
command itself.
For example, `3W` selects 3 consecutive words and `3w` select the third word on
the right of selection end.
Disabling Hooks
~~~~~~~~~~~~~~~
Any normal mode command can be prefixed with `\` which will disable hook execution
for the duration for the command (including the duration of modes the command could
move to, so `\i` will disable hooks for the whole insert session).
As autoindentation is implemented in terms of hooks, this can be used to disable
it when pasting text.
Changes
~~~~~~~
* `i`: enter insert mode before each selection
* `a`: enter insert mode after each selection
* `d`: yank and delete each selection
* `c`: yank and delete each selection and enter insert mode
* `.`: repeat last insert mode change (`i`, `a`, or `c`, including
the inserted text)
* `<a-d>`: delete each selection
* `<a-c>`: delete each selection and enter insert mode
* `I`: enter insert mode at each selection begin line start
* `A`: enter insert mode at each selection end line end
* `o`: enter insert mode in one (or given count) new lines below
each selection end
* `O`: enter insert mode in one (or given count) new lines above
each selection begin
* `<a-o>`: add an empty line below each cursor
* `<a-O>`: add an empty line above each cursor
* `y`: yank selections
* `p`: paste after each selection end
* `P`: paste before each selection begin
* `<a-p>`: paste all after each selection end
* `<a-P>`: paste all before each selection begin
* `R`: replace each selection with yanked text
* `<a-R>`: replace each selection with every yanked text
* `r`: replace each character with the next entered one
* `<a-j>`: join selected lines
* `<a-J>`: join selected lines and select spaces inserted
in place of line breaks
* `<a-_>`: merge contiguous selections together (works across lines as well)
* `<gt> (>)`: indent selected lines
* `<a-gt>`: indent selected lines, including empty lines
* `<lt> (<)`: deindent selected lines
* `<a-lt>`: deindent selected lines, do not remove incomplete
indent (3 leading spaces when indent is 4)
* `|`: pipe each selection through the given external filter program
and replace the selection with its output.
* `<a-|>`: pipe each selection through the given external filter program
and ignore its output
* `!`: insert command output before each selection
* `<a-!>`: append command output after each selection
* `u`: undo last change
* `<c-k>`: move backward in history
* `<a-u>`: undo selection changes
* `U`: redo last change
* `<c-j>`: move forward in history
* `<a-U>`: redo selection changes
* `&`: align selections, align the cursor of selections by inserting
spaces before the first character of the selection
* `<a-&>`: copy indent, copy the indentation of the main selection
(or the count one if a count is given) to all other ones
* ```: to lower case
* `~`: to upper case
* ``<a-`>``: swap case
* `@`: convert selected tabs to spaces, uses the buffer tabstop option or
the count parameter for tabstop.
* `<a-@>`: convert selected spaces to tabs, uses the buffer tabstop option
or the count parameter for tabstop.
* `<a-)>`: rotate selections content, if specified, the count groups
selections, so `3<a-)>` rotate (1, 2, 3) and (4, 5, 6)
independently.
* `<a-(>`: rotate selections content backwards
Goto Commands
~~~~~~~~~~~~~
Commands beginning with `g` are used to goto certain position and or buffer.
If a count is given prior to hitting `g`, `g` will jump to the given line.
Using `G` will extend the selection rather than jump.
See <<doc/pages/keys#goto-commands,`:doc keys goto-commands`>>.
View commands
~~~~~~~~~~~~~
Commands beginning with `v` permit to center or scroll the current
view. Using `V` will lock view mode until `<esc>` is hit
See <<doc/pages/keys#view-commands,`:doc keys view-commands`>>.
Marks
~~~~~
Current selections position can be saved in a register and restored later on.
See <<doc/pages/keys#marks,`:doc keys marks`>>.
Jump list
~~~~~~~~~
Some commands, like the goto commands, buffer switch or search commands,
push the previous selections to the client's jump list.
See <<doc/pages/keys#jump-list,`:doc keys jump-list`>>.
Multi Selection
~~~~~~~~~~~~~~~
Kak was designed from the start to handle multiple selections.
One way to get a multiselection is via the `s` key.
For example, to change all occurrences of word 'roger' to word 'marcel'
in a paragraph, here is what can be done:
* select the paragraph with `x` then enough `J`
* press `s` and enter roger, then enter
* now paragraph selection was replaced with multiselection of each roger in
the paragraph
* press `c` and marcel<esc> to replace rogers with marcels
A multiselection can also be obtained with `S`, which splits the current
selection according to the regex entered. To split a comma separated list,
use `S` then ', *'
The regex syntax supported by Kakoune is the based on the ECMAScript script
syntax and is described at <<doc/pages/regex#,`:doc regex`>>.
`s` and `S` share the search pattern with `/`, and hence entering an empty
pattern uses the last one.
As a convenience, `<a-s>` allows you to split the current selections on
line boundaries.
To clear multiple selections, use `,`. To keep only the nth selection
use `n` followed by `,`, in order to remove a selection, use `<a-,>`.
`<a-k>` allows you to enter a regex and keep only the selections that
contains a match for this regex. Using `<a-K>` you can keep the selections
not containing a match.
`C` duplicates selections on the lines that follow them, column-wise.
`<a-C>` does the same but on the preceding lines.
`$` allows you to enter a shell command and pipe each selection to it.
Selections whose shell command returns 0 will be kept, other will be dropped.
Object Selection
~~~~~~~~~~~~~~~~
Objects are specific portions of text, like sentences, paragraphs, numbers…
Kakoune offers many keys allowing you to select various text objects.
See <<doc/pages/keys#object-selection,`:doc keys object-selection`>>.
Commands
--------
When pressing `:` in normal mode, Kakoune will open a prompt to enter a command.
Commands are used for non editing tasks, such as opening a buffer, writing the
current one, quitting, etc.
See <<doc/pages/keys#prompt-commands,`:doc keys prompt-commands`>>.
Basic Commands
~~~~~~~~~~~~~~
Some commands take an exclamation mark (`!`), which can be used to force
the execution of the command (i.e. to quit a modified buffer, the
command `q!` has to be used).
Commands starting with horizontal whitespace (e.g. a space) will not be
saved in the command history.
* `cd [<directory>]`: change the current directory to `<directory>`, or the home directory if unspecified
* `doc <topic>`: display documentation about a topic. The completion list
displays the available topics.
* `e[dit][!] <filename> [<line> [<column>]]`: open buffer on file, go to given
line and column. If file is already opened, just switch to this file.
Use edit! to force reloading.
* `w[rite][!] [<filename>]`: write buffer to <filename> or use its name if
filename is not given. If the file is write-protected, its
permissions are temporarily changed to allow saving the buffer and
restored afterwards when the write! command is used.
* `w[rite]a[ll]`: write all buffers that are associated to a file.
* `q[uit][!] [<exit status>]`: exit Kakoune, use quit! to force quitting even
if there is some unsaved buffers remaining. If specified, the client exit
status will be set to <exit status>.
* `w[a]q[!] [<exit status>]`: write the current buffer (or all buffers when
`waq` is used) and quit. If specified, the client exit status will be set
to <exit status>.
* `kill[!]`: terminate the current session, all the clients as well as the server,
use kill! to ignore unsaved buffers
* `b[uffer] <name>`: switch to buffer <name>
* `b[uffer]n[ext]`: switch to the next buffer
* `b[uffer]p[rev]`: switch to the previous buffer
* `d[el]b[uf][!] [<name>]`: delete the buffer <name>
* `source <filename>`: execute commands in <filename>
* `colorscheme <name>`: load named colorscheme.
* `rename-client <name>`: set current client name
* `rename-buffer <name>`: set current buffer name
* `rename-session <name>`: set current session name
* `echo [options] <text>`: show <text> in status line, with the following options:
** `-markup`: expand the markup strings in <text>
** `-debug`: print the given text to the `\*debug*` buffer
* `nop`: does nothing, but as with every other commands, arguments may be
evaluated. So nop can be used for example to execute a shell command
while being sure that its output will not be interpreted by kak.
`:%sh{ echo echo tchou }` will echo tchou in Kakoune, whereas
`:nop %sh{ echo echo tchou }` will not, but both will execute the
shell command.
* `fail <text>`: raise an error, uses <text> as its description
Multiple commands
~~~~~~~~~~~~~~~~~
Multiple commands can be separated either by new lines or by semicolons,
as such a semicolon must be escaped with `\;` to be considered as a literal
semicolon argument.
String syntax and expansions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Values, options and shell context can be interpolated in strings.
See <<doc/pages/expansions#,`:doc expansions`>>.
Configuration & Autoloading
---------------------------
Kakrc
~~~~~
If not launched with the `-n` switch, Kakoune will source the
`../share/kak/kakrc` file relative to the `kak` binary, which
will source additional files:
If the `$XDG_CONFIG_HOME/kak/autoload` directory exists, load every
`*.kak` files in it, and load recursively any subdirectory.
If it does not exist, falls back to the site wide autoload directory
in `../share/kak/autoload/`.
After that, if it exists, source the `$XDG_CONFIG_HOME/kak/kakrc` file
which should be used for user configuration.
In order to continue autoloading site-wide files with a local autoload
directory, just add a symbolic link to `../share/kak/autoload/` into
your local autoload directory.
Color Schemes
~~~~~~~~~~~~~
Kakoune ships with some color schemes that are installed to
`../share/kak/colors/`. If `$XDG_CONFIG_HOME/kak/colors/` is present
the builtin command `colorscheme` will offer completion for those
color schemes. If a scheme is duplicated in userspace, it will take
precedence.
Options
-------
Kakoune can store named and typed values that can be used both to
customize the core editor behaviour, and to keep data used by extension
scripts.
See <<doc/pages/options#,`:doc options`>>.
Advanced topics
---------------
Faces
~~~~~
Faces describe how characters are displayed on the screen: color, bold, italic...
See <<doc/pages/faces#,`:doc faces`>>.
Registers
~~~~~~~~~
Registers are named lists of text. They are used for various purposes,
like storing the last yanked text, or the captured groups associated with the selections.
See <<doc/pages/registers#,`:doc registers`>>.
Macros
~~~~~~
Kakoune can record and replay a sequence of key presses.
See <<doc/pages/keys#macros,`:doc keys macros`>>.
Search selection
~~~~~~~~~~~~~~~~
Using the `*` key, you can set the search pattern to the current selection.
See <<doc/pages/keys#searching,`:doc keys searching`>>.
Regex syntax
~~~~~~~~~~~~
Kakoune regex syntax is based on the ECMAScript syntax (ECMA-262 standard).
It always runs on Unicode codepoint sequences, not on bytes.
See <<doc/pages/regex#,`:doc regex`>>.
Exec and Eval
~~~~~~~~~~~~~
The `execute-keys` and `evaluate-commands` are useful for scripting
in non interactive contexts.
See <<doc/pages/execeval#,`:doc execeval`>>.
Insert mode completion
~~~~~~~~~~~~~~~~~~~~~~
Kakoune can propose completions while inserting text: filenames, words, lines…
See <<doc/pages/keys#insert-mode-completion,`:doc keys insert-mode-completion`>>.
Escape to normal mode
~~~~~~~~~~~~~~~~~~~~~
From insert mode, pressing `<a-;>` allows you to execute a single normal mode
command. This provides a few advantages:
* The selections are not modified: when leaving insert mode using `<esc>` the
selections can change, for example when insert mode was entered with `a` the
cursor will go back one char. Or if on an end of line the cursor will go back
left (if possible).
* The modes are nested: that means the normal mode can enter prompt (with `:`),
or any other modes (using `:on-key` or `:menu` for example), and these modes
will get back to the insert mode afterwards.
This feature is tailored for scripting/macros, as it provides a more predictable
behaviour than leaving insert mode with `<esc>`, executing normal mode command
and entering back insert mode (with which binding ?)
See <<doc/pages/modes#,`:doc modes`>>.
Highlighters
~~~~~~~~~~~~
Manipulation of the displayed text, such as syntax coloration and wrapping
is done through highlighters.
See <<doc/pages/highlighters#,`:doc highlighters`>>.
Hooks
~~~~~
Commands can be registered to be executed when certain events arise with hooks.
See <<doc/pages/hooks#,`:doc hooks`>>.
Key Mapping
~~~~~~~~~~~
Custom key shortcuts can be registered through mappings.
See <<doc/pages/mapping#,`:doc mapping`>>.
Defining Commands and Aliases
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
New commands can be created using `:define-command`.
See <<doc/pages/commands#declaring-new-commands,`:doc commands declaring-new-commands`>>.
They can be given additional short names depending of the scope with `:alias`.
See <<doc/pages/commands#aliases,`:doc commands aliases`>>.
Some helper commands are available to define composite commands.
See <<doc/pages/commands#helpers,`:doc commands helpers`>>.
FIFO Buffers
~~~~~~~~~~~
FIFO buffers are very useful for running some commands asynchronously while
progressively displaying their result in Kakoune.
See <<doc/pages/buffers#fifo-buffers,`:doc buffers fifo-buffers`>>.
Credits
-------
Thanks to https://github.com/p0nce[p0nce] for designing the
https://github.com/mawww/kakoune/blob/master/doc/kakoune_logo.svg[Kakoune
logo].
And thanks to all the
https://github.com/mawww/kakoune/graphs/contributors[contributors] who help
move the project forward!
================================================
FILE: UNLICENSE
================================================
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <https://unlicense.org/>
================================================
FILE: VIMTOKAK
================================================
Vi(m) to Kakoune:
=================
Kakoune is inspired heavily by Vim. It strives to be as efficient as Vim,
more consistent and simpler. A big difference is that a lot of special
features in Vim just become regular interactions of basic features in
Kakoune.
Operations and moves are reversed in Kakoune. First select whatever text
you want to operate on, and then use a modifying operation. That makes
things more consistent: Vim needs separate x and d operations because
of the operator -> move order, while Kakoune only needs the d operation.
Selecting first also allows more complex selections.
delete a word:
* vim: dw
* kak: wd
delete a character:
* vim: x
* kak: d or ;d (; reduces the selection to a single char)
copy a line:
* vim: yy
* kak: xy
global replace:
* vim: :%s/word/replacement<ret>
* kak: %sword<ret>creplacement<esc>,
Explanation: '%' selects the entire buffer, 's' opens a prompt for a
regex, <ret> validates the regex and replaces the selection with one
per match (hence all occurences of "word" are selected). 'c' deletes
the selection contents and enters insert mode where "replacement" is
typed, and <esc> goes back to normal mode. The final ',' gets rid of
multiple cursors.
Note that the Kakoune version is one key less, and is not a special
feature per se, but just a nice way Kakoune features work together.
global interactive replace:
* vim: :%s/word/replacement/gc<ret>
and then keep pressing 'y' to accept the change or 'n' to reject.
* kak: /word<ret>creplacement<esc>
and then press 'n' to search for the next occurence and either '.'
to redo the last insert operation (that is replace 'word' with
'replacement') or 'n' to go to the next match.
replace in current curly brace block:
* vim: viB:s/word/replacement<ret>
* kak: <a-i>Bsword<ret>creplacement<esc>
Here again, Vim had to rely on a special feature, visual mode.
join line with next:
* vim: J
* kak: <a-J>
delete to line end:
* vim: d$
* kak: <a-l>d or Gld
Some classic Vim moves are not bound to the same key. Kakoune
uses shifted moves to extend the selection, so Vim moves that were bound to
shifted characters had to change.
* % became m (for "matching"). However, m replaces the selection with the next
block. If you want to get a selection from the current point to the next
block's end, you should use ;M (; reduces the selection to one character).
* 0 and $ became <a-h> and <a-l>. Equivalent bindings are gh and gl.
:[gv]/re/cmd
To emulate :g or :v, use % to select the whole buffer, <a-s> to get
one selection per line, and then <a-k> or <a-K> to keep only the
selections matching (or not matching) the entered regex.
================================================
FILE: colors/base16.kak
================================================
##
## base16.kak by lenormf
##
evaluate-commands %sh{
black_lighterer='rgb:383838'
black_lighter='rgb:2D2D2D'
black_light='rgb:1C1C1C'
cyan_light='rgb:7CB0FF'
green_dark='rgb:A1B56C'
grey_dark='rgb:585858'
grey_light='rgb:D8D8D8'
magenta_dark='rgb:AB4642'
magenta_light='rgb:AB4434'
orange_dark='rgb:DC9656'
orange_light='rgb:F7CA88'
purple_dark='rgb:BA8BAF'
## code
echo "
face global value ${orange_dark}+b
face global type ${orange_light}
face global variable ${magenta_dark}
face global module ${green_dark}
face global function ${cyan_light}
face global string ${green_dark}
face global keyword ${purple_dark}+b
face global operator ${cyan_light}
face global attribute ${orange_dark}
face global comment ${grey_dark}
face global documentation comment
face global meta ${orange_light}
face global builtin default+b
"
## markup
echo "
face global title blue
face global header ${cyan_light}
face global mono ${green_dark}
face global block ${orange_dark}
face global link blue
face global bullet ${magenta_light}
face global list ${magenta_dark}
"
## builtin
echo "
face global Default ${grey_light},${black_lighter}
face global PrimarySelection white,blue+fg
face global SecondarySelection black,blue+fg
face global PrimaryCursor black,white+fg
face global SecondaryCursor black,white+fg
face global PrimaryCursorEol black,${cyan_light}+fg
face global SecondaryCursorEol black,${cyan_light}+fg
face global LineNumbers ${grey_light},${black_lighter}
face global LineNumberCursor ${grey_light},rgb:282828+b
face global MenuForeground ${grey_light},blue
face global MenuBackground blue,${grey_light}
face global MenuInfo ${cyan_light}
face global Information ${black_light},${cyan_light}
face global Error ${grey_light},${magenta_light}
face global DiagnosticError ${magenta_light}
face global DiagnosticWarning ${cyan_light}
face global StatusLine ${grey_light},${black_lighterer}
face global StatusLineMode ${orange_dark}
face global StatusLineInfo ${cyan_light}
face global StatusLineValue ${green_dark}
face global StatusCursor ${black_lighterer},${cyan_light}
face global Prompt ${black_light},${cyan_light}
face global MatchingChar ${cyan_light},${black_light}+b
face global BufferPadding ${cyan_light},${black_lighter}
face global Whitespace ${grey_dark}+f
"
}
================================================
FILE: colors/black-on-white.kak
================================================
# Black-on-bright-white colorscheme for minimal distraction & maximal contrast.
# Works well with e-ink screens.
# For Code
face global value black
face global type black
face global variable black
face global module black
face global function black
face global string black
face global keyword black
face global operator black
face global attribute black
face global comment black
face global documentation comment
face global meta black
face global builtin black
# For markup
face global title black
face global header black
face global mono black
face global block black
face global link black
face global bullet black
face global list black
# builtin faces
face global Default black,bright-white
face global PrimarySelection black,rgb:cccccc+fg
face global SecondarySelection black,rgb:e0e0e0+fg
face global PrimaryCursor bright-white,black+fg
face global SecondaryCursor bright-white,rgb:777777+fg
face global PrimaryCursorEol black,rgb:777777+fg
face global SecondaryCursorEol black,rgb:aaaaaa+fg
face global LineNumbers black,bright-white
face global LineNumberCursor bright-white,black
face global MenuForeground bright-white,black+fg
face global MenuBackground black,rgb:e0e0e0+fg
face global MenuInfo black # Overridden by MenuForeground and MenuBackground
face global Information black,rgb:e0e0e0
face global Error bright-white,black
face global DiagnosticError black
face global DiagnosticWarning black
face global StatusLine black,bright-white
face global StatusLineMode black,bright-white
face global StatusLineInfo black,bright-white
face global StatusLineValue black,bright-white
face global StatusCursor bright-white,black
face global Prompt bright-white,black
face global MatchingChar black,bright-white+b
face global Whitespace black,bright-white+fd
face global BufferPadding black,bright-white
================================================
FILE: colors/default.kak
================================================
# Kakoune default color scheme
# For Code
face global value red
face global type yellow
face global variable green
face global module green
face global function cyan
face global string magenta
face global keyword blue
face global operator yellow
face global attribute green
face global comment cyan
face global documentation comment
face global meta magenta
face global builtin default+b
# For markup
face global title blue
face global header cyan
face global mono green
face global block magenta
face global link cyan
face global bullet cyan
face global list yellow
# builtin faces
face global Default default,default
face global PrimarySelection white,blue+fg
face global SecondarySelection black,blue+fg
face global PrimaryCursor black,white+fg
face global SecondaryCursor black,white+fg
face global PrimaryCursorEol black,cyan+fg
face global SecondaryCursorEol black,cyan+fg
face global LineNumbers default,default
face global LineNumberCursor default,default+r
face global MenuForeground white,blue
face global MenuBackground blue,white
face global MenuInfo cyan
face global Information black,yellow
face global Error black,red
face global DiagnosticError red
face global DiagnosticWarning yellow
face global StatusLine cyan,default
face global StatusLineMode yellow,default
face global StatusLineInfo blue,default
face global StatusLineValue green,default
face global StatusCursor black,cyan
face global Prompt yellow,default
face global MatchingChar default,default+b
face global Whitespace default,default+fd
face global BufferPadding blue,default
================================================
FILE: colors/desertex.kak
================================================
# desertex theme
# Code
face global value rgb:fa8072
face global type rgb:dfdfbf
face global identifier rgb:87ceeb
face global string rgb:fa8072
face global error rgb:c3bf9f+b
face global keyword rgb:eedc82
face global operator rgb:87ceeb
face global attribute rgb:eedc82
face global comment rgb:7ccd7c+i
face global documentation comment
# #include <...>
face global meta rgb:ee799f
# Markup
face global title blue
face global header cyan
face global mono green
face global block magenta
face global link cyan
face global bullet cyan
face global list yellow
# Builtin
# fg,bg+attributes
# face global Default default,rgb:262626 <- change the terminal bg color instead
face global Default default,default
face global PrimarySelection white,blue+fg
face global SecondarySelection black,blue+fg
face global PrimaryCursor black,white+fg
face global SecondaryCursor black,white+fg
face global PrimaryCursorEol black,rgb:7ccd7c+fg
face global SecondaryCursorEol black,rgb:7ccd7c+fg
face global LineNumbers rgb:605958
face global LineNumberCursor yellow,default+b
# Bottom menu:
# text + background
face global MenuBackground black,rgb:c2bfa5+b
# selected entry in the menu (use 302028 when true color support is fixed)
face global MenuForeground rgb:f0a0c0,magenta
# completion menu info
face global MenuInfo white,rgb:445599
# assistant, [+]
face global Information black,yellow
face global Error white,red
face global DiagnosticError red
face global DiagnosticWarning yellow
face global StatusLine cyan,default
# Status line modes and prompts:
# insert, prompt, enter key...
face global StatusLineMode rgb:ffd75f,default
# 1 sel
face global StatusLineInfo blue,default
# param=value, reg=value. ex: "ey
face global StatusLineValue green,default
face global StatusCursor black,cyan
# :
face global Prompt blue
# (), {}
face global MatchingChar cyan+b
# EOF tildas (~)
face global BufferPadding blue,default
# Whitespace characters
face global Whitespace default+f
================================================
FILE: colors/github.kak
================================================
##
## github.kak by lenormf
## v1.0
##
## code
face global value rgb:0086B3+b
face global type rgb:795DA3
face global variable rgb:0086B3
face global module rgb:0086B3
face global function rgb:A71D5D
face global string rgb:183691
face global keyword rgb:A71D5D+b
face global operator yellow
face global attribute rgb:A71D5D
face global comment rgb:AAAAAA
face global documentation comment
face global meta rgb:183691
face global builtin default+b
## markup
face global title blue
face global header cyan
face global mono green
face global block magenta
face global link cyan
face global bullet cyan
face global list yellow
## builtin
face global Default rgb:121213,rgb:F8F8FF
face global PrimarySelection rgb:121213,rgb:A6F3A6+fg
face global SecondarySelection rgb:121213,rgb:DBFFDB+fg
face global PrimaryCursor rgb:121213,rgb:888888+fg
face global SecondaryCursor rgb:121213,rgb:AAAAAA+fg
face global PrimaryCursorEol rgb:121213,rgb:A71D5D+fg
face global SecondaryCursorEol rgb:121213,rgb:A71D5D+fg
face global LineNumbers rgb:A0A0A0,rgb:ECECEC
face global LineNumberCursor rgb:434343,rgb:DDDDDD
face global MenuForeground rgb:434343,rgb:CDCDFD
face global MenuBackground rgb:F8F8FF,rgb:808080
face global Information rgb:F8F8FF,rgb:4078C0
face global Error rgb:F8F8FF,rgb:BD2C00
face global DiagnosticError rgb:CF222E
face global DiagnosticWarning rgb:9A6700
face global StatusLine rgb:434343,rgb:DDDDDD
face global StatusCursor rgb:434343,rgb:CDCDFD
face global Prompt rgb:F8F8FF,rgb:4078C0
face global MatchingChar rgb:F8F8FF,rgb:4078C0+b
face global Search default,default+u
face global BufferPadding rgb:A0A0A0,rgb:F8F8FF
face global Whitespace rgb:A0A0A0+f
================================================
FILE: colors/greyscale.kak
================================================
# Greyscale: monochromatic grey-based light colorscheme
evaluate-commands %sh{
grey_light_5="rgb:fafafa"
grey_light_4="rgb:f5f5f5"
grey_light_3="rgb:eeeeee"
grey_light_2="rgb:e0e0e0"
grey_light_1="rgb:bdbdbd"
grey="rgb:9e9e9e"
grey_dark_1="rgb:757575"
grey_dark_2="rgb:616161"
grey_dark_3="rgb:424242"
grey_dark_4="rgb:212121"
cat <<EOF
# For Code
set-face global keyword ${grey_dark_2}
set-face global attribute ${grey_dark_2}
set-face global type ${grey_dark_2}
set-face global string ${grey_dark_1}
set-face global value ${grey_dark_1}+b
set-face global meta ${grey_dark_1}
set-face global builtin ${grey}+b
set-face global module ${grey_dark_1}
set-face global comment ${grey}+i
set-face global documentation comment
set-face global function Default
set-face global operator Default
set-face global variable Default
# For markup
set-face global title ${grey_dark_2}+b
set-face global header ${grey_dark_2}
set-face global block ${grey_dark_1}
set-face global mono ${grey_dark_1}
set-face global link ${grey}+u
set-face global list Default
set-face global bullet +b
# Built-in faces
set-face global Default ${grey},${grey_light_2}
set-face global PrimarySelection ${grey_light_3},${grey_dark_4}+fg
set-face global SecondarySelection ${grey_light_2},${grey_dark_3}+fg
set-face global PrimaryCursor ${grey_light_3},${grey_dark_1}+fg
set-face global SecondaryCursor ${grey_light_3},${grey}+fg
set-face global PrimaryCursorEol ${grey_light_1},${grey_dark_2}+fg
set-face global SecondaryCursorEol ${grey_light_2},${grey_dark_1}+fg
set-face global StatusLine ${grey_dark_3},${grey_light_1}
set-face global StatusLineMode ${grey_light_2},${grey_dark_3}
set-face global StatusLineInfo ${grey_light_2},${grey_dark_2}
set-face global StatusLineValue ${grey_light_3},${grey_dark_2}+b
set-face global StatusCursor ${grey_light_3},${grey}
set-face global Prompt ${grey_light_2},${grey_dark_3}
set-face global MenuForeground ${grey_light_4},${grey}
set-face global MenuBackground ${grey_dark_2},${grey_light_3}
set-face global MenuInfo ${grey}+i
set-face global LineNumbers ${grey_light_5},${grey_dark_1}
set-face global LineNumbersWrapped ${grey_light_2},${grey_dark_2}+i
set-face global LineNumberCursor ${grey_light_2},${grey_dark_3}+b
set-face global MatchingChar ${grey_dark_4},${grey_light_1}
set-face global Whitespace ${grey_light_1}+f
set-face global WrapMarker ${grey_light_1}+f
set-face global Information ${grey_light_2},${grey_dark_2}
set-face global Error ${grey_light_2},${grey_dark_3}
set-face global DiagnosticError ${grey_dark_3}
set-face global DiagnosticWarning ${grey_dark_2}
set-face global BufferPadding ${grey_light_1}
EOF
}
================================================
FILE: colors/gruvbox-dark.kak
================================================
# gruvbox-dark theme
evaluate-commands %sh{
gray="rgb:928374"
red="rgb:fb4934"
green="rgb:b8bb26"
yellow="rgb:fabd2f"
blue="rgb:83a598"
purple="rgb:d3869b"
aqua="rgb:8ec07c"
orange="rgb:fe8019"
bg="rgb:282828"
bg_alpha="rgba:282828a0"
bg1="rgb:3c3836"
bg2="rgb:504945"
bg3="rgb:665c54"
bg4="rgb:7c6f64"
fg="rgb:ebdbb2"
fg_alpha="rgba:ebdbb2a0"
fg0="rgb:fbf1c7"
fg2="rgb:d5c4a1"
fg3="rgb:bdae93"
fg4="rgb:a89984"
echo "
# Code highlighting
face global value ${purple}
face global type ${yellow}
face global variable ${blue}
face global module ${green}
face global function ${fg}
face global string ${green}
face global keyword ${red}
face global operator ${fg}
face global attribute ${orange}
face global comment ${gray}+i
face global documentation comment
face global meta ${aqua}
face global builtin ${fg}+b
# Markdown highlighting
face global title ${green}+b
face global header ${orange}
face global mono ${fg4}
face global block ${aqua}
face global link ${blue}+u
face global bullet ${yellow}
face global list ${fg}
face global Default ${fg},${bg}
face global PrimarySelection ${fg_alpha},${blue}+g
face global SecondarySelection ${bg_alpha},${blue}+g
face global PrimaryCursor ${bg},${fg}+fg
face global SecondaryCursor ${bg},${bg4}+fg
face global PrimaryCursorEol ${bg},${fg4}+fg
face global SecondaryCursorEol ${bg},${bg2}+fg
face global LineNumbers ${bg4}
face global LineNumberCursor ${yellow},${bg1}
face global LineNumbersWrapped ${bg1}
face global MenuForeground ${bg2},${blue}
face global MenuBackground ${fg},${bg2}
face global MenuInfo ${bg}
face global Information ${bg},${fg}
face global Error ${bg},${red}
face global DiagnosticError ${red}
face global DiagnosticWarning ${yellow}
face global StatusLine ${fg},${bg}
face global StatusLineMode ${yellow}+b
face global StatusLineInfo ${purple}
face global StatusLineValue ${red}
face global StatusCursor ${bg},${fg}
face global Prompt ${yellow}
face global MatchingChar ${fg},${bg3}+b
face global BufferPadding ${bg2},${bg}
face global Whitespace ${bg2}+f
"
}
================================================
FILE: colors/gruvbox-light.kak
================================================
# gruvbox light theme
evaluate-commands %sh{
gray="rgb:928374"
red="rgb:9d0006"
green="rgb:79740e"
yellow="rgb:b57614"
blue="rgb:876678"
purple="rgb:8f3f71"
aqua="rgb:427b58"
orange="rgb:af3a03"
bg="rgb:fbf1c7"
bg_alpha="rgba:fbf1c7a0"
bg1="rgb:ebdbb2"
bg2="rgb:d5c4a1"
bg3="rgb:bdae93"
bg4="rgb:a89984"
fg="rgb:3c3836"
fg_alpha="rgba:3c3836a0"
fg0="rgb:282828"
fg2="rgb:504945"
fg3="rgb:665c54"
fg4="rgb:7c6f64"
echo "
# Code highlighting
face global value ${purple}
face global type ${yellow}
face global variable ${blue}
face global module ${green}
face global function ${fg}
face global string ${green}
face global keyword ${red}
face global operator ${fg}
face global attribute ${orange}
face global comment ${gray}+i
face global documentation comment
face global meta ${aqua}
face global builtin ${fg}+b
# Markdown highlighting
face global title ${green}+b
face global header ${orange}
face global mono ${fg4}
face global block ${aqua}
face global link ${blue}+u
face global bullet ${yellow}
face global list ${fg}
face global Default ${fg},${bg}
face global PrimarySelection ${fg_alpha},${blue}+g
face global SecondarySelection ${bg_alpha},${blue}+g
face global PrimaryCursor ${bg},${fg}+fg
face global SecondaryCursor ${bg},${bg4}+fg
face global PrimaryCursorEol ${bg},${fg4}+fg
face global SecondaryCursorEol ${bg},${bg2}+fg
face global LineNumbers ${bg4}
face global LineNumberCursor ${yellow},${bg1}
face global LineNumbersWrapped ${bg1}
face global MenuForeground ${bg2},${blue}
face global MenuBackground ${fg},${bg2}
face global MenuInfo ${bg}
face global Information ${bg},${fg}
face global Error ${bg},${red}
face global DiagnosticError ${red}
face global DiagnosticWarning ${yellow}
face global StatusLine ${fg},${bg}
face global StatusLineMode ${yellow}+b
face global StatusLineInfo ${purple}
face global StatusLineValue ${red}
face global StatusCursor ${bg},${fg}
face global Prompt ${yellow}
face global MatchingChar ${fg},${bg3}+b
face global BufferPadding ${bg2},${bg}
face global Whitespace ${bg2}+f
"
}
================================================
FILE: colors/kaleidoscope-dark.kak
================================================
# Kaleidoscope: colorblind-friendly dark colorscheme
# https://personal.sron.nl/~pault/
evaluate-commands %sh{
# NOTE: tone down black and white for aesthetics,
# ideally those should be pure #000 and #FFF
black="rgb:303030"
white="rgb:FDFDFD"
# Regular text
bright_blue="rgb:4477AA"
bright_cyan="rgb:66CCEE"
bright_green="rgb:228833"
bright_yellow="rgb:CCBB44"
bright_red="rgb:EE6677"
bright_purple="rgb:AA3377"
bright_grey="rgb:BBBBBB"
# Emphasis
high_contrast_blue="rgb:004488"
high_contrast_yellow="rgb:DDAA33"
high_contrast_red="rgb:BB5566"
# High contrast alternative text
vibrant_orange="rgb:EE7733"
vibrant_blue="rgb:0077BB"
vibrant_cyan="rgb:33BBEE"
vibrant_magenta="rgb:EE3377"
vibrant_red="rgb:CC3311"
vibrant_teal="rgb:009988"
vibrant_grey="rgb:BBBBBB"
# Darker text with no red
muted_rose="rgb:CC6677"
muted_indigo="rgb:332288"
muted_sand="rgb:DDCC77"
muted_green="rgb:117733"
muted_cyan="rgb:88CCEE"
muted_wine="rgb:882255"
muted_teal="rgb:44AA99"
muted_olive="rgb:999933"
muted_purple="rgb:AA4499"
muted_pale_grey="rgb:DDDDDD"
# Low contrast background colors
light_blue="rgb:77AADD"
light_orange="rgb:EE8866"
light_yellow="rgb:EEDD88"
light_pink="rgb:FFAABB"
light_cyan="rgb:99DDFF"
light_mint="rgb:44BB99"
light_pear="rgb:BBCC33"
light_olive="rgb:AAAA00"
light_grey="rgb:DDDDDD"
# Pale background colors, black foreground
pale_blue="rgb:BBCCEE"
pale_cyan="rgb:CCEEFF"
pale_green="rgb:CCDDAA"
pale_yellow="rgb:EEEEBB"
pale_red="rgb:FFCCCC"
pale_grey="rgb:DDDDDD"
# Dark background colors, white foreground
dark_blue="rgb:222255"
dark_cyan="rgb:225555"
dark_green="rgb:225522"
dark_yellow="rgb:666633"
dark_red="rgb:663333"
dark_grey="rgb:555555"
# NOTE: Do not use any color that hasn't been defined above (no hardcoding)
cat <<EOF
# For Code
set-face global keyword ${vibrant_blue}
set-face global attribute ${muted_purple}
set-face global type ${vibrant_blue}
set-face global string ${muted_rose}
set-face global value ${light_pink}
set-face global meta ${light_olive}
set-face global builtin ${vibrant_blue}+b
set-face global module ${vibrant_orange}
set-face global comment ${bright_green}+i
set-face global documentation comment
set-face global function Default
set-face global operator Default
set-face global variable Default
# For markup
set-face global title ${vibrant_blue}+b
set-face global header ${muted_cyan}
set-face global block ${vibrant_magenta}
set-face global mono ${vibrant_magenta}
set-face global link ${bright_cyan}+u
set-face global list Default
set-face global bullet +b
# Built-in faces
set-face global Default ${white},${black}
set-face global PrimarySelection ${black},${pale_blue}+fg
set-face global SecondarySelection ${black},${pale_cyan}+fg
set-face global PrimaryCursor ${white},${high_contrast_blue}+fg
set-face global SecondaryCursor ${white},${dark_cyan}+fg
set-face global PrimaryCursorEol ${black},${vibrant_grey}+fg
set-face global SecondaryCursorEol ${black},${pale_grey}+fg
set-face global StatusLine ${black},${vibrant_grey}
set-face global StatusLineMode ${black},${light_blue}
set-face global StatusLineInfo ${black},${light_yellow}
set-face global StatusLineValue ${high_contrast_red},${light_yellow}+b
set-face global StatusCursor ${black},${light_orange}
set-face global Prompt ${black},${light_yellow}
set-face global MenuForeground ${black},${light_yellow}
set-face global MenuBackground ${black},${pale_grey}
set-face global MenuInfo ${vibrant_blue}+i
set-face global LineNumbers ${white},${dark_grey}
set-face global LineNumbersWrapped ${black},${vibrant_grey}+i
set-face global LineNumberCursor ${black},${pale_grey}+b
set-face global MatchingChar ${black},${vibrant_grey}
set-face global Whitespace ${dark_grey}+f
set-face global WrapMarker ${dark_grey}+f
set-face global Information ${black},${light_yellow}
set-face global Error ${white},${vibrant_red}
set-face global DiagnosticError ${high_contrast_red}
set-face global DiagnosticWarning ${high_contrast_yellow}
set-face global BufferPadding ${dark_grey}
EOF
}
================================================
FILE: colors/kaleidoscope-light.kak
================================================
# Kaleidoscope: colorblind-friendly light colorscheme
# https://personal.sron.nl/~pault/
evaluate-commands %sh{
# NOTE: tone down black and white for aesthetics,
# ideally those should be pure #000 and #FFF
black="rgb:1C1C1C"
white="rgb:FDFDFD"
# Regular text
bright_blue="rgb:4477AA"
bright_cyan="rgb:66CCEE"
bright_green="rgb:228833"
bright_yellow="rgb:CCBB44"
bright_red="rgb:EE6677"
bright_purple="rgb:AA3377"
bright_grey="rgb:BBBBBB"
# Emphasis
high_contrast_blue="rgb:004488"
high_contrast_yellow="rgb:DDAA33"
high_contrast_red="rgb:BB5566"
# High contrast alternative text
vibrant_orange="rgb:EE7733"
vibrant_blue="rgb:0077BB"
vibrant_cyan="rgb:33BBEE"
vibrant_magenta="rgb:EE3377"
vibrant_red="rgb:CC3311"
vibrant_teal="rgb:009988"
vibrant_grey="rgb:BBBBBB"
# Darker text with no red
muted_rose="rgb:CC6677"
muted_indigo="rgb:332288"
muted_sand="rgb:DDCC77"
muted_green="rgb:117733"
muted_cyan="rgb:88CCEE"
muted_wine="rgb:882255"
muted_teal="rgb:44AA99"
muted_olive="rgb:999933"
muted_purple="rgb:AA4499"
muted_pale_grey="rgb:DDDDDD"
# Low contrast background colors
light_blue="rgb:77AADD"
light_orange="rgb:EE8866"
light_yellow="rgb:EEDD88"
light_pink="rgb:FFAABB"
light_cyan="rgb:99DDFF"
light_mint="rgb:44BB99"
light_pear="rgb:BBCC33"
light_olive="rgb:AAAA00"
light_grey="rgb:DDDDDD"
# Pale background colors, black foreground
pale_blue="rgb:BBCCEE"
pale_cyan="rgb:CCEEFF"
pale_green="rgb:CCDDAA"
pale_yellow="rgb:EEEEBB"
pale_red="rgb:FFCCCC"
pale_grey="rgb:DDDDDD"
# Dark background colors, white foreground
dark_blue="rgb:222255"
dark_cyan="rgb:225555"
dark_green="rgb:225522"
dark_yellow="rgb:666633"
dark_red="rgb:663333"
dark_grey="rgb:555555"
# NOTE: Do not use any color that hasn't been defined above (no hardcoding)
cat <<EOF
# For Code
set-face global keyword ${muted_indigo}
set-face global attribute ${muted_purple}
set-face global type ${vibrant_blue}
set-face global string ${muted_wine}
set-face global value ${muted_rose}
set-face global meta ${muted_olive}
set-face global builtin ${muted_indigo}+b
set-face global module ${vibrant_orange}
set-face global comment ${muted_green}+i
set-face global documentation comment
set-face global function Default
set-face global operator Default
set-face global variable Default
# For markup
set-face global title ${muted_indigo}+b
set-face global header ${high_contrast_blue}
set-face global block ${vibrant_magenta}
set-face global mono ${vibrant_red}
set-face global link ${vibrant_blue}+u
set-face global list Default
set-face global bullet +b
# Built-in faces
set-face global Default ${black},${white}
set-face global PrimarySelection ${black},${pale_blue}+fg
set-face global SecondarySelection ${black},${pale_cyan}+fg
set-face global PrimaryCursor ${white},${dark_blue}+fg
set-face global SecondaryCursor ${white},${dark_cyan}+fg
set-face global PrimaryCursorEol ${white},${dark_grey}+fg
set-face global SecondaryCursorEol ${white},${vibrant_grey}+fg
set-face global StatusLine ${white},${dark_grey}
set-face global StatusLineMode ${black},${pale_blue}
set-face global StatusLineInfo ${black},${muted_sand}
set-face global StatusLineValue ${vibrant_orange},${muted_sand}+b
set-face global StatusCursor ${black},${high_contrast_yellow}
set-face global Prompt ${black},${muted_sand}
set-face global MenuForeground ${black},${muted_sand}
set-face global MenuBackground ${black},${pale_grey}
set-face global MenuInfo ${high_contrast_blue}+i
set-face global LineNumbers ${black},${pale_grey}
set-face global LineNumbersWrapped ${black},${vibrant_grey}+i
set-face global LineNumberCursor ${white},${dark_grey}+b
set-face global MatchingChar ${white},${dark_grey}
set-face global Whitespace ${vibrant_grey}+f
set-face global WrapMarker ${vibrant_grey}+f
set-face global Information ${black},${muted_sand}
set-face global Error ${white},${vibrant_red}
set-face global DiagnosticError ${high_contrast_red}
set-face global DiagnosticWarning ${high_contrast_yellow}
set-face global BufferPadding ${vibrant_grey}
EOF
}
================================================
FILE: colors/lucius.kak
================================================
# lucius theme
evaluate-commands %sh{
# first we define the lucius colors as named colors
lucius_darker_grey="rgb:303030"
lucius_dark_grey="rgb:444444"
lucius_grey="rgb:808080"
lucius_light_grey="rgb:b2b2b2"
lucius_lighter_grey="rgb:d7d7d7"
lucius_dark_red="rgb:870000"
lucius_light_red="rgb:ff8787"
lucius_orange="rgb:d78700"
lucius_purple="rgb:d7afd7"
lucius_dark_green="rgb:5f875f"
lucius_bright_green="rgb:87af00"
lucius_green="rgb:afd787"
lucius_light_green="rgb:d7d7af"
lucius_dark_blue="rgb:005f87"
lucius_blue="rgb:87afd7"
lucius_light_blue="rgb:87d7ff"
echo "
# then we map them to code
face global value ${lucius_light_green}
face global type ${lucius_blue}
face global variable ${lucius_green}
face global module ${lucius_green}
face global function ${lucius_light_blue}
face global string ${lucius_light_green}
face global keyword ${lucius_light_blue}
face global operator ${lucius_green}
face global attribute ${lucius_light_blue}
face global comment ${lucius_grey}
face global documentation comment
face global meta ${lucius_purple}
face global builtin default+b
# and markup
face global title ${lucius_light_blue}
face global header ${lucius_light_green}
face global mono ${lucius_light_green}
face global block ${lucius_light_blue}
face global link ${lucius_light_green}
face global bullet ${lucius_green}
face global list ${lucius_blue}
# and built in faces
face global Default ${lucius_lighter_grey},${lucius_darker_grey}
face global PrimarySelection ${lucius_darker_grey},${lucius_orange}+fg
face global SecondarySelection ${lucius_lighter_grey},${lucius_dark_blue}+fg
face global PrimaryCursor ${lucius_darker_grey},${lucius_lighter_grey}+fg
face global SecondaryCursor ${lucius_darker_grey},${lucius_lighter_grey}+fg
face global PrimaryCursorEol ${lucius_darker_grey},${lucius_dark_green}+fg
face global SecondaryCursorEol ${lucius_darker_grey},${lucius_dark_green}+fg
face global LineNumbers ${lucius_grey},${lucius_dark_grey}
face global LineNumberCursor ${lucius_grey},${lucius_dark_grey}+b
face global MenuForeground ${lucius_blue},${lucius_dark_blue}
face global MenuBackground ${lucius_darker_grey},${lucius_light_grey}
face global MenuInfo ${lucius_grey}
face global Information ${lucius_lighter_grey},${lucius_dark_green}
face global Error ${lucius_light_red},${lucius_dark_red}
face global DiagnosticError ${lucius_light_red}
face global DiagnosticWarning ${lucius_purple}
face global StatusLine ${lucius_lighter_grey},${lucius_dark_grey}
face global StatusLineMode ${lucius_lighter_grey},${lucius_dark_green}+b
face global StatusLineInfo ${lucius_dark_grey},${lucius_lighter_grey}
face global StatusLineValue ${lucius_lighter_grey}
face global StatusCursor default,${lucius_blue}
face global Prompt ${lucius_lighter_grey}
face global MatchingChar ${lucius_lighter_grey},${lucius_bright_green}
face global BufferPadding ${lucius_green},${lucius_darker_grey}
face global Whitespace ${lucius_grey}+f
"
}
================================================
FILE: colors/palenight.kak
================================================
# palenight theme
# This was ported from https://github.com/drewtempelmeyer/palenight.vim
evaluate-commands %sh{
red=rgb:ff5370
light_red=rgb:ff869a
dark_red=rgb:be5046
green=rgb:c3e88d
yellow=rgb:ffcb6b
dark_yellow=rgb:f78c6c
blue=rgb:82b1ff
purple=rgb:c792ea
cyan=rgb:89ddff
white=rgb:bfc7d5
black=rgb:292d3e
comment_grey=rgb:697098
gutter_fg_grey=rgb:4b5263
cursor_grey=rgb:2c323c
visual_grey=rgb:3e4452
menu_grey=rgb:697098
special_grey=rgb:3b4048
vertsplit=rgb:181a1f
visual_black=default
printf "%s\n" "
# Code
face global value $dark_yellow
face global type $yellow
face global function $blue
face global variable $blue
face global identifier $blue
face global string $green
face global error rgb:c3bf9f+b
face global keyword $purple
face global operator $cyan
face global attribute rgb:eedc82
face global comment $comment_grey+i
face global documentation comment
# #include <...>
face global meta $yellow
# Markup
face global title $blue
face global header $cyan
face global mono $green
face global block $purple
face global link $cyan
face global bullet $cyan
face global list $yellow
# Builtin
face global Default $white,$black
face global PrimarySelection $black,$white+bfg
face global SecondarySelection $black,$white+fg
face global PrimaryCursor white,$purple+bfg
face global SecondaryCursor $black,$purple+fg
face global PrimaryCursorEol $black,$green+fg
face global SecondaryCursorEol $black,$green+fg
face global LineNumbers $gutter_fg_grey
face global LineNumberCursor $yellow,default+b
# Bottom menu:
# text + background
face global MenuBackground $black,$white
face global MenuForeground $black,$purple
# completion menu info
face global MenuInfo $menu_grey,default+i
# assistant, [+]
face global Information $white,$visual_grey
face global Error $white,$red
face global DiagnosticError $red
face global DiagnosticWarning $yellow
face global StatusLine $white,$black
# Status line
face global StatusLineMode $black,$purple # insert, prompt, enter key ...
face global StatusLineInfo $white,$visual_grey # 1 sel
face global StatusLineValue $visual_grey,$green # param=value, reg=value. ex: \"ey
face global StatusCursor white,$purple+bg
face global Prompt $purple,$black # :
face global MatchingChar $red+b # (), {}
face global BufferPadding $gutter_fg_grey,$black # EOF tildas (~)
# Whitespace characters
face global Whitespace $gutter_fg_grey,$black+fg
"
}
================================================
FILE: colors/plain.kak
================================================
# Kakoune simple colors, mostly default
# For default
face global value default
face global type default
face global identifier default
face global string blue
face global keyword default
face global operator default
face global attribute default
face global comment blue
face global documentation comment
face global meta default
face global builtin default
# For default
face global title default
face global header default
face global mono default
face global block default
face global link blue
face global bullet default
face global list default
# builtin default
face global Default default,default
face global PrimarySelection white,blue
face global SecondarySelection black,blue
face global PrimaryCursor black,white
face global SecondaryCursor white,blue
face global PrimaryCursorEol white,blue
face global SecondaryCursorEol default
face global LineNumbers default
face global LineNumberCursor default
face global MenuForeground black,blue
face global MenuBackground blue,black
face global MenuInfo default
face global Information blue,black
face global Error default
face global DiagnosticError default
face global DiagnosticWarning default
face global StatusLine default
face global StatusLineMode default
face global StatusLineInfo default
face global StatusLineValue default
face global StatusCursor default+r
face global Prompt default
face global MatchingChar default
face global BufferPadding default
================================================
FILE: colors/red-phoenix.kak
================================================
##
## Red Phoenix (dkeg) - adapted by boj
##
evaluate-commands %sh{
black="rgb:000000"
blue="rgb:81a2be"
orange1="rgb:F2361E"
orange2="rgb:ED4B19"
orange3="rgb:FA390F"
light_orange1="rgb:DF9767"
white1="rgb:EDEDED"
white2="rgb:E1E1E1"
gray1="rgb:6F6F6F"
gray2="rgb:D1D1D1"
gray3="rgb:2D2D2D"
gray4="rgb:909090"
tan1="rgb:D2C3AD"
tan2="rgb:AAA998"
tan3="rgb:DF9767"
yellow1="rgb:AAA998"
purple1="rgb:4C3A3D"
foreground=${white1}
background=${black}
selection=${purple1}
window=${gray3}
text=${white2}
text_light=${white1}
line=${tan1}
comment=${gray1}
## code
echo "
face global value ${orange2}
face global type ${gray2}
face global variable ${orange1}
face global module ${gray2}
face global function ${yellow1}
face global string ${tan2}
face global keyword ${light_orange1}
face global operator ${yellow1}
face global attribute ${tan1}
face global comment ${gray1}
face global documentation comment
face global meta ${gray2}
face global builtin ${tan1}
"
## markup
echo "
face global title blue
face global header ${orange1}
face global mono ${yellow1}
face global block ${tan1}
face global link blue
face global bullet ${gray1}
face global list ${gray1}
"
## builtin
echo "
face global Default ${text},${background}
face global PrimarySelection default,${selection}+fg
face global SecondarySelection default,${selection}+fg
face global PrimaryCursor black,${tan1}+fg
face global SecondaryCursor black,${tan2}+fg
face global PrimaryCursorEol black,${orange1}+fg
face global SecondaryCursorEol black,${orange2}+fg
face global LineNumbers ${text_light},${background}
face global LineNumberCursor ${text},${gray1}+b
face global MenuForeground ${text_light},blue
face global MenuBackground ${orange1},${window}
face global MenuInfo ${gray1}
face global Information white,${window}
face global Error white,${gray1}
face global DiagnosticError ${orange1}
face global DiagnosticWarning ${orange2}
face global StatusLine ${text},${window}
face global StatusLineMode ${yellow1}+b
face global StatusLineInfo ${orange2}
face global StatusLineValue ${orange2}
face global StatusCursor ${window},${orange2}
face global Prompt ${background},${orange2}
face global MatchingChar ${orange3},${background}+b
face global BufferPadding ${orange2},${background}
face global Whitespace default+f
"
}
================================================
FILE: colors/reeder.kak
================================================
##
## reeder theme
## a light theme inspired after https://github.com/hyspace/st2-reeder-theme
##
evaluate-commands %sh{
white="rgb:f9f8f6"
white_light="rgb:f6f5f0"
black="rgb:383838"
black_light="rgb:635240"
grey_dark="rgb:c6b0a4"
grey_light="rgb:e8e8e8"
brown_dark="rgb:af4609"
brown_light="rgb:baa188"
brown_lighter="rgb:f0e7df"
orange="rgb:fc7302"
orange_light="rgb:f88e3b"
green="rgb:438047"
green_light="rgb:7ba84d"
red="rgb:f03c3c"
# Base color definitions
echo "
# then we map them to code
face global value ${orange_light}+b
face global type ${orange}
face global variable default
face global module ${green}
face global function default
face global string ${green}
face global keyword ${brown_dark}
face global operator default
face global attribute ${green}
face global comment ${brown_light}
face global documentation comment
face global meta ${brown_dark}
face global builtin default+b
# and markup
face global title ${orange}+b
face global header ${orange}+b
face global mono ${green_light}
face global block ${green}
face global link ${orange}
face global bullet ${brown_dark}
face global list ${black}
# and built in faces
face global Default ${black_light},${white}
face global PrimarySelection ${black},${brown_lighter}+fg
face global SecondarySelection ${black_light},${grey_light}+fg
face global PrimaryCursor ${black},${grey_dark}+fg
face global SecondaryCursor ${black},${grey_dark}+fg
face global PrimaryCursorEol ${black},${brown_dark}+fg
face global SecondaryCursorEol ${black},${brown_dark}+fg
face global LineNumbers ${grey_dark},${white}
face global LineNumberCursor ${grey_dark},${brown_lighter}
face global MenuForeground ${orange},${brown_lighter}
face global MenuBackground ${black_light},${brown_lighter}
face global MenuInfo default,${black}
face global Information ${black_light},${brown_lighter}
face global Error default,${red}
face global DiagnosticError ${red}
face global DiagnosticWarning ${orange}
face global StatusLine ${black},${grey_light}
face global StatusLineMode ${orange}
face global StatusLineInfo ${black}+b
face global StatusLineValue ${green_light}
face global StatusCursor ${orange},${white_light}
face global Prompt ${black_light}
face global MatchingChar default+b
face global BufferPadding ${grey_dark},${white}
face global Whitespace ${grey_dark}+f
"
}
================================================
FILE: colors/solarized-dark-termcolors.kak
================================================
# Solarized Dark (with termcolors)
# Useful if you've set up your terminal with the exact Solarized colors
# code
face global value cyan
face global type yellow
face global variable blue
face global module cyan
face global function blue
face global string cyan
face global keyword green
face global operator green
face global attribute bright-magenta
face global comment bright-green
face global documentation comment
face global meta bright-red
face global builtin default+b
# markup
face global title blue+b
face global header blue
face global mono bright-cyan
face global block cyan
face global link bright-cyan
face global bullet yellow
face global list green
# builtin
face global Default bright-blue
face global PrimarySelection bright-black,blue+fg
face global SecondarySelection bright-green,bright-cyan+fg
face global PrimaryCursor bright-black,bright-blue+fg
face global SecondaryCursor bright-black,bright-green+fg
face global PrimaryCursorEol bright-black,white+fg
face global SecondaryCursorEol bright-black,bright-white+fg
face global LineNumbers bright-green,black
face global LineNumberCursor bright-cyan,black
face global LineNumbersWrapped black,black
face global MenuForeground bright-black,yellow
face global MenuBackground bright-cyan,black
face global MenuInfo bright-green
face global Information black,bright-cyan
face global Error red,default+b
face global DiagnosticError red
face global DiagnosticWarning yellow
face global StatusLine bright-cyan,black+b
face global StatusLineMode bright-red
face global StatusLineInfo cyan
face global StatusLineValue green
face global StatusCursor bright-yellow,bright-white
face global Prompt yellow+b
face global MatchingChar red,bright-green+b
face global BufferPadding bright-green
face global Whitespace blue+f
================================================
FILE: colors/solarized-dark.kak
================================================
# Solarized Dark
evaluate-commands %sh{
base03='rgb:002b36'
base02='rgb:073642'
base01='rgb:586e75'
base00='rgb:657b83'
base0='rgb:839496'
base1='rgb:93a1a1'
base2='rgb:eee8d5'
base3='rgb:fdf6e3'
yellow='rgb:b58900'
orange='rgb:cb4b16'
red='rgb:dc322f'
magenta='rgb:d33682'
violet='rgb:6c71c4'
blue='rgb:268bd2'
cyan='rgb:2aa198'
green='rgb:859900'
echo "
# code
face global value ${cyan}
face global type ${yellow}
face global variable ${blue}
face global module ${cyan}
face global function ${blue}
face global string ${cyan}
face global keyword ${green}
face global operator ${green}
face global attribute ${violet}
face global comment ${base01}
face global documentation comment
face global meta ${orange}
face global builtin default+b
# markup
face global title ${blue}+b
face global header ${blue}
face global mono ${base1}
face global block ${cyan}
face global link ${base1}
face global bullet ${yellow}
face global list ${green}
# builtin
face global Default ${base0},${base03}
face global PrimarySelection ${base03},${blue}+fg
face global SecondarySelection ${base01},${base1}+fg
face global PrimaryCursor ${base03},${base0}+fg
face global SecondaryCursor ${base03},${base01}+fg
face global PrimaryCursorEol ${base03},${base2}+fg
face global SecondaryCursorEol ${base03},${base3}+fg
face global LineNumbers ${base01},${base02}
face global LineNumberCursor ${base1},${base02}
face global LineNumbersWrapped ${base02},${base02}
face global MenuForeground ${base03},${yellow}
face global MenuBackground ${base1},${base02}
face global MenuInfo ${base01}
face global Information ${base02},${base1}
face global Error ${red},default+b
face global DiagnosticError ${red}
face global DiagnosticWarning ${yellow}
face global StatusLine ${base1},${base02}+b
face global StatusLineMode ${orange}
face global StatusLineInfo ${cyan}
face global StatusLineValue ${green}
face global StatusCursor ${base00},${base3}
face global Prompt ${yellow}+b
face global MatchingChar ${red},${base01}+b
face global BufferPadding ${base01},${base03}
face global Whitespace ${base01}+f
"
}
================================================
FILE: colors/solarized-light-termcolors.kak
================================================
# Solarized Light (with termcolors)
# Useful if you've set up your terminal with the exact Solarized colors
# code
face global value cyan
face global type red
face global variable blue
face global module cyan
face global function blue
face global string cyan
face global keyword green
face global operator yellow
face global attribute bright-magenta
face global comment bright-cyan
face global documentation comment
face global meta bright-red
face global builtin default+b
# markup
face global title blue+b
face global header blue
face global mono bright-cyan
face global block cyan
face global link bright-green
face global bullet yellow
face global list green
# builtin
face global Default bright-yellow
face global PrimarySelection bright-white,blue+fg
face global SecondarySelection bright-cyan,bright-green+fg
face global PrimaryCursor bright-white,bright-yellow+fg
face global SecondaryCursor bright-white,bright-cyan+fg
face global PrimaryCursorEol bright-white,yellow+fg
face global SecondaryCursorEol bright-white,bright-red+fg
face global LineNumbers bright-cyan,white
face global LineNumberCursor bright-green,white
face global LineNumbersWrapped white,white
face global MenuForeground bright-white,yellow
face global MenuBackground bright-green,white
face global MenuInfo bright-cyan
face global Information white,bright-cyan
face global Error red,default+b
face global DiagnosticError red
face global DiagnosticWarning yellow
face global StatusLine bright-green,white+b
face global StatusLineMode bright-red
face global StatusLineInfo cyan
face global StatusLineValue green
face global StatusCursor bright-blue,bright-black
face global Prompt yellow+b
face global MatchingChar red,white+b
face global BufferPadding bright-cyan
face global Whitespace yellow+f
================================================
FILE: colors/solarized-light.kak
================================================
# Solarized Light
evaluate-commands %sh{
base03='rgb:002b36'
base02='rgb:073642'
base01='rgb:586e75'
base00='rgb:657b83'
base0='rgb:839496'
base1='rgb:93a1a1'
base2='rgb:eee8d5'
base3='rgb:fdf6e3'
yellow='rgb:b58900'
orange='rgb:cb4b16'
red='rgb:dc322f'
magenta='rgb:d33682'
violet='rgb:6c71c4'
blue='rgb:268bd2'
cyan='rgb:2aa198'
green='rgb:859900'
echo "
# code
face global value ${cyan}
face global type ${red}
face global variable ${blue}
face global module ${cyan}
face global function ${blue}
face global string ${cyan}
face global keyword ${green}
face global operator ${yellow}
face global attribute ${violet}
face global comment ${base1}
face global documentation comment
face global meta ${orange}
face global builtin default+b
# markup
face global title ${blue}+b
face global header ${blue}
face global mono ${base1}
face global block ${cyan}
face global link ${base01}
face global bullet ${yellow}
face global list ${green}
# builtin
face global Default ${base00},${base3}
face global PrimarySelection ${base3},${blue}+fg
face global SecondarySelection ${base1},${base01}+fg
face global PrimaryCursor ${base3},${base00}+fg
face global SecondaryCursor ${base3},${base1}+fg
face global PrimaryCursorEol ${base3},${yellow}+fg
face global SecondaryCursorEol ${base3},${orange}+fg
face global LineNumbers ${base1},${base2}
face global LineNumberCursor ${base01},${base2}
face global LineNumbersWrapped ${base2},${base2}
face global MenuForeground ${base3},${yellow}
face global MenuBackground ${base01},${base2}
face global MenuInfo ${base1}
face global Information ${base2},${base1}
face global Error ${red},default+b
face global DiagnosticError ${red}
face global DiagnosticWarning ${yellow}
face global StatusLine ${base01},${base2}+b
face global StatusLineMode ${orange}
face global StatusLineInfo ${cyan}
face global StatusLineValue ${green}
face global StatusCursor ${base0},${base03}
face global Prompt ${yellow}+b
face global MatchingChar ${red},${base2}+b
face global BufferPadding ${base1},${base3}
face global Whitespace ${base1}+f
"
}
================================================
FILE: colors/tomorrow-night.kak
================================================
#
## Tomorrow-night, adapted by nicholastmosher
##
evaluate-commands %sh{
foreground="rgb:c5c8c6" # gui05
background="rgb:1d1f21" # gui00
selection="rgb:373b41" # gui02
window="rgb:282a2e" # gui01
comment="rgb:969896" # gui03
red="rgb:cc6666" # gui08
orange="rgb:de935f" # gui09
yellow="rgb:f0c674" # gui0A
green="rgb:b5bd68" # gui0B
blue="rgb:81a2be" # gui0D
aqua="rgb:8abeb7" # gui0C
purple="rgb:b294bb" # gui0E
## code
echo "
face global value ${orange}
face global type ${yellow}
face global variable ${red}
face global module ${blue}
face global function ${blue}
face global string ${green}
face global keyword ${purple}
face global operator ${aqua}
face global attribute ${purple}
face global comment ${comment}
face global documentation comment
face global meta ${purple}
face global builtin ${yellow}
"
## markup
echo "
face global title ${blue}
face global header ${aqua}
face global mono ${green}
face global block ${orange}
face global link ${blue}
face global bullet ${red}
face global list ${red}
"
## builtin
echo "
face global Default ${foreground},${background}
face global PrimarySelection ${foreground},${selection}+fg
face global SecondarySelection ${foreground},${window}+fg
face global PrimaryCursor ${background},${foreground}+fg
face global SecondaryCursor ${background},${aqua}+fg
face global PrimaryCursorEol ${background},${green}+fg
face global SecondaryCursorEol ${background},${green}+fg
face global LineNumbers ${comment},${window}
face global LineNumberCursor ${yellow},${window}+b
face global MenuForeground ${window},${foreground}
face global MenuBackground ${foreground},${window}
face global MenuInfo ${red}
face global Information ${foreground},${window}
face global Error ${foreground},${red}
face global DiagnosticError ${red}
face global DiagnosticWarning ${yellow}
face global StatusLine ${foreground},${selection}
face global StatusLineMode ${yellow}+b
face global StatusLineInfo ${aqua}
face global StatusLineValue ${green}
face global StatusCursor ${window},${aqua}
face global Prompt ${background},${aqua}
face global MatchingChar ${yellow},${background}+b
face global BufferPadding ${aqua},${background}
face global Whitespace ${comment}+f
"
}
================================================
FILE: colors/zenburn.kak
================================================
# zenburn theme
evaluate-commands %sh{
# define some named colors
zentext="rgb:cfcfcf"
zenselectionbg="rgb:3f7fcc"
zencursor="rgb:2a2a2a,rgb:dfdfbf"
zencursoreol="rgb:2a2a2a,rgb:cc9393"
zensecondaryfg="rgb:2a2a2a"
zendefault="${zentext},rgb:3f3f3f"
zenstatus="rgb:efdcbc,rgb:2a2a2a"
zenstatuscursor="${zentext},rgb:7f9f7f"
zeninfo="rgb:cc9393,rgb:2a2a2a"
zenmenubg="rgb:7f9f7f,rgb:4a4a4a"
zenmenufg="rgb:8cd0d3,rgb:5b5b5b"
zenkeyword="rgb:f0dfaf+b"
zenstorageClass="rgb:c3bf9f+b"
zennumber="rgb:8cd0d3"
zencomment="rgb:7f9f7f"
zenconstant="rgb:dca3a3+b"
zenspecial="rgb:cfbfaf"
zenfunction="rgb:efef8f"
zenstatement="rgb:e3ceab"
zenvariable="rgb:efdcbc"
zentype="rgb:dfdfbf"
zenstring="rgb:cc9393"
zenmodule="${zenstring}"
zenexception="rgb:c3bf9f+b"
zenmatching="rgb:3f3f3f,rgb:8cd0d3"
zenpadding="rgb:f0dfaf,rgb:343434+b"
echo "
# then we map them to code
face global value ${zenconstant}
face global type ${zentype}
face global variable ${zenvariable}
face global module ${zenstring}
face global function ${zenfunction}
face global string ${zenstring}
face global keyword ${zenkeyword}
face global operator ${zenfunction}
face global attribute ${zenstatement}
face global comment ${zencomment}
face global documentation comment
face global meta ${zenspecial}
face global builtin default+b
# and markup
face global title ${zenkeyword}
face global header ${zenconstant}
face global mono ${zennumber}
face global block ${zenstatement}
face global link ${zenstring}
face global bullet ${zenvariable}
face global list ${zentype}
# and built in faces
face global Default ${zendefault}
face global PrimarySelection ${zentext},${zenselectionbg}+fg
face global SecondarySelection ${zensecondaryfg},${zenselectionbg}+fg
face global PrimaryCursor ${zencursor}+fg
face global SecondaryCursor ${zencursor}+fg
face global PrimaryCursorEol ${zencursoreol}+fg
face global SecondaryCursorEol ${zencursoreol}+fg
face global LineNumbers ${zendefault}
face global LineNumberCursor ${zenstatus}
face global MenuForeground ${zenmenufg}
face global MenuBackground ${zenmenubg}
face global MenuInfo rgb:cc9393
face global Information ${zeninfo}
face global Error default,red
face global DiagnosticError red
face global DiagnosticWarning yellow
face global StatusLine ${zenstatus}
face global StatusLineMode ${zencomment}
face global StatusLineInfo ${zenspecial}
face global StatusLineValue ${zennumber}
face global StatusCursor ${zenstatuscursor}
face global Prompt ${zenconstant}
face global MatchingChar default+b
face global BufferPadding ${zenpadding}
face global Whitespace ${zensecondaryfg}+f
"
}
================================================
FILE: contrib/TRAMPOLINE
================================================
+=----------------------------------------------------------------------------=+
_ _
| | | |
| | __ __ _ | | __ ___ _ _ _ __ ___
| |/ / / _` | | |/ / / _ \ | | | | | '_ \ / _ \
| < | (_| | | < | (_) | | |_| | | | | | | __/
|_|\_\ \__,_| |_|\_\ \___/ \__,_| |_| |_| \___|
Mawww's experiment for a better code editor
+=----------------------------------------------------------------------------=+
This walk-through is an introduction to Kakoune's basic editing capabilities
to help new users transition over easily from another editor, or simply
learn how to write and edit documents with style.
During the learning period, it is useful to activate an automatically displayed
contextual help for commands in normal mode: `:set -add global autoinfo normal`
In the first section, you will learn about the primitives of the editing
language to be able to get to a level of knowledge of the editor that
guarantees that you can work with it efficiently.
In the second section, for users who've gone through the basics and want to
move on to more advanced functionalities, we explain other primitives whose
role has a less dominant place in an everyday editing session, but still
prove themselves powerful when used on the right occasion.
Finally, as this document is in no way an exhaustive list of features, don't
hesitate to check out the official documentation to complement your tool-set,
ask questions to more seasoned users on IRC, and check the documentation
using the built-in `:doc` command.
+=--------------------------------=+ BASICS +=--------------------------------=+
=[ MODES
Kakoune uses a paradigm called "modal editing" to allow
.---, users to either have every single key they type inserted
| i | into the file being edited (called "insert mode"),
`---' or execute commands that are triggered by the keys hit
(the "normal mode"). Aside from arrow keys, most keys
.---, described in this document are "editing primitives" that
|esc| have to be hit in normal mode, which is the default mode
`---' when you start the editor. To enter insert mode, hit the
`i` key, and to leave it and return to normal mode, hit the
escape key.
=[ MOVEMENT
.---,
| ↑ | Movement in a buffer (the representation of the contents
.---'---'---, of a file opened by Kakoune) can be achieved using the arrow
| ← | ↓ | → | keys, which will move the cursor up one column/row into
`---'---'---` a given direction.
However, furthering the tradition of mode-based editors,
.---,---,---,---, the `h`, `j`, `k` and `l` keys can be used for the same
| h | j | k | l | purpose, and will respectively move the cursor to the
`---'---'---'---` left, down, up, right by one, when hit. Using those keys
| | | | is the recommended way of moving around in a buffer.
.---,---,---,---, If you're not familiar with this concept, the proximity
| ← | ↓ | ↑ | → | of those four keys with the rest of the lettered keys
`---'---'---'---` on a `qwerty` layout allows faster interaction with the
primitives than if the user had to move their hand to
.---, reach the arrow keys.
| g |_.
`---' |`.---, Another way of moving the cursor is the "goto" utility,
| | g | invoked by hitting the `g` key. A menu will pop up with a
| `---' summary of all the possible keys that can be hit, along with
`.---, the location where they will move the cursor to, but the
| e | most used ones that we are interested in, for now, are `g`
`---' and `e`. The first one will jump to the beginning of the
buffer, and the second one to its end.
=[ VIEW
.---, Displacing the cursor can sometimes move the view into an
| v |_. inconvenient configuration, leaving some necessary context
`---' |`.---, off-screen, or simply feel uncomfortable to type into.
| | t | Kakoune provides a menu (similar to the `goto` menu
| `---' mentioned in the previous section) that allows users to
|`.---, move the current view in relation to the position of the
| | b | cursor. Upon hitting the `v` key, a short menu appears
| `---' which allows us to hit a second key according to how the
`.---, view should be centered vertically: to leave the cursor
| v | respectively on top, at the bottom or in the middle of the
`---' current view, hit the `t`, `b` or `v` keys.
=[ SEARCH
In order to move the cursor to a specific word, the search
command is the way to go. This functionality allows
.---, the user to jump to the next occurrence of a piece of text.
| / | Upon hitting the `/` key, a prompt reading "search"
`---' will pop up in the status bar in which you can type
your text and validate using the `<ret>` (return) key.
.---, .---, You'll notice that as you type, the cursor changes location
|alt|+| / | to automatically give you a preview of where the cursor
`---' `---' would be displaced to if you validated the search. However,
this behavior is only a preview, exiting prompt mode with
the `<esc>` (escape) key will leave the current position
.---, of the cursor unchanged. Note that you can also use a
| n | regular expression as input. By default the search
`---' function will look for results forward, starting from
the current location of the cursor, but you can search
.---, .---, backwards using `<a-/>` (alt + `/`).
|alt|+| n |
`---' `---' Jumping from one match to the other forward can be achieved
using the `n` key, and backwards using the `<a-n>` (alt +
`n`) key combination.
=[ SELECTIONS
You have certainly noticed that when searching for
.---, text, the cursor extends to highlight the entire match.
| ; | In fact, what we know in other editors as a "cursor" is
`---' actually a single character wide selection in Kakoune,
and can be expanded using primitives. When "expanded",
.---, .---, the selection is an area whose beginning is the "anchor"
|alt|+| ; | and the end the "secondary cursor". To switch anchor and
`---' `---' cursor, use `<a-;>`, and to collapse the selection onto
its anchor, use `;`.
Moreover, not only does Kakoune expand the principle of
"cursor" by introducing selections, but it also allows
.---, multiple selections within the same buffer. This makes
| % | it very convenient to modify text in multiple locations
`---' at once, as editing primitives apply to all the currently
selected text.
.---,
| s | Example: to remove all occurrences of the word "foo", one
`---' would select the entire buffer (`%`), select occurrences of
the word (`s`, "\bfoo\b", `<ret>`), then remove it (`d`).
==[ SELECTING OBJECTS
In addition to allowing text selection using regular
.---, .---, expressions, certain objects are defined by default to
|alt|+| i | allow easy selection of text. Objects are bits of text
`---' `---' in the buffer that are identified according to their
structure, rather than their contents, e.g., a paragraph,
.---, .---, a sentence, or a word. When the cursor is located within
|alt|+| a | the boundaries of an object you want to interact with,
`---' `---' several options are available: selecting the contents of an
object without its boundaries (`<a-i>`), a part of it (from
.---, the anchor to its end or its beginning, respectively `]`
| ] | and `[`), or the entire object (`<a-a>`). Those "selection
`---' ranges" are the first part of a two stages shortcut,
as once you've used the key that dictates what part of
.---, the object is to be selected, a menu with a description
| [ | of all the object types select-able will be displayed,
`---' giving a summary of all the keys you can hit to complete
the selection procedure.
Example: to select the paragraph in which the anchor lies,
invoke the "inner object selection" shortcut (`<a-i>`),
locate "paragraph" in the information box that pops up and
.---, hit the according key (`p`). The entire two steps sequence
| [ |_. is thus: `<a-i> p`.
`---' |`.---,
| | ( | Example: to select everything between the anchor and the
| `---' beginning of the current parenthesis pair, use the selection
`.---, sequence: `[ (`. Note that common objects that use
| r | pairs of opening/closing punctuation signs (brackets,
`---' braces, quotes etc) have an alternative second key that
is displayed in the information menu that you can use to
minimize finger gymnastics. The previous shortcut could
thus also be written: `[ b`.
==[ MOVEMENT SELECTIONS
If objects are an easy way to select content-agnostic
.---, data in a buffer, they can also be seen as a way to move
| [ |_. about the buffer. As selecting objects will displace the
`---' `.---, anchor into a given direction, you can wrap or move around
| p | particular chunks of text without using the conventional
`---' means (e.g., arrow keys or jumps), turning them partially
into movement primitives.
.---,
| ] |_. Example: one of the most used object selection combination
`---' `.---, is the "object end/begin paragraph" one: using `[` or
| p | `]` will displace the anchor into a given direction, and
`---' applying that to the paragraph object allows "jumping"
from one newline separated block of text to another.
The resulting shortcut is thus: `] p` to move forward, or
`[ p` to move backward.
=[ FILTERING A SELECTION
Selecting an entire buffer (`%`) or parts of it (`s`) is a
natural and basic operation in a typical editing session,
.---, .---, however, there are some cases where we need to be able to
|alt|+| k | drop some selections arbitrarily, as opposed to trying
`---' `---' to select the ones we need directly. This concept becomes
very useful when coming up with a regular expression for
.---, .---, the basic selection primitive (`s`) is too tedious (if
|alt|+| K | even possible), that's why the editor provides us with a
`---' `---' "keep matching" and a "keep not matching" operations,
in order to respectively keep exclusively the selections
who match or do not match a given regular expression.
Example: when parsing a log file whose lines follow the
usual log pattern (e.g. "[1484383442] ERROR: some data"),
we want to be able to select all the lines individually
.---, .---, (`%`, `<a-s>` to split all the lines), keep those that
|alt|+| s | start with a bracketed time-stamp (`<a-k>^\[`), but
`---' `---' exclude the debug messages (`<a-K>DEBUG`). Of course,
it's possible to come up with a regular expression to
match those simple requirements, but it would take more
work to write it than to organically apply filters on a
general selection, individually.
=[ SELECTION DUPLICATION
.---, Duplicating content can be achieved using a widely
| y | implemented concept: yanking and pasting. Yanking the
`---' current selection (`y`) into the copy register allows the
.---, user to subsequently insert the copied text in the buffer
| p | (`p`).
`---'
.---, Note that the default "paste" primitive will insert the
| P | contents of the copy register after the current selection,
`---' if you want copied text to be inserted before the current
selection then you can use the `P` key.
=[ DELETING / REPLACING SELECTIONS
Text replacement is a two-step process in Kakoune, which
.---, involves selecting text to be replaced, and then erasing it
| d | to insert the replacement text. After selections have been
`---' made, you can simply hit the deletion primitive (`d`), then
.---, either enter insert mode to write down the replacement text
| c | (`i`), or stay in command mode to paste the replacement
`---' text stored in the copy register. As deleting and entering
.---, insert mode can be redundant, a primitive that implements
| R | deletion followed by insert mode entrance was implemented:
`---' `c`. You can also directly replace the current selection
with the content of the copy register using a primitive
also implemented for that purpose: `R`.
=[ UNDO / REDO
Mistakes or wrong decisions can happen while editing.
.---, To go back to earlier states of the buffer, you can press
| u | the `u` key several times. On the contrary, pressing `U`
`---' allows traveling forward in the history tree.
+=-------------------------------=+ ADVANCED +=-------------------------------=+
=[ SPLITTING
The selection primitive (`s`) is a powerful tool to select
chunks of data, but sometimes the format of said data isn't
.---, uniform enough to allow creating clear cut selections. In
| S | order to avoid having to write overly complicated regular
`---' expressions that select precisely the wanted text, the
splitting primitive (`S`) allows applying a delimiter to
the current selection, splitting it into separate chunks.
Example: selecting the items in a CSV-style list (e.g.,
"1,2,3,4") is as simple as selecting the line, then
splitting it using the comma separator (`S,`). Note that
more advanced splitting is possible, since the delimiter
passed to this primitive is a regular expression.
=[ ROTATING
Often used in conjunction with the splitting primitive
(`S`), the rotation primitive (`<a-)>`) shifts all the
selections clock-wise. Note that a count (described after)
allows the rotation to take place in sub-groups whose size
.---, .---, is given by the count parameter.
|alt|+| ) |
`---' `---' Example: in a numbered list where all the numbers are
selected (e.g., `1 2 3 4 5 6 7 8 9 0`), a rotation using
this primitive will shift all the numbers by one selection
forward, while leaving the original multiple selections
untouched (e.g., `0 1 2 3 4 5 6 7 8 9`).
=[ COUNTS
.---, In order to pass a count to a primitive, simply type the
|0-9|_. number out before hitting the primitive key/combination.
`---' |`.---, Counts allow primitives to specialize or extend their
| | g | original functionality by using it as a parameter,
| `---' acting on their side effect.
|`.---,
| | G | Example: in order to respectively jump or select up to a
| `---' particular line, pass the line number to the `g` or `G`
|`.---, primitives (e.g., `42g` or `7G`).
| | o |
| `---' Example: creating an arbitrary amount of new lines
`.---, above or below the current line and spawning a new selection
| O | for each of them is achieved by passing the number of lines
`---' as a count respectively to the `o` and `O` primitives.
=[ REGISTERS
Similarly to counts, registers influence the behavior of
.---, certain primitives. They are storage structures identified
| " |_. by a single character, and are populated by primitives as a
`---' `.---, result of a side effect. Although primitives populate a
|a-z| specific register by default, it's possible to modify which
`---' is going to be populated upon execution using the double
quote (`"`) primitive, and subsequently hitting a key that
.---, will serve as an identifier.
| * |
`---' Example: the smart search primitive (`*`) uses the current
selection as a search pattern, which will be saved to the
.---, `/` register. In order to use this primitive to execute a
| " |_. .---, temporary search, one could make this primitive save the
`---' `| _ | pattern to a different register, to preserve the default one,
`---' e.g., `"m*` to save the pattern to the `m` register, or even
`"_*` to save the pattern to a "null" register, which does
not store anything written to it.
==[ CAPTURE GROUPS
Although registers can pass as mere buffer metadata,
.---, .---, they are an integral part of an editing session. The
|ctl|+| r | `<c-r>` key combination allows to insert into the buffer
`---' `---' the value of a register, whose identifier is typed right
after the combination.
.---, .---, Example: inserting the name of the current buffer in insert
|ctl|+| r |_. mode can be achieved using the `%` register, which holds
`---' `---' `.---, this information: `<c-r>%`.
| % |
`---' Other registers that are set automatically are
the numbered registers, which hold the values of the groups
matched in the last search or select operation (`/` and
.---, .---, `s` primitives).
|ctl|+| r |_.
`---' `---' `.---, Example: when using the search primitive (`/`) with a
|0-9| regular expression containing groups to match a list of
`---' first and last names (e.g., `(\w+) (\w+)` on `John Doe`),
issuing `<c-r>1` would insert the first name (`John`),
and `<c-r>2` the last name (`Doe`).
=[ CUSTOM SELECTIONS
Despite the ability to select bits of data using regular
expressions, there are times when using them isn't enough,
and additional manual editing of the selections is
.---, needed. In order to loop through all the selections and
| ) | remove the current one, two primitives are available:
`---' respectively the parenthesis (`)`), and the alt/comma
key combination (`<a-,>`).
.---, .---,
|alt|+| , | Example: given a list of three numbers all selected
`---' `---' individually, (e.g., `1 2 3`), deselecting the second
selection would be done by hitting the parenthesis primitive
(`)`) until the according selection is the current one,
then hitting `<a-,>` to end up with only the first
and third number selected.
However, being able to trim out some selections out
.---, of a bigger set isn't always convenient, as it doesn't
| ^ | allow more advanced constructs such as combining sets of
`---' multiple-selections that result from different regular
.---, expressions. To allow that, the save mark (`Z`) and append
| Z | mark (`<a-z>`) come in handy, as they respectively save
`---' the current selection to the mark register (`^`), and
show a menu that allows appending the current selection
.---, .---, to the mark register upon hitting the `a` key. That way,
|alt|+| z |_. it becomes possible to chain and save (append) several
`---' `---' `.---, selections made using completely different methods
| a | (select, split etc) without being forced to preserve
`---' them at all times.
.---,
| z | Restoring a mark saved to the mark register using those
`---' primitives can be achieved by using the restore mark
primitive (`z`).
=[ LEVERAGING SHELL COMMANDS
UNIX systems provide with some tools whose purpose is
to interact with raw data, and being a UNIX compliant
.---, aspiring tool itself, Kakoune allows leveraging those
| | | tools to modify a buffer's contents. Upon invoking the pipe
`---' primitive (`|`), an input field pops up which prompts for
a shell command, to which the selections will individually
be sent through the command's standard input.
Example: wrapping a selection can be achieved by invoking
the `fold` utility, e.g., `|fold -w80`. You could also want
to see a patch of all the modifications made to the buffer
since it was last saved: `%|diff -u <c-r>% -`. Note that
the `<c-r>%` has to be typed interactively, as it will
insert the name of the buffer into the command.
Another equally useful primitive that doesn't depend on
.---, the contents of the current selections is the exclamation
| ! | mark primitive (`!`), which simply insert the output of
`---' the given shell command before each selection.
Example: in order to insert the date of the day at the
beginning of the current buffer, one could use `gg`
followed with `!date`.
But not all shell-related primitives insert data into
the current buffer, the `$` key is in fact a way to
.---, apply a predicate to all selections, in order to filter
| $ | them out. The command passed to this primitive will be
`---' executed in a new shell using each individual selection for
context, which will either be kept if the command returned
a successful exit code (zero) or dropped otherwise (any
non-zero value).
Example: after selecting all the lines in a buffer and
splitting them individually (`%`, `<a-s>`), keeping every
odd-numbered line can be achieved with the following
sequence: `$` `[ $((kak_reg_hash)) -ne 0 ]`.
=[ REPEATING ACTIONS
==[ PUNCTUAL INTERACTIONS
In order to modify text efficiently or insert redundant
bits of data, two primitives are available. The dot `.`
.---, primitive repeats the last change that was made in insert
| . | mode (e.g., writing down text after hitting the insert
`---' primitive `i`). Similarly, repeating the last selection
(e.g., make with the find primitive `f`) can be achieved
using the `<a-.>` primitive.
Example: to select a paragraph to append a newline
.---, .---, character to it and cycle through the following paragraphs
|alt|+| . | to repeat the same insertion an arbitrary amount of times,
`---' `---' one would first select the paragraph with `]p`, append a
newline to it `a<ret><esc>`, then repeat both operations
as needed with `<a-.>` and `.` respectively.
==[ COMPLEX CHANGES
Transforming successive chunks of formatted data can
.---, be cumbersome when done manually, and lack hindsight
| q | when writing a script for that particular purpose
`---' non-interactively. The middle ground between the two
.---, solutions is to record the modifications made to one
| Q | chunk interactively, and replay the sequence of keys
`---' at will. The sequence in question is a macro: the `Q`
primitive will create a new one (i.e., record all the keys
.---, .---, hit henceforth until the escape key `<esc>` is hit), and
|ctl|+| r |_. the `q` primitive will replay the keys saved in the macro.
`---' `---' `.---,
| @ | Notes: macros can easily be translated into a proper
`---' script, as they are saved in the `@` register, which you
can insert into a buffer using `<c-r>@`.
================================================
FILE: contrib/Tupfile
================================================
##
## Tupfile for kakoune
## by lenormf
##
## How to use:
## Initialize a tup database in the main directory with `tup init`
## Create a symlink from `contrib/Tupfile` to `src/Tupfile`
## Start the build with the `tup` command
##
.gitignore
debug = yes
static = no
CXX = g++
CXXFLAGS = -pedantic -std=c++17 -g -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-address
CPPFLAGS =
LDFLAGS =
LIBS =
ifeq ($(debug),yes)
CPPFLAGS += -DKAK_DEBUG
CXXFLAGS += -g
suffix = .debug
else
ifeq ($(debug),no)
CXXFLAGS += -O3
suffix = .opt
else
error debug should be either yes or no
endif
endif
ifeq ($(static),yes)
PKG_CONFIG_FLAGS += --static
LDFLAGS += -static -pthread
endif
ifneq (@(TUP_PLATFORM),macosx)
ifeq (@(TUP_PLATFORM),win32)
LIBS += -lncursesw -ldbghelp
CPPFLAGS += -D_XOPEN_SOURCE=700
else
LDFLAGS += -rdynamic
endif
endif
ifeq ($(CXX),clang++)
CXXFLAGS += -frelaxed-template-template-args
endif
ifeq ($(CXX),g++)
CXXFLAGS += -Wno-init-list-lifetime
endif
!cxx = |> ^ CC %f^ $(CXX) $(CPPFLAGS) $(CXXFLAGS) -MD -MP -MF %O.d -c %f -o %o |>
!ld = |> ^ LD %o^ $(CXX) $(LDFLAGS) %f $(LIBS) -o %o |>
!ln = |> ^ LN %o^ ln -sf %f %o |>
: foreach *.cc |> !cxx |> .%B$(suffix).o | .%B$(suffix).d {objs}
: |> ^ MK %o^ printf "%%s" "namespace Kakoune { const char* version = \"`if [ -f .version ]; then cat .version; elif [ -d ../.git ]; then git describe --tags HEAD; else echo \"unknown\"; fi`\"; }" > .version.cc.tmp; if cmp -s .version.cc.tmp .version.cc; then rm .version.cc.tmp; else mv .version.cc.tmp .version.cc; fi |> .version.cc
: .version.cc |> ^ CC %f^ $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c %f -o %o |> %B.o
: {objs} .version.o |> !ld |> kak$(suffix)
: kak$(suffix) |> !ln |> kak
================================================
FILE: contrib/describe_sessions.sh
================================================
#!/bin/sh
##
## describe_sessions.sh for kakoune
## by lenormf
##
readonly KAK_SCRIPT='
{
echo
printf "Session: %s\n" "${kak_session}"
printf "Current working directory: %s\n" "${PWD}"
eval set -- "${kak_buflist}"
printf "Buffers (%d):\n" $#
for bufname in "$@"; do
printf "\t%s\n" "${bufname}"
done
eval set -- "${kak_client_list}"
printf "Clients (%d):\n" $#
for clientname in "$@"; do
printf "\t%s\n" "${clientname}"
done
} >>{{outfile}}
rm -rf {{sentinel}}
'
main() {
outfile=$(mktemp "${TMPDIR:-/tmp}"/kak-describe_sessions.XXXXXXXX)
nb_sessions=0
nb_dead_sessions=0
nb_suspended_sessions=0
if ! command -v socat >/dev/null 2>&1; then
echo "Unmet dependency: socat" >&2
exit 1
fi
script=$(printf 'nop %%sh{ %s }' "${KAK_SCRIPT}" | sed "s,{{outfile}},\"${outfile}\",g")
sessions_dir="${TMPDIR:-/tmp}/kakoune/${USER}"
if [ -n "${XDG_RUNTIME_DIR}" ]; then
sessions_dir="${XDG_RUNTIME_DIR}/kakoune"
fi
for session in "${sessions_dir}"/*; do
name_session="${session##*/}"
if printf '' | socat - UNIX-CONNECT:"${session}",connect-timeout=1 2>/dev/null; then
sentinel=$(mktemp -d "${TMPDIR:-/tmp}"/kak-sentinel.XXXXXXXX)
script_session=$(printf %s "${script}" | sed "s,{{sentinel}},\"${sentinel}\",g")
if ! printf %s "${script_session}" | kak -p "${name_session}"; then
printf '\nSession "%s" dead\n' "${name_session}" >> "${outfile}"
nb_dead_sessions=$((nb_dead_sessions + 1))
continue
fi
wait_limit=2
while ! mkdir "${sentinel}" 2>/dev/null && [ "${wait_limit}" -gt 0 ]; do
wait_limit=$((wait_limit - 1))
sleep 1
done
rm -rf "${sentinel}"
if [ "${wait_limit}" -gt 0 ]; then
nb_sessions=$((nb_sessions + 1))
else
printf '\nSession "%s" suspended\n' "${name_session}" >> "${outfile}"
nb_suspended_sessions=$((nb_suspended_sessions + 1))
fi
else
nb_dead_sessions=$((nb_dead_sessions + 1))
fi
done
printf 'Running sessions: %d\nSuspended sessions: %d\nDead sessions: %d\n' \
"${nb_sessions}" "${nb_suspended_sessions}" "${nb_dead_sessions}"
cat "${outfile}"
rm -f "${outfile}"
}
main "$@"
================================================
FILE: contrib/gendocs.py
================================================
#!/usr/bin/env python3
# This script generates a static documentation web site
# by parsing the `**/*.asiidoc` files from the repository.
#
# Dependencies:
# * Python 3
# * `xdg-open` for opening the final result in a web browser.
# * `antora` - a static documentation web site generator,
# https://docs.antora.org/antora/latest
#
# Usage:
# ```console
# $ ./contrib/gendocs.py
# ```
#
# After running it should open the generated web site in a browser.
#
from dataclasses import dataclass
from typing import Optional
import glob
import itertools
import os
import pathlib
import re
import shutil
import subprocess
# Get the script directory.
script_dir = os.path.dirname(os.path.realpath(__file__))
# Switch to the projects root dir.
os.chdir(os.path.join(script_dir, ".."))
# Recreating the final output dir to start from scratch.
shutil.rmtree("doc_gen", ignore_errors=True)
os.makedirs("doc_gen", exist_ok=True)
# Antora fails if the repo contains broken symbolic links.
# shutil.rmtree("libexec", ignore_errors=True)
# Canonical Antora paths.
# See: https://docs.antora.org/antora/latest/standard-directories.
# https://docs.antora.org/antora/latest/root-module-directory.
os.makedirs("doc_gen/modules/ROOT/images", exist_ok=True)
os.makedirs("doc_gen/modules/ROOT/pages", exist_ok=True)
# Put necessary images to the Antora canonical directory.
# See: https://docs.antora.org/antora/latest/images-directory.
for gif_file in glob.glob("doc/*.gif"):
shutil.copy(gif_file, "doc_gen/modules/ROOT/images/")
# Fix links according to the Antora specification.
# See: https://docs.antora.org/antora/latest/page/xref.
def fix_links(path):
@dataclass
class Link:
path: Optional[str]
file: Optional[str]
fragment: Optional[str]
title: str
def __init__(self, path, file, fragment, title):
self.path = path
self.file = file
self.fragment = fragment
self.title = title
def dropwhile(predicate, string):
return "".join(
itertools.dropwhile(
predicate,
string,
)
)
def dropwhileright(predicate, string):
return "".join(
reversed(
list(
itertools.dropwhile(
predicate,
reversed(string),
)
)
)
)
def takewhile(predicate, string):
return "".join(
itertools.takewhile(
predicate,
string,
)
)
def untag(string):
no_opening = dropwhile(lambda c: c == "<", string)
no_closing = dropwhileright(lambda c: c == ">", no_opening)
return no_closing
def parse(string):
untagged = untag(string)
prefix, title = untagged.split(",", 1)
title = title.strip()
fragment = dropwhile(lambda c: c != "#", prefix)
fragment = fragment if fragment else None
fragmentless = takewhile(lambda c: c != "#", prefix)
segments = fragmentless.split("/")
path, file = (
("/".join(segments[:-1]), segments[-1])
if "/" in fragmentless
else (None, fragmentless)
)
return Link(path, file, fragment, title)
def render(link):
if link.path and link.file and link.fragment == "#":
return f"xref:{link.path}/{link.file}.adoc[{link.title}]"
elif link.path and link.file and link.fragment:
return f"xref:{link.path}/{link.file}.adoc{link.fragment}[{link.title}]"
elif not link.path and link.file and link.fragment == "#":
return f"xref:./{link.file}.adoc[{link.title}]"
elif not link.path and link.file and link.fragment:
return f"xref:./{link.file}.adoc{link.fragment}[{link.title}]"
elif not link.path and link.file and not link.fragment:
return f"<<{link.file},{link.title}>>"
else:
raise RuntimeError(f"Failed to render link: {link}")
def process(m):
string = m.group(0)
return render(parse(string)) if "," in string else string
content = None
with open(path, "r") as file:
content = file.read()
# Fix image links according the Antora specification.
# See: https://docs.antora.org/antora/latest/page/image-resource-id-examples.
content = content.replace("image::doc/", "image::")
with open(path, "w") as file:
file.write(re.sub(r"<<[^>]+>>", process, content))
# A useful documentation page.
# Add the `.adoc` extension to include it into the result.
shutil.copy(
"VIMTOKAK",
"doc_gen/modules/ROOT/pages/VIMTOKAK.adoc",
)
fix_links("doc_gen/modules/ROOT/pages/VIMTOKAK.adoc")
for source in glob.glob("**/*.asciidoc", recursive=True):
# Create directories structure matching the project's original structure.
# See: https://docs.antora.org/antora/latest/pages-directory.
page_dir = os.path.join(
"doc_gen/modules/ROOT/pages",
os.path.dirname(source),
)
os.makedirs(page_dir, exist_ok=True)
# Copy the `asciidoc` file into the Antora `pages` directory
# with the mandatory `.adoc` filename extension.
adoc = os.path.join(page_dir, pathlib.Path(source).stem + ".adoc")
shutil.copy(source, adoc)
if source == "README.asciidoc":
# Update the filename so it reflects the content.
# The filename is used for navigation links.
shutil.move(
"doc_gen/modules/ROOT/pages/README.adoc",
"doc_gen/modules/ROOT/pages/index.adoc",
)
adoc = "doc_gen/modules/ROOT/pages/index.adoc"
elif source == "test/README.asciidoc":
# The file name is used for navigation links.
# Update so it reflects the content.
shutil.move(
"doc_gen/modules/ROOT/pages/test/README.adoc",
"doc_gen/modules/ROOT/pages/test/tests.adoc",
)
adoc = "doc_gen/modules/ROOT/pages/test/tests.adoc"
fix_links(adoc)
# A navigation file for the sidebar.
# See: https://docs.antora.org/antora/latest/navigation/single-list.
#
# TODO: Generate automatically.
nav_content = """
* xref:index.adoc[Getting Started]
* xref:doc/pages/commands.adoc[Commands]
* xref:doc/pages/expansions.adoc[Expansions]
* xref:doc/pages/execeval.adoc[Exec Eval]
* xref:doc/pages/scopes.adoc[Scopes]
* xref:doc/pages/faces.adoc[Faces]
* xref:doc/pages/buffers.adoc[Buffers]
* xref:doc/pages/registers.adoc[Registers]
* xref:doc/pages/mapping.adoc[Mapping]
* xref:doc/pages/hooks.adoc[Hooks]
* xref:doc/pages/command-parsing.adoc[Command Parsing]
* xref:doc/pages/keys.adoc[Keys]
* xref:doc/pages/regex.adoc[Regex]
* xref:doc/pages/options.adoc[Options]
* xref:doc/pages/highlighters.adoc[Highlighters]
* xref:doc/pages/modes.adoc[Modes]
* xref:doc/pages/keymap.adoc[KEYMAP]
* xref:doc/pages/faq.adoc[FAQ]
* xref:doc/pages/changelog.adoc[Changelog]
* xref:doc/design.adoc[Design]
* xref:doc/coding-style.adoc[Coding Style]
* xref:doc/writing_scripts.adoc[Writing Scripts]
* xref:doc/json_ui.adoc[JSON UI]
* xref:doc/autoedit.adoc[Autoedit]
* xref:doc/interfacing.adoc[Interfacing]
* xref:rc/tools/lint.adoc[Linting]
* xref:rc/tools/autorestore.adoc[Autorestore]
* xref:rc/tools/doc.adoc[Doc]
* xref:test/tests.adoc[Tests]
* xref:VIMTOKAK.adoc[Vi(m) to Kakoune]
"""
with open("doc_gen/modules/ROOT/nav.adoc", "w") as f:
f.write(nav_content)
# Antora component description file.
# See: https://docs.antora.org/antora/latest/component-version-descriptor.
antora_yml_content = """
name: Kakoune
nav:
- modules/ROOT/nav.adoc
title: Kakoune
version: latest
"""
with open("doc_gen/antora.yml", "w") as f:
f.write(antora_yml_content)
# Antora playbook file.
# See: https://docs.antora.org/antora/latest/playbook.
antora_playbook_content = """
asciidoc:
attributes:
# Do not complain on missing attributes,
# TODO: fix and turn to a fatal warning
attribute-missing: skip
# To fix links
idprefix: ""
# To fix links
idseparator: "-"
# Better to be reproducible, in general
reproducible: true
# More convenient to turn sections to IDs
sectids: true
# More convenient to have sections as links
sectlinks: true
# Do not want to miss something
sectnumlevels: 5
# More convenient to number the sections
sectnums: true
# Do not want to miss something
toclevels: 5
sourcemap: true
content:
sources:
- url: ./..
start_path: doc_gen
branches: ["HEAD"]
runtime:
cache_dir: ./doc_gen/cache # More convenient for the development
fetch: true # More convenient for the development
log:
failure_level: fatal
level: warn
output:
clean: true # More convenient for the development
dir: ./build # Simpler to have it explicit in code
site:
title: Kakoune Docs
ui:
bundle:
url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/HEAD/raw/build/ui-bundle.zip?job=bundle-stable
"""
with open("doc_gen/antora-playbook.yml", "w") as f:
f.write(antora_playbook_content)
# Finally, generate the documentation,
# results will be saved to the output directory
# as specified in the `antora-playbook.yml`.
use_npx = shutil.which("antora") is None and shutil.which("npx") is not None
subprocess.run((["npx"] if use_npx else []) + ["antora", "generate", "doc_gen/antora-playbook.yml"])
subprocess.run(["xdg-open", "./doc_gen/build/Kakoune/latest/index.html"])
================================================
FILE: contrib/kakmap.rb
================================================
#!/usr/bin/env ruby
# Generate a reference sheet for Kakoune's normal mode
# Use: ./kakmap.rb ../src/normal.cc
require 'markaby'
# Relies on the keymap HashMap assignment ending with };
raw = ARGF.read.split( /const\s+HashMap<Key,\s*NormalCmd>\s+keymap\s*{/ ).last.split( /^};$/ ).first
commands = {}
raw.split( /\n+/ ).each{ |line|
# skip empty or comment line
line = line.strip
if line.empty? or /^\/\// =~ line
next
end
# match key mapping line
/^\{\s*\{(?<mdky>[^}]+)\}\s*,\s*\{\s*"(?<dsc>[^"]+)"/.match(line) do |m|
modAndKey = m['mdky']
des = m['dsc']
modAndKey.gsub!(/\s*\/\*[^*]+\*\/\s*/, '') # remove comment in key definition
# match key and modifier
/Key::(?<key>\w+)|(?<mod>alt|ctrl)\('\\?(?<key>.+?)'\)|'\\?(?<key>.+?)'$/.match(modAndKey) do |sm|
key = sm['key']
mod = (sm['mod'] || 'none').to_sym
key = 'Space' if key == ' '
commands[key] ||= {}
commands[key][mod] = des
end
end
}
# sort, showing single characters first, symbols next and spelled out keys last
commands = commands.sort_by{ |key, _|
case key
when /^\w$/
key.upcase + key.swapcase
when /^\W$/
'_' + key
else
'~~' + key
end
}
puts Markaby::Builder.new {
html do
head do
title "Kakoune default keymap"
end
body do
table :style => "border-collapse: collapse" do
thead do
tr do
th "Key"
th "Description"
th "ALT + key"
th "CTRL + key"
end
end
tbody do
for key, binding in commands
tr :style => "border-bottom: 1px solid #fbfbfb" do
th key
td binding[:none]
td binding[:alt]
td binding[:ctrl]
end
end
end
end
end
end
}
================================================
FILE: contrib/kakoune.spec
================================================
%bcond_without tests
# Enable LTO. Profit ~8%
%global optflags %{optflags} -flto
%global build_ldflags %{build_ldflags} -flto
Name: kakoune
Version: 2020.09.01
Release: 2%{?dist}
Summary: Code editor heavily inspired by Vim
License: Unlicense
URL: https://kakoune.org/
Source0: https://github.com/mawww/kakoune/archive/v%{version}/%{name}-%{version}.tar.gz
BuildRequires: asciidoc
BuildRequires: gcc-c++ >= 7
BuildRequires: glibc-langpack-en
BuildRequires: pkgconfig(ncurses) >= 5.3
%description
- Modal editor
- Faster as in fewer keystrokes
- Multiple selections
- Orthogonal design
Kakoune is a code editor that implements Vi’s "keystrokes as a text editing
language" model. As it’s also a modal editor, it is somewhat similar to the Vim
editor (after which Kakoune was originally inspired).
Kakoune can operate in two modes, normal and insertion. In insertion mode, keys
are directly inserted into the current buffer. In normal mode, keys are used to
manipulate the current selection and to enter insertion mode.
Kakoune has a strong focus on interactivity, most commands provide immediate and
incremental results, while still being competitive (as in keystroke count) with
Vim.
Kakoune works on selections, which are oriented, inclusive ranges of characters.
Selections have an anchor and a cursor. Most commands move both of
them except when extending selections, where the anchor character stays fixed and
the cursor moves around.
%prep
%autosetup -p1
# Use default Fedora build flags
sed -i '/CXXFLAGS += -O3/d' src/Makefile
# Install doc files in proper location
sed -i 's|$(PREFIX)/share/doc/kak|$(PREFIX)/share/doc/%{name}|' src/Makefile
%build
%set_build_flags
pushd src
%make_build
popd
%install
pushd src
%make_install PREFIX=%{_prefix}
popd
%if %{with tests}
%check
%set_build_flags
pushd src
LANG=en_US.utf8 %make_build test
popd
%endif
%files
%license UNLICENSE
%doc README.asciidoc CONTRIBUTING VIMTOKAK
%{_bindir}/kak
%{_datadir}/kak/
%{_mandir}/man1/*
%{_libexecdir}/kak/
%changelog
* Fri Jan 1 2021 Jiri Konecny <jkonecny@redhat.com> - 2020.09.01-2
- Add new libexec dir to the spec file
* Wed Sep 2 2020 Jiri Konecny <jkonecny@redhat.com> - 2020.09.01-1
- Update to 2020.09.01
* Tue Aug 4 2020 Jiri Konecny <jkonecny@redhat.com> - 2020.08.04-1
- Update to 2020.08.04
* Thu Jan 16 2020 Artem Polishchuk <ego.cordatus@gmail.com> - 2020.01.16-1
- Update to 2020.01.16
* Tue Dec 10 2019 Artem Polishchuk <ego.cordatus@gmail.com> - 2019.12.10-1
- Update to 2019.12.10
* Tue Nov 26 2019 Artem Polishchuk <ego.cordatus@gmail.com> - 2019.07.01-4
- Add patch to pass tests with default Fedora build flags
* Fri Nov 22 2019 Artem Polishchuk <ego.cordatus@gmail.com> - 2019.07.01-2
- Packaging fixes
* Wed Apr 24 2019 Jiri Konecny <jkonecny@redhat.com> - v2019.01.20-1
- Add a new build dependency (glibc-langpack-en) required for Fedora 30 and later
- Update version
* Fri Oct 12 2018 Jiri Konecny <jkonecny@redhat.com> - v2018.09.04-1
- Update spec file to a new release
* Sat May 5 2018 Łukasz Jendrysik <scadu@disroot.org> - v2018.04.13
- Use tagged release
* Wed May 11 2016 jkonecny <jkonecny@redhat.com> - 0-208.20160511git84f62e6f
- Add LANG=en_US.UTF-8 to fix tests
- Update to git: 84f62e6f
* Thu Feb 11 2016 jkonecny <jkonecny@redhat.com> - 0-158.20160210git050484eb
- Add new build requires asciidoc
- Use new man pages
* Sat Mar 28 2015 jkonecny <jkonecny@redhat.com> - 0-5.20150328gitd1b81c8f
- Automated git update by dgroc script new hash: d1b81c8f
* Tue Mar 24 2015 Jiri Konecny <jkonecny@redhat.com> 0-1.7eaa697git
- Add tests
* Tue Mar 17 2015 Jiri Konecny <jkonecny@redhat.com> 0-1.12a732dgit
- Create first rpm for kakoune
================================================
FILE: contrib/tmux-256color.terminfo
================================================
tmux-256color|tmux with 256 color and palette setting,
am,
hs,
km,
mir,
msgr,
xenl,
colors#256,
cols#80,
it#8,
lines#24,
pairs#32767,
acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G,
blink=\E[5m,
bold=\E[1m,
cbt=\E[Z,
ccc,
civis=\E[?25l,
clear=\E[H\E[J,
cnorm=\E[34h\E[?25h,
cr=^M,
csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD,
cub1=^H,
cud=\E[%p1%dB,
cud1=^J,
cuf=\E[%p1%dC,
cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA,
cuu1=\EM,
cvvis=\E[34l,
dch=\E[%p1%dP,
dch1=\E[P,
dim=\E[2m,
dl=\E[%p1%dM,
dl1=\E[M,
dsl=\E]0;\007,
ed=\E[J,
el=\E[K,
el1=\E[1K,
enacs=\E(B\E)0,
flash=\Eg,
fsl=^G,
home=\E[H,
hpa=\E[%i%p1%dG,
ht=^I,
hts=\EH,
ich=\E[%p1%d@,
il=\E[%p1%dL,
il1=\E[L,
ind=\n,
indn=\E[%p1%dS,
initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,
invis=\E[8m,
is2=\E)0,
kDC=\E[3;2~,
kEND=\E[1;2F,
kHOM=\E[1;2H,
kIC=\E[2;2~,
kLFT=\E[1;2D,
kNXT=\E[6;2~,
kPRV=\E[5;2~,
kRIT=\E[1;2C,
kbs=^H,
kcbt=\E[Z,
kcub1=\EOD,
kcud1=\EOB,
kcuf1=\EOC,
kcuu1=\EOA,
kdch1=\E[3~,
kend=\E[4~,
kf1=\EOP,
kf10=\E[21~,
kf11=\E[23~,
kf12=\E[24~,
kf13=\E[1;2P,
kf14=\E[1;2Q,
kf15=\E[1;2R,
kf16=\E[1;2S,
kf17=\E[15;2~,
kf18=\E[17;2~,
kf19=\E[18;2~,
kf2=\EOQ,
kf20=\E[19;2~,
kf21=\E[20;2~,
kf22=\E[21;2~,
kf23=\E[23;2~,
kf24=\E[24;2~,
kf25=\E[1;5P,
kf26=\E[1;5Q,
kf27=\E[1;5R,
kf28=\E[1;5S,
kf29=\E[15;5~,
kf3=\EOR,
kf30=\E[17;5~,
kf31=\E[18;5~,
kf32=\E[19;5~,
kf33=\E[20;5~,
kf34=\E[21;5~,
kf35=\E[23;5~,
kf36=\E[24;5~,
kf37=\E[1;6P,
kf38=\E[1;6Q,
kf39=\E[1;6R,
kf4=\EOS,
kf40=\E[1;6S,
kf41=\E[15;6~,
kf42=\E[17;6~,
kf43=\E[18;6~,
kf44=\E[19;6~,
kf45=\E[20;6~,
kf46=\E[21;6~,
kf47=\E[23;6~,
kf48=\E[24;6~,
kf49=\E[1;3P,
kf5=\E[15~,
kf50=\E[1;3Q,
kf51=\E[1;3R,
kf52=\E[1;3S,
kf53=\E[15;3~,
kf54=\E[17;3~,
kf55=\E[18;3~,
kf56=\E[19;3~,
kf57=\E[20;3~,
kf58=\E[21;3~,
kf59=\E[23;3~,
kf6=\E[17~,
kf60=\E[24;3~,
kf61=\E[1;4P,
kf62=\E[1;4Q,
kf63=\E[1;4R,
kf7=\E[18~,
kf8=\E[19~,
kf9=\E[20~,
khome=\E[1~,
kich1=\E[2~,
kind=\E[1;2B,
kmous=\E[M,
knp=\E[6~,
kpp=\E[5~,
kri=\E[1;2A,
nel=\EE,
op=\E[39;49m,
rc=\E8,
rev=\E[7m,
ri=\EM,
ritm=\E[23m,
rmacs=^O,
rmcup=\E[?1049l,
rmir=\E[4l,
rmkx=\E[?1l\E>,
rmso=\E[27m,
rmul=\E[24m,
rs2=\Ec\E[?1000l\E[?25h,
sc=\E7,
setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,
setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,
sgr=\E[0%?%p6%t;1%;%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t; 5%;%?%p5%t;2%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017,
sitm=\E[3m,
smacs=^N,
smcup=\E[?1049h,
smir=\E[4h,
smkx=\E[?1h\E=,
smso=\E[7m,
smul=\E[4m,
tbc=\E[3g,
tsl=\E]0;,
vpa=\E[%i%p1%dd,
================================================
FILE: doc/autoedit.asciidoc
================================================
Edition auto insertion in Kakoune
=================================
It is a quite common feature for a code editor to help the programmer
by automatically inserting some text in certain contexts. This document
goal is to explain how this is done in Kakoune.
There is no special support in Kakoune for this task, hooks are
expected to be used in order to manage that, and the normal Kakoune
editing command are expected to be expressive enough so that relatively
complex indentation can be written concisely.
The main hook is *InsertChar*, which gets called immediately _after_ a
character has been inserted in insertion mode due to the user pressing
the corresponding key.
Previous line indentation
-------------------------
Let's see a simple indent hook: preserving the previous line indentation.
Here is the Kakoune normal mode key list in order to do that:
----------------------------------------------------------------
k<a-x> # 1. go to previous line and select it
s^\h+<ret>y # 2. select the leading spaces and copy them
j<a-h>P # 3. go back to next line start and paste the spaces
----------------------------------------------------------------
Note that if nothing gets selected on phase *2.*, an error will be raised.
We want to do that each time the user jumps a line, just after the new line
is inserted. So the hook would be:
--------------------------------------------------------
:hook InsertChar \n %{ exec k<a-x> s^\h+<ret>y j<a-h>P }
--------------------------------------------------------
(exec concatenates the keys for all argument, so the spaces will be ignored,
allowing for clearer separation. either use <space> or quote the argument to
use a space key)
That works, however if the phase *2.* raises an error, the +:exec+ will stop
and the user will get its selections on the previous line. The solution
is to use a *draft* context, instead of the one the user is interacting with.
---------------------------------------------------------------
:hook InsertChar \n %{ exec -draft k<a-x> s^\h+<ret>y j<a-h>P }
---------------------------------------------------------------
That way, exec is executed in a *copy* of the user's context, which means it
manipulates a *copy* of the user's selections.
Increasing indentation
----------------------
A little bit more complicated is to increase indentation whenever we insert a
new line after a +{+ or a +(+.
The complexity arises from the presence of a condition. We want to increase
the indentation *only* if the previous line ends with +{+ or +(+.
Fortunately, Kakoune provides us with a command for that: the +<a-k>+ command,
which keeps selections where a certain regex can be found.
Here is how we can do that:
-------------------------------------------------------------------------------
k<a-x> # 1. select the previous line
<a-k>[{(]\h*$<ret> # 2. keep selections that end with { or ( followed by blanks
j<a-gt> # 3. go back to next line and indent it even if it is empty
-------------------------------------------------------------------------------
Note that if no previous line ends with a +{+ or +(+, the +<a-k>+ command will
raise an error, and stop the execution. This is what we want: it is similar to
what would happen if we would continue with no selections; the following
commands would have no effects.
However, the error would end up being caught by the hook execution code, and
it will write information about it in the debug buffer, which we do not want,
as this is actually expected. In order to prevent that, the exec should be
wrapped in a try command. So we would have:
-------------------------------------------------------------------------------
:hook InsertChar \n %[ try %[ exec -draft k<a-x> <a-k>[{(]\h*$<ret> j<a-gt> ] ]
-------------------------------------------------------------------------------
================================================
FILE: doc/coding-style.asciidoc
================================================
C++ Coding Style
================
Kakoune is written in C++20, here are the main coding style points:
* Avoid external dependencies besides posix/stdc++
* 4 spaces for indentation, no tabs
* public interface before private methods/data when defining a class
* use +override+ keyword for overridden virtual methods
* opening brackets on their own lines by default, except when declaring
an object where the opening bracket follows the equal sign.
* use alternative logical operator names (and, or, not instead of &&, ||, !)
-----
int func()
{
if (condition)
{
...
}
else
statement;
}
int array[] = {
...
};
-----
* End lines with an operator when continuing on the next line
----
if (condition1 or
condition2)
----
* Try to keep under 80 columns, even though this is not a strict limit.
* CamelCase for types, snake_case for variables/function names
* prefix fields with m_, static ones with ms_ except for dumb structs
(struct with every field public) where these prefixes can be dropped.
* use const and constexpr liberally
================================================
FILE: doc/design.asciidoc
================================================
Kakoune design
==============
This document describes the design goals for Kakoune, including rationale.
Interactivity
-------------
Unlike Vim, Kakoune does not have an underlying line-oriented editor. It is
always expected to be used in an interactive fashion, displaying edited text in
real time. That should not prevent Kakoune from being used non-interactively
(executing a macro for example), but priority should be given to ease of
interactive use.
Limited scope
-------------
Kakoune is a code editor. It is not an IDE, not a file browser, not a word
processor and not a window manager. It should be very efficient at editing code.
As a side effect, it should be very efficient at editing text in general.
Composability
-------------
Being limited in scope to code editing should not isolate Kakoune from its
environment. On the contrary, Kakoune is expected to run on a Unix-like
system alongside a lot of text-based tools, and should make it easy to
interact with these tools.
For example, sorting lines should be done using the Unix sort command, not
with an internal implementation. Kakoune should make it easy to do that,
hence the +|+ command for piping selected text through a filter.
The modern Unix environment is not limited to text filters. Most people use
a graphical interface nowadays, and Kakoune should be able to take advantage
of that without hindering text mode support. For example, Kakoune enables
multiple windows by supporting many clients on the same editing session,
not by reimplementing tiling and tabbing. Those responsibilities are left
to the system window manager.
Orthogonality
-------------
Kakoune features should be as orthogonal as possible. For example, in Vim,
there are many ways to modify the buffer: Through normal/insert
mode, command mode, and Vim scripts. In Kakoune, modifying the buffer is
only the job of normal/insert mode.
That means there should be clear separation of concerns between modes:
* normal mode is for manipulating the selection and the selection contents.
* insert mode is for interactive insertion into the buffer.
* command mode is for non-editing features (opening a file, setting
options...).
Orthogonality is an ideal; it should not forbid common sense pragmatism.
The +gf+ and +ga+ commands are not strictly selection manipulation commands,
but they do fit nicely with other +goto+ commands, so they are acceptable in
normal mode even though they could arguably be moved to command mode.
Modes should be orthogonal, as should commands within modes. For
example, Vim uses both +d+ and +x+ to delete text, with minor differences. In
Kakoune only +d+ exists, and the design ensures that +x+ is not needed.
Speed
-----
Kakoune should be fast -- fast to use, as in a lot of editing in a few
keystrokes, and fast to execute.
* Vim is the benchmark here. Most editing tasks should be doable in fewer
or the same number of keystrokes as Vim.
* Kakoune is designed with asynchronicity in mind. Launching a background
process and using its result when available should not block the editor.
* Kakoune should be implemented with speed in mind. A slow editor is a
useless one.
Simplicity
----------
Simplicity is nice. Simplicity correlates with orthogonality and speed. It makes
things easier to understand, bugs easier to fix, and code easier to change.
* *No threading*: multithreading is a hard problem and is not well suited
to a text editor:
- When we want a direct result, we need to be synchronous with
the user. A 4x speed improvement is meaningless; we need to have an
algorithm which appears instantaneous to the user.
- When we want an asynchronous result, the processing is best left
to a helper command which can be reused with other Unix tools.
* *No binary plugins*: shared objects by themselves add a lot of
complexity. Plugins add another interface to Kakoune and go against
orthogonality. The +%sh{ ... }+ and socket interfaces should be made good
enough for most plugin use cases.
- Rather than writing a plugin for intelligent code completion or source
code navigation, it is better to write an independent helper tool that can
interact with Kakoune through the shell.
* *No integrated scripting language*: for the same reason as binary plugins.
* *Limited smartness*: Kakoune should not try to be too smart. Being smart
is often unpredictable for the user and makes things context-dependent.
When Kakoune tries to be smart, it should provide the alternative,
'non-smart' version. For instance, +\*+ tries to detect word boundaries on
the selection, but +alt-*+ opts out of this behavior.
Unified interactive use and scripting
-------------------------------------
As an effect of both Orthogonality and Simplicity, normal mode is not
a layer of keys bound to a text editing language layer. Normal mode *is*
the text editing language.
That means there is no +delete-selected-text+ command that +d+ is bound
to. +d+ *is* the +delete selected text+ command.
This permits both scripting and interactive use cases to share the same text
editing language. Both use normal mode to express complex editing.
Besides promoting simplicity by avoiding the introduction of another
layer, this helps ensure the interactive editing language is expressive
enough to handle complex use cases, such as indentation hooks.
Language-agnostic
-----------------
Kakoune should not be tailored for writing in a specific programming
language. Support for different languages should be provided by a kak script
file. Built-in language support should be avoided.
Self-documenting
----------------
Kakoune should be able to document its features. Live documentation, along
with an extensive suggestion/completion system, provides the discoverability
which is often lacking in non-GUI tools. As much as possible, documentation
should be integrated with the code so that it stays up to date.
Vim compatibility
-----------------
Kakoune is inspired by Vim and should try to keep its commands similar to
Vim's if there are no compelling reasons to deviate. However, self-consistency
is more important than Vim compatibility.
================================================
FILE: doc/interfacing.asciidoc
================================================
Interfacing Kakoune with external programs
==========================================
In order to interact with the external world, Kakoune uses the shell, mainly
through the +%sh{ ... }+ string type, and its control socket.
Basic interaction
-----------------
For synchronous operations, +%sh{ ... }+ blocks are easy to use, they behave
similarly to +$( ... )+ shell construct.
For example, one can echo the current time in Kakoune's status line using:
[source,bash]
----
:echo %sh{ date }
----
For asynchronous operations, the Kakoune Unix stream socket can be used. This
is the same socket that Kakoune clients connect to. It is available through the
+kak_session+ environment variable: the socket is
+/tmp/kakoune/${username}/${kak_session}+
For example, we can echo a message in Kakoune in 10 seconds with:
[source,bash]
----
:nop %sh{ {
sleep 10
echo "eval -client '$kak_client' 'echo sleep ended'" |
kak -p ${kak_session}
} > /dev/null 2>&1 < /dev/null & }
----
* The +nop+ command is used so that any eventual output from the
+%sh{ ... }+ is not interpreted by Kakoune
* When writing to the socket, Kakoune has no way to guess in which
client's context the command should be evaluated. A temporary
context is used, which does not have any user interface, so if we want
to interact with the user, we need to use the +eval+ command, with
its +-client+ option to send commands to a specific client.
* For the command to run asynchronously, we wrap it in a sub shell
with braces, redirect its +std{in,err,out}+ to +/dev/null+, and
run it in background with +&+. Using this pattern, the shell does
not wait for this sub shell to finish before quitting.
Interactive output
------------------
It is a frequent interaction mode to run a program and display its output
in a Kakoune buffer.
The common pattern to do that is to use a fifo buffer:
[source,bash]
-----
evaluate-commands %sh{
# Create a temporary fifo for communication
output=$(mktemp -d -t kak-temp-XXXXXXXX)/fifo
mkfifo ${output}
# run command detached from the shell
{ run command here > ${output} } > /dev/null 2>&1 < /dev/null &
# Open the file in Kakoune and add a hook to remove the fifo
echo "edit! -fifo ${output} *buffer-name*
hook buffer BufClose .* %{ nop %sh{ rm -r $(dirname ${output})} }"
}
-----
This is a very simple example, most of the time, the echo command will as
well contain
-----
set buffer filetype <...>
-----
and some hooks for this filetype will have been written
Completion candidates
---------------------
Filetype specific completion should be provided by external programs.
External completions are provided using an option to store completion, which
have the following format.
----
line.column[+len]@timestamp candidate1|select1|menu1 candidate2|select2|menu2 ...
----
the first element of this string list specify where and when this completion
applies, the others are a triplet `<completion text>|<select cmd>|<menu text>`
The select command is executed whenever this menu item gets selected, and
is usually used to display an item specific documentation with
`info -placement menu '<menu item description>'`
The menu text is a markup string (see <<faces#markup-strings,`:doc faces
markup-strings`>>), so it can contain `{face}` directives.
To effectively use that completion option, it should get added to the completers
option.
---
set -add buffer completers option=my_option_name
---
As a completion program may take some time to compute the candidates, it should
run asynchronously. In order to do that, the following pattern may be used:
[source,bash]
-----
# Declare the option which will store the temporary filename
decl str plugin_filename
# Declare the completion option
decl completions plugin_completions
# Add plugin_completions to completers for files of good filetype
hook global BufSetOption filetype=my_filetype %{
set -add buffer completers option=plugin_completions
}
evaluate-commands %sh{
# ask Kakoune to write current buffer to temporary file
filename=$(mktemp -t kak-temp.XXXXXXXX)
echo "set buffer plugin_filename '$filename'
write '$filename'"
}
# End the %sh{} so that its output gets executed by Kakoune.
# Use a nop so that any eventual output of this %sh does not get interpreted.
nop %sh{ { # launch a detached shell
buffer="${kak_opt_plugin_filename}"
line="${kak_cursor_line}"
column="${kak_cursor_column}"
# run completer program and format the output in a list of completions
candidates=$(completer $buffer $line $column | completer_filter)
# remove temporary file
rm $buffer
# generate completion option value
completions="$line.$column@$kak_timestamp $candidates"
# write to Kakoune socket for the buffer that triggered the completion
echo "set buffer=${kak_bufname} plugin_completions $completions" |
kak -p ${kak_session}
} > /dev/null 2>&1 < /dev/null & }
-----
================================================
FILE: doc/json_ui.asciidoc
================================================
Json-Rpc user interface
=======================
Kakoune user interfaces can be implemented through the
https://www.jsonrpc.org/specification[json-rpc 2.0 protocol].
By launching Kakoune in client mode with the `-ui json` option, the launched
client will write newline separated json-rpc requests on stdout and read
json-rpc requests on stdin. Errors will be reported on stderr (not in
json format).
Kakoune requests are always using positional parameters, never named, and
Kakoune won't be able to parse named parameters in requests.
Here are the data structures used:
* Color: a string, either a named color, or #rrggbb, or 'default'
* Attribute: one of {underline, curly_underline, double_underline, reverse, blink, bold, dim, italic, final_fg, final_bg, final_attr}
* Face { Color fg; Color bg; Array<Attribute> attributes; }
* Atom { Face face; String contents; }
* Line : Array of Atom
* Coord { int line; int column }
Here are the requests that can be written by the json ui on stdout:
* draw(Array<Line> lines, Coord cursor_pos, Face default_face, Face padding_face, int widget_columns)
padding_face is the face of the padding characters '~' in the
terminal UI.
cursor_pos is the main cursor coordinates
widget_columns is the number of columns at the start of each line used by flag-lines highlighters.
* draw_status(Line prompt, Line content, int cursor_pos, Line mode_line, Face default_face)
cursor_pos is the location of the cursor in the content, the UI is expected to trim
content in order to ensure the cursor stays visible, if cursor_pos is negative, no
cursor should be displayed in the prompt. Prompt cursor show have priority to buffer
cursor if only one cursor can be displayed.
* menu_show(Array<Line> items, Coord anchor, Face selected_item_face, Face menu_face,
String style)
style can be:
- prompt: display the menu as a prompt menu (anchor is ignored)
- inline: display the menu next to (above or below) the anchor coordinate
- search: display the menu as a search menu (anchor is ignored)
* menu_select(int selected)
* menu_hide()
* info_show(Line title, Array<Line> content, Coord anchor, Face face, String style)
style can be:
- prompt: display the info as a prompt info (anchor is ignored)
- inline: display the info next to (above or below) the anchor coordinate
- inlineAbove: display the info next to (above) the anchor coordinate
- inlineBelow: display the info next to (below) the anchor coordinate
- menuDoc: display the info next to the menu, as a documentation for it
- modal: display the info in a way that shows Kakoune is waiting for a
special action related to it.
* info_hide()
* set_ui_options(Map<String, String> options)
called when ui_options changed with a map of options name to option values
* refresh(bool force)
The requests that the json ui can interpret on stdin are:
* keys(String key1, String key2...): keystrokes
* resize(int rows, int columns): notify ui resize
* scroll(int amount, int line, int colum): scroll by given line amount, line and
column relate to cursor position
* mouse_move(int line, int column): line and column relate to the cursor position.
* mouse_press(String button, int line, int column): line and column relate to
cursor position, button can be 'left', 'middle' or 'right'
* mouse_release(String button, int line, int column): same.
* menu_select(int index): explicit select of given menu entry
================================================
FILE: doc/kak.1
================================================
.Dd June 15, 2021
.Dt KAK 1
.Os
.Sh NAME
.Nm kak
.Nd a vim-inspired, selection oriented code editor
.
.Sh SYNOPSIS
.Nm
.Op Fl d
.Op Fl n
.Op Fl ro
.Op Fl c Ar session_id | Fl s Ar session_id
.Op Fl ui Ar ui_type
.Op Fl e Ar command
.Op Fl E Ar command
.Op Sy + Ns Ar line Ns Oo Sy \&: Ns Ar column Oc | Sy +:
.Op Ar file ...
.
.Nm
.Fl f Ar keys
.Op Fl q
.Op Fl i Ar suffix
.Op Ar file ...
.
.Nm
.Fl p Ar session_id
.
.Nm
.Fl l
.Nm
.Fl clear
.
.Nm
.Fl version
.
.Nm
.Fl help
.
.Sh DESCRIPTION
.Sy Kakoune
is a code editor heavily inspired by
.Xr vim 1
and
.Xr vi 1 .
As such, most of its commands are similar to
.Xr vi 1 Ap s,
sharing its
.Dq keystrokes as a text editing language
model.
.Pp
.Sy Kakoune
operates in two modes, normal and insertion.
In insertion mode, keys are directly inserted into the current buffer.
In normal mode, keys are used to manipulate the current selection and to
enter insertion mode.
.Pp
.Sy Kakoune
has a strong focus on interactivity.
Most commands provide immediate and incremental results, while still
being competitive in keystroke count with vim.
.Pp
.Sy Kakoune
works on selections, which are oriented, inclusive ranges of characters.
Selections have an anchor and a cursor.
Most commands move both of them except when extending selection, where
the anchor character stays fixed and the cursor moves around.
.Pp
The options are as follows:
.Bl -tag -width indent
.It Fl help
Display a help message and quit.
.
.It Fl version
Display Kakoune version and quit.
.
.It Fl n
Do not load the system's kakrc.
.Pq often, Pa /usr/share/kak/kakrc
.
.It Fl l
List existing sessions.
.
.It Fl d
Run as a headless session
.Pq requires Fl s .
.
.It Fl e Ar command
Execute
.Ar command
after the client initialization phase.
.
.It Fl E Ar command
Execute
.Ar command
after the server initialization phase.
.
.It Fl f Ar keys
Run Kakoune in
.Sq filter mode ,
like
.Xr sed 1 .
For standard input and each file named on the command line,
the whole buffer is selected
(as with
.Li % )
then
.Ar keys
are executed.
The filtered version of standard input
is written to standard output.
Any files mentioned on the command line
are modified in-place,
but if
.Fl i
is provided then Kakoune makes a backup of the original version.
.
.It Fl i Ar suffix
Backup the files on which a filter is applied, using the given suffix.
.
.It Fl q
When in
.Sq filter mode ,
don't print any errors
.
.It Fl p Ar session_id
Send the commands written on the standard input to session
.Ar session_id .
.
.It Fl c Ar session_id
Connect to the given session
.Ar session_id .
.
.It Fl s Ar session_id
Set the current session name to
.Ar session_id .
.
.It Fl ui Ar type
Select the user interface type, which can be
.Em terminal ,
.Em dummy ,
or
.Em json .
.
.It Fl clear
Remove sessions that were terminated in an incorrect state
.Pq e.g. after a crash .
.
.It Fl ro
Begin in
.Em readonly mode ,
all the buffers opened will not be written to disk.
.
.It Sy + Ns Ar line Ns Oo Sy \&: Ns Ar column Oc | Sy +:
Specify a target line and column for the first file.
When the plus sign is followed by only a colon, then the cursor is sent
to the last line of the file.
.
.It Ar file ...
One or more
.Ar file(s)
to edit.
.El
.
.Sh ENVIRONMENT
.Bl -tag -width 6n
.It Ev KAKOUNE_POSIX_SHELL
Overrides the POSIX shell used for
.Em %sh{...}
expansion, which is
.Pa /bin/sh
.Pq Xr sh 1
if unset.
.
.It Ev KAKOUNE_CONFIG_DIR
Overrides the location of the directory containing Kakoune user
configuration.
If unset,
.Pa $XDG_CONFIG_HOME/kak
is used.
.
.It Ev KAKOUNE_RUNTIME
Overrides the location of the directory containing the Kakoune support files.
If unset, location is determined from Kakoune's binary location.
.
.It Ev XDG_CONFIG_HOME
Path to the user's configuration directory.
If unset,
.Pa $HOME/.config
is used.
.
.It Ev XDG_RUNTIME_DIR
Path to the user's session's sockets.
If unset,
.Pa $TMPDIR/kakoune
is used.
.El
.
.Sh FILES
In the paths documented below,
.Pa <rtdir>
refers to the runtime directory, whose value is determined in relation
to the path to
.Nm Ap s
binary location if
.Pa $KAKOUNE_RUNTIME
is not set:
.Pa <rtdir>
=
.Pa <path_to_kak_binary>/../share/kak .
.
.Pp
If not started with the
.Fl n
switch,
.Nm
will first load
.Pa <rtdir>/kakrc ,
which will in turn load the following additional files:
.
.Bl -bullet
.It
If the
.Pa $KAKOUNE_CONFIG_DIR/autoload
directory exists, recursively load every
.Pa *.kak
file in it, and its sub-directories.
.
.It
If it does not exist, fall back to the system-wide autoload directory in
.Pa <rtdir>/autoload ,
and recursively load all files in a similar way.
.
.It
.Pa <rtdir>/kakrc.local ,
if it exists; this is a user-defined system-wide configuration.
.
.It
.Pa $KAKOUNE_CONFIG_DIR/kakrc ,
if it exists; this is the user configuration.
.
.El
.
.Pp
Consequently, if the
.Pa $KAKOUNE_CONFIG_DIR/autoload
directory exists, only scripts stored within that directory will be
loaded \(em the built-in
.Pa *.kak
files will not be.
.
.Pp
Users who still want the built-in scripts to be loaded along their own
can create a symbolic link to
.Pa <rtdir>/autoload
.Pq or to individual scripts in it
in their user-configuration directory:
.
.Pp
.Dl ln -s \fI<rtdir>\fR/autoload "${XDG_CONFIG_HOME:-$HOME/.config}"/kak/autoload
.
.Sh EXAMPLES
.Bl -tag -width 6n
.It Edit a file:
.Nm
.Pa /path/to/file
.
.It Edit multiple files (multiple buffers will be created):
.Nm
.Pa ./file1.txt
.Pa /path/to/file2.c
.
.It Prepend a modeline that sets the tabstop to multiple files:
.Nm
.Fl f Qq ggO// kak: tabstop=8<esc>
.Pa *.c
.El
.
.Sh SEE ALSO
For the complete on-line documentation, use the
.Ic :doc
command after starting
.Nm .
.
.Pp
.Lk https://github.com/mawww/kakoune/wiki The Kakoune wiki .
.Pp
.Lk https://kakoune.org The main Kakoune web site .
.Pp
.Xr vi 1 ,
.Xr vim 1 ,
.Xr sam 1plan9 .
.
.Sh AUTHORS
.An Maxime Coste Aq Mt frrrwww@gmail.com
and many others.
================================================
FILE: doc/pages/buffers.asciidoc
================================================
= Buffers
== Commands
To open buffers or navigate through the buffers list see
<<commands#files-and-buffers,`:doc commands files-and-buffers`>>.
== Scratch Buffers
Scratch buffers are useful for volatile data and quick prototyping.
They are not linked to files, so Kakoune does not warn about unsaved
changes at exit, and the `:write` command requires an explicit filename.
One particular scratch buffer, named `\*scratch*`, is automatically created
when there are no other buffers left in the current session, which is also
the case when Kakoune starts up without any files to open.
A scratch buffer can be created by passing the `-scratch` switch to the
`:edit` command.
== Debug Buffers
Debug buffers are used to gather diagnostics. They have a number of
restrictions compared to regular buffers:
- They are skipped when cycling over the buffers list.
- Their content is not considered for word completions with `word=all`
completers.
- Hooks are not always run (like the `BufCreate`/`BufClose` hooks).
- Display profiling is disabled.
A specific `\*debug*` buffer is used by Kakoune to write errors or
warnings. This is also where the ouput of the `:debug` and the `:echo
-debug` commands will land.
A debug buffer can be created by passing the `-debug` switch to the
`:edit` command.
== FIFO Buffers
The `:edit` command can take a `-fifo` switch:
---------------------------------------------
:edit -fifo <filename> [-scroll] <buffername>
---------------------------------------------
In this case, a buffer named `<buffername>` is created which reads
its content from the FIFO (also called "named pipe") `<filename>`.
When the FIFO is written to, the buffer is automatically updated.
If the `-scroll` switch is specified, the window displaying the buffer
will scroll so that the newest data is always visible.
This is very useful for running some commands asynchronously while
displaying their result in a buffer. See `rc/make.kak` and `rc/grep.kak`
for examples.
When the write end of the FIFO is closed, the buffer becomes an ordinary
<<buffers#scratch-buffers,scratch buffer>>. When the buffer is deleted,
Kakoune closes the read end of the FIFO. Any program writing to the FIFO
will receive `SIGPIPE`, which will terminate the program by default.
================================================
FILE: doc/pages/changelog.asciidoc
================================================
= Changelog
To control the startup info message, see <<options#startup-info,`:doc options startup-info`>>
This changelog contains major and/or breaking changes to Kakoune between
released versions.
== Development Version
* `finaleol` option to support writing files that do not end with an final
end-of-line byte
* `FocusIn`/`FocusOut` events on suspend
* `%val{buffile}` is now empty for scratch buffers
* Reworked Json UI draw_status call to give UI implementation more control,
added cursor pos to the draw call and removed the set_cursor call
* `number-lines -full-relative` switch to keep a smaller line number gutter.
* `<a-I>` and `<a-A>` to select nested text objects
* `kak -C <session>` connects to a session or creates it if it does not exist.
== Kakoune 2025.06.03
* Expose env vars that are mentioned in the arguments passed to shell expansions
* Support for colored double underlines
* `git apply` can now operate on selected changes in the current buffer's
file (useful for quick (un)staging and reverting)
* `exec/eval -client` switch accepts '*' for all clients and comma separated
list of client names.
== Kakoune 2024.05.18
* Fixed tests on Alpine Linux and *BSD
== Kakoune 2024.05.09
* `flag-lines -after` switch to display text after the line
* `shell-script-candidates` completion now runs the script asynchronously
while displaying and updating results live.
* `%val{window_range}` elements are now emitted as different strings
* `+` only duplicates identical selections a single time to avoid surprising
and slow exponential growth in the number of selections.
* `daemonize-session` command makes it possible to convert the current session
to a daemon one (which will not exit on last client disconnecting)
* View mode commands and mouse scrolling no longer change selections when those go off-screen.
* New commands `git apply`, `git blame-jump`, `git edit` and `git grep`.
* `git blame` now also works in `git-diff` and `git-log` buffers.
* Completions provided via `shell-script-candidates` or `completers` are no longer sorted if the typed text is empty.
* The `terminal` alias has been replaced with a command that selects terminal program and placement based on windowing options.
* `local` scopes in `commands` and `evaluate-commands`.
== Kakoune 2023.08.08
* Fix compilation errors on FreeBSD and MacOS using clang
== Kakoune 2023.07.29
* `<a-u>` and `<a-U>` now undo/redo selection changes; the previous meaning
of moving in history tree has been moved to `<c-j>` and `<c-k>`
* `%exp{...}` expansions provide flexible quoting for expanded strings
(as double quoted strings)
* `<c-g>` cancels the current operation and goes back to the main event
loop, this provides an escape hatch when Kakoune seems to hang due to
a costly operation
* `show-matching -previous` highlighter will fall back onto the character
preceeding the cursor
== Kakoune 2022.10.31
* `complete-command` (See <<commands#configuring-command-completion,`:doc commands configuring-command-completion`>>)
* `p`, `P`, `!` and `<a-!>` commands now select the inserted text
* `x` now just extends the selection to contain full lines (as `<a-x>` did)
`<a-x>` trims partial lines from the selection (as `<a-X>` did)
* User mappings is now bound to `<space>` while keeping/removing main selection
moved to `,` and `<a-,>`
* Prompt history registers `%reg{colon}`, `%reg{slash}` and `%reg{pipe}` now
have reverse chronological order
* Executing user mode mappings no longer adds to prompt history registers.
== Kakoune 2021.11.07
* Support for curly and separately colored underlines (undocumented in 2021.10.28)
* Fixes for terminal flickering
* Fixes for command and response fifo corner cases
== Kakoune 2021.10.28
* `g` and `v` do not auto lower case the next key, so `GL` needs to be
manually mapped to `Gl` for example.
== Kakoune 2021.08.28
* command and response fifo support
(See <<expansions#command-and-response-fifo,`:doc expansions command-and-response-fifo`>>)
* Shell expansions only trim the last trailing newline instead of all of
them to make is possible to losslessly pass text through `%sh{...}`.
* `set-option -remove` support for subtracting/removing from option values
* Menu completions such as command name completion are now auto-inserted on
space
* `write -atomic` was replaced with `write -method [replace|overwrite]` to
make both write methods available explicitly
* `write <filename>` will fail if the given filename already exists and is
a regular file. Use the `-force` switch to override that behaviour.
== Kakoune 2020.09.01
* The `repl` and `send-text` aliases have been renamed respectively into
`repl-new` and `repl-send-text`.
* Daemon mode (`-d` switch) does not fork anymore.
* Replace NCursesUI with a custom terminal UI implementation
== Kakoune 2020.08.04
* Introduce `User` hook support.
* The `bold` and `italic` faces are no longer built-in. Highlighters
are expected to use face attributes (`+b` and `+i`, respectively) to
decorate text.
* The `lint-enable` command no longer needs to be called to display
linting errors. The `lint-disable` command was renamed into
`lint-hide-diagnostics`.
* The `+<length>` part of a `range-specs` highlighter consistently
refers to the length of the target range.
* clients stdin is transferred to the server, making it possible
to pipe into `kak -c <session>`
* Faces can have an alpha channel, specified using the
`rgba:RRGGBBAA` format.
* replace-ranges highlighter now support empty and multi-lines ranges
* `%val{...}` now expands to list of strings, `$kak_quoted_...` now work
as expected with these.
* `*SetOption` hooks filter string will contain a value only for options
of int/str/bool types to avoid performance issue with generating those
on more complex option types.
== Kakoune 2020.01.16
* Expose history tree through `$kak_history` and
`$kak_uncommitted_modifications`
* `InsertCompletionHide` parameter is the list of inserted
ranges
== Kakoune 2019.12.10
* Arrow keys and `<home>`, `<end>` are not normal mode commands
anymore but default key mappings.
* `ModeChange` hook parameter now takes `push:` or `pop:` prefix,
`InsertBegin`, `InsertEnd`, `NormalBegin` and `NormalEnd`
were removed.
* `-verbatim` switch in `evaluate-commands` for perfect command
forwarding to another context.
* `WrapMarker` face used by `wrap -marker` highlighter
* `info` supports markup with the `-markup` switch
* `rename-buffer` gained `-file` and `-scratch` switches
to support converting buffer types.
== Kakoune 2019.07.01
* Re-organized bundled script files directory hierarchy.
* Introduced helpers to write/read from file in scripts with
`%file{...}` expansion and `echo -to-file <filename>`.
* Added `ClientCreate` and `ClientClose` hooks
* `edit -scratch` with no buffer name will create a new
scratch buffer with a unique autogenerated name.
* `info -placement` is now `info -style` and supports
`menu` and `modal` additional styles.
* `completions` option type `docstring` are now arbitrary
kakoune commands that are run on item select.
* `InsertCompletionSelect` hook has been removed as
`completions` commands now provides a similar feature.
* Introduced a module system using the `provide-module` and
`require-module` commands that allows for lazily loading language
support files with dependency resolution.
* Added a new hook `ModuleLoaded` which is run after a module is
loaded, allowing for module specific configuration.
* Shell quoting of lists is not automatic anymore, `$kak_quoted_...`
makes it opt-in, and works for all option types.
* Lower case function key syntax is not accepted anymore,
`<f1>` should be converted to `<F1>`.
== Kakoune 2019.01.20
* `auto_complete` has been renamed to `autocomplete` for more
consistency.
* Start of a builtin key parser in the ncurses ui bypassing
the ncurses one. Can be favored by setting the ui option
`ncurses_builtin_key_parser` to `true`.
* Right clicks extend the current selection, the control modifier allows
merging all the selections after extension.
* The `regex` highlighter now supports named capture groups to
ease readability.
== Kakoune 2018.10.27
* `remove-hooks` <group> argument is now a regex and removes all
hooks whose group matches it.
* `exclusive` face attribute (e) has been replaced with more
granular `final foreground` (f), `final background` (g), and `final
attributes` (a), or the three combined as `final` (F). Semantics
changed slightly as those attributes apply to the existing face as
well (a final face will not get modified by a following face if that
following face does not have the final attribute itself.
* `<a-m>` aka "merge consecutive selections" has been moved to `<a-_>`.
The new `<a-m>` and `<a-M>` are now symmetrical with `m` and `M`.
Those commands select (or extend) to the matching char ba
gitextract_awc3a_1b/
├── .builds/
│ ├── debian-arm64.yml
│ ├── debian.yml
│ ├── freebsd.yml
│ └── readme.yml
├── .cirrus.yml
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── config.yml
│ │ ├── crash_report.yml
│ │ ├── feature_request.yml
│ │ └── question.yml
│ ├── PULL_REQUEST_TEMPLATE/
│ │ └── pull_request_template.md
│ └── workflows/
│ ├── build-releases-linux.yaml
│ └── makefile.yml
├── .gitignore
├── CONTRIBUTING
├── Makefile
├── README.asciidoc
├── UNLICENSE
├── VIMTOKAK
├── colors/
│ ├── base16.kak
│ ├── black-on-white.kak
│ ├── default.kak
│ ├── desertex.kak
│ ├── github.kak
│ ├── greyscale.kak
│ ├── gruvbox-dark.kak
│ ├── gruvbox-light.kak
│ ├── kaleidoscope-dark.kak
│ ├── kaleidoscope-light.kak
│ ├── lucius.kak
│ ├── palenight.kak
│ ├── plain.kak
│ ├── red-phoenix.kak
│ ├── reeder.kak
│ ├── solarized-dark-termcolors.kak
│ ├── solarized-dark.kak
│ ├── solarized-light-termcolors.kak
│ ├── solarized-light.kak
│ ├── tomorrow-night.kak
│ └── zenburn.kak
├── contrib/
│ ├── TRAMPOLINE
│ ├── Tupfile
│ ├── describe_sessions.sh
│ ├── gendocs.py
│ ├── kakmap.rb
│ ├── kakoune.spec
│ └── tmux-256color.terminfo
├── doc/
│ ├── autoedit.asciidoc
│ ├── coding-style.asciidoc
│ ├── design.asciidoc
│ ├── interfacing.asciidoc
│ ├── json_ui.asciidoc
│ ├── kak.1
│ ├── pages/
│ │ ├── buffers.asciidoc
│ │ ├── changelog.asciidoc
│ │ ├── command-parsing.asciidoc
│ │ ├── commands.asciidoc
│ │ ├── execeval.asciidoc
│ │ ├── expansions.asciidoc
│ │ ├── faces.asciidoc
│ │ ├── faq.asciidoc
│ │ ├── highlighters.asciidoc
│ │ ├── hooks.asciidoc
│ │ ├── keymap.asciidoc
│ │ ├── keys.asciidoc
│ │ ├── mapping.asciidoc
│ │ ├── modes.asciidoc
│ │ ├── options.asciidoc
│ │ ├── regex.asciidoc
│ │ ├── registers.asciidoc
│ │ └── scopes.asciidoc
│ └── writing_scripts.asciidoc
├── gdb/
│ └── kakoune.py
├── rc/
│ ├── detection/
│ │ ├── editorconfig.kak
│ │ ├── file.kak
│ │ └── modeline.kak
│ ├── filetype/
│ │ ├── apl.kak
│ │ ├── arch-linux.kak
│ │ ├── asciidoc.kak
│ │ ├── awk.kak
│ │ ├── c-family.kak
│ │ ├── cabal.kak
│ │ ├── capnp.kak
│ │ ├── clojure.kak
│ │ ├── cmake.kak
│ │ ├── coffee.kak
│ │ ├── conf.kak
│ │ ├── coq.kak
│ │ ├── crystal.kak
│ │ ├── css.kak
│ │ ├── cucumber.kak
│ │ ├── cue.kak
│ │ ├── d.kak
│ │ ├── dart.kak
│ │ ├── dhall.kak
│ │ ├── diff-parse.pl
│ │ ├── diff.kak
│ │ ├── dockerfile.kak
│ │ ├── elixir.kak
│ │ ├── elm.kak
│ │ ├── elvish.kak
│ │ ├── erlang.kak
│ │ ├── eruby.kak
│ │ ├── etc.kak
│ │ ├── exherbo.kak
│ │ ├── fennel.kak
│ │ ├── fidl.kak
│ │ ├── fish.kak
│ │ ├── forth.kak
│ │ ├── fsharp.kak
│ │ ├── gas.kak
│ │ ├── gdscript.kak
│ │ ├── gentoo-linux.kak
│ │ ├── git.kak
│ │ ├── github.kak
│ │ ├── gjs.kak
│ │ ├── gleam.kak
│ │ ├── gluon.kak
│ │ ├── go.kak
│ │ ├── graphql.kak
│ │ ├── gren.kak
│ │ ├── groovy.kak
│ │ ├── haml.kak
│ │ ├── hare.kak
│ │ ├── haskell.kak
│ │ ├── hbs.kak
│ │ ├── hjson.kak
│ │ ├── html.kak
│ │ ├── hyprlang.kak
│ │ ├── i3.kak
│ │ ├── ini.kak
│ │ ├── janet.kak
│ │ ├── java.kak
│ │ ├── javascript.kak
│ │ ├── jinja.kak
│ │ ├── json.kak
│ │ ├── json5.kak
│ │ ├── julia.kak
│ │ ├── just.kak
│ │ ├── kakrc.kak
│ │ ├── kdl.kak
│ │ ├── kickstart.kak
│ │ ├── kitty.kak
│ │ ├── kotlin.kak
│ │ ├── latex.kak
│ │ ├── ledger.kak
│ │ ├── lisp.kak
│ │ ├── lua.kak
│ │ ├── mail.kak
│ │ ├── makefile.kak
│ │ ├── markdown.kak
│ │ ├── mercurial.kak
│ │ ├── mercury.kak
│ │ ├── meson.kak
│ │ ├── mlb.kak
│ │ ├── moon.kak
│ │ ├── nim.kak
│ │ ├── ninja.kak
│ │ ├── nix.kak
│ │ ├── ocaml.kak
│ │ ├── odin.kak
│ │ ├── pascal.kak
│ │ ├── perf.kak
│ │ ├── perl.kak
│ │ ├── php.kak
│ │ ├── pony.kak
│ │ ├── prolog.kak
│ │ ├── protobuf.kak
│ │ ├── prql.kak
│ │ ├── pug.kak
│ │ ├── purescript.kak
│ │ ├── python.kak
│ │ ├── r.kak
│ │ ├── ragel.kak
│ │ ├── restructuredtext.kak
│ │ ├── ron.kak
│ │ ├── ruby.kak
│ │ ├── rust.kak
│ │ ├── sass.kak
│ │ ├── scala.kak
│ │ ├── scheme.kak
│ │ ├── scss.kak
│ │ ├── sh.kak
│ │ ├── sml.kak
│ │ ├── sql.kak
│ │ ├── sshconfig.kak
│ │ ├── svelte.kak
│ │ ├── swift.kak
│ │ ├── systemd.kak
│ │ ├── taskpaper.kak
│ │ ├── tcl.kak
│ │ ├── terraform.kak
│ │ ├── toml.kak
│ │ ├── troff.kak
│ │ ├── ttl.kak
│ │ ├── tupfile.kak
│ │ ├── twig.kak
│ │ ├── typst.kak
│ │ ├── vhdl.kak
│ │ ├── void-linux.kak
│ │ ├── wren.kak
│ │ ├── yaml.kak
│ │ └── zig.kak
│ ├── tools/
│ │ ├── autorestore.asciidoc
│ │ ├── autorestore.kak
│ │ ├── autowrap.kak
│ │ ├── clang.kak
│ │ ├── comment.kak
│ │ ├── ctags.kak
│ │ ├── doc.asciidoc
│ │ ├── doc.kak
│ │ ├── fifo.kak
│ │ ├── format.kak
│ │ ├── git.kak
│ │ ├── go/
│ │ │ └── gopls.kak
│ │ ├── grep.kak
│ │ ├── jump.kak
│ │ ├── lint.asciidoc
│ │ ├── lint.kak
│ │ ├── make.kak
│ │ ├── man.kak
│ │ ├── menu.kak
│ │ ├── patch-range.pl
│ │ ├── patch.kak
│ │ ├── python/
│ │ │ └── jedi.kak
│ │ ├── rust/
│ │ │ └── racer.kak
│ │ └── spell.kak
│ └── windowing/
│ ├── appleterminal.kak
│ ├── detection.kak
│ ├── hyprland.kak
│ ├── iterm.kak
│ ├── kitty.kak
│ ├── new-client.kak
│ ├── niri.kak
│ ├── repl/
│ │ ├── dtach.kak
│ │ ├── kitty.kak
│ │ ├── tmux.kak
│ │ └── x11.kak
│ ├── screen.kak
│ ├── sway.kak
│ ├── tmux.kak
│ ├── wayland.kak
│ ├── wezterm.kak
│ ├── x11.kak
│ └── zellij.kak
├── share/
│ └── kak/
│ └── kakrc
├── src/
│ ├── .gdbinit
│ ├── alias_registry.cc
│ ├── alias_registry.hh
│ ├── array.hh
│ ├── array_view.hh
│ ├── assert.cc
│ ├── assert.hh
│ ├── backtrace.cc
│ ├── backtrace.hh
│ ├── buffer.cc
│ ├── buffer.hh
│ ├── buffer.inl.hh
│ ├── buffer_manager.cc
│ ├── buffer_manager.hh
│ ├── buffer_utils.cc
│ ├── buffer_utils.hh
│ ├── changes.cc
│ ├── changes.hh
│ ├── client.cc
│ ├── client.hh
│ ├── client_manager.cc
│ ├── client_manager.hh
│ ├── clock.hh
│ ├── color.cc
│ ├── color.hh
│ ├── command_manager.cc
│ ├── command_manager.hh
│ ├── commands.cc
│ ├── commands.hh
│ ├── completion.cc
│ ├── completion.hh
│ ├── context.cc
│ ├── context.hh
│ ├── coord.hh
│ ├── debug.cc
│ ├── debug.hh
│ ├── diff.hh
│ ├── display_buffer.cc
│ ├── display_buffer.hh
│ ├── enum.hh
│ ├── env_vars.cc
│ ├── env_vars.hh
│ ├── event_manager.cc
│ ├── event_manager.hh
│ ├── exception.cc
│ ├── exception.hh
│ ├── face.hh
│ ├── face_registry.cc
│ ├── face_registry.hh
│ ├── file.cc
│ ├── file.hh
│ ├── flags.hh
│ ├── format.cc
│ ├── format.hh
│ ├── function.hh
│ ├── hash.cc
│ ├── hash.hh
│ ├── hash_map.cc
│ ├── hash_map.hh
│ ├── highlighter.cc
│ ├── highlighter.hh
│ ├── highlighter_group.cc
│ ├── highlighter_group.hh
│ ├── highlighters.cc
│ ├── highlighters.hh
│ ├── hook_manager.cc
│ ├── hook_manager.hh
│ ├── input_handler.cc
│ ├── input_handler.hh
│ ├── insert_completer.cc
│ ├── insert_completer.hh
│ ├── json.cc
│ ├── json.hh
│ ├── json_ui.cc
│ ├── json_ui.hh
│ ├── keymap_manager.cc
│ ├── keymap_manager.hh
│ ├── keys.cc
│ ├── keys.hh
│ ├── line_modification.cc
│ ├── line_modification.hh
│ ├── main.cc
│ ├── memory.cc
│ ├── memory.hh
│ ├── meta.hh
│ ├── normal.cc
│ ├── normal.hh
│ ├── option.hh
│ ├── option_manager.cc
│ ├── option_manager.hh
│ ├── option_types.cc
│ ├── option_types.hh
│ ├── optional.hh
│ ├── parameters_parser.cc
│ ├── parameters_parser.hh
│ ├── profile.hh
│ ├── range.hh
│ ├── ranges.cc
│ ├── ranges.hh
│ ├── ranked_match.cc
│ ├── ranked_match.hh
│ ├── ref_ptr.hh
│ ├── regex.cc
│ ├── regex.hh
│ ├── regex_vm.cc
│ ├── regex_vm.hh
│ ├── register_manager.cc
│ ├── register_manager.hh
│ ├── remote.cc
│ ├── remote.hh
│ ├── safe_ptr.hh
│ ├── scope.cc
│ ├── scope.hh
│ ├── selection.cc
│ ├── selection.hh
│ ├── selectors.cc
│ ├── selectors.hh
│ ├── shared_string.cc
│ ├── shared_string.hh
│ ├── shell_manager.cc
│ ├── shell_manager.hh
│ ├── string.cc
│ ├── string.hh
│ ├── string_utils.cc
│ ├── string_utils.hh
│ ├── terminal_ui.cc
│ ├── terminal_ui.hh
│ ├── unicode.hh
│ ├── unique_descriptor.hh
│ ├── unique_ptr.hh
│ ├── unit_tests.cc
│ ├── unit_tests.hh
│ ├── units.hh
│ ├── user_interface.hh
│ ├── utf8.hh
│ ├── utf8_iterator.hh
│ ├── utils.hh
│ ├── value.hh
│ ├── vector.hh
│ ├── window.cc
│ ├── window.hh
│ ├── word_db.cc
│ ├── word_db.hh
│ └── word_splitter.hh
└── test/
├── README.asciidoc
├── commands/
│ ├── edit-fifo-noscroll/
│ │ ├── cmd
│ │ ├── out
│ │ └── script
│ ├── edit-fifo-noscroll-noeol/
│ │ ├── cmd
│ │ ├── out
│ │ └── script
│ ├── fifo-read-ranges/
│ │ ├── cmd
│ │ ├── rc
│ │ └── script
│ ├── fifo-read-ranges-noeol/
│ │ ├── cmd
│ │ ├── rc
│ │ └── script
│ ├── fifo-read-ranges-noeol-scroll/
│ │ ├── cmd
│ │ ├── rc
│ │ └── script
│ └── fifo-read-ranges-scroll/
│ ├── cmd
│ ├── rc
│ └── script
├── compose/
│ ├── backward-search/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── catch-error-desc/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── complex-pipe/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_selections
│ │ └── out
│ ├── del-empty-line/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── discard-selections-with-itersel/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── do-not-run-hooks-added-by-parent/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── echo-to-file/
│ │ ├── cmd
│ │ └── out
│ ├── eof-multi-delete/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── eol-at-eof/
│ │ ├── opt-in-no-eol/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ ├── opt-out-no-eol/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ ├── write-after-insert-into-empty-file/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ ├── write-empty-file/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ └── write-no-eol/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── file-expansion/
│ │ ├── cmd
│ │ └── out
│ ├── history/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_history
│ │ └── rc
│ ├── hook-named-captures/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── inline-sort/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── line-completion/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── no-hook-on-unset-option-with-same-parent/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── pipe-at-eof/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── select-codepoints/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_selections_char_desc
│ │ ├── kak_selections_desc
│ │ └── rc
│ ├── select-display-columns/
│ │ ├── cmd
│ │ ├── enabled
│ │ ├── in
│ │ ├── kak_selections_char_desc
│ │ ├── kak_selections_desc
│ │ ├── kak_selections_display_column_desc
│ │ └── rc
│ ├── select-timestamp/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── selections_char_desc-expansion/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_char_desc
│ ├── undo-multi-replace-at-end/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ └── unicode/
│ ├── cmd
│ ├── enabled
│ ├── in
│ └── out
├── display/
│ ├── horizontal-scroll/
│ │ ├── cmd
│ │ ├── in
│ │ └── script
│ ├── horizontal-scroll-onto-tab/
│ │ ├── cmd
│ │ ├── in
│ │ └── script
│ ├── horizontal-scroll-with-tab/
│ │ ├── cmd
│ │ ├── in
│ │ └── script
│ └── vertical-scroll/
│ ├── cmd
│ ├── in
│ └── script
├── highlight/
│ ├── column/
│ │ └── multi-columns/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── face-override/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── named-captures/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── number-lines/
│ │ ├── basic/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ └── full-relative/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── ranges/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── regions/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── regions-recurse/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── replace-ranges/
│ │ ├── replace-empty-range/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── replace-large-with-multiple-lines/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── replace-multiline-range/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── replace-multiline-range-pulls-new-lines/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── replace-multiline-range-scrolls-fine/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── replace-only-fully-selected-ranges/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ └── replace-with-multiple-lines/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── rust/
│ │ ├── comment0/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── doc_comment_hidden/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── doc_comment_hidden_with_empty_line/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── inner_block_comment1/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── inner_block_doc_comment1/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── inner_line_doc_comment1/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── let/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── line_comment1/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── outer_block_doc_comment0/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── pub/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ ├── todo/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── rc
│ │ │ └── script
│ │ └── value/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── tabulation/
│ │ └── ensure-cursor-on-tab-fully-visible/
│ │ ├── cmd
│ │ ├── in
│ │ └── script
│ └── wrap/
│ ├── avoid-odd-places/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── basic/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── interact-with-number-lines/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── interact-with-replace-ranges/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── interact-with-show-whitespaces/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── interact-with-tabulation/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── marker-and-indent/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── marker-interact-with-long-replace-ranges/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ └── word/
│ ├── cmd
│ ├── in
│ ├── rc
│ └── script
├── hooks/
│ ├── completion-hide/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── completion-hide-using-register/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── module-loaded/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── once/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ └── remove-regex/
│ ├── cmd
│ ├── out
│ └── rc
├── indent/
│ ├── c-family/
│ │ ├── align-while-expr/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── close-block/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── close-function-with-struct-param/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── close-namespace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── comment-line-continuation/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── construct-align/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-function-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-generic-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-if-body/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-if-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-after-parenthesis/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-else-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-if-body/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-if-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── kak_selections_desc
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── move-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── multiline-nested-align/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── nested-align/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── open-function/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── paren-in-literal/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── preserve-tabs/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── clojure/
│ │ └── doubled-brackets/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── comment/
│ │ ├── comment-multiple-lines-indented/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── comment-multiple-lines-unindented/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── comment-multiple-lines-when-partially-commented/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── uncomment-multiple-indented-lines/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── elixir/
│ │ ├── do-keyword/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── following-blocks-should-not-prevent-end/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── function-definition-shouldnt-duplicate/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── insert-comment-hash/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── fidl/
│ │ ├── comments/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── on-closing/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── on-newline/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── go/
│ │ ├── deindent-function-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-generic-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-if-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── insert-comment/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── haskell/
│ │ ├── before-comment/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indented-comment/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── inside-comment/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── html/
│ │ ├── indent-closing-tag/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── indent-on-new-line/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── javascript/
│ │ └── deindent-complex-brace-structure/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── lisp/
│ │ └── doubled-brackets/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── lua/
│ │ ├── insert-end-only-when-needed/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── unindent-after-end/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── markdown/
│ │ ├── inside-complex-blockquote/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── inside-list-item/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── inside-nested-list-item/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── inside-simple-blockquote/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── inside-strong-emphasis/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── list-item/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── open-after-setext-heading-1/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── open-after-setext-heading-2/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── python/
│ │ ├── empty-start-of-file/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── empty-start-of-file-indented/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── exit-block/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── exit-block-indented/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── not-a-comment/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── not-a-comment-indented/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── paragraph-break/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── paragraph-break-indented/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── ruby/
│ │ ├── deindent-on-if-else-end/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── do-keyword/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── following-blocks-should-not-prevent-end/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-after-class/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── insert-comment-hash/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── method-definition-shouldnt-duplicate/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── rust/
│ │ ├── after-open/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── after-open-with-chars/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── after-variable/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── after-where/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── align-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── align-closing-brack/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── align-closing-paren/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── before-where/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── block-comment/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── block-comment-close/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── dedent/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── dedent-async/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── dedent-function-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── dedent-generic-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── dedent-if-closing-brace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── empty-line/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── empty-match/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── line-comment/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── line-comment-close/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── line-start-with-operator/
│ │ │ ├── bar
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── on-open-paren/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── sh/
│ │ ├── deindent-after-done/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-after-esac/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-after-fi/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-case-option/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-compound-command/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-one-line-case-option/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── deindent-only-else/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-after-do/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-after-in/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-after-then/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-block-case/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── indent-compound-command/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── no-deindent-after-else/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── no-deindent-after-fi/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ └── swift/
│ ├── after-open-brace/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── align-closing-brace/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── closure-after-in/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── comment-continuation/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ └── doc-comment-continuation/
│ ├── cmd
│ ├── in
│ ├── out
│ └── rc
├── normal/
│ ├── align/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── align-tab/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── all/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── append/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── append-at-eol/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── change/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── clear-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── codepoint-width/
│ │ ├── tab-width/
│ │ │ ├── cmd
│ │ │ ├── enabled
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ └── vertical-movement/
│ │ ├── cmd
│ │ ├── enabled
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── concat-paste-line/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_selections_desc
│ │ └── out
│ ├── convert-spaces-to-tabs/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── convert-tabs-to-spaces/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── copy-sel-above/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── copy-sel-below/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── copy-sel-below-multi-line/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── deindent/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── delete/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── duplicate-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── extend-lines/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── extra-word-chars/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_selections
│ │ └── rc
│ ├── facedesc-invalid-syntax/
│ │ ├── attributes/
│ │ │ ├── cmd
│ │ │ └── error
│ │ └── bg-color/
│ │ ├── cmd
│ │ └── error
│ ├── find-char-backward/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── find-char-backward-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── find-char-forward/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── find-char-forward-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── goto/
│ │ ├── buffer-bottom/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── buffer-end/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── buffer-top/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── file/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── last-buffer/
│ │ │ ├── cmd
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── last-change/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── line-begin/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ └── line-end/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── goto-extending/
│ │ ├── buffer-bottom/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── buffer-end/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── buffer-top/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── last-change/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── line-begin/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ └── line-end/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── indent/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── insert/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── insert-at-line-start/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── insert-replace/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── jump/
│ │ ├── backward/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ ├── backward-count/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ ├── backward-dirty-middle/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ ├── backward-invalid-count/
│ │ │ ├── cmd
│ │ │ ├── error
│ │ │ └── in
│ │ ├── forward/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ ├── forward-count/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── out
│ │ └── forward-invalid-count/
│ │ ├── cmd
│ │ ├── error
│ │ └── in
│ ├── keep-cmd/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── keep-cmd-reg/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_selections
│ │ └── rc
│ ├── lower-case/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── macro/
│ │ ├── record-macro/
│ │ │ ├── cmd
│ │ │ └── out
│ │ └── replay-macro-mapped-word-completion/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── match-char/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── move/
│ │ ├── down/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── down-extending/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── left/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── left-extending/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── right/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── right-extending/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── up/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ └── up-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── next-big-word/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── next-big-word-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── next-match/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_selections
│ │ └── rc
│ ├── next-match-appending/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_selections
│ │ └── rc
│ ├── next-word/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── next-word-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── object/
│ │ ├── around/
│ │ │ ├── angle/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── argument/
│ │ │ │ ├── multi-level/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── single-level/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── big-word/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── brackets/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── double_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── grave_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── indent/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── paragraph/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── parenthesis/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── sentence/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── single_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── slash/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── word/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── around-parent/
│ │ │ ├── angle/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── brackets/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── parenthesis/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── drop-non-whitespace/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── end/
│ │ │ ├── angle/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── argument/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── big-word/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── brackets/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── double_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── grave_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── indent/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── paragraph/
│ │ │ │ ├── count/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── single/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── to-buffer-end/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── parenthesis/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── sentence/
│ │ │ │ ├── count/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── single/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── to-buffer-end/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── single_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── word/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── end-extending/
│ │ │ ├── angle/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── argument/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── big-word/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── brackets/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── double_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── grave_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── indent/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── paragraph/
│ │ │ │ ├── count/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── single/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── parenthesis/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── sentence/
│ │ │ │ ├── count/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── single/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── single_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── word/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── end-extending-parent/
│ │ │ └── braces/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── inner/
│ │ │ ├── angle/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── argument/
│ │ │ │ ├── multi-level/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── single-level/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── big-word/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── brackets/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── double_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── empty-braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── error
│ │ │ │ └── in
│ │ │ ├── empty-double_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── error
│ │ │ │ └── in
│ │ │ ├── grave_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── indent/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── paragraph/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── parenthesis/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── sentence/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── single_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── slash/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── word/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── nested/
│ │ │ ├── around/
│ │ │ │ ├── arguments/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── big-word/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── curly-braces/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── double-quotes/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── number/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── paragraph/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── sentence/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── whitespaces/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── word/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── inner/
│ │ │ ├── arguments/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── big-word/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── curly-braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── double-quotes/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── number/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── paragraph/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── sentence/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── whitespaces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── word/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── on-end/
│ │ │ ├── around/
│ │ │ │ ├── angle/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── braces/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── brackets/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── parenthesis/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── inner/
│ │ │ │ ├── angle/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── braces/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── brackets/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── parenthesis/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── to-end/
│ │ │ ├── angle/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── brackets/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── parenthesis/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── on-start/
│ │ │ ├── around/
│ │ │ │ ├── angle/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── braces/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── brackets/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── double_quote/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── grave_quote/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── parenthesis/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── single_quote/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── slash/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── inner/
│ │ │ │ ├── angle/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── braces/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── brackets/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── double_quote/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── grave_quote/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── parenthesis/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── single_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── to-start/
│ │ │ ├── angle/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── brackets/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── parenthesis/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── start/
│ │ │ ├── angle/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── argument/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── big-word/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── braces/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── brackets/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── double_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── grave_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── indent/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── paragraph/
│ │ │ │ ├── count/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── single/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── parenthesis/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── sentence/
│ │ │ │ ├── count/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ ├── single/
│ │ │ │ │ ├── cmd
│ │ │ │ │ ├── in
│ │ │ │ │ └── kak_quoted_selections
│ │ │ │ └── to-buffer-begin/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ ├── single_quote/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── word/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ └── start-extending/
│ │ ├── angle/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── argument/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── big-word/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── braces/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── brackets/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── double_quote/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── grave_quote/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── indent/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── paragraph/
│ │ │ ├── count/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── single/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── parenthesis/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── sentence/
│ │ │ ├── count/
│ │ │ │ ├── cmd
│ │ │ │ ├── in
│ │ │ │ └── kak_quoted_selections
│ │ │ └── single/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ ├── single_quote/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ └── word/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── open-above/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── open-below/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── open-multiple-above/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── open-multiple-below/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── paste-after/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── paste-all-after/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── paste-all-before/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── paste-all-before-missing-newline/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── paste-all-replace/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── paste-before/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── paste-before-multiple-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── pipe/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── pipe-reg/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── pipe-replaces-all-lines/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── pipe-to/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── pipe-to-reg/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── previous-big-word/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── previous-big-word-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── previous-word/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── previous-word-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── previous-word-no-underscore/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_selections
│ │ └── rc
│ ├── redo/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── reload/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── repeat-insert/
│ │ ├── repeat-insert/
│ │ │ ├── cmd
│ │ │ └── out
│ │ ├── repeat-insert-hooks/
│ │ │ ├── cmd
│ │ │ └── out
│ │ ├── repeat-insert-mapped/
│ │ │ ├── cmd
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── repeat-insert-mapped-word-completion/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ ├── repeat-normal-exec/
│ │ │ ├── cmd
│ │ │ └── out
│ │ └── repeat-normal-movement/
│ │ ├── cmd
│ │ └── out
│ ├── repeat-select/
│ │ ├── repeat-end-paragraph/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_selections_desc
│ │ └── repeat-find-char/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── replace/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── replace-lines/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── replay-complex-insert/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── replay-macro/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── restore-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── rotate/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── rotate-content/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── save-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── search/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── search-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── search-extending-multiple-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── search-reverse/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── search-reverse-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── search-reverse-extending-multiple-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── search-reverse-rightmost/
│ │ ├── missed-match/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ └── kak_quoted_selections
│ │ └── overlap/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── select/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── select-horizontal-whitespace/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── select-line/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── selection-undo/
│ │ ├── fold-redundant-entries/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── script
│ │ ├── redo/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── script
│ │ ├── undo/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── script
│ │ └── windisplay-hook/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── split/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── split-at-begin/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── split-multiple-lines/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── switch-case/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── to-char-backward/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── to-char-backward-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── to-char-forward/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── to-char-forward-extending/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── trim/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── table/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── trim-drop-empty/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── trim-lines/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── undo/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── undo-after-replace-lines/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── upper-case/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── user-modes/
│ │ ├── lock/
│ │ │ ├── cmd
│ │ │ ├── in
│ │ │ ├── out
│ │ │ └── rc
│ │ └── once/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ └── yank/
│ ├── cmd
│ ├── in
│ └── out
├── prompt/
│ ├── history-abort-previous/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── history-mapped-keys/
│ │ ├── cmd
│ │ ├── kak_reg_colon
│ │ ├── rc
│ │ └── script
│ ├── history-navigate/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── history-previous/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── history-previous-prefix/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── history-repeat-last/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ └── history-stop-at-first/
│ ├── cmd
│ ├── out
│ ├── rc
│ └── script
├── regression/
│ ├── 0-assert-on-itersel/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 0-autocomplete-overrules-completers/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── 0-comment-after-command/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 0-compute-modified-range-crash/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 0-crash-on-0-height-window/
│ │ ├── cmd
│ │ ├── in
│ │ └── script
│ ├── 0-crash-on-BufSetOption-hook/
│ │ ├── cmd
│ │ └── rc
│ ├── 0-crash-on-backspace-at-buffer-begin/
│ │ └── cmd
│ ├── 0-crash-on-delete-buffer-BufClose/
│ │ ├── cmd
│ │ └── rc
│ ├── 0-crash-on-pipe-with-selection-access/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_selections
│ │ └── out
│ ├── 0-crash-on-regex-prompt-change/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 0-crash-on-specialy-crafted-modeline/
│ │ ├── cmd
│ │ └── rc
│ ├── 0-crash-on-tab-just-before-wrap-column/
│ │ ├── cmd
│ │ ├── in
│ │ └── rc
│ ├── 0-crash-on-vertical-move-with-invalid-utf8-at-eol/
│ │ ├── cmd
│ │ └── in
│ ├── 0-deindent-on-mixed-indent-line/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 0-delete-buffer-while-dragging/
│ │ ├── cmd
│ │ └── script
│ ├── 0-eval-creates-prompt/
│ │ ├── cmd
│ │ └── script
│ ├── 0-intermediate-regex-saved-in-history/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_selection
│ │ └── script
│ ├── 0-mouse-during-insert/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── script
│ ├── 0-no-incsearch/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_selection
│ │ ├── rc
│ │ └── script
│ ├── 0-nothing-selected-on-prompt-initial-shift-tab/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── 0-open-below-should-not-move-cursor-on-eol/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_selections_desc
│ │ └── out
│ ├── 0-replace-last-eol-with-eol/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 0-rotate-at-eof-mutates-selection/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 0-select-object-with-empty-begin-match/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── 0-slow-BufCloseFifo/
│ │ ├── cmd
│ │ ├── rc
│ │ └── script
│ ├── 0-spurious-undo-group-on-external/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 0-undo-change-at-eof/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 1014-ambiguous-kak_selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 1051-crash-on-empty-param/
│ │ └── cmd
│ ├── 1053-crash-on-deletion-and-paste/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 1074-comment-leader-autoinsert-error/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 1105-object-selection-behaviour/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 1111-unexpected-behaviour-on-new-line-in-comment/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 1118-misaligned-comment-start/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 1129-capture-groups-are-broken/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 1195-infinite-loop-in-regex-matching/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 1227-segfault-on-option-access/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 1233-corrent-cursor-handling-for-indent-objects/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 1275-replaced-range-split/
│ │ └── cmd
│ ├── 1308-wrong-behaviour-of-kak-indent-on-newline/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_quoted_selections
│ │ └── rc
│ ├── 1382-column-highlighter-broken-on-horizontal-scroll/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 1433-scrolloff-broken-with-soft-wrap/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 1435-misplaced-cursor-with-show_matching-hl/
│ │ ├── cmd
│ │ ├── rc
│ │ └── script
│ ├── 1453-show_whitespaces-highlighter-breaks-tab-alignment/
│ │ ├── cmd
│ │ ├── rc
│ │ └── script
│ ├── 1459-assertion-on-wrapped-long-line/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 1469-assert-on-repeat-insert/
│ │ ├── cmd
│ │ └── error
│ ├── 1504-assertion-on-incorrect-pipe-use/
│ │ ├── cmd
│ │ └── kak_selections_desc
│ ├── 1518-wrong-undo-handling-with-fifo-buffers/
│ │ ├── cmd
│ │ └── error
│ ├── 1525-lua-indent-error/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 1580-A-not-moving-to-eol/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_selections_desc
│ │ └── rc
│ ├── 1680-crash-with-dot-and-alt-semicolon/
│ │ ├── cmd
│ │ └── out
│ ├── 1731-wrap-hidden-buffer/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 1741-scrolloff-hides-end-of-lines/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 1829-unicode-as-string-delimiter/
│ │ ├── cmd
│ │ └── out
│ ├── 1902-regex-lookbehind-ignore-before-current-pos/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── 1904-select-empty-line-indent-gets-whole-buffer/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 1920-crash-on-python-in-docstring/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 1937-opening-missing-file-by-full-path-fails/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 1964-O-does-not-position-cursor-correctly/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 2030-custom-selection-nesting/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 2056-assert-on-small-window/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 2078-assert-on-restoring-invalid-selections/
│ │ ├── cmd
│ │ └── kak_selections_desc
│ ├── 2129-inside-parentheses/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 2133-assert-on-rotate-contents/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 2245-wrap-long-word/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 2367-surround-with-tight-nesting/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 2420-discrepancy-in-star-behaviour/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── 2499-html-regions-assert/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 2562-column-highlighter-bleeding/
│ │ ├── cmd
│ │ ├── rc
│ │ └── script
│ ├── 2711-weird-regex-highlighter-behaviour/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 2737-segfault-on-WinDisplay-hook/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 2755-segfault-on-double-wrap-highlighters/
│ │ ├── cmd
│ │ ├── in
│ │ └── rc
│ ├── 2861-backspace-merges-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 2999-buggy-wrapping/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 3010-extra_word_chars-fails-with-other-buffers/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 3025-last-buffer-does-not-work-in-draft-context/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 3041-invalid-regex-highlight-accross-regions/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 3048-word-wrapping-broken/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 3219-scroll-json-ui/
│ │ ├── cmd
│ │ ├── in
│ │ └── script
│ ├── 3270-crash-in-autocomplete/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 3275-crash-on-replace-at-buffer-start/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 3349-crash-in-completion/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── 3388-command-line-parsing-does-not-preserve-invalid-utf8/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 3398-readonly-fifo-failure/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── 3439-parse-ascii-newline-as-return/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 3472-crash-on-to-sentence-start/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selection_desc
│ ├── 3478-crash-on-scroll/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 3489-crash-on-paragraph-begin/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selection_desc
│ ├── 3495-crash-highlighting-hidden-lines/
│ │ ├── cmd
│ │ ├── in
│ │ └── rc
│ ├── 3544-capture-get-lost/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 3669-pipe-adds-extra-newline/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 3733-modeline-parsing-off-by-one-line/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 3735-modeline-arbitrary-code-execution/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 3757-crash-on-capture-group-select/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 3799-incorrect-region-match/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 3909-crash-on-closing-buffer-with-user-mapping/
│ │ ├── cmd
│ │ └── rc
│ ├── 4052-replace-range-vs-whitespace-highlighter-interaction/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 4086-ruby-deindenting-other-lines-than-keywords/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 4378-line-explicit-completion-buggy/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 4414-crash-on-paste-all/
│ │ ├── cmd
│ │ └── error
│ ├── 4460-nul-byte-in-regex/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 4471-crash-on-alt-t-with-one-char-file/
│ │ ├── cmd
│ │ └── error
│ ├── 4476-invalid-line-join/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 4519-regex-alternation-priority/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections
│ ├── 4521-alt-mapping-broken-in-lower-case-modes/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 4601-int-min-arg/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 4605-fifo-hang/
│ │ ├── cmd
│ │ └── rc
│ ├── 4659-scroll-issue-with-replace-ranges/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 4669-eol-highlight-to-column-highlighter/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 4674-show-whitespaces-horizontal-scroll-assert/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 4750-crash-on-append-empty-output-at-end-of-buffer/
│ │ └── cmd
│ ├── 4753-assert-in-display-line-split/
│ │ ├── cmd
│ │ ├── in
│ │ └── rc
│ ├── 4779-crash-when-pasting-with-multiple-overlapping-selections/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 4839-scroll-invalid-cursor/
│ │ ├── cmd
│ │ ├── in
│ │ └── script
│ ├── 4843-trim-front-split-glyph/
│ │ ├── cmd
│ │ ├── enabled
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 4844-crash-on-empty-paste/
│ │ ├── cmd
│ │ └── out
│ ├── 4859-regex-invalid-behaviour/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 4887-torn-utf8-sequence/
│ │ ├── cmd
│ │ └── out
│ ├── 4896-remap-executing-mapping/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 4896-unmap-executing-mapping/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 4926-crash-with-fold-and-ranges/
│ │ ├── cmd
│ │ ├── in
│ │ └── rc
│ ├── 4927-crash-jumping-to-eol/
│ │ ├── cmd
│ │ ├── in
│ │ └── rc
│ ├── 4959-bad-default-region/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 5001-line-highlighting-breaks-at-region/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 5076-empty-text-should-not-change-prompt-history/
│ │ ├── cmd
│ │ ├── in
│ │ ├── kak_selections
│ │ └── script
│ ├── 5118-crash-on-scroll-with-insert-completion-and-wrap/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 5120-double-free-or-corruption-crash/
│ │ ├── cmd
│ │ └── in
│ ├── 5122-dot-fails-after-macro-replay/
│ │ ├── cmd
│ │ └── out
│ ├── 5124-assert-in-redo/
│ │ ├── cmd
│ │ ├── error
│ │ └── in
│ ├── 5253-line-and-column-highlighter-issue/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 5298-missing-capture-register/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_reg_0
│ ├── 5316-crash-on-duplicate-cursor-replace-at-end/
│ │ ├── cmd
│ │ └── out
│ ├── 5324-BufSetOption-triggers-twice/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── 5338-crash-when-changing-buffer-on-WinDiplay/
│ │ ├── cmd
│ │ └── rc
│ ├── 5364-exec-and-view-commands-anomalous-interaction/
│ │ ├── cmd
│ │ ├── in
│ │ └── script
│ ├── 5383-missing-redraw-with-Gtvv/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 5405-error-face-on-empty-prompt/
│ │ ├── cmd
│ │ └── script
│ ├── 5409-scrolloff-incorrectly-offset-column-highlighter/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 5414-a-p-on-multibyte-character/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 5415-final-fg-attributes-lost-to-final-attr/
│ │ ├── cmd
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ ├── 5439-visual-vertical-movement-breaks-on-out-of-screen-target/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selection_desc
│ ├── 595-smart-search-unicode/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── 612-assertion-with-NormalBegin-hook/
│ │ ├── cmd
│ │ └── rc
│ ├── 633-spurious-new-line-inserted-when-replacing-at-end/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 638-highlight-codepoint-with-bracket/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── 643-crash-on-a-@-on-specially-crafted-buffer/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 654-crash-on-undo-after-macro/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 699-to-eol-from-eol/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_selections_desc
│ ├── 704-crash-when-using-a-hook-on-NormalBegin-and-NormalEnd/
│ │ ├── cmd
│ │ └── rc
│ ├── 733-selection-list-from-string-not-valid/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 743-crash-on-replace-undo/
│ │ ├── cmd
│ │ ├── in
│ │ └── out
│ ├── 751-wrong-selection-after-undo/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 787-crash-after-S/
│ │ ├── cmd
│ │ └── error
│ ├── 809-alt-f-t-to-first-char/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 811-double-width-codepoints/
│ │ ├── cmd
│ │ ├── enabled
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 844-prev-word-at-buffer-start/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 860-python-incorrect-commenting/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 872-indentation-misbeahviour-c++/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 918-wrong-asterisk-inserted/
│ │ ├── cmd
│ │ ├── in
│ │ ├── out
│ │ └── rc
│ ├── 921-keep-empty-line-matches-all-lines/
│ │ ├── cmd
│ │ ├── in
│ │ └── kak_quoted_selections
│ ├── 993-user-text-object/
│ │ ├── cmd
│ │ └── error
│ └── quoted-vals/
│ ├── cmd
│ ├── in
│ └── out
├── run
├── shell/
│ ├── list-syntax/
│ │ ├── cmd
│ │ ├── out
│ │ └── rc
│ ├── prompt-shell-script-candidates/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ ├── prompt-shell-script-completion/
│ │ ├── cmd
│ │ ├── out
│ │ ├── rc
│ │ └── script
│ └── quoted-range/
│ ├── cmd
│ ├── out
│ └── rc
└── tools/
├── git/
│ ├── blame-in-diff/
│ │ ├── cmd
│ │ ├── enabled
│ │ ├── in
│ │ ├── kak_selection
│ │ ├── rc
│ │ └── script
│ ├── blame-jump-message/
│ │ ├── cmd
│ │ ├── enabled
│ │ ├── in
│ │ ├── rc
│ │ └── script
│ └── env
└── patch/
├── ignore-first-file/
│ ├── cmd
│ ├── enabled
│ ├── in
│ ├── out
│ └── rc
└── signature/
├── cmd
├── enabled
├── in
├── out
└── rc
Showing preview only (247K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2544 symbols across 145 files)
FILE: contrib/gendocs.py
function fix_links (line 59) | def fix_links(path):
FILE: gdb/kakoune.py
class ArrayIterator (line 3) | class ArrayIterator:
method __init__ (line 4) | def __init__(self, data, count):
method __iter__ (line 9) | def __iter__(self):
method next (line 12) | def next(self):
method __next__ (line 20) | def __next__(self):
class ArrayView (line 24) | class ArrayView:
method __init__ (line 27) | def __init__(self, val):
method display_hint (line 30) | def display_hint(self):
method children (line 33) | def children(self):
method to_string (line 36) | def to_string(self):
class LineAndColumn (line 41) | class LineAndColumn:
method __init__ (line 44) | def __init__(self, val):
method to_string (line 47) | def to_string(self):
class BufferCoordAndTarget (line 53) | class BufferCoordAndTarget:
method __init__ (line 56) | def __init__(self, val):
method to_string (line 59) | def to_string(self):
class BufferIterator (line 65) | class BufferIterator:
method __init__ (line 68) | def __init__(self, val):
method to_string (line 71) | def to_string(self):
class String (line 81) | class String:
method __init__ (line 84) | def __init__(self, val):
method to_string (line 87) | def to_string(self):
class StringView (line 101) | class StringView:
method __init__ (line 104) | def __init__(self, val):
method to_string (line 107) | def to_string(self):
class StringDataPtr (line 112) | class StringDataPtr:
method __init__ (line 115) | def __init__(self, val):
method to_string (line 118) | def to_string(self):
class RefPtr (line 127) | class RefPtr:
method __init__ (line 130) | def __init__(self, val):
method to_string (line 133) | def to_string(self):
class Option (line 138) | class Option:
method __init__ (line 141) | def __init__(self, val):
method to_string (line 144) | def to_string(self):
class CharCount (line 148) | class CharCount:
method __init__ (line 151) | def __init__(self, val):
method to_string (line 154) | def to_string(self):
class ColumnCount (line 158) | class ColumnCount:
method __init__ (line 161) | def __init__(self, val):
method to_string (line 164) | def to_string(self):
class ByteCount (line 168) | class ByteCount:
method __init__ (line 171) | def __init__(self, val):
method to_string (line 174) | def to_string(self):
class LineCount (line 178) | class LineCount:
method __init__ (line 181) | def __init__(self, val):
method to_string (line 184) | def to_string(self):
class Color (line 188) | class Color:
method __init__ (line 191) | def __init__(self, val):
method to_string (line 194) | def to_string(self):
class Regex (line 202) | class Regex:
method __init__ (line 205) | def __init__(self, val):
method to_string (line 208) | def to_string(self):
function build_pretty_printer (line 212) | def build_pretty_printer():
FILE: src/alias_registry.cc
type Kakoune (line 5) | namespace Kakoune
function StringView (line 24) | StringView AliasRegistry::operator[](StringView alias) const
FILE: src/alias_registry.hh
type Kakoune (line 9) | namespace Kakoune
class AliasRegistry (line 12) | class AliasRegistry : public SafeCountable
method AliasRegistry (line 15) | AliasRegistry(AliasRegistry& parent) : SafeCountable{}, m_parent(&pa...
method reparent (line 17) | void reparent(AliasRegistry& parent) { m_parent = &parent; }
method flatten_aliases (line 25) | auto flatten_aliases() const
method AliasRegistry (line 40) | AliasRegistry() = default;
FILE: src/array.hh
type Kakoune (line 9) | namespace Kakoune
type Array (line 13) | struct Array
method size (line 15) | constexpr size_t size() const { return N; }
method T (line 16) | constexpr const T& operator[](int i) const { return m_data[i]; }
method T (line 17) | constexpr const T* begin() const { return m_data; }
method T (line 18) | constexpr const T* end() const { return m_data+N; }
method T (line 20) | constexpr T& operator[](int i) { return m_data[i]; }
method T (line 21) | constexpr T* begin() { return m_data; }
method T (line 22) | constexpr T* end() { return m_data+N; }
function make_array (line 34) | constexpr Array<T, N> make_array(const T (&data)[N], std::index_sequen...
function make_array (line 41) | constexpr Array<T, N> make_array(const T (&data)[N])
FILE: src/array_view.hh
type Kakoune (line 7) | namespace Kakoune
class ArrayView (line 13) | class ArrayView
method ArrayView (line 18) | constexpr ArrayView()
method ArrayView (line 21) | constexpr ArrayView(T& oneval)
method ArrayView (line 24) | constexpr ArrayView(T* pointer, size_t size)
method ArrayView (line 27) | constexpr ArrayView(T* begin, T* end)
method ArrayView (line 32) | constexpr ArrayView(It begin, It end)
method ArrayView (line 36) | constexpr ArrayView(T(&array)[N]) : m_pointer(array), m_size(N) {}
method ArrayView (line 40) | constexpr ArrayView(Container&& c)
method ArrayView (line 43) | constexpr ArrayView(const std::initializer_list<T>& v)
method T (line 46) | constexpr T* pointer() const { return m_pointer; }
method size (line 47) | constexpr size_t size() const { return m_size; }
method T (line 49) | [[gnu::always_inline]]
method T (line 52) | constexpr T* begin() const { return m_pointer; }
method T (line 53) | constexpr T* end() const { return m_pointer+m_size; }
method reverse_iterator (line 56) | constexpr reverse_iterator rbegin() const { return reverse_iterator(...
method reverse_iterator (line 57) | constexpr reverse_iterator rend() const { return reverse_iterator(...
method T (line 59) | constexpr T& front() const { return *m_pointer; }
method T (line 60) | constexpr T& back() const { return *(m_pointer + m_size - 1); }
method empty (line 62) | constexpr bool empty() const { return m_size == 0; }
method ArrayView (line 64) | constexpr ArrayView subrange(size_t first, size_t count = -1) const
FILE: src/assert.cc
type Kakoune (line 12) | namespace Kakoune
type assert_failed (line 15) | struct assert_failed : logic_error
method assert_failed (line 17) | assert_failed(String message)
method StringView (line 20) | StringView what() const override { return m_message; }
function notify_fatal_error (line 25) | bool notify_fatal_error(StringView msg)
function on_assert_failed (line 40) | void on_assert_failed(const char* message)
FILE: src/assert.hh
type Kakoune (line 4) | namespace Kakoune
class StringView (line 7) | class StringView
FILE: src/backtrace.cc
type Kakoune (line 18) | namespace Kakoune
function String (line 30) | String Backtrace::desc() const
FILE: src/backtrace.hh
type Kakoune (line 4) | namespace Kakoune
class String (line 7) | class String
type Backtrace (line 9) | struct Backtrace
FILE: src/buffer.cc
type Kakoune (line 22) | namespace Kakoune
function BufferIterator (line 149) | BufferIterator Buffer::iterator_at(BufferCoord coord) const
function BufferCoord (line 155) | BufferCoord Buffer::clamp(BufferCoord coord) const
function BufferCoord (line 165) | BufferCoord Buffer::offset_coord(BufferCoord coord, CharCount offset, ...
function BufferCoordAndTarget (line 170) | BufferCoordAndTarget Buffer::offset_coord(BufferCoordAndTarget coord, ...
function String (line 181) | String Buffer::string(BufferCoord begin, BufferCoord end) const
function BufferRange (line 418) | BufferRange Buffer::do_insert(BufferCoord pos, StringView content)
function BufferCoord (line 466) | BufferCoord Buffer::do_erase(BufferCoord begin, BufferCoord end)
function BufferRange (line 509) | BufferRange Buffer::insert(BufferCoord pos, StringView content)
function BufferCoord (line 528) | BufferCoord Buffer::erase(BufferCoord begin, BufferCoord end)
function BufferRange (line 547) | BufferRange Buffer::replace(BufferCoord begin, BufferCoord end, String...
function BufferCoord (line 580) | BufferCoord Buffer::advance(ArrayView<const StringDataPtr> lines, Buff...
function BufferCoord (line 609) | BufferCoord Buffer::char_next(BufferCoord coord) const
function BufferCoord (line 622) | BufferCoord Buffer::char_prev(BufferCoord coord) const
function FsStatus (line 639) | const FsStatus& Buffer::fs_status() const
function String (line 679) | String Buffer::debug_description() const
FILE: src/buffer.hh
type Kakoune (line 22) | namespace Kakoune
type Hook (line 25) | enum class Hook
type EolFormat (line 27) | enum class EolFormat
function enum_desc (line 33) | constexpr auto enum_desc(Meta::Type<EolFormat>)
type ByteOrderMark (line 41) | enum class ByteOrderMark
function enum_desc (line 47) | constexpr auto enum_desc(Meta::Type<ByteOrderMark>)
type FinalEol (line 55) | enum class FinalEol
function enum_desc (line 62) | constexpr auto enum_desc(Meta::Type<FinalEol>)
class Buffer (line 71) | class Buffer
type Flags (line 133) | enum class Flags
method with_bit_ops (line 146) | constexpr bool with_bit_ops(Meta::Type<Flags>) { return true; }
type HistoryId (line 149) | enum class HistoryId : size_t { First = 0, Invalid = (size_t)-1 }
method Buffer (line 156) | Buffer(const Buffer&) = delete;
method Buffer (line 157) | Buffer& operator= (const Buffer&) = delete;
method Flags (line 160) | Flags flags() const { return m_flags; }
method Flags (line 161) | Flags& flags() { return m_flags; }
method HistoryId (line 178) | HistoryId current_history_id() const noexcept { return m_histor...
method HistoryId (line 179) | HistoryId next_history_id() const noexcept { return (HistoryId)...
method ByteCount (line 188) | ByteCount distance(BufferCoord begin, BufferCoord end) const { ...
method BufferCoord (line 189) | BufferCoord advance(BufferCoord coord, ByteCount count) const { r...
method StringView (line 208) | StringView operator[](LineCount line) const
method StringDataPtr (line 211) | const StringDataPtr& line_storage(LineCount line) const
method String (line 223) | const String& name() const { return m_flags & Flags::File ? m_filena...
method String (line 224) | const String& filename() const { return m_filename; }
method String (line 225) | const String& display_name() const { return m_display_name; }
method ValueMap (line 234) | ValueMap& values() const { return m_values; }
type Change (line 243) | struct Change
type Type (line 245) | enum Type : char { Insert, Erase }
type Modification (line 265) | struct Modification
type Type (line 267) | enum Type { Insert, Erase }
type HistoryNode (line 278) | struct HistoryNode : UseMemoryDomain<MemoryDomain::BufferMeta>
method UndoGroup (line 289) | const UndoGroup& current_undo_group() const { return m_current_undo_...
type LineList (line 300) | struct LineList : BufferLines
method StringDataPtr (line 302) | [[gnu::always_inline]]
method StringDataPtr (line 306) | [[gnu::always_inline]]
method StringView (line 310) | [[gnu::always_inline]]
method StringView (line 314) | StringView front() const { return BufferLines::front()->strview(); }
method StringView (line 315) | StringView back() const { return BufferLines::back()->strview(); }
method HistoryNode (line 328) | HistoryNode& history_node(HistoryId id) { return m_history[(si...
method HistoryNode (line 329) | const HistoryNode& history_node(HistoryId id) const { return m_histo...
method HistoryNode (line 330) | HistoryNode& current_history_node() { return m_history[(si...
method HistoryNode (line 331) | const HistoryNode& current_history_node() const { return m_histo...
class BufferIterator (line 74) | class BufferIterator
method BufferIterator (line 85) | BufferIterator() = default;
method BufferCoord (line 111) | const BufferCoord& coord() const noexcept { return m_coord; }
class Buffer (line 130) | class Buffer final : public SafeCountable, public Scope, private Optio...
type Flags (line 133) | enum class Flags
method with_bit_ops (line 146) | constexpr bool with_bit_ops(Meta::Type<Flags>) { return true; }
type HistoryId (line 149) | enum class HistoryId : size_t { First = 0, Invalid = (size_t)-1 }
method Buffer (line 156) | Buffer(const Buffer&) = delete;
method Buffer (line 157) | Buffer& operator= (const Buffer&) = delete;
method Flags (line 160) | Flags flags() const { return m_flags; }
method Flags (line 161) | Flags& flags() { return m_flags; }
method HistoryId (line 178) | HistoryId current_history_id() const noexcept { return m_histor...
method HistoryId (line 179) | HistoryId next_history_id() const noexcept { return (HistoryId)...
method ByteCount (line 188) | ByteCount distance(BufferCoord begin, BufferCoord end) const { ...
method BufferCoord (line 189) | BufferCoord advance(BufferCoord coord, ByteCount count) const { r...
method StringView (line 208) | StringView operator[](LineCount line) const
method StringDataPtr (line 211) | const StringDataPtr& line_storage(LineCount line) const
method String (line 223) | const String& name() const { return m_flags & Flags::File ? m_filena...
method String (line 224) | const String& filename() const { return m_filename; }
method String (line 225) | const String& display_name() const { return m_display_name; }
method ValueMap (line 234) | ValueMap& values() const { return m_values; }
type Change (line 243) | struct Change
type Type (line 245) | enum Type : char { Insert, Erase }
type Modification (line 265) | struct Modification
type Type (line 267) | enum Type { Insert, Erase }
type HistoryNode (line 278) | struct HistoryNode : UseMemoryDomain<MemoryDomain::BufferMeta>
method UndoGroup (line 289) | const UndoGroup& current_undo_group() const { return m_current_undo_...
type LineList (line 300) | struct LineList : BufferLines
method StringDataPtr (line 302) | [[gnu::always_inline]]
method StringDataPtr (line 306) | [[gnu::always_inline]]
method StringView (line 310) | [[gnu::always_inline]]
method StringView (line 314) | StringView front() const { return BufferLines::front()->strview(); }
method StringView (line 315) | StringView back() const { return BufferLines::back()->strview(); }
method HistoryNode (line 328) | HistoryNode& history_node(HistoryId id) { return m_history[(si...
method HistoryNode (line 329) | const HistoryNode& history_node(HistoryId id) const { return m_histo...
method HistoryNode (line 330) | HistoryNode& current_history_node() { return m_history[(si...
method HistoryNode (line 331) | const HistoryNode& current_history_node() const { return m_histo...
FILE: src/buffer.inl.hh
type Kakoune (line 6) | namespace Kakoune
function BufferCoord (line 16) | inline BufferCoord Buffer::next(BufferCoord coord) const
function BufferCoord (line 23) | inline BufferCoord Buffer::prev(BufferCoord coord) const
function ByteCount (line 30) | inline ByteCount Buffer::distance(ArrayView<const StringDataPtr> lines...
function BufferIterator (line 56) | inline BufferIterator Buffer::begin() const
function BufferIterator (line 61) | inline BufferIterator Buffer::end() const
function LineCount (line 66) | [[gnu::always_inline]]
function StringView (line 77) | inline StringView Buffer::substr(BufferCoord begin, BufferCoord end) c...
function BufferCoord (line 91) | inline BufferCoord Buffer::back_coord() const
function BufferCoord (line 96) | inline BufferCoord Buffer::end_coord() const
function BufferIterator (line 145) | inline BufferIterator BufferIterator::operator+(ByteCount size) const
function BufferIterator (line 151) | inline BufferIterator BufferIterator::operator-(ByteCount size) const
function BufferIterator (line 156) | inline BufferIterator& BufferIterator::operator+=(ByteCount size)
function BufferIterator (line 163) | inline BufferIterator& BufferIterator::operator-=(ByteCount size)
function BufferIterator (line 170) | inline BufferIterator& BufferIterator::operator++()
function BufferIterator (line 181) | inline BufferIterator& BufferIterator::operator--()
function BufferIterator (line 193) | inline BufferIterator BufferIterator::operator++(int)
function BufferIterator (line 200) | inline BufferIterator BufferIterator::operator--(int)
FILE: src/buffer_manager.cc
type Kakoune (line 12) | namespace Kakoune
function Buffer (line 28) | Buffer* BufferManager::create_buffer(String name, Buffer::Flags flags,...
function Buffer (line 61) | Buffer* BufferManager::get_buffer_ifp(StringView name)
function Buffer (line 73) | Buffer& BufferManager::get_buffer(StringView name)
function Buffer (line 81) | Buffer* BufferManager::get_buffer_matching_ifp(const FunctionRef<bool ...
function Buffer (line 91) | Buffer& BufferManager::get_buffer_matching(const FunctionRef<bool (Buf...
function Buffer (line 99) | Buffer& BufferManager::get_first_buffer()
FILE: src/buffer_manager.hh
type Kakoune (line 9) | namespace Kakoune
class BufferManager (line 12) | class BufferManager : public Singleton<BufferManager>
method iterator (line 24) | iterator begin() const { return m_buffers.cbegin(); }
method iterator (line 25) | iterator end() const { return m_buffers.cend(); }
method count (line 26) | size_t count() const { return m_buffers.size(); }
FILE: src/buffer_utils.cc
type Kakoune (line 19) | namespace Kakoune
function replace (line 22) | void replace(Buffer& buffer, ArrayView<BufferRange> ranges, ConstArray...
function ColumnCount (line 41) | ColumnCount get_column(const Buffer& buffer,
function ColumnCount (line 60) | ColumnCount column_length(const Buffer& buffer, ColumnCount tabstop, L...
function ByteCount (line 65) | ByteCount get_byte_to_column(const Buffer& buffer, ColumnCount tabstop...
function BufferLines (line 91) | static BufferLines parse_lines(const char* pos, const char* end, EolFo...
function Buffer (line 114) | Buffer* create_buffer_from_string(String name, Buffer::Flags flags, St...
function parse_file (line 124) | decltype(auto) parse_file(StringView filename, Func&& func)
function Buffer (line 149) | Buffer* open_file_buffer(StringView filename, Buffer::Flags flags)
function Buffer (line 157) | Buffer* open_or_create_file_buffer(StringView filename, Buffer::Flags ...
function reload_file_buffer (line 165) | void reload_file_buffer(Buffer& buffer)
function write_buffer_to_fd (line 174) | void write_buffer_to_fd(Buffer& buffer, int fd)
function write_buffer_to_file (line 201) | void write_buffer_to_file(Buffer& buffer, StringView filename,
function write_buffer_to_backup_file (line 257) | void write_buffer_to_backup_file(Buffer& buffer)
function Buffer (line 267) | Buffer* create_fifo_buffer(String name, int fd, Buffer::Flags flags, A...
function to_string (line 388) | auto to_string(Buffer::HistoryId id)
function String (line 396) | static String modification_as_string(const Buffer::Modification& modif...
function history_as_strings (line 404) | Vector<String> history_as_strings(ConstArrayView<Buffer::HistoryNode> ...
function undo_group_as_strings (line 419) | Vector<String> undo_group_as_strings(const Buffer::UndoGroup& undo_group)
function String (line 427) | String generate_buffer_name(StringView pattern)
FILE: src/buffer_utils.hh
type Kakoune (line 10) | namespace Kakoune
function String (line 13) | inline String content(const Buffer& buffer, const Selection& range)
function BufferCoord (line 18) | inline BufferCoord erase(Buffer& buffer, const Selection& range)
function CharCount (line 25) | inline CharCount char_length(const Buffer& buffer, const Selection& ra...
function CharCount (line 31) | inline CharCount char_length(const Buffer& buffer, const BufferCoord& ...
function ColumnCount (line 36) | inline ColumnCount column_length(const Buffer& buffer, const BufferCoo...
function is_bol (line 41) | inline bool is_bol(BufferCoord coord)
function is_eol (line 46) | inline bool is_eol(const Buffer& buffer, BufferCoord coord)
function is_bow (line 51) | inline bool is_bow(const Buffer& buffer, BufferCoord coord)
function is_eow (line 60) | inline bool is_eow(const Buffer& buffer, BufferCoord coord)
type AutoScroll (line 75) | enum class AutoScroll { No, NotInitially, Yes }
type WriteFlags (line 84) | enum class WriteFlags
function with_bit_ops (line 90) | constexpr bool with_bit_ops(Meta::Type<WriteFlags>) { return true; }
FILE: src/changes.cc
type Kakoune (line 3) | namespace Kakoune
function BufferCoord (line 28) | BufferCoord ForwardChangesTracker::get_old_coord(BufferCoord coord) const
function BufferCoord (line 42) | BufferCoord ForwardChangesTracker::get_new_coord(BufferCoord coord) const
function BufferCoord (line 56) | BufferCoord ForwardChangesTracker::get_new_coord_tolerant(BufferCoord ...
FILE: src/changes.hh
type Kakoune (line 7) | namespace Kakoune
type ForwardChangesTracker (line 13) | struct ForwardChangesTracker
function update_range (line 32) | auto update_range(ForwardChangesTracker& changes_tracker, Range& range...
function update_forward (line 47) | void update_forward(ConstArrayView<Buffer::Change> changes, RangeConta...
function update_backward (line 63) | void update_backward(ConstArrayView<Buffer::Change> changes, RangeCont...
function update_ranges (line 85) | void update_ranges(Buffer& buffer, size_t timestamp, RangeContainer&& ...
FILE: src/client.cc
type Kakoune (line 28) | namespace Kakoune
function DisplayCoord (line 144) | DisplayCoord Client::dimensions() const
function String (line 149) | String generate_context_info(const Context& context)
function DisplayLine (line 171) | DisplayLine Client::generate_mode_line() const
function is_inline (line 238) | static bool is_inline(InfoStyle style)
function StringView (line 440) | StringView Client::get_env_var(StringView name) const
FILE: src/client.hh
type Kakoune (line 16) | namespace Kakoune
class Window (line 19) | class Window
class UserInterface (line 20) | class UserInterface
class String (line 21) | class String
type Key (line 22) | struct Key
type InfoStyle (line 24) | enum class InfoStyle
type MenuStyle (line 25) | enum class MenuStyle
class Client (line 27) | class Client final : public SafeCountable, public OptionWatcher
method Client (line 40) | Client(Client&&) = delete;
method has_pending_inputs (line 45) | bool has_pending_inputs() const { return not m_pending_keys.empty(); }
method info_pending (line 54) | bool info_pending() const { return m_ui_pending & PendingUI::InfoSho...
method status_line_pending (line 55) | bool status_line_pending() const { return m_ui_pending & PendingUI::...
method Context (line 69) | Context& context() { return m_input_handler.context(); }
method Context (line 70) | const Context& context() const { return m_input_handler.context(); }
method InputHandler (line 72) | InputHandler& input_handler() { return m_input_handler; }
method InputHandler (line 73) | const InputHandler& input_handler() const { return m_input_handler; }
method exit (line 79) | void exit(int status) { m_on_exit(status); }
method pid (line 81) | int pid() const { return m_pid; }
type PendingUI (line 110) | enum PendingUI : int
type PendingClear (line 123) | enum class PendingClear
method with_bit_ops (line 129) | constexpr bool with_bit_ops(Meta::Type<PendingClear>) { return true; }
type Menu (line 133) | struct Menu
type Info (line 142) | struct Info
type Autoreload (line 156) | enum class Autoreload
function enum_desc (line 163) | constexpr auto enum_desc(Meta::Type<Autoreload>)
class BusyIndicator (line 174) | class BusyIndicator
type PreviousStatus (line 184) | struct PreviousStatus
FILE: src/client_manager.cc
type Kakoune (line 11) | namespace Kakoune
function String (line 38) | String ClientManager::generate_name() const
function Client (line 48) | Client* ClientManager::create_client(UniquePtr<UserInterface>&& ui, in...
function WindowAndSelections (line 152) | WindowAndSelections ClientManager::get_free_window(Buffer& buffer)
function Client (line 218) | Client* ClientManager::get_client_ifp(StringView name)
function Client (line 228) | Client& ClientManager::get_client(StringView name)
function CandidateList (line 241) | CandidateList ClientManager::complete_client_name(StringView prefix,
FILE: src/client_manager.hh
type Kakoune (line 7) | namespace Kakoune
type WindowAndSelections (line 10) | struct WindowAndSelections
class ClientManager (line 16) | class ClientManager : public Singleton<ClientManager>
method empty (line 27) | bool empty() const { return m_clients.empty(); }
method count (line 28) | size_t count() const { return m_clients.size(); }
method iterator (line 49) | iterator begin() const { return m_clients.begin(); }
method iterator (line 50) | iterator end() const { return m_clients.end(); }
FILE: src/clock.hh
type Kakoune (line 6) | namespace Kakoune
FILE: src/color.cc
type Kakoune (line 9) | namespace Kakoune
function is_color_name (line 32) | bool is_color_name(StringView color)
function Color (line 37) | Color str_to_color(StringView color)
function String (line 68) | String to_string(Color color)
function String (line 87) | String option_to_string(Color color)
function Color (line 92) | Color option_from_string(Meta::Type<Color>, StringView str)
FILE: src/color.hh
type Kakoune (line 9) | namespace Kakoune
class String (line 12) | class String
class StringView (line 13) | class StringView
type Color (line 15) | struct Color
type NamedColor (line 17) | enum NamedColor : unsigned char
method isRGB (line 48) | constexpr bool isRGB() const { return a >= RGB; }
method Color (line 50) | constexpr Color() : Color{Default} {}
method Color (line 51) | constexpr Color(NamedColor c) : color{c} {}
method Color (line 52) | constexpr Color(unsigned char r, unsigned char g, unsigned char b, u...
method validate_alpha (line 59) | constexpr void validate_alpha() {
function hash_value (line 80) | constexpr size_t hash_value(const Color& val)
FILE: src/command_manager.cc
type Kakoune (line 24) | namespace Kakoune
type parse_error (line 104) | struct parse_error : runtime_error
method parse_error (line 106) | parse_error(StringView error)
function is_command_separator (line 113) | bool is_command_separator(char c)
type ParseResult (line 118) | struct ParseResult
function ParseResult (line 125) | ParseResult parse_quoted(ParseState& state, Delimiter delimiter)
function ParseResult (line 164) | ParseResult parse_quoted_balanced(ParseState& state)
function is_ascii_horizontal_blank (line 183) | bool is_ascii_horizontal_blank(char c)
function String (line 190) | String parse_unquoted(ParseState& state)
function token_type (line 218) | Token::Type token_type(StringView type_name, bool throw_on_invalid)
function skip_blanks_and_comments (line 242) | void skip_blanks_and_comments(ParseState& state)
function BufferCoord (line 262) | BufferCoord compute_coord(StringView s)
function Token (line 278) | Token parse_percent_token(ParseState& state, bool throw_on_unterminated)
function expand_token (line 341) | void expand_token(Token&& token, const Context& context, const ShellCo...
function String (line 469) | String expand_impl(StringView str, const Context& context,
function String (line 499) | String expand(StringView str, const Context& context,
function String (line 505) | String expand(StringView str, const Context& context,
function StringView (line 512) | StringView resolve_alias(const Context& context, StringView name)
function Completions (line 648) | Completions CommandManager::complete_command_name(const Context& conte...
function Completions (line 662) | Completions CommandManager::complete_module_name(StringView query) const
function Completions (line 669) | static Completions complete_expansion(const Context& context,
function Completions (line 706) | static Completions complete_expand(const Context& context,
function Completions (line 734) | static Completions requote(Completions completions, Token::Type token_...
function Completions (line 758) | Completions CommandManager::Completer::operator()(
function Completions (line 872) | Completions CommandManager::NestedCompleter::operator()(
FILE: src/command_manager.hh
type Kakoune (line 14) | namespace Kakoune
class Context (line 17) | class Context
type CommandFlags (line 29) | enum class CommandFlags
function with_bit_ops (line 34) | constexpr bool with_bit_ops(Meta::Type<CommandFlags>) { return true; }
type CommandInfo (line 36) | struct CommandInfo { String name, info; }
type Token (line 38) | struct Token
type Type (line 40) | enum class Type
type ParseState (line 60) | struct ParseState
class CommandParser (line 68) | class CommandParser
method done (line 75) | bool done() const { return not m_state; }
class CommandManager (line 81) | class CommandManager : public Singleton<CommandManager>
type Completer (line 117) | struct Completer
type NestedCompleter (line 127) | struct NestedCompleter
type Command (line 138) | struct Command
type Module (line 151) | struct Module
type State (line 153) | enum class State
FILE: src/commands.cc
type Kakoune (line 49) | namespace Kakoune
type LocalScope (line 54) | struct LocalScope : Scope
method LocalScope (line 56) | LocalScope(Context& context)
function Buffer (line 75) | Buffer* open_fifo(StringView name, StringView filename, Buffer::Flags ...
type PerArgumentCommandCompleter (line 85) | struct PerArgumentCommandCompleter
type PerArgumentCommandCompleter<> (line 87) | struct PerArgumentCommandCompleter<>
method Completions (line 89) | Completions operator()(const Context&, CommandParameters,
function make_completer (line 121) | PerArgumentCommandCompleter<std::decay_t<Completers>...>
function add_flags (line 128) | auto add_flags(Completer completer, Completions::Flags completions_flags)
function menu (line 139) | auto menu(Completer completer)
function Completions (line 175) | static Completions complete_buffer_name(const Context& context, String...
function make_single_word_completer (line 221) | auto make_single_word_completer(Func&& func)
function Completions (line 235) | static Completions complete_scope(const Context&,
function Completions (line 242) | static Completions complete_scope_including_current(const Context&,
function Completions (line 249) | static Completions complete_scope_no_global(const Context&,
function Completions (line 257) | static Completions complete_command_name(const Context& context,
type AsyncShellScript (line 264) | struct AsyncShellScript
method AsyncShellScript (line 266) | AsyncShellScript(String shell_script,
method AsyncShellScript (line 270) | AsyncShellScript(const AsyncShellScript& other) : m_shell_script{oth...
method AsyncShellScript (line 271) | AsyncShellScript& operator=(const AsyncShellScript& other) { m_shel...
method spawn_script (line 274) | void spawn_script(const Context& context, const ShellContext& shell_...
method read_stdout (line 282) | void read_stdout(InputHandler& input_handler)
type ShellScriptCompleter (line 321) | struct ShellScriptCompleter : AsyncShellScript
method Completions (line 325) | Completions operator()(const Context& context,
type ShellCandidatesCompleter (line 356) | struct ShellCandidatesCompleter : AsyncShellScript
method Completions (line 360) | Completions operator()(const Context& context,
method Completions (line 378) | Completions rank_candidates(StringView query)
type PromptCompleterAdapter (line 409) | struct PromptCompleterAdapter
method PromptCompleterAdapter (line 411) | PromptCompleterAdapter(Completer completer) : m_completer{std::move(...
function Scope (line 427) | Scope* get_scope_ifp(StringView scope, const Context& context)
function Scope (line 442) | Scope& get_scope(StringView scope, const Context& context)
type CommandDesc (line 449) | struct CommandDesc
function edit (line 462) | void edit(const ParametersParser& parser, Context& context, const Shel...
function parse_write_method (line 590) | auto parse_write_method(StringView str)
function do_write_buffer (line 599) | void do_write_buffer(Context& context, Optional<String> filename, Writ...
function write_buffer (line 632) | void write_buffer(const ParametersParser& parser, Context& context, co...
function write_all_buffers (line 665) | void write_all_buffers(const Context& context, bool sync = false, Opti...
function ensure_all_buffers_are_saved (line 710) | static void ensure_all_buffers_are_saved(Context& context)
function kill (line 739) | void kill(const ParametersParser& parser, Context& context, const Shel...
function quit (line 790) | void quit(const ParametersParser& parser, Context& context, const Shel...
function write_quit (line 827) | void write_quit(const ParametersParser& parser, Context& context,
function cycle_buffer (line 906) | void cycle_buffer(const ParametersParser& parser, Context& context, co...
function delete_buffer (line 963) | void delete_buffer(const ParametersParser& parser, Context& context, c...
function Completions (line 1032) | Completions highlighter_cmd_completer(
function get_highlighter (line 1067) | static std::pair<HighlighterGroup&, Highlighter&> get_highlighter(cons...
function redraw_relevant_clients (line 1088) | static void redraw_relevant_clients(Context& context, HighlighterGroup...
function Completions (line 1210) | static Completions complete_hooks(const Context&, StringView prefix, B...
function params_to_shell (line 1298) | Vector<String> params_to_shell(const ParametersParser& parser)
function Completions (line 1306) | Completions complete_completer_type(const Context&, StringView prefix,...
function CommandCompleter (line 1313) | CommandCompleter make_command_completer(StringView type, StringView pa...
function CommandCompleter (line 1377) | static CommandCompleter parse_completion_switch(const ParametersParser...
function define_command (line 1393) | void define_command(const ParametersParser& parser, Context& context, ...
function Completions (line 1482) | static Completions complete_alias_name(const Context& context, StringV...
function KeymapMode (line 1592) | KeymapMode parse_keymap_mode(StringView str, const KeymapManager::User...
function String (line 1773) | static String option_doc_helper(const Context& context, CommandParamet...
function OptionManager (line 1786) | static OptionManager& get_options(StringView scope, const Context& con...
function Completions (line 1842) | Completions complete_option(const Context& context, CommandParameters ...
function Completions (line 1961) | static Completions map_key_completer(const Context& context, CommandPa...
function ParameterDesc (line 2047) | ParameterDesc make_context_wrap_params_impl(Array<HashItem<String, Swi...
function ParameterDesc (line 2061) | ParameterDesc make_context_wrap_params(Array<HashItem<String, SwitchDe...
function context_wrap (line 2067) | void context_wrap(const ParametersParser& parser, Context& context, St...
type CapturedShellContext (line 2276) | struct CapturedShellContext
method CapturedShellContext (line 2278) | explicit CapturedShellContext(const ShellContext& sc)
function Completions (line 2486) | static Completions complete_face(const Context& context,
function String (line 2494) | static String face_doc_helper(const Context& context, CommandParameter...
function enter_user_mode (line 2697) | void enter_user_mode(Context& context, String mode_name, KeymapMode mo...
function register_commands (line 2796) | void register_commands()
type PerArgumentCommandCompleter<Completer, Rest...> (line 94) | struct PerArgumentCommandCompleter<Completer, Rest...> : PerArgumentComm...
method PerArgumentCommandCompleter (line 98) | PerArgumentCommandCompleter(C&& completer, R&&... rest)
method Completions (line 102) | Completions operator()(const Context& context,
FILE: src/commands.hh
type Kakoune (line 4) | namespace Kakoune
type kill_session (line 9) | struct kill_session
FILE: src/completion.cc
type Kakoune (line 12) | namespace Kakoune
function CandidateList (line 15) | static CandidateList candidates(ConstArrayView<RankedMatch> matches, S...
function CandidateList (line 24) | CandidateList complete_filename(StringView prefix, const Regex& ignore...
function CandidateList (line 68) | CandidateList complete_command(StringView prefix, ByteCount cursor_pos)
function Completions (line 132) | Completions shell_complete(const Context& context, StringView prefix, ...
FILE: src/completion.hh
type Kakoune (line 11) | namespace Kakoune
class Context (line 14) | class Context
class Regex (line 15) | class Regex
type Completions (line 19) | struct Completions
type Flags (line 21) | enum class Flags
method with_bit_ops (line 29) | bool with_bit_ops(Meta::Type<Flags>) { return true; }
method Completions (line 36) | Completions()
method Completions (line 39) | Completions(ByteCount start, ByteCount end)
method Completions (line 42) | Completions(ByteCount start, ByteCount end, CandidateList candidates...
function Completions (line 46) | inline Completions complete_nothing(const Context&, StringView, ByteCo...
type Flags (line 21) | enum class Flags
method with_bit_ops (line 29) | bool with_bit_ops(Meta::Type<Flags>) { return true; }
method Completions (line 36) | Completions()
method Completions (line 39) | Completions(ByteCount start, ByteCount end)
method Completions (line 42) | Completions(ByteCount start, ByteCount end, CandidateList candidates...
type FilenameFlags (line 51) | enum class FilenameFlags
function with_bit_ops (line 57) | constexpr bool with_bit_ops(Meta::Type<FilenameFlags>) { return true; }
function Completions (line 67) | inline Completions offset_pos(Completions completion, ByteCount offset)
type Flags (line 21) | enum class Flags
method with_bit_ops (line 29) | bool with_bit_ops(Meta::Type<Flags>) { return true; }
method Completions (line 36) | Completions()
method Completions (line 39) | Completions(ByteCount start, ByteCount end)
method Completions (line 42) | Completions(ByteCount start, ByteCount end, CandidateList candidates...
function CandidateList (line 74) | CandidateList complete(StringView query, ByteCount cursor_pos,
FILE: src/context.cc
type Kakoune (line 11) | namespace Kakoune
function Buffer (line 26) | Buffer& Context::buffer() const
function Window (line 33) | Window& Context::window() const
function InputHandler (line 40) | InputHandler& Context::input_handler() const
function Client (line 47) | Client& Context::client() const
function Scope (line 54) | Scope& Context::scope(bool allow_local) const
function OptionManager (line 65) | OptionManager& Context::options() const { return scope().options(); }
function HookManager (line 66) | HookManager& Context::hooks() const { return scope().hooks(); }
function KeymapManager (line 67) | KeymapManager& Context::keymaps() const { return scope().keymaps(); }
function AliasRegistry (line 68) | AliasRegistry& Context::aliases() const { return scope().aliases(); }
function FaceRegistry (line 69) | FaceRegistry& Context::faces(bool allow_local) const { return scope(a...
function SelectionList (line 118) | const SelectionList& JumpList::forward(Context& context, int count)
function SelectionList (line 134) | const SelectionList& JumpList::backward(Context& context, int count)
function SelectionList (line 188) | SelectionList& Context::SelectionHistory::selections(bool update)
function Buffer (line 347) | Buffer* Context::last_buffer() const
function SelectionList (line 368) | SelectionList& Context::selections(bool update)
function SelectionList (line 381) | SelectionList& Context::selections_write_only()
function SelectionList (line 386) | const SelectionList& Context::selections(bool update) const
function StringView (line 423) | StringView Context::main_sel_register_value(StringView reg) const
FILE: src/context.hh
type Kakoune (line 9) | namespace Kakoune
class Context (line 12) | class Context
type Flags (line 60) | enum class Flags
method with_bit_ops (line 65) | constexpr bool with_bit_ops(Meta::Type<Flags>) { return true; }
type EmptyContextFlag (line 70) | struct EmptyContextFlag {}
method Context (line 74) | Context(const Context&) = delete;
method Context (line 75) | Context& operator=(const Context&) = delete;
method has_buffer (line 78) | bool has_buffer() const { return not m_selection_history.empty(); }
method has_window (line 81) | bool has_window() const { return (bool)m_window; }
method has_client (line 84) | bool has_client() const { return (bool)m_client; }
method has_input_handler (line 87) | bool has_input_handler() const { return (bool)m_input_handler; }
method end_selection_edition (line 96) | void end_selection_edition() { m_selection_history.end_edition(); }
method Scope (line 109) | Scope* local_scope() const { return m_local_scopes.empty() ? nullptr...
method String (line 122) | const String& name() const { return m_name; }
method is_editing (line 125) | bool is_editing() const { return m_edition_level!= 0; }
method disable_undo_handling (line 126) | void disable_undo_handling() { m_edition_level = -1; }
method NestedBool (line 128) | NestedBool& hooks_disabled() { return m_hooks_disabled; }
method NestedBool (line 129) | const NestedBool& hooks_disabled() const { return m_hooks_disabled; }
method NestedBool (line 131) | NestedBool& keymaps_disabled() { return m_keymaps_disabled; }
method NestedBool (line 132) | const NestedBool& keymaps_disabled() const { return m_keymaps_disabl...
method Flags (line 134) | Flags flags() const { return m_flags; }
method JumpList (line 136) | JumpList& jump_list() { return m_jump_list; }
method set_last_select (line 140) | void set_last_select(Func&& last_select) { m_last_select = std::forw...
method repeat_last_select (line 142) | void repeat_last_select() { if (m_last_select) m_last_select(*this); }
class SelectionHistory (line 163) | class SelectionHistory {
method empty (line 168) | bool empty() const { return m_history.empty() and not m_staging; }
method in_edition (line 173) | bool in_edition() const { return m_in_edition; }
type HistoryId (line 179) | enum class HistoryId : size_t { First = 0, Invalid = (size_t)-1 }
type HistoryNode (line 181) | struct HistoryNode
method HistoryNode (line 183) | HistoryNode(SelectionList selections, HistoryId parent) : select...
method HistoryId (line 190) | HistoryId next_history_id() const noexcept { return (HistoryId)...
method HistoryNode (line 191) | HistoryNode& history_node(HistoryId id) { return m_history[(...
method HistoryNode (line 183) | HistoryNode(SelectionList selections, HistoryId parent) : select...
method HistoryNode (line 192) | const HistoryNode& history_node(HistoryId id) const { return m_his...
method HistoryNode (line 183) | HistoryNode(SelectionList selections, HistoryId parent) : select...
method HistoryNode (line 193) | HistoryNode& current_history_node() { kak_assert((size_t...
method HistoryNode (line 183) | HistoryNode(SelectionList selections, HistoryId parent) : select...
class Window (line 13) | class Window
class Buffer (line 14) | class Buffer
class Client (line 15) | class Client
class Scope (line 16) | class Scope
class InputHandler (line 17) | class InputHandler
class DisplayLine (line 18) | class DisplayLine
class AliasRegistry (line 20) | class AliasRegistry
class FaceRegistry (line 21) | class FaceRegistry
class OptionManager (line 22) | class OptionManager
class KeymapManager (line 23) | class KeymapManager
class HookManager (line 24) | class HookManager
type Direction (line 26) | enum Direction { Backward = -1, Forward = 1 }
type JumpList (line 28) | struct JumpList
method current_index (line 37) | size_t current_index() const { return m_current; }
method get_as_list (line 39) | ConstArrayView<SelectionList> get_as_list() const { return m_jumps; }
type LocalScope (line 49) | struct LocalScope
class Context (line 57) | class Context
type Flags (line 60) | enum class Flags
method with_bit_ops (line 65) | constexpr bool with_bit_ops(Meta::Type<Flags>) { return true; }
type EmptyContextFlag (line 70) | struct EmptyContextFlag {}
method Context (line 74) | Context(const Context&) = delete;
method Context (line 75) | Context& operator=(const Context&) = delete;
method has_buffer (line 78) | bool has_buffer() const { return not m_selection_history.empty(); }
method has_window (line 81) | bool has_window() const { return (bool)m_window; }
method has_client (line 84) | bool has_client() const { return (bool)m_client; }
method has_input_handler (line 87) | bool has_input_handler() const { return (bool)m_input_handler; }
method end_selection_edition (line 96) | void end_selection_edition() { m_selection_history.end_edition(); }
method Scope (line 109) | Scope* local_scope() const { return m_local_scopes.empty() ? nullptr...
method String (line 122) | const String& name() const { return m_name; }
method is_editing (line 125) | bool is_editing() const { return m_edition_level!= 0; }
method disable_undo_handling (line 126) | void disable_undo_handling() { m_edition_level = -1; }
method NestedBool (line 128) | NestedBool& hooks_disabled() { return m_hooks_disabled; }
method NestedBool (line 129) | const NestedBool& hooks_disabled() const { return m_hooks_disabled; }
method NestedBool (line 131) | NestedBool& keymaps_disabled() { return m_keymaps_disabled; }
method NestedBool (line 132) | const NestedBool& keymaps_disabled() const { return m_keymaps_disabl...
method Flags (line 134) | Flags flags() const { return m_flags; }
method JumpList (line 136) | JumpList& jump_list() { return m_jump_list; }
method set_last_select (line 140) | void set_last_select(Func&& last_select) { m_last_select = std::forw...
method repeat_last_select (line 142) | void repeat_last_select() { if (m_last_select) m_last_select(*this); }
class SelectionHistory (line 163) | class SelectionHistory {
method empty (line 168) | bool empty() const { return m_history.empty() and not m_staging; }
method in_edition (line 173) | bool in_edition() const { return m_in_edition; }
type HistoryId (line 179) | enum class HistoryId : size_t { First = 0, Invalid = (size_t)-1 }
type HistoryNode (line 181) | struct HistoryNode
method HistoryNode (line 183) | HistoryNode(SelectionList selections, HistoryId parent) : select...
method HistoryId (line 190) | HistoryId next_history_id() const noexcept { return (HistoryId)...
method HistoryNode (line 191) | HistoryNode& history_node(HistoryId id) { return m_history[(...
method HistoryNode (line 183) | HistoryNode(SelectionList selections, HistoryId parent) : select...
method HistoryNode (line 192) | const HistoryNode& history_node(HistoryId id) const { return m_his...
method HistoryNode (line 183) | HistoryNode(SelectionList selections, HistoryId parent) : select...
method HistoryNode (line 193) | HistoryNode& current_history_node() { kak_assert((size_t...
method HistoryNode (line 183) | HistoryNode(SelectionList selections, HistoryId parent) : select...
type ScopedEdition (line 213) | struct ScopedEdition
method ScopedEdition (line 217) | ScopedEdition(const ScopedEdition&) = delete;
method Context (line 219) | Context& context() const { return m_context; }
type ScopedSelectionEdition (line 225) | struct ScopedSelectionEdition
FILE: src/coord.hh
type Kakoune (line 7) | namespace Kakoune
type LineAndColumn (line 11) | struct LineAndColumn
method EffectiveType (line 16) | [[gnu::always_inline]]
method EffectiveType (line 22) | [[gnu::always_inline]]
method EffectiveType (line 30) | [[gnu::always_inline]]
method EffectiveType (line 36) | [[gnu::always_inline]]
method hash_value (line 47) | constexpr size_t hash_value(const EffectiveType& val)
type BufferCoord (line 53) | struct BufferCoord : LineAndColumn<BufferCoord, LineCount, ByteCount>
method BufferCoord (line 55) | [[gnu::always_inline]]
type DisplayCoord (line 63) | struct DisplayCoord : LineAndColumn<DisplayCoord, LineCount, ColumnCount>
method DisplayCoord (line 65) | [[gnu::always_inline]]
type BufferCoordAndTarget (line 75) | struct BufferCoordAndTarget : BufferCoord
method BufferCoordAndTarget (line 77) | [[gnu::always_inline]]
method BufferCoordAndTarget (line 81) | [[gnu::always_inline]]
function hash_value (line 89) | constexpr size_t hash_value(const BufferCoordAndTarget& val)
FILE: src/debug.cc
type Kakoune (line 7) | namespace Kakoune
function write_to_debug_buffer (line 10) | void write_to_debug_buffer(StringView str)
FILE: src/debug.hh
type Kakoune (line 7) | namespace Kakoune
class StringView (line 10) | class StringView
type DebugFlags (line 12) | enum class DebugFlags
function with_bit_ops (line 22) | constexpr bool with_bit_ops(Meta::Type<DebugFlags>) { return true; }
function enum_desc (line 24) | constexpr auto enum_desc(Meta::Type<DebugFlags>)
FILE: src/diff.hh
type Kakoune (line 12) | namespace Kakoune
type Snake (line 16) | struct Snake
type Op (line 21) | enum Op { Add, Del, RevAdd, RevDel }
function Snake (line 25) | Snake find_end_snake_of_further_reaching_dpath(IteratorA a, int N, Ite...
type Op (line 21) | enum Op { Add, Del, RevAdd, RevDel }
function Snake (line 50) | Snake find_middle_snake(IteratorA a, int N, IteratorB b, int M,
type Op (line 21) | enum Op { Add, Del, RevAdd, RevDel }
type DiffOp (line 105) | enum class DiffOp
function find_diff_rec (line 113) | void find_diff_rec(IteratorA a, int begA, int endA,
type Diff (line 168) | struct Diff
function for_each_diff (line 175) | void for_each_diff(IteratorA a, int N, IteratorB b, int M, OnDiff&& on...
FILE: src/display_buffer.cc
type Kakoune (line 11) | namespace Kakoune
function BufferIterator (line 14) | BufferIterator get_iterator(const Buffer& buffer, BufferCoord coord)
function StringView (line 22) | StringView DisplayAtom::content() const
function ColumnCount (line 43) | ColumnCount DisplayAtom::length() const
function ColumnCount (line 66) | ColumnCount DisplayAtom::trim_begin(ColumnCount count)
function ColumnCount (line 88) | ColumnCount DisplayAtom::trim_end_to_length(ColumnCount count)
function DisplayAtom (line 171) | DisplayAtom& DisplayLine::push_back(DisplayAtom atom)
function DisplayLine (line 182) | DisplayLine DisplayLine::extract(iterator beg, iterator end)
function ColumnCount (line 235) | ColumnCount DisplayLine::length() const
function DisplayLine (line 331) | DisplayLine parse_display_line(StringView line, Face& face, const Face...
function DisplayLine (line 405) | DisplayLine parse_display_line(StringView line, const FaceRegistry& fa...
function DisplayLineList (line 411) | DisplayLineList parse_display_line_list(StringView content, const Face...
FILE: src/display_buffer.hh
type Kakoune (line 13) | namespace Kakoune
class Buffer (line 16) | class Buffer
class BufferIterator (line 19) | class BufferIterator
type DisplayAtom (line 23) | struct DisplayAtom : public UseMemoryDomain<MemoryDomain::Display>
type Type (line 26) | enum Type { Range, ReplacedRange, Text }
method DisplayAtom (line 28) | DisplayAtom(const Buffer& buffer, BufferRange range, Face face = {})
method DisplayAtom (line 31) | DisplayAtom(const Buffer& buffer, BufferRange range, String str, Fac...
method DisplayAtom (line 34) | DisplayAtom(String str, Face face)
method DisplayAtom (line 37) | explicit DisplayAtom(String str)
method BufferCoord (line 44) | const BufferCoord& begin() const
method BufferCoord (line 50) | const BufferCoord& end() const
method replace (line 56) | void replace(String text)
method replace (line 63) | void replace(const BufferRange& range)
method has_buffer_range (line 70) | bool has_buffer_range() const
method Buffer (line 75) | const Buffer& buffer() const { kak_assert(m_buffer); return *m_buffe...
method Type (line 77) | Type type() const { return m_type; }
class DisplayLine (line 103) | class DisplayLine : public UseMemoryDomain<MemoryDomain::Display>
method DisplayLine (line 110) | DisplayLine() = default;
method DisplayLine (line 112) | DisplayLine(String str, Face face)
method iterator (line 115) | iterator begin() { return m_atoms.begin(); }
method iterator (line 116) | iterator end() { return m_atoms.end(); }
method const_iterator (line 118) | const_iterator begin() const { return m_atoms.begin(); }
method const_iterator (line 119) | const_iterator end() const { return m_atoms.end(); }
method AtomList (line 121) | const AtomList& atoms() const { return m_atoms; }
method BufferRange (line 124) | const BufferRange& range() const { return m_range; }
method iterator (line 139) | iterator insert(iterator pos, It beg, It end)
class FaceRegistry (line 173) | class FaceRegistry
class DisplayBuffer (line 178) | class DisplayBuffer : public UseMemoryDomain<MemoryDomain::Display>
method DisplayBuffer (line 181) | DisplayBuffer() {}
method DisplayLineList (line 183) | DisplayLineList& lines() { return m_lines; }
method DisplayLineList (line 184) | const DisplayLineList& lines() const { return m_lines; }
method BufferRange (line 187) | const BufferRange& range() const { return m_range; }
method set_timestamp (line 193) | void set_timestamp(size_t timestamp) { m_timestamp = timestamp; }
method timestamp (line 194) | size_t timestamp() const { return m_timestamp; }
FILE: src/enum.hh
type Kakoune (line 7) | namespace Kakoune
type EnumDesc (line 10) | struct EnumDesc { T value; StringView name; }
FILE: src/env_vars.cc
type Kakoune (line 7) | namespace Kakoune
function EnvVarMap (line 10) | EnvVarMap get_env_vars()
FILE: src/env_vars.hh
type Kakoune (line 6) | namespace Kakoune
class String (line 9) | class String
FILE: src/event_manager.cc
type Kakoune (line 12) | namespace Kakoune
function SignalHandler (line 170) | SignalHandler set_signal_handler(int signum, SignalHandler handler)
FILE: src/event_manager.hh
type Kakoune (line 14) | namespace Kakoune
type EventMode (line 17) | enum class EventMode
type FdEvents (line 23) | enum class FdEvents
function with_bit_ops (line 31) | constexpr bool with_bit_ops(Meta::Type<FdEvents>) { return true; }
class FDWatcher (line 33) | class FDWatcher
method FDWatcher (line 38) | FDWatcher(const FDWatcher&) = delete;
method FDWatcher (line 39) | FDWatcher& operator=(const FDWatcher&) = delete;
method fd (line 42) | int fd() const { return m_fd; }
method FdEvents (line 43) | FdEvents events() const { return m_events; }
method FdEvents (line 44) | FdEvents& events() { return m_events; }
method EventMode (line 45) | EventMode mode() const { return m_mode; }
method reset_fd (line 49) | void reset_fd(int fd) { m_fd = fd; }
method disable (line 51) | void disable() { m_fd = -1; }
class Timer (line 60) | class Timer
method Timer (line 67) | Timer(const Timer&) = delete;
method Timer (line 68) | Timer& operator=(const Timer&) = delete;
method TimePoint (line 71) | TimePoint next_date() const { return m_date; }
method set_next_date (line 72) | void set_next_date(TimePoint date) { m_date = date; }
method disable (line 73) | void disable() { m_date = TimePoint::max(); }
class EventManager (line 87) | class EventManager : public Singleton<EventManager>
FILE: src/exception.cc
type Kakoune (line 7) | namespace Kakoune
function StringView (line 10) | StringView exception::what() const
FILE: src/exception.hh
type Kakoune (line 6) | namespace Kakoune
type exception (line 9) | struct exception
type runtime_error (line 15) | struct runtime_error : exception
method runtime_error (line 17) | runtime_error(String what)
method StringView (line 20) | StringView what() const override { return m_what; }
method set_what (line 21) | void set_what(String what) { m_what = std::move(what); }
type failure (line 27) | struct failure : runtime_error
type cancel (line 32) | struct cancel : runtime_error
method cancel (line 34) | cancel() : runtime_error("cancellation requested") {}
type logic_error (line 37) | struct logic_error : exception
FILE: src/face.hh
type Kakoune (line 7) | namespace Kakoune
type Attribute (line 10) | enum class Attribute : int
function with_bit_ops (line 28) | constexpr bool with_bit_ops(Meta::Type<Attribute>) { return true; }
type Face (line 30) | struct Face
method hash_value (line 39) | constexpr size_t hash_value(const Face& val)
function Face (line 45) | inline Face merge_faces(const Face& base, const Face& face)
method hash_value (line 39) | constexpr size_t hash_value(const Face& val)
FILE: src/face_registry.cc
type Kakoune (line 7) | namespace Kakoune
function FaceSpec (line 10) | FaceSpec parse_face(StringView facedesc)
function String (line 73) | String to_string(Attribute attributes)
function String (line 106) | String to_string(Face face)
function Face (line 111) | Face FaceRegistry::operator[](StringView facedesc) const
function Face (line 116) | Face FaceRegistry::operator[](const FaceSpec& spec) const
function Face (line 121) | Face FaceRegistry::resolve_spec(const FaceSpec& spec) const
FILE: src/face_registry.hh
type Kakoune (line 10) | namespace Kakoune
type FaceSpec (line 13) | struct FaceSpec
class FaceRegistry (line 21) | class FaceRegistry : public SafeCountable
method FaceRegistry (line 24) | FaceRegistry(FaceRegistry& parent) : SafeCountable{}, m_parent(&pare...
method reparent (line 26) | void reparent(FaceRegistry& parent) { m_parent = &parent; }
method flatten_faces (line 35) | auto flatten_faces() const
FILE: src/file.cc
type Kakoune (line 37) | namespace Kakoune
function String (line 47) | String parse_filename(StringView filename, StringView buf_dir)
function split_path (line 57) | std::pair<StringView, StringView> split_path(StringView path)
function String (line 66) | String real_path(StringView filename)
function String (line 101) | String compact_path(StringView filename)
function StringView (line 127) | StringView tmpdir()
function StringView (line 136) | StringView homedir()
function fd_readable (line 144) | bool fd_readable(int fd)
function fd_writable (line 155) | bool fd_writable(int fd)
function String (line 166) | String read_fd(int fd, bool text)
function String (line 191) | String read_file(StringView filename, bool text)
function file_exists (line 234) | bool file_exists(StringView filename)
function regular_file_exists (line 240) | bool regular_file_exists(StringView filename)
function write (line 248) | void write(int fd, StringView data)
function create_file (line 274) | int create_file(const char* filename)
function write_to_file (line 289) | void write_to_file(StringView filename, StringView data)
function open_temp_file (line 298) | int open_temp_file(StringView filename, char (&buffer)[PATH_MAX])
function open_temp_file (line 311) | int open_temp_file(StringView filename)
function String (line 317) | String find_file(StringView filename, StringView buf_dir, ConstArrayVi...
function make_directory (line 345) | void make_directory(StringView dir, mode_t mode)
function list_files (line 369) | void list_files(StringView dirname, FunctionRef<void (StringView, cons...
function timespec (line 397) | timespec get_fs_timestamp(StringView filename)
function FsStatus (line 405) | FsStatus get_fs_status(StringView filename)
function String (line 412) | String get_kak_binary_path()
FILE: src/file.hh
type Kakoune (line 18) | namespace Kakoune
type file_access_error (line 21) | struct file_access_error : runtime_error
type MappedFile (line 52) | struct MappedFile
type stat (line 60) | struct stat
type WriteMethod (line 63) | enum class WriteMethod
function enum_desc (line 68) | constexpr auto enum_desc(Meta::Type<WriteMethod>)
type stat (line 80) | struct stat
type FsStatus (line 86) | struct FsStatus
type BufferedWriter (line 102) | struct BufferedWriter
method BufferedWriter (line 104) | BufferedWriter(int fd)
method write (line 113) | void write(StringView data)
method flush (line 127) | void flush()
FILE: src/flags.hh
type Kakoune (line 8) | namespace Kakoune
function with_bit_ops (line 12) | constexpr bool with_bit_ops(Meta::Type<Flags>) { return false; }
function Flags (line 21) | constexpr Flags operator|(Flags lhs, Flags rhs)
function Flags (line 27) | constexpr Flags& operator|=(Flags& lhs, Flags rhs)
type TestableFlags (line 34) | struct TestableFlags
function Flags (line 51) | constexpr Flags& operator&=(Flags& lhs, Flags rhs)
function Flags (line 58) | constexpr Flags operator~(Flags lhs)
function Flags (line 64) | constexpr Flags operator^(Flags lhs, Flags rhs)
function Flags (line 70) | constexpr Flags& operator^=(Flags& lhs, Flags rhs)
FILE: src/format.cc
type Kakoune (line 10) | namespace Kakoune
function to_string_impl (line 15) | InplaceString<N> to_string_impl(auto val, auto format)
function to_string_impl (line 27) | InplaceString<N> to_string_impl(auto val)
function to_string (line 32) | InplaceString<15> to_string(int val)
function to_string (line 37) | InplaceString<15> to_string(unsigned val)
function to_string (line 42) | InplaceString<23> to_string(long int val)
function to_string (line 47) | InplaceString<23> to_string(long long int val)
function to_string (line 52) | InplaceString<23> to_string(unsigned long val)
function to_string (line 57) | InplaceString<23> to_string(Hex val)
function to_string (line 62) | InplaceString<23> to_string(Grouped val)
function to_string (line 76) | InplaceString<23> to_string(float val)
function to_string (line 87) | InplaceString<7> to_string(Codepoint c)
function format_impl (line 97) | void format_impl(StringView fmt, ArrayView<const StringView> params, A...
function StringView (line 147) | StringView format_to(ArrayView<char> buffer, StringView fmt, ArrayView...
function format_with (line 166) | void format_with(FunctionRef<void (StringView)> append, StringView fmt...
function String (line 171) | String format(StringView fmt, ArrayView<const StringView> params)
FILE: src/format.hh
type Kakoune (line 7) | namespace Kakoune
type InplaceString (line 11) | struct InplaceString
type Hex (line 22) | struct Hex { size_t val; }
function Hex (line 23) | constexpr Hex hex(size_t val) { return {val}; }
type Grouped (line 25) | struct Grouped { size_t val; }
function Grouped (line 26) | constexpr Grouped grouped(size_t val) { return {val}; }
function to_string (line 39) | decltype(auto) to_string(const StronglyTypedNumber<RealType, ValueType...
type detail (line 44) | namespace detail
function StringView (line 48) | StringView format_param(const T& val) { return val; }
function format_param (line 51) | decltype(auto) format_param(const T& val) { return to_string(val); }
function String (line 58) | String format(StringView fmt, Types&&... params)
function StringView (line 66) | StringView format_to(ArrayView<char> buffer, StringView fmt, Types&&.....
function format_with (line 74) | void format_with(FunctionRef<void (StringView)> append, StringView fmt...
FILE: src/function.hh
type Kakoune (line 8) | namespace Kakoune
type FunctionVTable (line 12) | struct FunctionVTable
class FunctionImpl (line 41) | class FunctionImpl
class FunctionImpl<Copyable, Res (Args...)> (line 44) | class FunctionImpl<Copyable, Res (Args...)>
method FunctionImpl (line 47) | FunctionImpl() = default;
method FunctionImpl (line 51) | FunctionImpl(Target&& target)
method FunctionImpl (line 66) | FunctionImpl(const FunctionImpl& other) requires Copyable
method FunctionImpl (line 71) | FunctionImpl(FunctionImpl&& other) : m_target(other.m_target), m_vtabl...
method FunctionImpl (line 82) | FunctionImpl& operator=(const FunctionImpl& other) requires Copyable
method FunctionImpl (line 90) | FunctionImpl& operator=(FunctionImpl&& other)
method Res (line 100) | Res operator()(Args... args) const
FILE: src/hash.cc
type Kakoune (line 9) | namespace Kakoune
function rotl (line 12) | [[gnu::always_inline]]
function fmix (line 18) | [[gnu::always_inline]]
function murmur3 (line 31) | size_t murmur3(const char* input, size_t len)
FILE: src/hash.hh
type Kakoune (line 10) | namespace Kakoune
function fnv1a (line 13) | inline size_t fnv1a(const char* data, size_t len)
function hash_value (line 27) | constexpr size_t hash_value(const Type& val)
function hash_value (line 33) | constexpr size_t hash_value(const Type& val)
function hash_values (line 39) | constexpr size_t hash_values(Type&& t)
function combine_hash (line 44) | constexpr size_t combine_hash(size_t lhs, size_t rhs)
function hash_values (line 50) | constexpr size_t hash_values(Type&& t, RemainingTypes&&... rt)
function hash_value (line 57) | constexpr size_t hash_value(const std::pair<T1, T2>& val)
type Hash (line 63) | struct Hash
type HashCompatible (line 74) | struct HashCompatible : std::false_type {}
type HashCompatible<T, T> (line 76) | struct HashCompatible<T, T> : std::true_type {}
FILE: src/hash_map.cc
type Kakoune (line 13) | namespace Kakoune
function do_profile (line 152) | void do_profile(size_t count, StringView type)
function profile_hash_maps (line 196) | void profile_hash_maps()
FILE: src/hash_map.hh
type Kakoune (line 8) | namespace Kakoune
function constexpr_swap (line 12) | constexpr void constexpr_swap(T& lhs, T& rhs)
type HashIndex (line 21) | struct HashIndex
type Entry (line 23) | struct Entry
method HashIndex (line 31) | constexpr HashIndex() = default;
method HashIndex (line 32) | constexpr HashIndex(size_t count)
method resize (line 43) | constexpr void resize(size_t new_size)
method reserve (line 55) | constexpr void reserve(size_t count)
method add (line 69) | constexpr void add(size_t hash, int index)
method remove (line 96) | constexpr void remove(size_t hash, int index)
method ordered_fix_entries (line 118) | constexpr void ordered_fix_entries(int index)
method unordered_fix_entries (line 127) | constexpr void unordered_fix_entries(size_t hash, int old_index, int...
method Entry (line 140) | constexpr const Entry& operator[](size_t index) const { return m_ent...
method size (line 141) | constexpr size_t size() const { return m_entries.size(); }
method compute_slot (line 142) | constexpr size_t compute_slot(size_t hash) const
method clear (line 148) | constexpr void clear() { m_entries.clear(); }
type HashItem (line 155) | struct HashItem
type HashItem<Key, void> (line 164) | struct HashItem<Key, void>
type HashMap (line 175) | struct HashMap
method HashMap (line 182) | constexpr HashMap() = default;
method HashMap (line 184) | constexpr HashMap(std::initializer_list<Item> val) : m_items(val), m...
method HashMap (line 191) | constexpr HashMap(Iterator begin, Iterator end)
method EffectiveValue (line 197) | constexpr EffectiveValue& insert(Item item, size_t hash)
method EffectiveValue (line 215) | constexpr EffectiveValue& insert(Item item)
method find_index (line 222) | constexpr int find_index(const KeyType& key, size_t hash) const
method find_index (line 236) | constexpr int find_index(const KeyType& key) const { return find_ind...
method contains (line 239) | constexpr bool contains(const KeyType& key) const { return find_inde...
method EffectiveValue (line 242) | constexpr EffectiveValue& operator[](KeyType&& key)
method EffectiveValue (line 256) | constexpr const EffectiveValue& get(KeyType&& key) const
method EffectiveValue (line 262) | constexpr EffectiveValue& get(KeyType&& key)
method remove (line 271) | constexpr void remove(const KeyType& key)
method unordered_remove (line 285) | constexpr void unordered_remove(const KeyType& key)
method erase (line 301) | constexpr void erase(const KeyType& key) { return unordered_remove(k...
method remove_all (line 304) | constexpr void remove_all(const KeyType& key)
method iterator (line 318) | constexpr iterator begin() { return m_items.begin(); }
method iterator (line 319) | constexpr iterator end() { return m_items.end(); }
method const_iterator (line 322) | constexpr const_iterator begin() const { return m_items.begin(); }
method const_iterator (line 323) | constexpr const_iterator end() const { return m_items.end(); }
method Item (line 325) | Item& item(size_t index) { return m_items[index]; }
method Item (line 326) | const Item& item(size_t index) const { return m_items[index]; }
method iterator (line 329) | constexpr iterator find(const KeyType& key)
method const_iterator (line 336) | constexpr const_iterator find(const KeyType& key) const
method remove (line 341) | constexpr void remove(const const_iterator& it)
method clear (line 350) | constexpr void clear() { m_items.clear(); m_index.clear(); }
method size (line 352) | constexpr size_t size() const { return m_items.size(); }
method empty (line 353) | constexpr bool empty() const { return m_items.empty(); }
method reserve (line 354) | constexpr void reserve(size_t size)
method Key (line 373) | static const Key& item_key(const Item& item)
FILE: src/highlighter.cc
type Kakoune (line 6) | namespace Kakoune
function Highlighter (line 33) | Highlighter& Highlighter::get_child(StringView path)
function Completions (line 48) | Completions Highlighter::complete_child(StringView path, ByteCount cur...
FILE: src/highlighter.hh
type Kakoune (line 14) | namespace Kakoune
class Context (line 17) | class Context
class DisplayBuffer (line 18) | class DisplayBuffer
type HighlightPass (line 22) | enum class HighlightPass
function with_bit_ops (line 31) | constexpr bool with_bit_ops(Meta::Type<HighlightPass>) { return true; }
type Highlighter (line 38) | struct Highlighter
method Highlighter (line 62) | Highlighter(HighlightPass passes) : m_passes{passes} {}
method HighlightPass (line 75) | HighlightPass passes() const { return m_passes; }
method do_compute_display_setup (line 79) | virtual void do_compute_display_setup(HighlightContext context, Disp...
type DisplaySetup (line 40) | struct DisplaySetup
type HighlightContext (line 52) | struct HighlightContext
type Highlighter (line 60) | struct Highlighter
method Highlighter (line 62) | Highlighter(HighlightPass passes) : m_passes{passes} {}
method HighlightPass (line 75) | HighlightPass passes() const { return m_passes; }
method do_compute_display_setup (line 79) | virtual void do_compute_display_setup(HighlightContext context, Disp...
type HighlighterDesc (line 87) | struct HighlighterDesc
type HighlighterFactoryAndDescription (line 93) | struct HighlighterFactoryAndDescription
type HighlighterRegistry (line 99) | struct HighlighterRegistry : HashMap<String, HighlighterFactoryAndDesc...
FILE: src/highlighter_group.cc
type Kakoune (line 8) | namespace Kakoune
function Highlighter (line 54) | Highlighter& HighlighterGroup::get_child(StringView path)
function Completions (line 67) | Completions HighlighterGroup::complete_child(StringView path, ByteCoun...
FILE: src/highlighter_group.hh
type Kakoune (line 10) | namespace Kakoune
type child_not_found (line 13) | struct child_not_found : public runtime_error
class HighlighterGroup (line 18) | class HighlighterGroup : public Highlighter
method HighlighterGroup (line 21) | HighlighterGroup(HighlightPass passes) : Highlighter{passes} {}
method has_children (line 23) | bool has_children() const override { return true; }
class Highlighters (line 41) | class Highlighters : public SafeCountable
method Highlighters (line 44) | Highlighters(Highlighters& parent) : SafeCountable{}, m_parent{&pare...
method reparent (line 46) | void reparent(Highlighters& parent) { m_parent = &parent; }
method HighlighterGroup (line 48) | HighlighterGroup& group() { return m_group; }
method HighlighterGroup (line 49) | const HighlighterGroup& group() const { return m_group; }
method Highlighters (line 56) | Highlighters() : m_group{HighlightPass::All} {}
type SharedHighlighters (line 62) | struct SharedHighlighters : public HighlighterGroup,
method SharedHighlighters (line 65) | SharedHighlighters() : HighlighterGroup{HighlightPass::All} {}
FILE: src/highlighters.cc
type Kakoune (line 28) | namespace Kakoune
function make_highlighter (line 32) | UniquePtr<Highlighter> make_highlighter(Func func, HighlightPass pass ...
function highlight_range (line 50) | void highlight_range(DisplayBuffer& display_buffer,
function replace_range (line 90) | void replace_range(DisplayBuffer& display_buffer,
function create_fill_highlighter (line 141) | static UniquePtr<Highlighter> create_fill_highlighter(HighlighterParam...
type BufferSideCache (line 155) | struct BufferSideCache
method BufferSideCache (line 157) | BufferSideCache() : m_id{get_free_value_id()} {}
method T (line 159) | T& get(const Buffer& buffer)
class RegexHighlighter (line 177) | class RegexHighlighter : public Highlighter
method RegexHighlighter (line 180) | RegexHighlighter(Regex regex, FacesSpec faces)
method do_highlight (line 188) | void do_highlight(HighlightContext context, DisplayBuffer& display_b...
method reset (line 216) | void reset(Regex regex, FacesSpec faces)
method create (line 224) | static UniquePtr<Highlighter> create(HighlighterParameters params, H...
type Cache (line 253) | struct Cache
type RangeAndMatches (line 257) | struct RangeAndMatches { BufferRange range; MatchList matches; }
method ensure_first_face_is_capture_0 (line 268) | void ensure_first_face_is_capture_0()
method add_matches (line 279) | void add_matches(const Buffer& buffer, MatchList& matches, BufferRan...
method MatchList (line 298) | const MatchList& get_matches(const Buffer& buffer, BufferRange displ...
class DynamicRegexHighlighter (line 367) | class DynamicRegexHighlighter : public Highlighter
method DynamicRegexHighlighter (line 370) | DynamicRegexHighlighter(RegexGetter get_regex, FaceGetter resolve_fa...
method do_highlight (line 376) | void do_highlight(HighlightContext context, DisplayBuffer& display_b...
function create_dynamic_regex_highlighter (line 406) | UniquePtr<Highlighter> create_dynamic_regex_highlighter(HighlighterPar...
function create_line_highlighter (line 476) | UniquePtr<Highlighter> create_line_highlighter(HighlighterParameters p...
function create_column_highlighter (line 529) | UniquePtr<Highlighter> create_column_highlighter(HighlighterParameters...
type WrapHighlighter (line 611) | struct WrapHighlighter : Highlighter
method WrapHighlighter (line 613) | WrapHighlighter(ColumnCount max_width, bool word_wrap, bool preserve...
type SplitPos (line 620) | struct SplitPos{ DisplayLine::iterator atom_it; ByteCount byte; Colu...
method do_highlight (line 622) | void do_highlight(HighlightContext context, DisplayBuffer& display_b...
method do_compute_display_setup (line 670) | void do_compute_display_setup(HighlightContext context, DisplaySetup...
method fill_unique_ids (line 684) | void fill_unique_ids(Vector<StringView>& unique_ids) const override
method next_split_pos (line 689) | bool next_split_pos(SplitPos& pos, DisplayLine::iterator line_end,
method ColumnCount (line 772) | static ColumnCount line_indent(const Buffer& buffer, int tabstop, Li...
method create (line 781) | static UniquePtr<Highlighter> create(HighlighterParameters params, H...
method ColumnCount (line 792) | static ColumnCount zero_if_greater(ColumnCount val, ColumnCount max)...
type TabulationHighlighter (line 800) | struct TabulationHighlighter : Highlighter
method TabulationHighlighter (line 802) | TabulationHighlighter() : Highlighter{HighlightPass::Replace} {}
method do_highlight (line 804) | void do_highlight(HighlightContext context, DisplayBuffer& display_b...
method do_compute_display_setup (line 858) | void do_compute_display_setup(HighlightContext context, DisplaySetup...
type ShowWhitespacesHighlighter (line 890) | struct ShowWhitespacesHighlighter : Highlighter
method ShowWhitespacesHighlighter (line 892) | ShowWhitespacesHighlighter(String tab, String tabpad, String spc, St...
method create (line 897) | static UniquePtr<Highlighter> create(HighlighterParameters params, H...
method do_highlight (line 915) | void do_highlight(HighlightContext context, DisplayBuffer& display_b...
type LineNumbersHighlighter (line 1014) | struct LineNumbersHighlighter : Highlighter
method LineNumbersHighlighter (line 1016) | LineNumbersHighlighter(bool relative, bool zero_cursor_line, bool hl...
method create (line 1025) | static UniquePtr<Highlighter> create(HighlighterParameters params, H...
method do_highlight (line 1051) | void do_highlight(HighlightContext context, DisplayBuffer& display_b...
method do_compute_display_setup (line 1087) | void do_compute_display_setup(HighlightContext context, DisplaySetup...
method fill_unique_ids (line 1096) | void fill_unique_ids(Vector<StringView>& unique_ids) const override
method compute_digit_count (line 1101) | int compute_digit_count(const HighlightContext& context) const
function show_matching_char (line 1127) | void show_matching_char(HighlightContext context, DisplayBuffer& displ...
function create_matching_char_highlighter (line 1192) | UniquePtr<Highlighter> create_matching_char_highlighter(HighlighterPar...
function highlight_selections (line 1198) | void highlight_selections(HighlightContext context, DisplayBuffer& dis...
function expand_unprintable (line 1231) | void expand_unprintable(HighlightContext context, DisplayBuffer& displ...
function update_line_specs_ifn (line 1272) | static void update_line_specs_ifn(const Buffer& buffer, LineAndSpecLis...
function option_update (line 1304) | void option_update(LineAndSpecList& opt, const Context& context)
function option_list_postprocess (line 1309) | void option_list_postprocess(Vector<LineAndSpec, MemoryDomain::Options...
type FlagLinesHighlighter (line 1321) | struct FlagLinesHighlighter : Highlighter
method FlagLinesHighlighter (line 1323) | FlagLinesHighlighter(String option_name, String default_face, bool a...
method create (line 1329) | static UniquePtr<Highlighter> create(HighlighterParameters params, H...
method do_highlight (line 1346) | void do_highlight(HighlightContext context, DisplayBuffer& display_b...
method do_compute_display_setup (line 1407) | void do_compute_display_setup(HighlightContext context, DisplaySetup...
function is_empty (line 1436) | bool is_empty(const InclusiveBufferRange& range)
function String (line 1441) | String option_to_string(InclusiveBufferRange range)
function InclusiveBufferRange (line 1450) | InclusiveBufferRange option_from_string(Meta::Type<InclusiveBufferRang...
type OptionBasedHighlighter (line 1480) | struct OptionBasedHighlighter : Highlighter
method OptionBasedHighlighter (line 1482) | OptionBasedHighlighter(String option_name)
method create (line 1486) | static UniquePtr<Highlighter> create(HighlighterParameters params, H...
method OptionType (line 1498) | OptionType& get_option(const HighlightContext& context) const
function BufferCoord (line 1507) | BufferCoord& get_first(RangeAndString& r) { return std::get<0>(r).firs...
function BufferCoord (line 1508) | BufferCoord& get_last(RangeAndString& r) { return std::get<0>(r).last; }
function option_element_compare (line 1510) | bool option_element_compare(RangeAndString const& lhs, RangeAndString ...
function option_list_postprocess (line 1517) | void option_list_postprocess(Vector<RangeAndString, MemoryDomain::Opti...
function option_update (line 1522) | void option_update(RangeAndStringList& opt, const Context& context)
function option_add_from_strings (line 1528) | bool option_add_from_strings(Vector<RangeAndString, MemoryDomain::Opti...
type RangesHighlighter (line 1547) | struct RangesHighlighter : OptionBasedHighlighter<RangeAndStringList, ...
method do_highlight (line 1551) | void do_highlight(HighlightContext context, DisplayBuffer& display_b...
type ReplaceRangesHighlighter (line 1578) | struct ReplaceRangesHighlighter : OptionBasedHighlighter<RangeAndStrin...
method is_valid (line 1582) | static bool is_valid(Buffer& buffer, BufferCoord c)
method is_fully_selected (line 1587) | static bool is_fully_selected(const SelectionList& sels, const Inclu...
method do_highlight (line 1595) | void do_highlight(HighlightContext context, DisplayBuffer& display_b...
method do_compute_display_setup (line 1636) | void do_compute_display_setup(HighlightContext context, DisplaySetup...
function HighlightPass (line 1665) | HighlightPass parse_passes(StringView str)
function create_highlighter_group (line 1695) | UniquePtr<Highlighter> create_highlighter_group(HighlighterParameters ...
type ReferenceHighlighter (line 1713) | struct ReferenceHighlighter : Highlighter
method ReferenceHighlighter (line 1715) | ReferenceHighlighter(HighlightPass passes, String name)
method create (line 1718) | static UniquePtr<Highlighter> create(HighlighterParameters params, H...
method do_highlight (line 1726) | void do_highlight(HighlightContext context, DisplayBuffer& display_b...
method do_compute_display_setup (line 1744) | void do_compute_display_setup(HighlightContext context, DisplaySetup...
type RegexMatch (line 1757) | struct RegexMatch
method BufferCoord (line 1765) | BufferCoord begin_coord() const { return { line, begin }; }
method BufferCoord (line 1766) | BufferCoord end_coord() const { return { line, end }; }
method empty (line 1767) | bool empty() const { return begin == end; }
method StringView (line 1769) | StringView capture(const Buffer& buffer) const
type RegionMatches (line 1779) | struct RegionMatches : UseMemoryDomain<MemoryDomain::Highlight>
type ForwardHighlighterApplier (line 1786) | struct ForwardHighlighterApplier
type RegionsHighlighter (line 1879) | struct RegionsHighlighter : public Highlighter
method RegionsHighlighter (line 1882) | RegionsHighlighter()
method do_highlight (line 1885) | void do_highlight(HighlightContext context, DisplayBuffer& display_b...
method has_children (line 1925) | bool has_children() const override { return true; }
method Highlighter (line 1927) | Highlighter& get_child(StringView path) override
method add_child (line 1940) | void add_child(String name, UniquePtr<Highlighter>&& hl, bool overri...
method remove_child (line 1963) | void remove_child(StringView id) override
method Completions (line 1975) | Completions complete_child(StringView path, ByteCount cursor_pos, bo...
method create (line 1990) | static UniquePtr<Highlighter> create(HighlighterParameters params, H...
method is_regions (line 1997) | static bool is_regions(Highlighter* parent)
method create_region (line 2006) | static UniquePtr<Highlighter> create_region(HighlighterParameters pa...
method create_default_region (line 2033) | static UniquePtr<Highlighter> create_default_region(HighlighterParam...
type RegionHighlighter (line 2052) | struct RegionHighlighter : public Highlighter
method RegionHighlighter (line 2054) | RegionHighlighter(UniquePtr<Highlighter>&& delegate,
method RegionHighlighter (line 2064) | RegionHighlighter(UniquePtr<Highlighter>&& delegate)
method has_children (line 2069) | bool has_children() const override
method Highlighter (line 2074) | Highlighter& get_child(StringView path) override
method add_child (line 2079) | void add_child(String name, UniquePtr<Highlighter>&& hl, bool over...
method remove_child (line 2084) | void remove_child(StringView id) override
method Completions (line 2089) | Completions complete_child(StringView path, ByteCount cursor_pos, ...
method fill_unique_ids (line 2094) | void fill_unique_ids(Vector<StringView>& unique_ids) const override
method do_highlight (line 2099) | void do_highlight(HighlightContext context, DisplayBuffer& display...
method match_capture (line 2105) | bool match_capture() const { return m_match_capture; }
method is_default (line 2106) | bool is_default() const { return m_default; }
method Highlighter (line 2108) | Highlighter& delegate() { return *m_delegate; }
type Region (line 2120) | struct Region
type RegexKey (line 2128) | struct RegexKey
method hash_value (line 2133) | size_t hash_value(const RegexKey& key) { return hash_values(key.re...
type Cache (line 2137) | struct Cache
method compare_to_begin (line 2149) | static bool compare_to_begin(const RegexMatch& lhs, BufferCoord rhs)
method find_matching_end (line 2154) | RegexMatchList::const_iterator find_matching_end(const Buffer& buffe...
method find_next_begin (line 2191) | Optional<RegionAndMatch> find_next_begin(const Cache& cache, BufferC...
method add_regex (line 2209) | void add_regex(const String& str, bool captures)
class MatchAdder (line 2222) | class MatchAdder
method MatchAdder (line 2225) | MatchAdder(RegionsHighlighter& region, const Buffer& buffer, Cache...
method add (line 2241) | void add(LineRange range)
type Matcher (line 2273) | struct Matcher
method update_changed_lines (line 2285) | void update_changed_lines(const Buffer& buffer, ConstArrayView<LineM...
method update_matches (line 2319) | bool update_matches(Cache& cache, const Buffer& buffer, LineRange ra...
method RegionList (line 2363) | const RegionList& get_regions_for_range(const Buffer& buffer, Buffer...
function setup_builtin_highlighters (line 2419) | void setup_builtin_highlighters(HighlighterGroup& group)
function register_highlighters (line 2426) | void register_highlighters()
FILE: src/highlighters.hh
type Kakoune (line 8) | namespace Kakoune
type InclusiveBufferRange (line 13) | struct InclusiveBufferRange
function StringView (line 25) | constexpr StringView option_type_name(Meta::Type<LineAndSpecList>)
function StringView (line 35) | constexpr StringView option_type_name(Meta::Type<RangeAndStringList>)
FILE: src/hook_manager.cc
type Kakoune (line 14) | namespace Kakoune
type HookManager::HookData (line 17) | struct HookManager::HookData
method should_run (line 24) | bool should_run(bool only_always, const Regex& disabled_hooks, Strin...
method exec (line 33) | void exec(Hook hook, StringView param, Context& context, const Match...
function CandidateList (line 92) | CandidateList HookManager::complete_hook_group(StringView prefix, Byte...
type ToRun (line 112) | struct ToRun { HookData* hook; MatchResults<const char*> captures; }
FILE: src/hook_manager.hh
type Kakoune (line 11) | namespace Kakoune
class Context (line 14) | class Context
class Regex (line 15) | class Regex
type Hook (line 17) | enum class Hook
function enum_desc (line 64) | constexpr auto enum_desc(Meta::Type<Hook>)
type HookFlags (line 113) | enum class HookFlags
function with_bit_ops (line 119) | constexpr bool with_bit_ops(Meta::Type<HookFlags>) { return true; }
class HookManager (line 121) | class HookManager : public SafeCountable
method reparent (line 127) | void reparent(HookManager& parent) { m_parent = &parent; }
type HookData (line 136) | struct HookData
FILE: src/input_handler.cc
type Kakoune (line 25) | namespace Kakoune
class InputMode (line 28) | class InputMode : public RefCountable
method InputMode (line 31) | InputMode(InputHandler& input_handler) : m_input_handler(input_handl...
method InputMode (line 33) | InputMode(const InputMode&) = delete;
method InputMode (line 34) | InputMode& operator=(const InputMode&) = delete;
method handle_key (line 36) | void handle_key(Key key) { RefPtr<InputMode> keep_alive{this}; on_ke...
method on_raw_key (line 38) | virtual void on_raw_key() {}
method on_enabled (line 40) | virtual void on_enabled(bool from_pop) {}
method on_disabled (line 41) | virtual void on_disabled(bool from_push) {}
method refresh_ifn (line 43) | virtual void refresh_ifn() {}
method enabled (line 45) | bool enabled() const { return &m_input_handler.current_mode() == thi...
method Context (line 46) | Context& context() const { return m_input_handler.context(); }
method push_mode (line 59) | void push_mode(InputMode* new_mode) { m_input_handler.push_mode(new_...
method pop_mode (line 60) | void pop_mode() { m_input_handler.pop_mode(this); }
method record_key (line 62) | void record_key(Key key) { m_input_handler.record_key(key); }
method drop_last_recorded_key (line 63) | void drop_last_recorded_key() { m_input_handler.drop_last_recorded_k...
type InputModes (line 95) | namespace InputModes
function get_idle_timeout (line 98) | std::chrono::milliseconds get_idle_timeout(const Context& context)
function get_fs_check_timeout (line 103) | std::chrono::milliseconds get_fs_check_timeout(const Context& context)
type MouseHandler (line 108) | struct MouseHandler
method handle_key (line 110) | bool handle_key(Key key, Context& context)
class Normal (line 222) | class Normal : public InputMode
method Normal (line 225) | Normal(InputHandler& input_handler, bool single_command = false)
method on_enabled (line 246) | void on_enabled(bool from_pop) override
method on_disabled (line 267) | void on_disabled(bool from_push) override
method on_key (line 279) | void on_key(Key key) override
method ModeInfo (line 382) | ModeInfo mode_info() const override
method paste (line 419) | void paste(StringView content) override
method KeymapMode (line 430) | KeymapMode keymap_mode() const override { return KeymapMode::Norma...
method StringView (line 432) | StringView name() const override { return "normal"; }
type State (line 444) | enum class State { Normal, SingleCommand, PopOnEnabled }
function to_next_word_begin (line 449) | void to_next_word_begin(CharCount& pos, StringView line)
function to_next_word_end (line 469) | void to_next_word_end(CharCount& pos, StringView line)
function to_prev_word_begin (line 493) | void to_prev_word_begin(CharCount& pos, StringView line)
class LineEditor (line 518) | class LineEditor
method LineEditor (line 521) | LineEditor(const FaceRegistry& faces) : m_faces{faces} {}
method handle_key (line 523) | void handle_key(Key key)
method insert (line 604) | void insert(Codepoint cp)
method insert (line 611) | void insert(StringView str)
method insert_from (line 616) | void insert_from(CharCount start, StringView str)
method reset (line 624) | void reset(String line, StringView empty_text)
method String (line 631) | const String& line() const { return m_line; }
method CharCount (line 632) | CharCount cursor_pos() const { return m_cursor_pos; }
method ColumnCount (line 634) | ColumnCount cursor_display_column() const
method DisplayLine (line 639) | DisplayLine build_display_line(ColumnCount in_width)
function get_raw_codepoint (line 664) | static Optional<Codepoint> get_raw_codepoint(Key key)
class Prompt (line 675) | class Prompt : public InputMode
method Prompt (line 678) | Prompt(InputHandler& input_handler, StringView prompt,
method on_key (line 705) | void on_key(Key key) override
method refresh_ifn (line 945) | void refresh_ifn() override
method paste (line 958) | void paste(StringView content) override
method on_raw_key (line 969) | void on_raw_key() override {
method set_prompt_face (line 973) | void set_prompt_face(Face face)
method ModeInfo (line 982) | ModeInfo mode_info() const override
method KeymapMode (line 987) | KeymapMode keymap_mode() const override { return KeymapMode::Promp...
method StringView (line 989) | StringView name() const override { return "prompt"; }
method use_explicit_completer (line 993) | void use_explicit_completer(Completer&& completer)
method refresh_completions (line 1011) | void refresh_completions()
method show_completions (line 1042) | void show_completions()
method clear_completions (line 1052) | void clear_completions()
method display (line 1058) | void display()
method on_enabled (line 1070) | void on_enabled(bool from_pop) override
method on_disabled (line 1090) | void on_disabled(bool from_push) override
method history_push (line 1120) | void history_push(StringView entry)
class NextKey (line 1131) | class NextKey : public InputMode
method NextKey (line 1134) | NextKey(InputHandler& input_handler, String name, KeymapMode keyma...
method on_key (line 1139) | void on_key(Key key) override
method ModeInfo (line 1148) | ModeInfo mode_info() const override
method KeymapMode (line 1153) | KeymapMode keymap_mode() const override { return m_keymap_mode; }
method StringView (line 1155) | StringView name() const override { return m_name; }
class Insert (line 1164) | class Insert : public InputMode
method Insert (line 1167) | Insert(InputHandler& input_handler, InsertMode mode, int count, In...
method on_enabled (line 1198) | void on_enabled(bool from_pop) override
method on_disabled (line 1204) | void on_disabled(bool from_push) override
method on_key (line 1225) | void on_key(Key key) override
method paste (line 1398) | void paste(StringView content) override
method ModeInfo (line 1405) | ModeInfo mode_info() const override
method KeymapMode (line 1417) | KeymapMode keymap_mode() const override { return KeymapMode::Inser...
method StringView (line 1419) | StringView name() const override { return "insert"; }
method move (line 1423) | void move(Type offset)
method insert (line 1436) | void insert(ConstArrayView<S> strings)
method insert (line 1445) | void insert(Codepoint key)
method prepare (line 1452) | void prepare(InsertMode mode, int count)
function is_valid (line 1663) | static bool is_valid(Key key)
function ModeInfo (line 1764) | ModeInfo InputHandler::mode_info() const
function should_show_info (line 1769) | bool should_show_info(AutoInfo mask, const Context& context)
function show_auto_info_ifn (line 1774) | bool show_auto_info_ifn(StringView title, StringView info, AutoInfo ma...
function hide_auto_info_ifn (line 1783) | void hide_auto_info_ifn(const Context& context, bool hide)
function scroll_window (line 1789) | void scroll_window(Context& context, LineCount offset, OnHiddenCursor ...
FILE: src/input_handler.hh
type Kakoune (line 18) | namespace Kakoune
type PromptEvent (line 21) | enum class PromptEvent
type PromptFlags (line 29) | enum class PromptFlags
function with_bit_ops (line 36) | constexpr bool with_bit_ops(Meta::Type<PromptFlags>) { return true; }
class InputMode (line 40) | class InputMode
type KeymapMode (line 41) | enum class KeymapMode : char
type CursorMode (line 42) | enum class CursorMode
class Timer (line 44) | class Timer
type InsertMode (line 47) | enum class InsertMode : unsigned
type ModeInfo (line 58) | struct ModeInfo
class InputHandler (line 64) | class InputHandler : public SafeCountable
method recording_reg (line 102) | char recording_reg() const { return m_recording_reg; }
method Context (line 106) | Context& context() { return m_context; }
method Context (line 107) | const Context& context() const { return m_context; }
type ScopedForceNormal (line 112) | struct ScopedForceNormal
method InputMode (line 128) | InputMode& current_mode() const { return *m_mode_stack.back(); }
type Insertion (line 136) | struct Insertion{
type AutoInfo (line 151) | enum class AutoInfo
function with_bit_ops (line 159) | constexpr bool with_bit_ops(Meta::Type<AutoInfo>) { return true; }
function enum_desc (line 161) | constexpr auto enum_desc(Meta::Type<AutoInfo>)
type AutoComplete (line 170) | enum class AutoComplete
function with_bit_ops (line 176) | constexpr bool with_bit_ops(Meta::Type<AutoComplete>) { return true; }
function enum_desc (line 178) | constexpr auto enum_desc(Meta::Type<AutoComplete>)
function on_next_key_with_autoinfo (line 191) | void on_next_key_with_autoinfo(const Context& context, StringView mode...
type OnHiddenCursor (line 205) | enum class OnHiddenCursor {
FILE: src/insert_completer.cc
type Kakoune (line 25) | namespace Kakoune
function String (line 30) | String option_to_string(const InsertCompleterDesc& opt)
function InsertCompleterDesc (line 47) | InsertCompleterDesc option_from_string(Meta::Type<InsertCompleterDesc>...
function InsertCompletion (line 72) | InsertCompletion complete_word(const SelectionList& sels,
function InsertCompletion (line 195) | InsertCompletion complete_filename(const SelectionList& sels,
function InsertCompletion (line 258) | InsertCompletion complete_option(const SelectionList& sels,
function InsertCompletion (line 345) | InsertCompletion complete_line(const SelectionList& sels,
FILE: src/insert_completer.hh
type Kakoune (line 11) | namespace Kakoune
type SelectionList (line 14) | struct SelectionList
type Key (line 15) | struct Key
class Context (line 16) | class Context
class OptionManager (line 17) | class OptionManager
class FaceRegistry (line 18) | class FaceRegistry
type InsertCompleterDesc (line 20) | struct InsertCompleterDesc
type Mode (line 22) | enum Mode
function StringView (line 41) | inline StringView option_type_name(Meta::Type<InsertCompleterDesc>)
function StringView (line 49) | inline StringView option_type_name(Meta::Type<CompletionList>)
type InsertCompletion (line 54) | struct InsertCompletion
type Candidate (line 56) | struct Candidate
method is_valid (line 72) | bool is_valid() const { return not candidates.empty(); }
class InsertCompleter (line 75) | class InsertCompleter : public OptionWatcher
method InsertCompleter (line 79) | InsertCompleter(const InsertCompleter&) = delete;
method InsertCompleter (line 80) | InsertCompleter& operator=(const InsertCompleter&) = delete;
FILE: src/json.cc
type Kakoune (line 12) | namespace Kakoune
function String (line 15) | String to_json(int i) { return to_string(i); }
function String (line 16) | String to_json(bool b) { return b ? "true" : "false"; }
function String (line 17) | String to_json(StringView str)
function is_digit (line 43) | static bool is_digit(char c) { return c >= '0' and c <= '9'; }
function JsonResult (line 47) | JsonResult parse_json_impl(const char* pos, const char* end, size_t de...
function JsonResult (line 155) | JsonResult parse_json(const char* pos, const char* end) { return parse...
function JsonResult (line 156) | JsonResult parse_json(StringView json) { return parse...
FILE: src/json.hh
type Kakoune (line 9) | namespace Kakoune
function String (line 20) | String to_json(ArrayView<const T> array)
function String (line 26) | String to_json(const Vector<T, D>& vec) { return to_json(ArrayView<con...
function String (line 29) | String to_json(const HashMap<K, V, D>& map)
type JsonResult (line 35) | struct JsonResult { Value value; const char* new_pos; }
FILE: src/json_ui.cc
type Kakoune (line 18) | namespace Kakoune
type invalid_rpc_request (line 21) | struct invalid_rpc_request : runtime_error {
method invalid_rpc_request (line 22) | invalid_rpc_request(const String& message)
function String (line 26) | String to_json(Color color)
function String (line 37) | String to_json(Attribute attributes)
function String (line 61) | String to_json(Face face)
function String (line 67) | String to_json(const DisplayAtom& atom)
function String (line 72) | String to_json(const DisplayLine& line)
function String (line 77) | String to_json(ColumnCount column)
function String (line 82) | String to_json(DisplayCoord coord)
function String (line 87) | String to_json(MenuStyle style)
function String (line 98) | String to_json(InfoStyle style)
function String (line 112) | String concat()
function String (line 118) | String concat(First&& first, Args&&... args)
function rpc_call (line 126) | void rpc_call(StringView method, Args&&... args)
function DisplayCoord (line 200) | DisplayCoord JsonUI::dimensions()
FILE: src/json_ui.hh
type Kakoune (line 9) | namespace Kakoune
type Value (line 12) | struct Value
class JsonUI (line 14) | class JsonUI : public UserInterface
method JsonUI (line 19) | JsonUI(const JsonUI&) = delete;
method JsonUI (line 20) | JsonUI& operator=(const JsonUI&) = delete;
method is_ok (line 22) | bool is_ok() const override { return m_stdin_watcher.fd() != -1; }
FILE: src/keymap_manager.cc
type Kakoune (line 8) | namespace Kakoune
FILE: src/keymap_manager.hh
type Kakoune (line 9) | namespace Kakoune
type KeymapMode (line 12) | enum class KeymapMode : char
class KeymapManager (line 26) | class KeymapManager
method KeymapManager (line 29) | KeymapManager(KeymapManager& parent) : m_parent(&parent) {}
method reparent (line 31) | void reparent(KeymapManager& parent) { m_parent = &parent; }
method get_mapping_keys (line 41) | auto get_mapping_keys(Key key, KeymapMode mode) {
method String (line 45) | const String& get_mapping_docstring(Key key, KeymapMode mode) { retu...
method UserModeList (line 48) | UserModeList& user_modes() {
type KeymapInfo (line 56) | struct KeymapInfo
method KeymapManager (line 63) | KeymapManager()
FILE: src/keys.cc
type Kakoune (line 11) | namespace Kakoune
type key_parse_error (line 14) | struct key_parse_error : runtime_error
function Key (line 19) | static Key canonicalize_ifn(Key key)
type KeyAndName (line 62) | struct KeyAndName { const char* name; Codepoint key; }
function KeyList (line 91) | KeyList parse_keys(StringView str)
function StringView (line 167) | StringView to_string(Key::MouseButton button)
function str_to_button (line 178) | Key::MouseButton str_to_button(StringView str)
function String (line 186) | String to_string(Key key)
FILE: src/keys.hh
type Kakoune (line 14) | namespace Kakoune
type Key (line 17) | struct Key
type MouseButton (line 19) | enum class MouseButton
type Modifiers (line 25) | enum class Modifiers : int
type NamedKey (line 41) | enum NamedKey : Codepoint
method Key (line 79) | constexpr Key(Modifiers modifiers, Codepoint key)
method Key (line 82) | constexpr Key(Codepoint key)
method Key (line 85) | constexpr Key() = default;
method val (line 87) | constexpr uint64_t val() const { return (uint64_t)modifiers << 32 | ...
method DisplayCoord (line 92) | constexpr DisplayCoord coord() const { return {(int)((int32_t) (key ...
method MouseButton (line 93) | constexpr MouseButton mouse_button() { return MouseButton{((int)modi...
method scroll_amount (line 94) | constexpr int scroll_amount() { return (int32_t)modifiers >> 16; }
method Modifiers (line 95) | static Modifiers to_modifier(MouseButton button) { return Key::Modif...
function with_bit_ops (line 100) | constexpr bool with_bit_ops(Meta::Type<Key::Modifiers>) { return true; }
class String (line 104) | class String
class StringView (line 105) | class StringView
function Key (line 112) | constexpr Key shift(Key key)
type MouseButton (line 19) | enum class MouseButton
type Modifiers (line 25) | enum class Modifiers : int
type NamedKey (line 41) | enum NamedKey : Codepoint
method Key (line 79) | constexpr Key(Modifiers modifiers, Codepoint key)
method Key (line 82) | constexpr Key(Codepoint key)
method Key (line 85) | constexpr Key() = default;
method val (line 87) | constexpr uint64_t val() const { return (uint64_t)modifiers << 32 | ...
method DisplayCoord (line 92) | constexpr DisplayCoord coord() const { return {(int)((int32_t) (key ...
method MouseButton (line 93) | constexpr MouseButton mouse_button() { return MouseButton{((int)modi...
method scroll_amount (line 94) | constexpr int scroll_amount() { return (int32_t)modifiers >> 16; }
method Modifiers (line 95) | static Modifiers to_modifier(MouseButton button) { return Key::Modif...
function Key (line 116) | constexpr Key alt(Key key)
type MouseButton (line 19) | enum class MouseButton
type Modifiers (line 25) | enum class Modifiers : int
type NamedKey (line 41) | enum NamedKey : Codepoint
method Key (line 79) | constexpr Key(Modifiers modifiers, Codepoint key)
method Key (line 82) | constexpr Key(Codepoint key)
method Key (line 85) | constexpr Key() = default;
method val (line 87) | constexpr uint64_t val() const { return (uint64_t)modifiers << 32 | ...
method DisplayCoord (line 92) | constexpr DisplayCoord coord() const { return {(int)((int32_t) (key ...
method MouseButton (line 93) | constexpr MouseButton mouse_button() { return MouseButton{((int)modi...
method scroll_amount (line 94) | constexpr int scroll_amount() { return (int32_t)modifiers >> 16; }
method Modifiers (line 95) | static Modifiers to_modifier(MouseButton button) { return Key::Modif...
function Key (line 120) | constexpr Key ctrl(Key key)
type MouseButton (line 19) | enum class MouseButton
type Modifiers (line 25) | enum class Modifiers : int
type NamedKey (line 41) | enum NamedKey : Codepoint
method Key (line 79) | constexpr Key(Modifiers modifiers, Codepoint key)
method Key (line 82) | constexpr Key(Codepoint key)
method Key (line 85) | constexpr Key() = default;
method val (line 87) | constexpr uint64_t val() const { return (uint64_t)modifiers << 32 | ...
method DisplayCoord (line 92) | constexpr DisplayCoord coord() const { return {(int)((int32_t) (key ...
method MouseButton (line 93) | constexpr MouseButton mouse_button() { return MouseButton{((int)modi...
method scroll_amount (line 94) | constexpr int scroll_amount() { return (int32_t)modifiers >> 16; }
method Modifiers (line 95) | static Modifiers to_modifier(MouseButton button) { return Key::Modif...
function Codepoint (line 125) | constexpr Codepoint encode_coord(DisplayCoord coord) { return (Codepoi...
function Key (line 127) | constexpr Key resize(DisplayCoord dim) { return { Key::Modifiers::Resi...
type MouseButton (line 19) | enum class MouseButton
type Modifiers (line 25) | enum class Modifiers : int
type NamedKey (line 41) | enum NamedKey : Codepoint
method Key (line 79) | constexpr Key(Modifiers modifiers, Codepoint key)
method Key (line 82) | constexpr Key(Codepoint key)
method Key (line 85) | constexpr Key() = default;
method val (line 87) | constexpr uint64_t val() const { return (uint64_t)modifiers << 32 | ...
method DisplayCoord (line 92) | constexpr DisplayCoord coord() const { return {(int)((int32_t) (key ...
method MouseButton (line 93) | constexpr MouseButton mouse_button() { return MouseButton{((int)modi...
method scroll_amount (line 94) | constexpr int scroll_amount() { return (int32_t)modifiers >> 16; }
method Modifiers (line 95) | static Modifiers to_modifier(MouseButton button) { return Key::Modif...
function hash_value (line 129) | constexpr size_t hash_value(const Key& key) { return hash_values(key.m...
FILE: src/line_modification.cc
type Kakoune (line 7) | namespace Kakoune
function LineModification (line 10) | static LineModification make_line_modif(const Buffer::Change& change)
function compute_line_modifications (line 26) | Vector<LineModification> compute_line_modifications(const Buffer& buff...
FILE: src/line_modification.hh
type Kakoune (line 10) | namespace Kakoune
class Buffer (line 13) | class Buffer
type LineModification (line 15) | struct LineModification
method LineCount (line 22) | LineCount diff() const { return new_line - old_line + num_added - nu...
type LineRangeSet (line 31) | struct LineRangeSet : private Vector<LineRange, MemoryDomain::Highlight>
method view (line 38) | ConstArrayView<LineRange> view() const { return {data(), data() + si...
method reset (line 40) | void reset(LineRange range) { Base::operator=({range}); }
FILE: src/main.cc
type Kakoune (line 42) | namespace Kakoune
function show_startup_info (line 89) | void show_startup_info(Client* local_client, int last_version)
function write_stdout (line 118) | inline void write_stdout(StringView str) { try { write(STDOUT_FILENO, ...
function write_stderr (line 119) | inline void write_stderr(StringView str) { try { write(STDERR_FILENO, ...
function String (line 121) | String runtime_directory()
function String (line 135) | String config_directory()
function main_sel_first (line 144) | auto main_sel_first(const SelectionList& selections)
function register_registers (line 351) | void register_registers()
function register_keymaps (line 414) | void register_keymaps()
function check_tabstop (line 433) | void check_tabstop(const int& val)
function check_indentwidth (line 438) | void check_indentwidth(const int& val)
function check_scrolloff (line 443) | void check_scrolloff(const DisplayCoord& so)
function check_timeout (line 449) | void check_timeout(const int& timeout)
function check_extra_word_chars (line 455) | void check_extra_word_chars(const Vector<Codepoint, MemoryDomain::Opti...
function check_matching_pairs (line 461) | void check_matching_pairs(const Vector<Codepoint, MemoryDomain::Option...
function register_options (line 469) | void register_options()
type UIType (line 559) | enum class UIType
function UIType (line 566) | UIType parse_ui_type(StringView ui_name)
function make_ui (line 575) | UniquePtr<UserInterface> make_ui(UIType ui_type)
function pid_t (line 607) | pid_t fork_server_to_background()
function create_local_ui (line 621) | UniquePtr<UserInterface> create_local_ui(UIType ui_type)
function run_client (line 639) | int run_client(StringView session, StringView name, StringView client_...
type convert_to_client_mode (line 677) | struct convert_to_client_mode
type ServerFlags (line 685) | enum class ServerFlags
function with_bit_ops (line 693) | constexpr bool with_bit_ops(Meta::Type<ServerFlags>) { return true; }
function run_server (line 695) | int run_server(StringView session, StringView server_init,
function run_filter (line 905) | int run_filter(StringView keystr, ConstArrayView<StringView> files, bo...
function run_pipe (line 970) | int run_pipe(StringView session)
function signal_handler (line 984) | void signal_handler(int signal)
function main (line 1019) | int main(int argc, char* argv[])
FILE: src/memory.cc
type Kakoune (line 3) | namespace Kakoune
FILE: src/memory.hh
type Kakoune (line 10) | namespace Kakoune
type MemoryDomain (line 13) | enum class MemoryDomain
type MemoryStats (line 76) | struct MemoryStats
function on_alloc (line 85) | inline void on_alloc(MemoryDomain domain, size_t size)
function on_dealloc (line 93) | inline void on_dealloc(MemoryDomain domain, size_t size)
type Allocator (line 102) | struct Allocator
method Allocator (line 106) | Allocator() = default;
method Allocator (line 108) | Allocator(const Allocator<U, domain>&) {}
type rebind (line 111) | struct rebind { using other = Allocator<U, domain>; }
method T (line 113) | T* allocate(size_t n)
method deallocate (line 120) | void deallocate(T* ptr, size_t n)
function MemoryDomain (line 134) | constexpr MemoryDomain memory_domain(Meta::AnyType) { return MemoryDom...
function memory_domain (line 137) | constexpr decltype(T::Domain) memory_domain(Meta::Type<T>) { return T:...
type UseMemoryDomain (line 140) | struct UseMemoryDomain
FILE: src/meta.hh
type Kakoune::inline Meta (line 4) | namespace Kakoune::inline Meta
type AnyType (line 7) | struct AnyType{}
type Type (line 8) | struct Type : AnyType {}
FILE: src/normal.cc
type Kakoune (line 34) | namespace Kakoune
type SelectMode (line 37) | enum class SelectMode
function enum_desc (line 44) | constexpr auto enum_desc(Meta::Type<SelectMode>)
function merge_selections (line 53) | void merge_selections(Selection& sel, const Selection& new_sel)
function select (line 81) | void select(Context& context, SelectMode mode, T func)
function select (line 136) | void select(Context& context, NormalParams)
function select_and_set_last (line 142) | void select_and_set_last(Context& context, SelectMode mode, Func&& func)
function select_coord (line 150) | void select_coord(Context& context, BufferCoord coord)
function enter_insert_mode (line 167) | void enter_insert_mode(Context& context, NormalParams params)
function repeat_last_insert (line 172) | void repeat_last_insert(Context& context, NormalParams)
function repeat_last_select (line 177) | void repeat_last_select(Context& context, NormalParams)
function String (line 182) | String build_autoinfo_for_mapping(const Context& context, KeymapMode m...
function goto_commands (line 228) | void goto_commands(Context& context, NormalParams params)
function view_commands (line 397) | void view_commands(Context& context, NormalParams params)
function replace_with_char (line 475) | void replace_with_char(Context& context, NormalParams)
function Codepoint (line 494) | Codepoint swap_case(Codepoint cp)
function for_each_codepoint (line 501) | void for_each_codepoint(Context& context, NormalParams)
function command (line 519) | void command(const Context& context, EnvVarMap env_vars, char reg = 0)
function command (line 565) | void command(Context& context, NormalParams params)
function BufferRange (line 574) | BufferRange apply_diff(Buffer& buffer, BufferCoord pos, ArrayView<Stri...
function pipe (line 687) | void pipe(Context& context, NormalParams params)
function yank (line 783) | void yank(Context& context, NormalParams params)
function erase_selections (line 793) | void erase_selections(Context& context, NormalParams params)
function change (line 806) | void change(Context& context, NormalParams params)
function BufferCoord (line 816) | BufferCoord paste_pos(Buffer& buffer, BufferCoord min, BufferCoord max...
function paste (line 833) | void paste(Context& context, NormalParams params)
function paste_all (line 858) | void paste_all(Context& context, NormalParams params)
function insert_output (line 904) | void insert_output(Context& context, NormalParams params)
function RegexCompileFlags (line 946) | constexpr RegexCompileFlags direction_flags(RegexMode mode)
function regex_prompt (line 953) | void regex_prompt(Context& context, String prompt, char reg, RegexMode...
function select_next_matches (line 1041) | void select_next_matches(Context& context, const Regex& regex, RegexMo...
function extend_to_next_matches (line 1052) | void extend_to_next_matches(Context& context, const Regex& regex, Rege...
function search (line 1078) | void search(Context& context, NormalParams params, SelectMode mode, Re...
function search_next (line 1100) | void search_next(Context& context, NormalParams params, SelectMode mod...
function use_selection_as_search_pattern (line 1137) | void use_selection_as_search_pattern(Context& context, NormalParams pa...
function select_regex (line 1162) | void select_regex(Context& context, NormalParams params)
function split_regex (line 1177) | void split_regex(Context& context, NormalParams params)
function split_lines (line 1192) | void split_lines(Context& context, NormalParams params)
function select_boundaries (line 1220) | void select_boundaries(Context& context, NormalParams)
function join_lines_select_spaces (line 1234) | void join_lines_select_spaces(Context& context, NormalParams)
function join_lines (line 1260) | void join_lines(Context& context, NormalParams params)
function keep (line 1273) | void keep(Context& context, NormalParams params)
function keep_pipe (line 1305) | void keep_pipe(Context& context, NormalParams params)
function indent (line 1349) | void indent(Context& context, NormalParams params)
function deindent (line 1372) | void deindent(Context& context, NormalParams params)
function select_object (line 1416) | void select_object(Context& context, NormalParams params, ObjectFlags ...
function select_object (line 1586) | void select_object(Context& context, NormalParams params)
function scroll (line 1594) | void scroll(Context& context, NormalParams params)
function copy_selections_on_next_lines (line 1604) | void copy_selections_on_next_lines(Context& context, NormalParams params)
function rotate_selections (line 1657) | void rotate_selections(Context& context, NormalParams params)
function rotate_selections_content (line 1670) | void rotate_selections_content(Context& context, NormalParams params)
type SelectFlags (line 1695) | enum class SelectFlags
function with_bit_ops (line 1703) | constexpr bool with_bit_ops(Meta::Type<SelectFlags>) { return true; }
function select_to_next_char (line 1705) | void select_to_next_char(Context& context, NormalParams params, Select...
function select_to_next_char (line 1730) | void select_to_next_char(Context& context, NormalParams params)
function start_or_end_macro_recording (line 1735) | void start_or_end_macro_recording(Context& context, NormalParams params)
function replay_macro (line 1748) | void replay_macro(Context& context, NormalParams params)
function jump (line 1778) | void jump(Context& context, NormalParams params)
function push_selections (line 1793) | void push_selections(Context& context, NormalParams)
function align (line 1800) | void align(Context& context, NormalParams)
function copy_indent (line 1852) | void copy_indent(Context& context, NormalParams params)
function tabs_to_spaces (line 1890) | void tabs_to_spaces(Context& context, NormalParams params)
function spaces_to_tabs (line 1917) | void spaces_to_tabs(Context& context, NormalParams params)
function trim_selections (line 1955) | void trim_selections(Context& context, NormalParams)
function SelectionList (line 1988) | SelectionList read_selections_from_register(char reg, const Context& c...
type CombineOp (line 2013) | enum class CombineOp
function CombineOp (line 2024) | CombineOp key_to_combine_op(Key key)
function combine_selection (line 2039) | void combine_selection(const Buffer& buffer, Selection& sel, const Sel...
function combine_selections (line 2072) | void combine_selections(Context& context, SelectionList list, Func fun...
function save_selections (line 2115) | void save_selections(Context& context, NormalParams params)
function restore_selections (line 2146) | void restore_selections(Context& context, NormalParams params)
function undo (line 2171) | void undo(Context& context, NormalParams params)
function redo (line 2185) | void redo(Context& context, NormalParams params)
function move_in_history (line 2200) | void move_in_history(Context& context, NormalParams params)
function undo_selection_change (line 2223) | void undo_selection_change(Context& context, NormalParams params)
function exec_user_mappings (line 2230) | void exec_user_mappings(Context& context, NormalParams params)
function add_empty_line (line 2250) | void add_empty_line(Context& context, NormalParams params)
class Repeated (line 2266) | class Repeated
method Repeated (line 2269) | constexpr Repeated(T t) : m_func(t) {}
function repeated (line 2282) | void repeated(Context& context, NormalParams params)
function move_cursor (line 2290) | void move_cursor(Context& context, NormalParams params, Direction dire...
function move_cursor (line 2307) | void move_cursor(Context& context, NormalParams params)
function select_whole_buffer (line 2312) | void select_whole_buffer(Context& context, NormalParams)
function keep_selection (line 2319) | void keep_selection(Context& context, NormalParams p)
function remove_selection (line 2331) | void remove_selection(Context& context, NormalParams p)
function clear_selections (line 2345) | void clear_selections(Context& context, NormalParams)
function flip_selections (line 2352) | void flip_selections(Context& context, NormalParams)
function ensure_forward (line 2364) | void ensure_forward(Context& context, NormalParams)
function merge_consecutive (line 2376) | void merge_consecutive(Context& context, NormalParams params)
function merge_overlapping (line 2383) | void merge_overlapping(Context& context, NormalParams params)
function duplicate_selections (line 2390) | void duplicate_selections(Context& context, NormalParams params)
function force_redraw (line 2409) | void force_redraw(Context& context, NormalParams)
type KeymapBackend (line 2421) | struct KeymapBackend : private Array<T, keymap_max_size>
method KeymapBackend (line 2426) | constexpr KeymapBackend() = default;
method KeymapBackend (line 2427) | constexpr KeymapBackend(std::initializer_list<T> items)
method resize (line 2434) | constexpr void resize(size_t s)
method size (line 2440) | constexpr size_t size() const { return m_size; }
function get_normal_command (line 2641) | Optional<NormalCmd> get_normal_command(Key key)
FILE: src/normal.hh
type Kakoune (line 9) | namespace Kakoune
class Buffer (line 12) | class Buffer
class Context (line 13) | class Context
type KeymapMode (line 14) | enum class KeymapMode : char
type no_selections_remaining (line 16) | struct no_selections_remaining : runtime_error
method no_selections_remaining (line 18) | no_selections_remaining() : runtime_error("no selections remaining") {}
type NormalParams (line 21) | struct NormalParams
type NormalCmd (line 27) | struct NormalCmd
type KeyInfo (line 35) | struct KeyInfo
type PasteMode (line 44) | enum class PasteMode
FILE: src/option.hh
type Kakoune (line 9) | namespace Kakoune
class String (line 12) | class String
type Quoting (line 13) | enum class Quoting
function option_from_strings (line 22) | decltype(option_from_string(Meta::Type<T>{}, StringView{}))
function option_to_strings (line 31) | Vector<decltype(option_to_string(std::declval<T>(), Quoting{}))>
function option_add_from_strings (line 38) | decltype(option_add(std::declval<T>(), std::declval<String>()))
function option_remove_from_strings (line 47) | decltype(option_add(std::declval<T>(), std::declval<String>()))
type PrefixedList (line 56) | struct PrefixedList
class Option (line 68) | class Option
class OptionWatcher (line 70) | class OptionWatcher
FILE: src/option_manager.cc
type Kakoune (line 7) | namespace Kakoune
type option_not_found (line 53) | struct option_not_found : public runtime_error
method option_not_found (line 55) | option_not_found(StringView name)
function Option (line 59) | Option& OptionManager::get_local_option(StringView name)
function Option (line 74) | Option& OptionManager::operator[](StringView name)
function Option (line 85) | const Option& OptionManager::operator[](StringView name) const
function CandidateList (line 120) | CandidateList OptionsRegistry::complete_option_name(StringView prefix,
FILE: src/option_manager.hh
type Kakoune (line 17) | namespace Kakoune
class OptionManager (line 20) | class OptionManager
method flatten_options (line 95) | auto flatten_options() const
method OptionManager (line 113) | OptionManager()
class Context (line 21) | class Context
type OptionFlags (line 23) | enum class OptionFlags
function with_bit_ops (line 29) | constexpr bool with_bit_ops(Meta::Type<OptionFlags>) { return true; }
class OptionDesc (line 31) | class OptionDesc
method String (line 36) | const String& name() const { return m_name; }
method String (line 37) | const String& docstring() const { return m_docstring; }
method OptionFlags (line 39) | OptionFlags flags() const { return m_flags; }
class Option (line 47) | class Option : public UseMemoryDomain<MemoryDomain::Options>
method OptionManager (line 68) | OptionManager& manager() const { return m_manager; }
method String (line 70) | const String& name() const { return m_desc.name(); }
method String (line 71) | const String& docstring() const { return m_desc.docstring(); }
method OptionFlags (line 72) | OptionFlags flags() const { return m_desc.flags(); }
class OptionManager (line 81) | class OptionManager final : private OptionWatcher
method flatten_options (line 95) | auto flatten_options() const
method OptionManager (line 113) | OptionManager()
class TypedOption (line 127) | class TypedOption : public Option
method TypedOption (line 130) | TypedOption(OptionManager& manager, const OptionDesc& desc, const T&...
method set (line 133) | void set(T value, bool notify = true)
method T (line 143) | const T& get() const { return m_value; }
method T (line 144) | T& get_mutable() { return m_value; }
method get_as_strings (line 146) | Vector<String> get_as_strings() const override
method String (line 151) | String get_as_string(Quoting quoting) const override
method String (line 156) | String get_desc_string() const override
method set_from_strings (line 164) | void set_from_strings(ConstArrayView<String> strs) override
method add_from_strings (line 169) | void add_from_strings(ConstArrayView<String> strs) override
method remove_from_strings (line 175) | void remove_from_strings(ConstArrayView<String> strs) override
method update (line 181) | void update(const Context& context) override
method has_same_value (line 186) | bool has_same_value(const Option& other) const override
method validate (line 191) | virtual void validate(const T& value) const {}
class TypedCheckedOption (line 196) | class TypedCheckedOption : public TypedOption<T>
method Option (line 200) | Option* clone(OptionManager& manager) const override
method validate (line 205) | void validate(const T& value) const override { if (validator != null...
function T (line 208) | const T& Option::get() const
function T (line 217) | T& Option::get_mutable()
class OptionsRegistry (line 236) | class OptionsRegistry
method OptionsRegistry (line 239) | OptionsRegistry(OptionManager& global_manager) : m_global_manager(gl...
method Option (line 242) | Option& declare_option(StringView name, StringView docstring,
method OptionDesc (line 268) | const OptionDesc* option_desc(StringView name) const
method option_exists (line 276) | bool option_exists(StringView name) const { return option_desc(name)...
method clear_option_trash (line 280) | void clear_option_trash() { m_option_trash.clear(); }
method move_to_trash (line 281) | void move_to_trash(UniquePtr<Option>&& option) { m_option_trash.push...
FILE: src/option_types.cc
type Kakoune (line 5) | namespace Kakoune
FILE: src/option_types.hh
type Kakoune (line 18) | namespace Kakoune
function String (line 22) | String option_to_string(const T& value, Quoting)
function option_type_name (line 29) | constexpr decltype(T::option_type_name) option_type_name(Meta::Type<T>)
function String (line 35) | String option_type_name(Meta::Type<Enum>)
function String (line 42) | inline String option_to_string(int opt) { return to_string(opt); }
function option_from_string (line 43) | inline int option_from_string(Meta::Type<int>, StringView str) { retur...
function option_add (line 44) | inline bool option_add(int& opt, StringView str)
function option_remove (line 50) | inline bool option_remove(int& opt, StringView str)
function StringView (line 56) | constexpr StringView option_type_name(Meta::Type<int>) { return "int"; }
function String (line 58) | inline String option_to_string(size_t opt) { return to_string(opt); }
function option_from_string (line 59) | inline size_t option_from_string(Meta::Type<size_t>, StringView str) {...
function String (line 61) | inline String option_to_string(bool opt) { return opt ? "true" : "fals...
function option_from_string (line 62) | inline bool option_from_string(Meta::Type<bool>, StringView str)
function StringView (line 71) | constexpr StringView option_type_name(Meta::Type<bool>) { return "bool...
function String (line 73) | inline String option_to_string(Codepoint opt, Quoting quoting) { retur...
function Codepoint (line 74) | inline Codepoint option_from_string(Meta::Type<Codepoint>, StringView ...
function StringView (line 80) | constexpr StringView option_type_name(Meta::Type<Codepoint>) { return ...
function option_to_strings (line 83) | Vector<String> option_to_strings(const Vector<T, domain>& opt)
function String (line 89) | String option_to_string(const Vector<T, domain>& opt, Quoting quoting)
function option_list_postprocess (line 95) | void option_list_postprocess(Vector<T, domain>& opt)
function option_from_strings (line 99) | Vector<T, domain> option_from_strings(Meta::Type<Vector<T, domain>>, C...
function option_add_from_strings (line 108) | bool option_add_from_strings(Vector<T, domain>& opt, ConstArrayView<St...
function option_remove_from_strings (line 119) | bool option_remove_from_strings(Vector<T, domain>& opt, ConstArrayView...
function String (line 134) | String option_type_name(Meta::Type<Vector<T, D>>)
function option_to_strings (line 140) | Vector<String> option_to_strings(const HashMap<Key, Value, domain>& opt)
function String (line 150) | String option_to_string(const HashMap<Key, Value, domain>& opt, Quotin...
function option_add_from_strings (line 161) | bool option_add_from_strings(HashMap<Key, Value, domain>& opt, ConstAr...
function option_remove_from_strings (line 179) | bool option_remove_from_strings(HashMap<Key, Value, domain>& opt, Cons...
function option_from_strings (line 200) | HashMap<Key, Value, domain> option_from_strings(Meta::Type<HashMap<Key...
function String (line 208) | String option_type_name(Meta::Type<HashMap<K, V, D>>)
function String (line 217) | String option_to_string_impl(Quoting quoting, const std::tuple<Types.....
function String (line 223) | String option_to_string(const std::tuple<Types...>& opt, Quoting quoting)
function option_from_string_impl (line 229) | std::tuple<Types...> option_from_string_impl(Meta::Type<std::tuple<Typ...
function option_from_string (line 245) | std::tuple<Types...> option_from_string(Meta::Type<std::tuple<Types......
function String (line 252) | inline String option_to_string(const StronglyTypedNumber<RealType, Val...
function Number (line 259) | Number option_from_string(Meta::Type<Number>, StringView str)
function option_add (line 265) | inline bool option_add(StronglyTypedNumber<RealType, ValueType>& opt, ...
type WorstMatch (line 272) | struct WorstMatch { template<typename T> WorstMatch(T&&) {} }
method WorstMatch (line 272) | WorstMatch(T&&) {}
function option_add (line 274) | inline bool option_add(WorstMatch, StringView)
function option_remove (line 279) | inline bool option_remove(WorstMatch, StringView)
class Context (line 284) | class Context
function option_update (line 286) | inline void option_update(WorstMatch, const Context&)
function Coord (line 293) | Coord option_from_string(Meta::Type<Coord>, StringView str)
function String (line 302) | inline String option_to_string(const LineAndColumn<EffectiveType, Line...
function String (line 308) | String option_to_string(Flags flags)
function String (line 324) | String option_to_string(Enum e)
function Flags (line 335) | Flags option_from_string(Meta::Type<Flags>, StringView str)
function Enum (line 350) | Enum option_from_string(Meta::Type<Enum>, StringView str)
function option_add (line 360) | bool option_add(Flags& opt, StringView str)
function option_remove (line 368) | bool option_remove(Flags& opt, StringView str)
function option_to_strings (line 376) | inline Vector<String> option_to_strings(const PrefixedList<P, T>& opt)
function String (line 385) | inline String option_to_string(const PrefixedList<P, T>& opt, Quoting ...
function option_from_strings (line 391) | inline PrefixedList<P, T> option_from_strings(Meta::Type<PrefixedList<...
function option_add_from_strings (line 401) | inline bool option_add_from_strings(PrefixedList<P, T>& opt, ConstArra...
function option_remove_from_strings (line 407) | inline bool option_remove_from_strings(PrefixedList<P, T>& opt, ConstA...
FILE: src/optional.hh
type Kakoune (line 8) | namespace Kakoune
type Optional (line 12) | struct Optional
method Optional (line 15) | constexpr Optional() : m_valid{false} {}
method Optional (line 16) | Optional(const T& other) : m_valid{true} { new (&m_value) T(other); }
method Optional (line 17) | Optional(T&& other) : m_valid{true} { new (&m_value) T(std::move(oth...
method Optional (line 19) | Optional(const Optional& other)
method Optional (line 26) | Optional(Optional&& other)
method Optional (line 34) | Optional& operator=(const Optional& other)
method Optional (line 42) | Optional& operator=(Optional&& other)
method T (line 61) | T& emplace(Args&&... args)
method T (line 69) | T& operator*() &
method T (line 75) | T&& operator*() &&
method T (line 81) | const T& operator*() const & { return *const_cast<Optional&>(*this); }
method T (line 82) | const T& operator*() const && { return *const_cast<Optional&>(*this); }
method T (line 84) | T* operator->()
method T (line 89) | const T* operator->() const { return const_cast<Optional&>(*this).op...
type DecayOptionalImpl (line 91) | struct DecayOptionalImpl { using Type = U; }
type DecayOptionalImpl<Optional<U>> (line 92) | struct DecayOptionalImpl<Optional<U>> { using Type = typename DecayO...
method map (line 96) | auto map(F f) -> Optional<DecayOptional<decltype(f(std::declval<T>()...
method cast (line 104) | auto cast() const -> Optional<U>
method T (line 112) | T value_or(U&& fallback) const { return m_valid ? m_value : T{std::f...
method T (line 115) | T value_or_compute(U&& compute_func) const { return m_valid ? m_valu...
method reset (line 117) | void reset() { destruct_ifn(); m_valid = false; }
method destruct_ifn (line 120) | void destruct_ifn() { if (m_valid) m_value.~T(); }
type Empty (line 122) | struct Empty {}
FILE: src/parameters_parser.cc
type Kakoune (line 6) | namespace Kakoune
function String (line 9) | String generate_switches_doc(const SwitchMap& switches)
FILE: src/parameters_parser.hh
type Kakoune (line 13) | namespace Kakoune
type parameter_error (line 18) | struct parameter_error : public runtime_error
type unknown_option (line 23) | struct unknown_option : public parameter_error
method unknown_option (line 25) | unknown_option(StringView name)
type missing_option_value (line 29) | struct missing_option_value: public parameter_error
method missing_option_value (line 31) | missing_option_value(StringView name)
type wrong_argument_count (line 35) | struct wrong_argument_count : public parameter_error
method wrong_argument_count (line 37) | wrong_argument_count() : parameter_error("wrong argument count") {}
class Context (line 40) | class Context
type Completions (line 41) | struct Completions
type SwitchDesc (line 44) | struct SwitchDesc
type ParameterDesc (line 54) | struct ParameterDesc
type Flags (line 56) | enum class Flags
method with_bit_ops (line 63) | constexpr bool with_bit_ops(Meta::Type<Flags>) { return true; }
type ParametersParser (line 76) | struct ParametersParser
type State (line 83) | enum class State {
type iterator (line 93) | struct iterator
method iterator (line 101) | iterator(const ParametersParser& parser, size_t index)
method String (line 104) | const String& operator*() const { return m_parser[m_index]; }
method String (line 105) | const String* operator->() const { return &m_parser[m_index]; }
method iterator (line 107) | iterator& operator++() { ++m_index; return *this; }
method iterator (line 108) | iterator operator++(int) { auto copy = *this; ++m_index; return co...
method positional_count (line 122) | size_t positional_count() const { return m_positional_indices.size(); }
method String (line 125) | const String& operator[] (size_t index) const
method positionals_from (line 131) | ConstArrayView<String> positionals_from(size_t first) const
method iterator (line 137) | iterator begin() const { return iterator(*this, 0); }
method iterator (line 101) | iterator(const ParametersParser& parser, size_t index)
method String (line 104) | const String& operator*() const { return m_parser[m_index]; }
method String (line 105) | const String* operator->() const { return &m_parser[m_index]; }
method iterator (line 107) | iterator& operator++() { ++m_index; return *this; }
method iterator (line 108) | iterator operator++(int) { auto copy = *this; ++m_index; return co...
method iterator (line 138) | iterator end() const { return iterator(*this, m_positional_indices.s...
method iterator (line 101) | iterator(const ParametersParser& parser, size_t index)
method String (line 104) | const String& operator*() const { return m_parser[m_index]; }
method String (line 105) | const String* operator->() const { return &m_parser[m_index]; }
method iterator (line 107) | iterator& operator++() { ++m_index; return *this; }
method iterator (line 108) | iterator operator++(int) { auto copy = *this; ++m_index; return co...
method State (line 140) | State state() const { return *m_state; }
FILE: src/profile.hh
type Kakoune (line 8) | namespace Kakoune
class ProfileScope (line 12) | class ProfileScope
method ProfileScope (line 15) | ProfileScope(const DebugFlags debug_flags, Callback&& callback, bool...
FILE: src/range.hh
type Kakoune (line 6) | namespace Kakoune
type Range (line 10) | struct Range
method hash_value (line 17) | size_t hash_value(const Range& range)
method empty (line 22) | bool empty() const { return begin == end; }
FILE: src/ranges.cc
type Kakoune (line 6) | namespace Kakoune
FILE: src/ranges.hh
type Kakoune (line 11) | namespace Kakoune
type ViewFactory (line 14) | struct ViewFactory { Func func; }
type DecayRangeImpl (line 26) | struct DecayRangeImpl { using type = std::remove_cvref_t<Range>; }
type DecayRangeImpl<Range&> (line 29) | struct DecayRangeImpl<Range&> { using type = Range&; }
type RangeHolderImpl (line 35) | struct RangeHolderImpl { using type = std::remove_cvref_t<Range>; }
type RangeHolderImpl<Range&> (line 38) | struct RangeHolderImpl<Range&> {
type type (line 39) | struct type
method begin (line 43) | decltype(auto) begin() { return std::begin(*range); }
method end (line 44) | decltype(auto) end() { return std::end(*range); }
method type (line 46) | type& operator=(Range& r) { range = &r; return *this; }
type ReverseView (line 55) | struct ReverseView
method begin (line 57) | decltype(auto) begin() { return m_range.rbegin(); }
method end (line 58) | decltype(auto) end() { return m_range.rend(); }
method rbegin (line 59) | decltype(auto) rbegin() { return m_range.begin(); }
method rend (line 60) | decltype(auto) rend() { return m_range.end(); }
method begin (line 61) | decltype(auto) begin() const { return m_range.rbegin(); }
method end (line 62) | decltype(auto) end() const { return m_range.rend(); }
method rbegin (line 63) | decltype(auto) rbegin() const { return m_range.begin(); }
method rend (line 64) | decltype(auto) rend() const { return m_range.end(); }
function reverse (line 69) | constexpr auto reverse()
type SkipView (line 84) | struct SkipView
method begin (line 86) | auto begin() const { return std::next(std::begin(m_range), m_skip_co...
method end (line 87) | auto end() const { return std::end(m_range); }
function skip (line 93) | constexpr auto skip(size_t count)
type DropView (line 102) | struct DropView
method begin (line 104) | auto begin() const { return std::begin(m_range); }
method end (line 105) | auto end() const { return std::end(m_range) - m_drop_count; }
function drop (line 111) | constexpr auto drop(size_t count)
type FilterView (line 120) | struct FilterView
type Iterator (line 124) | struct Iterator
method Iterator (line 132) | Iterator(Filter& filter, RangeIt it, RangeIt end)
method Iterator (line 139) | Iterator& operator++() { ++m_it; do_filter(); return *this; }
method Iterator (line 140) | Iterator operator++(int) { auto copy = *this; ++(*this); return co...
method RangeIt (line 147) | const RangeIt& base() const { return m_it; }
method do_filter (line 150) | void do_filter()
method Iterator (line 161) | Iterator begin() const { return {m_filter, std::begin(m_range), std:...
method Iterator (line 132) | Iterator(Filter& filter, RangeIt it, RangeIt end)
method Iterator (line 139) | Iterator& operator++() { ++m_it; do_filter(); return *this; }
method Iterator (line 140) | Iterator operator++(int) { auto copy = *this; ++(*this); return co...
method RangeIt (line 147) | const RangeIt& base() const { return m_it; }
method do_filter (line 150) | void do_filter()
method Iterator (line 162) | Iterator end() const { return {m_filter, std::end(m_range), std::e...
method Iterator (line 132) | Iterator(Filter& filter, RangeIt it, RangeIt end)
method Iterator (line 139) | Iterator& operator++() { ++m_it; do_filter(); return *this; }
method Iterator (line 140) | Iterator operator++(int) { auto copy = *this; ++(*this); return co...
method RangeIt (line 147) | const RangeIt& base() const { return m_it; }
method do_filter (line 150) | void do_filter()
function filter (line 169) | constexpr auto filter(Filter f)
type EnumerateView (line 178) | struct EnumerateView
type Iterator (line 182) | struct Iterator
method Iterator (line 190) | Iterator(size_t index, RangeIt it)
type ValueType (line 193) | struct ValueType
method ValueType (line 199) | ValueType operator*() { return {m_index, *m_it}; }
method Iterator (line 200) | Iterator& operator++() { ++m_index; ++m_it; return *this; }
method Iterator (line 201) | Iterator operator++(int) { auto copy = *this; ++(*this); return co...
method RangeIt (line 208) | const RangeIt& base() const { return m_it; }
method Iterator (line 215) | Iterator begin() const { return {0, std::begin(m_range)}; }
method Iterator (line 190) | Iterator(size_t index, RangeIt it)
type ValueType (line 193) | struct ValueType
method ValueType (line 199) | ValueType operator*() { return {m_index, *m_it}; }
method Iterator (line 200) | Iterator& operator++() { ++m_index; ++m_it; return *this; }
method Iterator (line 201) | Iterator operator++(int) { auto copy = *this; ++(*this); return co...
method RangeIt (line 208) | const RangeIt& base() const { return m_it; }
method Iterator (line 216) | Iterator end() const { return {(size_t)-1, std::end(m_range)}; }
method Iterator (line 190) | Iterator(size_t index, RangeIt it)
type ValueType (line 193) | struct ValueType
method ValueType (line 199) | ValueType operator*() { return {m_index, *m_it}; }
method Iterator (line 200) | Iterator& operator++() { ++m_index; ++m_it; return *this; }
method Iterator (line 201) | Iterator operator++(int) { auto copy = *this; ++(*this); return co...
method RangeIt (line 208) | const RangeIt& base() const { return m_it; }
function enumerate (line 221) | constexpr auto enumerate()
type TransformView (line 230) | struct TransformView
type Iterator (line 235) | struct Iterator
method Iterator (line 243) | Iterator(Transform& transform, RangeIt it)
method Iterator (line 249) | Iterator& operator++() { ++m_it; return *this; }
method Iterator (line 250) | Iterator operator++(int) { auto copy = *this; ++m_it; return copy; }
method Iterator (line 252) | Iterator& operator--() { --m_it; return *this; }
method Iterator (line 253) | Iterator operator--(int) { auto copy = *this; --m_it; return copy; }
method Iterator (line 255) | Iterator& operator+=(difference_type diff) { m_it += diff; return ...
method Iterator (line 256) | Iterator& operator-=(difference_type diff) { m_it -= diff; return ...
method Iterator (line 258) | Iterator operator+(difference_type diff) const { return {*m_transf...
method Iterator (line 259) | Iterator operator-(difference_type diff) const { return {*m_transf...
method difference_type (line 262) | difference_type operator-(const Iterator& lhs, const Iterator& rhs...
method RangeIt (line 264) | RangeIt base() const { return m_it; }
method Iterator (line 271) | Iterator begin() const { return {m_transform, std::begin(m_range)}; }
method Iterator (line 243) | Iterator(Transform& transform, RangeIt it)
method Iterator (line 249) | Iterator& operator++() { ++m_it; return *this; }
method Iterator (line 250) | Iterator operator++(int) { auto copy = *this; ++m_it; return copy; }
method Iterator (line 252) | Iterator& operator--() { --m_it; return *this; }
method Iterator (line 253) | Iterator operator--(int) { auto copy = *this; --m_it; return copy; }
method Iterator (line 255) | Iterator& operator+=(difference_type diff) { m_it += diff; return ...
method Iterator (line 256) | Iterator& operator-=(difference_type diff) { m_it -= diff; return ...
method Iterator (line 258) | Iterator operator+(difference_type diff) const { return {*m_transf...
method Iterator (line 259) | Iterator operator-(difference_type diff) const { return {*m_transf...
method difference_type (line 262) | difference_type operator-(const Iterator& lhs, const Iterator& rhs...
method RangeIt (line 264) | RangeIt base() const { return m_it; }
method Iterator (line 272) | Iterator end() const { return {m_transform, std::end(m_range)}; }
method Iterator (line 243) | Iterator(Transform& transform, RangeIt it)
method Iterator (line 249) | Iterator& operator++() { ++m_it; return *this; }
method Iterator (line 250) | Iterator operator++(int) { auto copy = *this; ++m_it; return copy; }
method Iterator (line 252) | Iterator& operator--() { --m_it; return *this; }
method Iterator (line 253) | Iterator operator--(int) { auto copy = *this; --m_it; return copy; }
method Iterator (line 255) | Iterator& operator+=(difference_type diff) { m_it += diff; return ...
method Iterator (line 256) | Iterator& operator-=(difference_type diff) { m_it -= diff; return ...
method Iterator (line 258) | Iterator operator+(difference_type diff) const { return {*m_transf...
method Iterator (line 259) | Iterator operator-(difference_type diff) const { return {*m_transf...
method difference_type (line 262) | difference_type operator-(const Iterator& lhs, const Iterator& rhs...
method RangeIt (line 264) | RangeIt base() const { return m_it; }
function transform (line 279) | constexpr auto transform(Transform t)
type is_pointer_like (line 288) | struct is_pointer_like : std::false_type {}
type is_pointer_like<T, U> (line 291) | struct is_pointer_like<T, U> : std::true_type {}
function transform (line 294) | constexpr auto transform(M T::*member)
type SplitView (line 317) | struct SplitView
type Iterator (line 324) | struct Iterator
method Iterator (line 332) | Iterator(RangeIt pos, const RangeIt& end, Element separator, Eleme...
method Iterator (line 343) | Iterator& operator++() { advance(); return *this; }
method Iterator (line 344) | Iterator operator++(int) { auto copy = *this; advance(); return co...
method ValueType (line 348) | ValueType operator*() { return {pos, (not include_separator or sep...
method advance (line 351) | void advance()
method Iterator (line 383) | Iterator begin() const { return {std::begin(m_range), std::end(m_ran...
method Iterator (line 332) | Iterator(RangeIt pos, const RangeIt& end, Element separator, Eleme...
method Iterator (line 343) | Iterator& operator++() { advance(); return *this; }
method Iterator (line 344) | Iterator operator++(int) { auto copy = *this; advance(); return co...
method ValueType (line 348) | ValueType operator*() { return {pos, (not include_separator or sep...
method advance (line 351) | void advance()
method Iterator (line 384) | Iterator end() const { return {std::end(m_range), std::end(m_range...
method Iterator (line 332) | Iterator(RangeIt pos, const RangeIt& end, Element separator, Eleme...
method Iterator (line 343) | Iterator& operator++() { advance(); return *this; }
method Iterator (line 344) | Iterator operator++(int) { auto copy = *this; advance(); return co...
method ValueType (line 348) | ValueType operator*() { return {pos, (not include_separator or sep...
method advance (line 351) | void advance()
function split (line 392) | auto split(Element separator)
function split_after (line 401) | auto split_after(Element separator)
function split (line 410) | auto split(Element separator, Element escaper)
type FlattenedView (line 419) | struct FlattenedView
type Iterator (line 425) | struct Iterator
method Iterator (line 433) | Iterator() = default;
method Iterator (line 434) | Iterator(OuterIt begin, OuterIt end) : m_outer_it{begin}, m_outer_...
method Iterator (line 441) | Iterator& operator++()
method Iterator (line 450) | Iterator operator++(int) { auto copy = *this; ++*this; return copy; }
method find_next_inner (line 457) | void find_next_inner()
method Iterator (line 477) | Iterator begin() const { return {std::begin(m_range), std::end(m_ran...
method Iterator (line 433) | Iterator() = default;
method Iterator (line 434) | Iterator(OuterIt begin, OuterIt end) : m_outer_it{begin}, m_outer_...
method Iterator (line 441) | Iterator& operator++()
method Iterator (line 450) | Iterator operator++(int) { auto copy = *this; ++*this; return copy; }
method find_next_inner (line 457) | void find_next_inner()
method Iterator (line 478) | Iterator end() const { return {std::end(m_range), std::end(m_range...
method Iterator (line 433) | Iterator() = default;
method Iterator (line 434) | Iterator(OuterIt begin, OuterIt end) : m_outer_it{begin}, m_outer_...
method Iterator (line 441) | Iterator& operator++()
method Iterator (line 450) | Iterator operator++(int) { auto copy = *this; ++*this; return copy; }
method find_next_inner (line 457) | void find_next_inner()
function flatten (line 483) | constexpr auto flatten()
type ConcatView (line 492) | struct ConcatView
type Iterator (line 499) | struct Iterator
method Iterator (line 510) | Iterator(RangeIt1 it1, RangeIt1 end1, RangeIt2 it2)
method Iterator (line 515) | Iterator& operator++() { if (is2()) ++m_it2; else ++m_it1; return ...
method Iterator (line 516) | Iterator operator++(int) { auto copy = *this; ++*this; return copy; }
method is2 (line 521) | bool is2() const { return m_it1 == m_end1; }
method Iterator (line 528) | Iterator begin() const { return {m_range1.begin(), m_range1.end(), m...
method Iterator (line 510) | Iterator(RangeIt1 it1, RangeIt1 end1, RangeIt2 it2)
method Iterator (line 515) | Iterator& operator++() { if (is2()) ++m_it2; else ++m_it1; return ...
method Iterator (line 516) | Iterator operator++(int) { auto copy = *this; ++*this; return copy; }
method is2 (line 521) | bool is2() const { return m_it1 == m_end1; }
method Iterator (line 529) | Iterator end() const { return {m_range1.end(), m_range1.end(), m_r...
method Iterator (line 510) | Iterator(RangeIt1 it1, RangeIt1 end1, RangeIt2 it2)
method Iterator (line 515) | Iterator& operator++() { if (is2()) ++m_it2; else ++m_it1; return ...
method Iterator (line 516) | Iterator operator++(int) { auto copy = *this; ++*this; return copy; }
method is2 (line 521) | bool is2() const { return m_it1 == m_end1; }
function concatenated (line 536) | ConcatView<DecayRange<Range1>, DecayRange<Range2>> concatenated(Range1...
function find (line 542) | auto find(Range&& range, const T& value)
function find_if (line 549) | auto find_if(Range&& range, T&& op)
function contains (line 556) | bool contains(Range&& range, const T& value)
function all_of (line 563) | bool all_of(Range&& range, T&& op)
function any_of (line 570) | bool any_of(Range&& range, T&& op)
function remove_if (line 577) | auto remove_if(Range&& range, T&& op)
function unordered_erase (line 584) | void unordered_erase(Range&& vec, U&& value)
function Init (line 596) | Init accumulate(Range&& c, Init&& init, BinOp&& op)
function for_n_best (line 603) | void for_n_best(Range&& c, size_t count, Compare&& compare, Func&& func)
function gather (line 617) | auto gather()
function gather (line 626) | auto gather()
function static_gather (line 636) | auto static_gather()
FILE: src/ranked_match.cc
type Kakoune (line 12) | namespace Kakoune
function UsedLetters (line 15) | UsedLetters used_letters(StringView str)
function matches (line 34) | bool matches(UsedLetters query, UsedLetters letters)
function count_word_boundaries_match (line 41) | static int count_word_boundaries_match(StringView candidate, StringVie...
function count_full_word_match (line 74) | static int count_full_word_match(StringView candidate, StringView query)
function smartcase_eq (line 93) | static bool smartcase_eq(Codepoint candidate, Codepoint query)
type SubseqRes (line 98) | struct SubseqRes
function subsequence_match_smart_case (line 104) | static Optional<SubseqRes> subsequence_match_smart_case(StringView str...
function is_word_boundary (line 210) | static bool is_word_boundary(Codepoint prev, Codepoint c)
FILE: src/ranked_match.hh
type Kakoune (line 9) | namespace Kakoune
function UsedLetters (line 17) | inline UsedLetters to_lower(UsedLetters letters)
type RankedMatch (line 22) | struct RankedMatch
method StringView (line 28) | const StringView& candidate() const { return m_candidate; }
method set_input_sequence_number (line 34) | void set_input_sequence_number(size_t i) { m_input_sequence_number =...
type Flags (line 40) | enum class Flags : int
method with_bit_ops (line 52) | constexpr bool with_bit_ops(Meta::Type<Flags>) { return true; }
FILE: src/ref_ptr.hh
type Kakoune (line 4) | namespace Kakoune
type RefCountable (line 7) | struct RefCountable
method RefCountable (line 9) | RefCountable() = default;
method RefCountable (line 10) | RefCountable(const RefCountable&) {}
method RefCountable (line 11) | RefCountable(RefCountable&&) {}
method RefCountable (line 14) | RefCountable& operator=(const RefCountable&) { return *this; }
method RefCountable (line 15) | RefCountable& operator=(RefCountable&&) { return *this; }
type RefCountablePolicy (line 20) | struct RefCountablePolicy
method inc_ref (line 22) | static void inc_ref(RefCountable* r, void*) noexcept { ++r->refcount; }
method dec_ref (line 23) | static void dec_ref(RefCountable* r, void*) noexcept { if (--r->refc...
method ptr_moved (line 24) | static void ptr_moved(RefCountable*, void*, void*) noexcept {}
type RefPtr (line 28) | struct RefPtr
method RefPtr (line 30) | RefPtr() = default;
method RefPtr (line 31) | explicit RefPtr(T* ptr) : m_ptr(ptr) { acquire(); }
method RefPtr (line 33) | RefPtr(const RefPtr& other) : m_ptr(other.m_ptr) { acquire(); }
method RefPtr (line 34) | RefPtr(RefPtr&& other)
method RefPtr (line 38) | RefPtr& operator=(const RefPtr& other)
method RefPtr (line 49) | RefPtr& operator=(RefPtr&& other)
method RefPtr (line 58) | RefPtr& operator=(T* ptr)
method T (line 69) | [[gnu::always_inline]]
method T (line 71) | [[gnu::always_inline]]
method T (line 74) | [[gnu::always_inline]]
method reset (line 80) | void reset(T* ptr = nullptr)
method acquire (line 95) | [[gnu::always_inline]]
method release (line 102) | [[gnu::always_inline]]
method moved (line 109) | [[gnu::always_inline]]
FILE: src/regex.cc
type Kakoune (line 4) | namespace Kakoune
function String (line 24) | String option_to_string(const Regex& re, Quoting quoting)
function Regex (line 29) | Regex option_from_string(Meta::Type<Regex>, StringView str)
FILE: src/regex.hh
type Kakoune (line 8) | namespace Kakoune
class Regex (line 12) | class Regex
method Regex (line 15) | Regex() = default;
method empty (line 18) | bool empty() const { return m_str.empty(); }
method String (line 21) | const String& str() const { return m_str; }
method mark_count (line 23) | size_t mark_count() const { return m_impl->save_count / 2 - 1; }
method CompiledRegex (line 28) | const CompiledRegex* impl() const { return m_impl.get(); }
type Impl (line 31) | struct Impl : RefCountable, CompiledRegex {}
type MatchResults (line 38) | struct MatchResults
type SubMatch (line 40) | struct SubMatch : std::pair<Iterator, Iterator>
method SubMatch (line 42) | SubMatch() = default;
method SubMatch (line 43) | SubMatch(Iterator begin, Iterator end)
type iterator (line 50) | struct iterator
method iterator (line 59) | iterator() = default;
method iterator (line 60) | iterator(It it) : m_it{std::move(it)} {}
method iterator (line 62) | iterator& operator--() { m_it += 2; return *this; }
method iterator (line 63) | iterator& operator++() { m_it += 2; return *this; }
method SubMatch (line 64) | SubMatch operator*() const { return {*m_it, *(m_it+1)}; }
method MatchResults (line 72) | MatchResults() = default;
method MatchResults (line 73) | MatchResults(Vector<Iterator, MemoryDomain::Regex> values) : m_value...
method iterator (line 75) | iterator begin() const { return iterator{m_values.begin()}; }
method iterator (line 59) | iterator() = default;
method iterator (line 60) | iterator(It it) : m_it{std::move(it)} {}
method iterator (line 62) | iterator& operator--() { m_it += 2; return *this; }
method iterator (line 63) | iterator& operator++() { m_it += 2; return *this; }
method SubMatch (line 64) | SubMatch operator*() const { return {*m_it, *(m_it+1)}; }
method iterator (line 76) | iterator cbegin() const { return iterator{m_values.cbegin()}; }
method iterator (line 59) | iterator() = default;
method iterator (line 60) | iterator(It it) : m_it{std::move(it)} {}
method iterator (line 62) | iterator& operator--() { m_it += 2; return *this; }
method iterator (line 63) | iterator& operator++() { m_it += 2; return *this; }
method SubMatch (line 64) | SubMatch operator*() const { return {*m_it, *(m_it+1)}; }
method iterator (line 77) | iterator end() const { return iterator{m_values.end()}; }
method iterator (line 59) | iterator() = default;
method iterator (line 60) | iterator(It it) : m_it{std::move(it)} {}
method iterator (line 62) | iterator& operator--() { m_it += 2; return *this; }
method iterator (line 63) | iterator& operator++() { m_it += 2; return *this; }
method SubMatch (line 64) | SubMatch operator*() const { return {*m_it, *(m_it+1)}; }
method iterator (line 78) | iterator cend() const { return iterator{m_values.cend()}; }
method iterator (line 59) | iterator() = default;
method iterator (line 60) | iterator(It it) : m_it{std::move(it)} {}
method iterator (line 62) | iterator& operator--() { m_it += 2; return *this; }
method iterator (line 63) | iterator& operator++() { m_it += 2; return *this; }
method SubMatch (line 64) | SubMatch operator*() const { return {*m_it, *(m_it+1)}; }
method size (line 80) | size_t size() const { return m_values.size() / 2; }
method empty (line 81) | bool empty() const { return m_values.empty(); }
method SubMatch (line 83) | SubMatch operator[](size_t i) const
method SubMatch (line 42) | SubMatch() = default;
method SubMatch (line 43) | SubMatch(Iterator begin, Iterator end)
method swap (line 91) | void swap(MatchResults& other)
function RegexExecFlags (line 102) | inline RegexExecFlags match_flags(bool bol, bool eol, bool bow, bool eow)
type NoopIdle (line 110) | struct NoopIdle
function regex_match (line 116) | bool regex_match(It begin, It end, const Regex& re, IdleFunc&& idle_fu...
function regex_match (line 123) | bool regex_match(It begin, It end, MatchResults<It>& res, const Regex&...
function regex_search (line 136) | bool regex_search(It begin, It end, It subject_begin, It subject_end, ...
function regex_search (line 144) | bool regex_search(It begin, It end, It subject_begin, It subject_end,
function backward_regex_search (line 160) | bool backward_regex_search(It begin, It end, It subject_begin, It subj...
type Quoting (line 168) | enum class Quoting
type RegexIterator (line 174) | struct RegexIterator
type Sentinel (line 179) | struct Sentinel{}
type It (line 180) | struct It
method It (line 182) | It(RegexIterator& base) : m_base(base), m_valid{m_base.next()} {}
method ValueType (line 184) | const ValueType& operator*() const { kak_assert(m_valid); return m...
method ValueType (line 185) | const ValueType* operator->() const { kak_assert(m_valid); return ...
method It (line 187) | It& operator++() { m_valid = m_base.next(); return *this; }
method RegexIterator (line 194) | RegexIterator(Iterator begin, Iterator end,
method RegexIterator (line 203) | RegexIterator(const Iterator& begin, const Iterator& end,
method It (line 208) | It begin() { return {*this}; }
method It (line 182) | It(RegexIterator& base) : m_base(base), m_valid{m_base.next()} {}
method ValueType (line 184) | const ValueType& operator*() const { kak_assert(m_valid); return m...
method ValueType (line 185) | const ValueType* operator->() const { kak_assert(m_valid); return ...
method It (line 187) | It& operator++() { m_valid = m_base.next(); return *this; }
method Sentinel (line 209) | Sentinel end() const { return {}; }
method next (line 212) | bool next()
method RegexVM (line 231) | static RegexVM& make_vm(RegexVM& vm) { return vm; }
method RegexVM (line 232) | static RegexVM make_vm(const Regex& regex) { return {*regex.impl()}; }
FILE: src/regex_vm.cc
type Kakoune (line 18) | namespace Kakoune
type ParsedRegex (line 26) | struct ParsedRegex
type Op (line 28) | enum Op : char
type Quantifier (line 50) | struct Quantifier
method allows_none (line 57) | bool allows_none() const { return min == 0; }
method allows_infinite_repeat (line 58) | bool allows_infinite_repeat() const { return max == infinite; }
type Node (line 64) | struct Node
type Children (line 81) | struct Children
type Sentinel (line 85) | struct Sentinel {}
type Iterator (line 86) | struct Iterator
method Iterator (line 89) | Iterator(ArrayView<const ParsedRegex::Node> nodes, Index index)
method Iterator (line 95) | Iterator& operator++()
method Index (line 101) | Index operator*() const { return m_pos; }
method Index (line 105) | Index find_prev(Index parent, Index pos) const
method Iterator (line 120) | Iterator begin() const { return {m_parsed_regex.nodes, m_index}; }
method Iterator (line 89) | Iterator(ArrayView<const ParsedRegex::Node> nodes, Index index)
method Iterator (line 95) | Iterator& operator++()
method Index (line 101) | Index operator*() const { return m_pos; }
method Index (line 105) | Index find_prev(Index parent, Index pos) const
method Sentinel (line 121) | Sentinel end() const { return {}; }
type RegexParser (line 130) | struct RegexParser
method ParsedRegex (line 132) | static ParsedRegex parse(StringView re) { return RegexParser{re}.m_p...
method RegexParser (line 135) | RegexParser(StringView re)
type InvalidPolicy (line 144) | struct InvalidPolicy
method Codepoint (line 146) | Codepoint operator()(Codepoint cp) const { throw regex_error{"Inva...
type Flags (line 149) | enum class Flags
method with_bit_ops (line 155) | constexpr bool with_bit_ops(Meta::Type<Flags>) { return true; }
method NodeIndex (line 160) | NodeIndex disjunction(uint32_t capture = -1)
method NodeIndex (line 175) | NodeIndex alternative(ParsedRegex::Op op)
method term (line 185) | Optional<NodeIndex> term()
method modifiers (line 199) | bool modifiers()
method assertion (line 223) | Optional<NodeIndex> assertion()
method atom (line 282) | Optional<NodeIndex> atom()
method Codepoint (line 333) | Codepoint read_hex(size_t count)
method NodeIndex (line 356) | NodeIndex atom_escape()
method normalize_ranges (line 409) | static void normalize_ranges(Vector<CharacterClass::Range, MemoryDom...
method NodeIndex (line 433) | NodeIndex character_class()
method quantifier (line 550) | ParsedRegex::Quantifier quantifier()
method NodeIndex (line 600) | NodeIndex add_node(ParsedRegex::Op op, Codepoint value = -1, ParsedR...
method at_end (line 616) | bool at_end() const { return m_pos == m_regex.end(); }
method parse_error (line 618) | [[gnu::noreturn]]
method validate_lookaround (line 626) | void validate_lookaround(NodeIndex index)
type CharacterClassEscape (line 651) | struct CharacterClassEscape {
type ControlEscape (line 661) | struct ControlEscape {
type RegexCompiler (line 676) | struct RegexCompiler
method RegexCompiler (line 680) | RegexCompiler(ParsedRegex&& parsed_regex, RegexCompileFlags flags)
method CompiledRegex (line 713) | CompiledRegex get_compiled_regex() { return std::move(m_program); }
method OpIndex (line 718) | [[gnu::noinline]]
method OpIndex (line 838) | OpIndex op_count() const
method OpIndex (line 843) | static OpIndex offset(OpIndex to, OpIndex from)
method OpIndex (line 849) | OpIndex compile_node(ParsedRegex::NodeIndex index)
method OpIndex (line 886) | OpIndex push_inst(CompiledRegex::Op op, CompiledRegex::Param param =...
method push_lookaround (line 897) | int16_t push_lookaround(ParsedRegex::NodeIndex index, bool ignore_case)
method compute_start_desc (line 927) | bool compute_start_desc(ParsedRegex::NodeIndex index,
method compute_start_desc (line 1048) | [[gnu::noinline]]
method optimize (line 1062) | void optimize(size_t begin, size_t end)
method peephole_optimize (line 1087) | void peephole_optimize(size_t begin, size_t end)
function String (line 1111) | String dump_regex(const CompiledRegex& program)
function CompiledRegex (line 1207) | CompiledRegex compile_regex(StringView re, RegexCompileFlags flags)
function is_ctype (line 1212) | bool is_ctype(CharacterType ctype, Codepoint cp)
type TestVM (line 1226) | struct TestVM : CompiledRegex, ThreadedRegexVM<const char*, mode>
method TestVM (line 1228) | TestVM(StringView re)
method exec (line 1233) | bool exec(StringView re, RegexExecFlags flags = RegexExecFlags::None)
FILE: src/regex_vm.hh
type Kakoune (line 15) | namespace Kakoune
type regex_error (line 18) | struct regex_error : runtime_error
type CharacterType (line 23) | enum class CharacterType : unsigned char
function with_bit_ops (line 35) | constexpr bool with_bit_ops(Meta::Type<CharacterType>) { return true; }
type CharacterClass (line 39) | struct CharacterClass
type Range (line 41) | struct Range
method matches (line 54) | bool matches(Codepoint cp) const
type CompiledRegex (line 72) | struct CompiledRegex : UseMemoryDomain<MemoryDomain::Regex>
type Op (line 74) | enum Op : char
type Lookaround (line 92) | enum class Lookaround : Codepoint
type Literal (line 105) | struct Literal
type CharRange (line 110) | struct CharRange
type Split (line 121) | struct Split
type Lookaround (line 129) | struct Lookaround
type Instruction (line 139) | struct Instruction
type NamedCapture (line 151) | struct NamedCapture
type StartDesc (line 164) | struct StartDesc : UseMemoryDomain<MemoryDomain::Regex>
type RegexCompileFlags (line 179) | enum class RegexCompileFlags
function with_bit_ops (line 187) | constexpr bool with_bit_ops(Meta::Type<RegexCompileFlags>) { return tr...
type RegexExecFlags (line 191) | enum class RegexExecFlags
function with_bit_ops (line 201) | constexpr bool with_bit_ops(Meta::Type<RegexExecFlags>) { return true; }
type RegexMode (line 203) | enum class RegexMode
function with_bit_ops (line 211) | constexpr bool with_bit_ops(Meta::Type<RegexMode>) { return true; }
function has_direction (line 212) | constexpr bool has_direction(RegexMode mode)
function is_direction (line 218) | constexpr bool is_direction(RegexMode mode)
type SentinelType (line 225) | struct SentinelType { using Type = It; }
type SentinelType<It> (line 229) | struct SentinelType<It> { using Type = typename It::Sentinel; }
class ThreadedRegexVM (line 233) | class ThreadedRegexVM
method ThreadedRegexVM (line 236) | ThreadedRegexVM(const CompiledRegex& program)
method ThreadedRegexVM (line 243) | ThreadedRegexVM(ThreadedRegexVM&&) = default;
method ThreadedRegexVM (line 244) | ThreadedRegexVM& operator=(ThreadedRegexVM&&) = default;
method ThreadedRegexVM (line 245) | ThreadedRegexVM(const ThreadedRegexVM&) = delete;
method ThreadedRegexVM (line 246) | ThreadedRegexVM& operator=(const ThreadedRegexVM&) = delete;
method exec (line 258) | bool exec(const Iterator& begin, const Iterator& end,
method exec (line 265) | bool exec(const Iterator& begin, const Iterator& end,
method captures (line 287) | ArrayView<const Iterator> captures() const
type Saves (line 303) | struct Saves
method new_saves (line 314) | int16_t new_saves(Iterator* pos, uint32_t valid_mask)
method release_saves (line 337) | void release_saves(int16_t index)
type Thread (line 351) | struct Thread
type ExecConfig (line 359) | struct ExecConfig
method step_current_thread (line 369) | [[gnu::always_inline]]
method exec_program (line 475) | void exec_program(const Iterator& start, const ExecConfig& config, a...
method Iterator (line 550) | static Iterator find_next_start(const Iterator& start, const Sentine...
method lookaround (line 593) | bool lookaround(CompiledRegex::Param::Lookaround param, Iterator pos...
method is_line_start (line 645) | static bool is_line_start(const Iterator& pos, const ExecConfig& con...
method is_line_end (line 652) | static bool is_line_end(const Iterator& pos, const ExecConfig& config)
method is_word_boundary (line 659) | static bool is_word_boundary(const Iterator& pos, const ExecConfig& ...
method Codepoint (line 669) | [[gnu::flatten]]
type DualThreadStack (line 686) | struct DualThreadStack
method current_is_empty (line 688) | bool current_is_empty() const { return m_current == m_next_begin; }
method next_is_empty (line 689) | bool next_is_empty() const { return m_next_end == m_next_begin; }
method push_current (line 691) | [[gnu::always_inline]]
method Thread (line 693) | [[gnu::always_inline]]
method push_next (line 696) | [[gnu::always_inline]]
method Thread (line 698) | [[gnu::always_inline]]
method swap_next (line 701) | void swap_next()
method ensure_initial_capacity (line 707) | void ensure_initial_capacity()
method grow_ifn (line 718) | [[gnu::always_inline]]
method grow (line 725) | [[gnu::noinline]]
method decrement (line 746) | uint32_t decrement(uint32_t& index)
method post_increment (line 752) | uint32_t post_increment(uint32_t& index)
FILE: src/register_manager.cc
type Kakoune (line 10) | namespace Kakoune
function String (line 38) | const String& StaticRegister::get_main(const Context& context, size_t ...
function String (line 68) | const String& HistoryRegister::get_main(const Context&, size_t)
function Register (line 86) | Register& RegisterManager::operator[](StringView reg) const
function Register (line 97) | Register& RegisterManager::operator[](Codepoint c) const
function CandidateList (line 114) | CandidateList RegisterManager::complete_register_name(StringView prefi...
FILE: src/register_manager.hh
type Kakoune (line 13) | namespace Kakoune
class Context (line 16) | class Context
class Register (line 18) | class Register
method NestedBool (line 31) | NestedBool& modified_hook_disabled() { return m_disable_modified_hoo...
class StaticRegister (line 38) | class StaticRegister : public Register
method StaticRegister (line 41) | StaticRegister(String name) : m_name{std::move(name)} {}
class DynamicRegister (line 55) | class DynamicRegister : public StaticRegister
method DynamicRegister (line 58) | DynamicRegister(String name, Getter getter, Setter setter)
method set (line 61) | void set(Context& context, ConstArrayView<String> values, bool) over...
method get (line 66) | ConstArrayView<String> get(const Context& context) override
class HistoryRegister (line 78) | class HistoryRegister : public StaticRegister
function make_dyn_reg (line 88) | UniquePtr<Register> make_dyn_reg(String name, Func func)
function make_dyn_reg (line 98) | UniquePtr<Register> make_dyn_reg(String name, Getter getter, Setter se...
class NullRegister (line 103) | class NullRegister : public Register
method set (line 106) | void set(Context&, ConstArrayView<String>, bool) override {}
method get (line 108) | ConstArrayView<String> get(const Context&) override
method String (line 113) | const String& get_main(const Context&, size_t) override
class RegisterManager (line 119) | class RegisterManager : public Singleton<RegisterManager>
method begin (line 127) | auto begin() const { return m_registers.begin(); }
method end (line 128) | auto end() const { return m_registers.end(); }
FILE: src/remote.cc
type Kakoune (line 27) | namespace Kakoune
type MessageType (line 30) | enum class MessageType : uint8_t
class MsgWriter (line 49) | class MsgWriter
method MsgWriter (line 52) | MsgWriter(RemoteBuffer& buffer, MessageType type)
method write (line 66) | void write(Args&&... args)
method write_raw (line 72) | void write_raw(const char* val, size_t size)
method write_field (line 78) | void write_field(const T& val)
method write_field (line 84) | void write_field(StringView str)
method write_field (line 90) | void write_field(const String& str)
method write_field (line 96) | void write_field(ConstArrayView<T> view)
method write_field (line 104) | void write_field(const Vector<T, domain>& vec)
method write_field (line 110) | void write_field(const HashMap<Key, Val, domain>& map)
method write_field (line 121) | void write_field(const Optional<T>& val)
method write_field (line 128) | void write_field(Color color)
method write_field (line 139) | void write_field(const DisplayAtom& atom)
method write_field (line 145) | void write_field(const DisplayLine& line)
method write_field (line 150) | void write_field(const DisplayBuffer& display_buffer)
class MsgReader (line 160) | class MsgReader
type Reader (line 164) | struct Reader {
method T (line 165) | static T read(MsgReader& reader)
type Reader<Vector<T,domain>> (line 175) | struct Reader<Vector<T,domain>> {
method read (line 176) | static Vector<T, domain> read(MsgReader& reader)
type Reader<ArrayView<T>> (line 188) | struct Reader<ArrayView<T>> : Reader<Vector<std::remove_cv_t<T>, Mem...
type Reader<HashMap<Key, Value, domain>> (line 191) | struct Reader<HashMap<Key, Value, domain>> {
method read (line 192) | static HashMap<Key, Value, domain> read(MsgReader& reader)
type Reader<Optional<T>> (line 208) | struct Reader<Optional<T>> {
method read (line 209) | static Optional<T> read(MsgReader& reader)
method read_available (line 218) | void read_available(int sock)
method ready (line 235) | bool ready() const
method size (line 240) | uint32_t size() const
method MessageType (line 248) | MessageType type() const
method read (line 254) | void read(char* buffer, size_t size)
method read (line 263) | auto read()
method ancillary_fd (line 268) | Optional<int> ancillary_fd()
method reset (line 280) | void reset()
method read_from_socket (line 289) | void read_from_socket(int sock, size_t size)
type MsgReader::Reader<String> (line 324) | struct MsgReader::Reader<String> {
method String (line 325) | static String read(MsgReader& reader)
type MsgReader::Reader<Color> (line 339) | struct MsgReader::Reader<Color> {
method Color (line 340) | static Color read(MsgReader& reader)
type MsgReader::Reader<DisplayAtom> (line 355) | struct MsgReader::Reader<DisplayAtom> {
method DisplayAtom (line 356) | static DisplayAtom read(MsgReader& reader)
type MsgReader::Reader<DisplayLine> (line 364) | struct MsgReader::Reader<DisplayLine> {
method DisplayLine (line 365) | static DisplayLine read(MsgReader& reader)
type MsgReader::Reader<DisplayBuffer> (line 372) | struct MsgReader::Reader<DisplayBuffer> {
method DisplayBuffer (line 373) | static DisplayBuffer read(MsgReader& reader)
class RemoteUI (line 382) | class RemoteUI : public UserInterface
method is_ok (line 388) | bool is_ok() const override { return m_socket_watcher.fd() != -1; }
method DisplayCoord (line 414) | DisplayCoord dimensions() override { return m_dimensions; }
method set_on_key (line 416) | void set_on_key(OnKeyCallback callback) override
method set_on_paste (line 419) | void set_on_paste(OnPasteCallback callback) override
method send_message (line 428) | void send_message(MessageType type, Args&&... args)
function send_data (line 443) | static bool send_data(int fd, RemoteBuffer& buffer, Optional<int> anci...
function String (line 599) | String get_user_name()
function String (line 607) | const String& session_directory()
function String (line 623) | String session_path(StringView session, bool assume_valid)
function sockaddr_un (line 633) | static sockaddr_un session_addr(StringView session)
function connect_to (line 641) | static int connect_to(StringView session)
function check_session (line 651) | bool check_session(StringView session)
type Impl (line 690) | struct Impl // Use a constructor to ensure left-to-right parameter eva...
method Impl (line 692) | Impl(UserInterface& ui, void (UserInterface::*method)(Args...), Args...
function send_command (line 754) | void send_command(StringView session, StringView command)
class Server::Accepter (line 773) | class Server::Accepter
method Accepter (line 776) | Accepter(int socket)
method handle_available_input (line 784) | void handle_available_input(EventMode mode)
FILE: src/remote.hh
type Kakoune (line 11) | namespace Kakoune
type disconnected (line 14) | struct disconnected : runtime_error
class FDWatcher (line 19) | class FDWatcher
class UserInterface (line 20) | class UserInterface
type Optional (line 22) | struct Optional
type BufferCoord (line 23) | struct BufferCoord
class RemoteClient (line 29) | class RemoteClient
type Server (line 50) | struct Server : public Singleton<Server>
method String (line 54) | const String& session() const { return m_session; }
method negotiating (line 59) | bool negotiating() const { return not m_accepters.empty(); }
method daemonize (line 61) | void daemonize() { m_is_daemon = true; }
method is_daemon (line 62) | bool is_daemon() const { return m_is_daemon; }
class Accepter (line 65) | class Accepter
FILE: src/safe_ptr.hh
type Kakoune (line 15) | namespace Kakoune
class SafeCountable (line 20) | class SafeCountable
method SafeCountable (line 24) | SafeCountable() {}
method SafeCountable (line 33) | SafeCountable(const SafeCountable&) {}
method SafeCountable (line 34) | SafeCountable(SafeCountable&&) {}
method SafeCountable (line 36) | SafeCountable& operator=(const SafeCountable& other) { return *this; }
method SafeCountable (line 37) | SafeCountable& operator=(SafeCountable&& other) { return *this; }
type Callstack (line 42) | struct Callstack
method Callstack (line 44) | Callstack(void* p) : ptr(p) {}
type SafeCountablePolicy (line 55) | struct SafeCountablePolicy
method inc_ref (line 58) | static void inc_ref(const SafeCountable* sc, void* ptr) noexcept
method dec_ref (line 66) | static void dec_ref(const SafeCountable* sc, void* ptr) noexcept
method ptr_moved (line 78) | static void ptr_moved(const SafeCountable* sc, void* from, void* to)...
method inc_ref (line 88) | static void inc_ref(const SafeCountable*, void* ptr) noexcept {}
method dec_ref (line 89) | static void dec_ref(const SafeCountable*, void* ptr) noexcept {}
method ptr_moved (line 90) | static void ptr_moved(const SafeCountable*, void*, void*) noexcept {}
FILE: src/scope.cc
type Kakoune (line 11) | namespace Kakoune
type Scope::Data (line 14) | struct Scope::Data
function OptionManager (line 37) | OptionManager& Scope::options() { return m_data->opti...
function OptionManager (line 38) | const OptionManager& Scope::options() const { return m_data->opti...
function HookManager (line 39) | HookManager& Scope::hooks() { return m_data->hook...
function HookManager (line 40) | const HookManager& Scope::hooks() const { return m_data->hook...
function KeymapManager (line 41) | KeymapManager& Scope::keymaps() { return m_data->keym...
function KeymapManager (line 42) | const KeymapManager& Scope::keymaps() const { return m_data->keym...
function AliasRegistry (line 43) | AliasRegistry& Scope::aliases() { return m_data->alia...
function AliasRegistry (line 44) | const AliasRegistry& Scope::aliases() const { return m_data->alia...
function FaceRegistry (line 45) | FaceRegistry& Scope::faces() { return m_data->face...
function FaceRegistry (line 46) | const FaceRegistry& Scope::faces() const { return m_data->face...
function Highlighters (line 47) | Highlighters& Scope::highlighters() { return m_data->high...
function Highlighters (line 48) | const Highlighters& Scope::highlighters() const { return m_data->high...
type GlobalScope::GlobalData (line 60) | struct GlobalScope::GlobalData final : public OptionWatcher
method GlobalData (line 62) | GlobalData(GlobalScope& parent)
method on_option_changed (line 74) | void on_option_changed(const Option& option) override
function OptionsRegistry (line 93) | OptionsRegistry& GlobalScope::option_registry() { return m_global_data...
function OptionsRegistry (line 94) | const OptionsRegistry& GlobalScope::option_registry() const { return m...
FILE: src/scope.hh
type Kakoune (line 7) | namespace Kakoune
class AliasRegistry (line 10) | class AliasRegistry
class FaceRegistry (line 11) | class FaceRegistry
class Highlighters (line 12) | class Highlighters
class HookManager (line 13) | class HookManager
class KeymapManager (line 14) | class KeymapManager
class OptionManager (line 15) | class OptionManager
class OptionsRegistry (line 16) | class OptionsRegistry
class Scope (line 18) | class Scope
type Data (line 42) | struct Data
class GlobalScope (line 46) | class GlobalScope : public Scope, public Singleton<GlobalScope>
type GlobalData (line 56) | struct GlobalData
FILE: src/selection.cc
type Kakoune (line 9) | namespace Kakoune
function compare_selections (line 64) | bool compare_selections(const Selection& lhs, const Selection& rhs)
function BufferCoord (line 73) | BufferCoord update_insert(BufferCoord coord, BufferCoord begin, Buffer...
function Iterator (line 99) | Iterator merge_overlapping(Iterator begin, Iterator end, size_t& main,...
function BufferCoord (line 129) | BufferCoord& get_first(Selection& sel) { return sel.min(); }
function BufferCoord (line 130) | BufferCoord& get_last(Selection& sel) { return sel.max(); }
function compute_modified_ranges (line 132) | Vector<Selection> compute_modified_ranges(const Buffer& buffer, size_t...
function clamp (line 220) | static void clamp(Selection& sel, const Buffer& buffer)
function clamp_selections (line 226) | void clamp_selections(Vector<Selection>& selections, const Buffer& buf...
function update_selections (line 232) | void update_selections(Vector<Selection>& selections, size_t& main, co...
function sort_selections (line 308) | void sort_selections(Vector<Selection>& selections, size_t& main_index)
function merge_overlapping_selections (line 326) | void merge_overlapping_selections(Vector<Selection>& selections, size_...
function fix_overflowing_selections (line 363) | static void fix_overflowing_selections(Vector<Selection>& selections,
function any_overlaps (line 374) | bool any_overlaps(ConstArrayView<Selection> sels)
function replace (line 424) | void replace(Buffer& buffer, Selection& sel, StringView content)
function BufferRange (line 434) | BufferRange insert(Buffer& buffer, Selection& sel, BufferCoord pos, St...
function String (line 474) | String selection_to_string(ColumnType column_type, const Buffer& buffe...
function String (line 496) | String selection_list_to_string(ColumnType column_type, const Selectio...
function Selection (line 512) | Selection selection_from_string(ColumnType column_type, const Buffer& ...
function SelectionList (line 550) | SelectionList selection_list_from_strings(Buffer& buffer, ColumnType c...
FILE: src/selection.hh
type Kakoune (line 13) | namespace Kakoune
class Buffer (line 16) | class Buffer
type BasicSelection (line 24) | struct BasicSelection
method BasicSelection (line 28) | BasicSelection() = default;
method BasicSelection (line 29) | BasicSelection(BufferCoord pos) : BasicSelection(pos,pos) {}
method BasicSelection (line 30) | BasicSelection(BufferCoordAndTarget pos) : BasicSelection(pos,pos) {}
method BasicSelection (line 31) | BasicSelection(BufferCoord anchor, BufferCoordAndTarget cursor)
method BufferCoord (line 34) | BufferCoord& anchor() { return m_anchor; }
method BufferCoordAndTarget (line 35) | BufferCoordAndTarget& cursor() { return m_cursor; }
method BufferCoord (line 37) | const BufferCoord& anchor() const { return m_anchor; }
method BufferCoordAndTarget (line 38) | const BufferCoordAndTarget& cursor() const { return m_cursor; }
method set (line 40) | void set(BufferCoord anchor, BufferCoord cursor)
method set (line 46) | void set(BufferCoord coord) { set(coord, coord); }
method BufferCoord (line 51) | const BufferCoord& min() const { return m_anchor <= m_cursor ? m_anc...
method BufferCoord (line 52) | const BufferCoord& max() const { return m_anchor <= m_cursor ? m_cur...
method BufferCoord (line 54) | BufferCoord& min() { return m_anchor <= m_cursor ? m_anchor : m_curs...
method BufferCoord (line 55) | BufferCoord& max() { return m_anchor <= m_cursor ? m_cursor : m_anch...
type Selection (line 62) | struct Selection : BasicSelection
method Selection (line 64) | Selection() = default;
method Selection (line 65) | Selection(BufferCoord pos) : BasicSelection(pos,pos) {}
method Selection (line 66) | Selection(BufferCoordAndTarget pos) : BasicSelection(pos,pos) {}
method Selection (line 67) | Selection(BufferCoord anchor, BufferCoordAndTarget cursor, CaptureLi...
method CaptureList (line 69) | CaptureList& captures() { return m_captures; }
method CaptureList (line 70) | const CaptureList& captures() const { return m_captures; }
function overlaps (line 78) | inline bool overlaps(const BasicSelection& lhs, const BasicSelection& ...
type SelectionList (line 95) | struct SelectionList
method Selection (line 114) | const Selection& main() const { return (*this)[m_main]; }
method Selection (line 115) | Selection& main() { return (*this)[m_main]; }
method main_index (line 116) | size_t main_index() const { return m_main; }
method set_main_index (line 117) | void set_main_index(size_t main) { kak_assert(main < size()); m_main...
method push_back (line 119) | void push_back(const Selection& sel) { m_selections.push_back(sel); }
method push_back (line 120) | void push_back(Selection&& sel) { m_selections.push_back(std::move(s...
method Selection (line 122) | Selection& operator[](size_t i) { return m_selections[i]; }
method Selection (line 123) | const Selection& operator[](size_t i) const { return m_selections[i]; }
method SelectionList (line 126) | SelectionList& operator=(Vector<Selection> list)
method iterator (line 134) | iterator begin() { return m_selections.begin(); }
method iterator (line 135) | iterator end() { return m_selections.end(); }
method const_iterator (line 138) | const_iterator begin() const { return m_selections.begin(); }
method const_iterator (line 139) | const_iterator end() const { return m_selections.end(); }
method Selection (line 144) | const Selection* data() const { return m_selections.data(); }
method size (line 145) | size_t size() const { return m_selections.size(); }
method Buffer (line 154) | Buffer& buffer() const { return *m_buffer; }
method timestamp (line 156) | size_t timestamp() const { return m_timestamp; }
method force_timestamp (line 157) | void force_timestamp(size_t timestamp) { m_timestamp = timestamp; }
type ColumnType (line 176) | enum class ColumnType
FILE: src/selectors.cc
type Kakoune (line 17) | namespace Kakoune
function Selection (line 25) | Selection utf8_range(const BufferIterator& first, const BufferIterator...
function Selection (line 30) | Selection utf8_range(const Utf8Iterator& first, const Utf8Iterator& last)
function get_extra_word_chars (line 35) | ConstArrayView<Codepoint> get_extra_word_chars(const Context& context)
function Selection (line 42) | Selection keep_direction(Selection res, const Selection& ref)
function select_to_next_word (line 50) | Optional<Selection>
function select_to_next_word_end (line 83) | Optional<Selection>
function select_to_previous_word (line 115) | Optional<Selection>
function select_word (line 145) | Optional<Selection> select_word(const Context& context, const Selectio...
function select_to_line_end (line 177) | Optional<Selection> select_to_line_end(const Context& context, const S...
function select_to_line_begin (line 192) | Optional<Selection> select_to_line_begin(const Context&, const Selecti...
function select_to_first_non_blank (line 201) | Optional<Selection> select_to_first_non_blank(const Context& context, ...
function select_matching (line 211) | Optional<Selection> select_matching(const Context& context, const Sele...
function find_opening (line 277) | Optional<std::pair<Iterator, Iterator>>
function find_closing (line 311) | Optional<std::pair<Iterator, Iterator>>
function find_surrounding (line 335) | Optional<std::pair<Iterator, Iterator>>
function select_surrounding (line 378) | Optional<Selection>
function select_to (line 400) | Optional<Selection>
function select_to_reverse (line 419) | Optional<Selection>
function select_number (line 444) | Optional<Selection>
function select_sentence (line 481) | Optional<Selection>
function select_paragraph (line 554) | Optional<Selection>
function select_whitespaces (line 614) | Optional<Selection>
function select_indent (line 650) | Optional<Selection>
function select_argument (line 728) | Optional<Selection>
function for_each_sel (line 818) | Vector<Selection> for_each_sel(const Context& context, auto&& callback)
function select_nested_words (line 830) | Vector<Selection> select_nested_words(const Context& context, int coun...
function select_nested_numbers (line 851) | Vector<Selection> select_nested_numbers(const Context& context, int co...
function select_nested_sentences (line 874) | Vector<Selection> select_nested_sentences(const Context& context, int ...
function select_nested_paragraphs (line 893) | Vector<Selection> select_nested_paragraphs(const Context& context, int...
function select_nested_whitespaces (line 920) | Vector<Selection> select_nested_whitespaces(const Context& context, in...
function select_nested_indents (line 936) | Vector<Selection> select_nested_indents(const Context& context, int co...
function select_nested_arguments (line 941) | Vector<Selection> select_nested_arguments(const Context& context, int ...
function regex_select_nested (line 975) | Vector<Selection> regex_select_nested(const Context& context, const Re...
function regex_select_nested (line 1014) | Vector<Selection> regex_select_nested(const Context& context, const Re...
function select_lines (line 1039) | Optional<Selection>
function trim_partial_lines (line 1054) | Optional<Selection>
function RegexExecFlags (line 1080) | static RegexExecFlags
function find_next (line 1087) | static bool find_next(const Buffer& buffer, const BufferIterator& pos,
function find_prev (line 1102) | static bool find_prev(const Buffer& buffer, const BufferIterator& pos,
function Selection (line 1121) | Selection find_next_match(const Context& context, const Selection& sel...
function select_matches (line 1148) | Vector<Selection> select_matches(const Buffer& buffer, ConstArrayView<...
function split_on_matches (line 1188) | Vector<Selection> split_on_matches(const Buffer& buffer, ConstArrayVie...
FILE: src/selectors.hh
type Kakoune (line 11) | na
Condensed preview — 2572 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,234K chars).
[
{
"path": ".builds/debian-arm64.yml",
"chars": 390,
"preview": "image: debian/unstable\narch: arm64\npackages:\n - clang\n - make\n - gcc\ntasks:\n - clang-build: |\n cd kak"
},
{
"path": ".builds/debian.yml",
"chars": 376,
"preview": "image: debian/stable\npackages:\n - clang\n - gcc\n - make\ntasks:\n - clang-build: |\n cd kakoune\n m"
},
{
"path": ".builds/freebsd.yml",
"chars": 388,
"preview": "image: freebsd/latest\npackages:\n - gcc\ntasks:\n - build-clang: |\n cd kakoune\n make CXX=clang++ -j$(sy"
},
{
"path": ".builds/readme.yml",
"chars": 282,
"preview": "image: archlinux\noauth: git.sr.ht/REPOSITORIES:RW git.sr.ht/PROFILE:RO\npackages:\n - hut\n - asciidoctor\ntasks:\n "
},
{
"path": ".cirrus.yml",
"chars": 439,
"preview": "# TODO move to Github Actions after https://github.com/actions/runner/issues/385\nfreebsd_task:\n freebsd_instance:\n "
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yml",
"chars": 2164,
"preview": "name: Bug report\ndescription: Report an unexpected behaviour with the editor\nlabels: bug\ntitle: \"[BUG] \"\nbody:\n\n - ty"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 201,
"preview": "blank_issues_enabled: true\ncontact_links:\n - name: IRC channel\n url: https://web.libera.chat/?channels=#kakoune\n"
},
{
"path": ".github/ISSUE_TEMPLATE/crash_report.yml",
"chars": 2767,
"preview": "name: Crash report\ndescription: Report a crash of the editor while in-use\nlabels: bug, crash\ntitle: \"[BUG][CRASH] \"\nbody"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.yml",
"chars": 1321,
"preview": "name: Feature request\ndescription: Ask for a feature to be implemented and included in the next release\nlabels: feature "
},
{
"path": ".github/ISSUE_TEMPLATE/question.yml",
"chars": 895,
"preview": "name: Question\ndescription: Couldn't find an answer in the documentation? Ask away!\nlabels: question\ntitle: \"[QUESTION] "
},
{
"path": ".github/PULL_REQUEST_TEMPLATE/pull_request_template.md",
"chars": 235,
"preview": "<!--\nIf this is your first contribution to the Kakoune project, make sure to\ninclude an empty \"waiver\" commit to your Pu"
},
{
"path": ".github/workflows/build-releases-linux.yaml",
"chars": 898,
"preview": "name: Build static binaries for Linux\n\non:\n release:\n types: [published, edited]\n\njobs:\n build:\n runs-on: ubuntu"
},
{
"path": ".github/workflows/makefile.yml",
"chars": 1170,
"preview": "name: Makefile CI\non:\n push:\n branches: [ \"master\", \"main\" ]\n pull_request:\n branches: [ \"master\", \"main\" ]\njobs"
},
{
"path": ".gitignore",
"chars": 181,
"preview": "*.o\n*.d\n*.pyc\n*.1-r\n.*.kak.*\n*.tar*\nsrc/kak\nsrc/kak.debug\nsrc/kak.debug.*\nsrc/kak.opt\nsrc/kak.opt.*\nsrc/.version*\nsrc/.*"
},
{
"path": "CONTRIBUTING",
"chars": 776,
"preview": "The preferred way to contribute would be through GitHub pull requests,\nas an alternative patches can be discussed on the"
},
{
"path": "Makefile",
"chars": 5852,
"preview": ".POSIX:\n.SUFFIXES:\n\nCXX = c++\n\ndebug = no\nstatic = no\ngzip_man = yes\n# to get format compatible with GitHub archive use "
},
{
"path": "README.asciidoc",
"chars": 28674,
"preview": "= image:{logo}[K,32,32,link=\"{website}\",title=\"Kakoune logo by p0nce\"] Kakoune image:{cirrus-img}[link=\"{cirrus-url}\"] i"
},
{
"path": "UNLICENSE",
"chars": 1212,
"preview": "This is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, c"
},
{
"path": "VIMTOKAK",
"chars": 2673,
"preview": "Vi(m) to Kakoune:\n=================\n\nKakoune is inspired heavily by Vim. It strives to be as efficient as Vim,\nmore cons"
},
{
"path": "colors/base16.kak",
"chars": 2717,
"preview": "##\n## base16.kak by lenormf\n##\n\nevaluate-commands %sh{\n black_lighterer='rgb:383838'\n black_lighter='rgb:2D2D2D'\n "
},
{
"path": "colors/black-on-white.kak",
"chars": 1817,
"preview": "# Black-on-bright-white colorscheme for minimal distraction & maximal contrast.\n# Works well with e-ink screens.\n\n# For "
},
{
"path": "colors/default.kak",
"chars": 1559,
"preview": "# Kakoune default color scheme\n\n# For Code\nface global value red\nface global type yellow\nface global variable green\nface"
},
{
"path": "colors/desertex.kak",
"chars": 2060,
"preview": "# desertex theme\n\n# Code\nface global value rgb:fa8072\nface global type rgb:dfdfbf\nface global identifie"
},
{
"path": "colors/github.kak",
"chars": 1667,
"preview": "##\n## github.kak by lenormf\n## v1.0\n##\n\n## code\nface global value rgb:0086B3+b\nface global type rgb:795DA3\nface global v"
},
{
"path": "colors/greyscale.kak",
"chars": 2891,
"preview": "# Greyscale: monochromatic grey-based light colorscheme\n\nevaluate-commands %sh{\n grey_light_5=\"rgb:fafafa\"\n grey_l"
},
{
"path": "colors/gruvbox-dark.kak",
"chars": 2740,
"preview": "# gruvbox-dark theme\n\nevaluate-commands %sh{\n gray=\"rgb:928374\"\n red=\"rgb:fb4934\"\n green=\"rgb:b8bb26\"\n yello"
},
{
"path": "colors/gruvbox-light.kak",
"chars": 2741,
"preview": "# gruvbox light theme\n\nevaluate-commands %sh{\n gray=\"rgb:928374\"\n red=\"rgb:9d0006\"\n green=\"rgb:79740e\"\n yell"
},
{
"path": "colors/kaleidoscope-dark.kak",
"chars": 4445,
"preview": "# Kaleidoscope: colorblind-friendly dark colorscheme\n# https://personal.sron.nl/~pault/\n\nevaluate-commands %sh{\n # NO"
},
{
"path": "colors/kaleidoscope-light.kak",
"chars": 4444,
"preview": "# Kaleidoscope: colorblind-friendly light colorscheme\n# https://personal.sron.nl/~pault/\n\nevaluate-commands %sh{\n # N"
},
{
"path": "colors/lucius.kak",
"chars": 3400,
"preview": "# lucius theme\n\nevaluate-commands %sh{\n # first we define the lucius colors as named colors\n lucius_darker_grey=\"r"
},
{
"path": "colors/palenight.kak",
"chars": 2922,
"preview": "# palenight theme\n\n# This was ported from https://github.com/drewtempelmeyer/palenight.vim\n\nevaluate-commands %sh{\n r"
},
{
"path": "colors/plain.kak",
"chars": 1423,
"preview": "\n# Kakoune simple colors, mostly default\n\n# For default\nface global value default\nface global type default\nface global i"
},
{
"path": "colors/red-phoenix.kak",
"chars": 2783,
"preview": "##\n## Red Phoenix (dkeg) - adapted by boj\n##\n\nevaluate-commands %sh{\n black=\"rgb:000000\"\n blue=\"rgb:81a2be\"\n\n o"
},
{
"path": "colors/reeder.kak",
"chars": 3012,
"preview": "##\n## reeder theme\n## a light theme inspired after https://github.com/hyspace/st2-reeder-theme\n##\n\nevaluate-commands %sh"
},
{
"path": "colors/solarized-dark-termcolors.kak",
"chars": 2146,
"preview": "# Solarized Dark (with termcolors)\n# Useful if you've set up your terminal with the exact Solarized colors\n\n# code\nface "
},
{
"path": "colors/solarized-dark.kak",
"chars": 2964,
"preview": "# Solarized Dark\n\nevaluate-commands %sh{\n base03='rgb:002b36'\n base02='rgb:073642'\n base01='rgb:586"
},
{
"path": "colors/solarized-light-termcolors.kak",
"chars": 2140,
"preview": "# Solarized Light (with termcolors)\n# Useful if you've set up your terminal with the exact Solarized colors\n\n# code\nface"
},
{
"path": "colors/solarized-light.kak",
"chars": 2838,
"preview": "# Solarized Light\n\nevaluate-commands %sh{\n\tbase03='rgb:002b36'\n\tbase02='rgb:073642'\n\tbase01='rgb:586e75'\n\tbase00='rgb:65"
},
{
"path": "colors/tomorrow-night.kak",
"chars": 2681,
"preview": "#\n## Tomorrow-night, adapted by nicholastmosher\n##\n\nevaluate-commands %sh{\n foreground=\"rgb:c5c8c6\" # gui05\n backg"
},
{
"path": "colors/zenburn.kak",
"chars": 3086,
"preview": "# zenburn theme\n\nevaluate-commands %sh{\n # define some named colors\n zentext=\"rgb:cfcfcf\"\n zenselectionbg=\"rgb:"
},
{
"path": "contrib/TRAMPOLINE",
"chars": 26467,
"preview": "+=----------------------------------------------------------------------------=+\n _ _\n "
},
{
"path": "contrib/Tupfile",
"chars": 1812,
"preview": "##\n## Tupfile for kakoune\n## by lenormf\n##\n## How to use:\n## Initialize a tup database in the main directory with `tup i"
},
{
"path": "contrib/describe_sessions.sh",
"chars": 2523,
"preview": "#!/bin/sh\n##\n## describe_sessions.sh for kakoune\n## by lenormf\n##\n\nreadonly KAK_SCRIPT='\n {\n echo\n\n pri"
},
{
"path": "contrib/gendocs.py",
"chars": 9535,
"preview": "#!/usr/bin/env python3\n\n# This script generates a static documentation web site\n# by parsing the `**/*.asiidoc` files fr"
},
{
"path": "contrib/kakmap.rb",
"chars": 1837,
"preview": "#!/usr/bin/env ruby\n\n# Generate a reference sheet for Kakoune's normal mode\n# Use: ./kakmap.rb ../src/normal.cc\n\nrequire"
},
{
"path": "contrib/kakoune.spec",
"chars": 3762,
"preview": "%bcond_without tests\n\n# Enable LTO. Profit ~8%\n%global optflags %{optflags} -flto\n%global build_ldflags %{build"
},
{
"path": "contrib/tmux-256color.terminfo",
"chars": 2765,
"preview": "tmux-256color|tmux with 256 color and palette setting,\n\tam,\n\ths,\n\tkm,\n\tmir,\n\tmsgr,\n\txenl,\n\tcolors#256,\n\tcols#80,\n\tit#8,\n"
},
{
"path": "doc/autoedit.asciidoc",
"chars": 3871,
"preview": "Edition auto insertion in Kakoune\n=================================\n\nIt is a quite common feature for a code editor to h"
},
{
"path": "doc/coding-style.asciidoc",
"chars": 1093,
"preview": "C++ Coding Style\n================\n\nKakoune is written in C++20, here are the main coding style points:\n\n * Avoid externa"
},
{
"path": "doc/design.asciidoc",
"chars": 6204,
"preview": "Kakoune design\n==============\n\nThis document describes the design goals for Kakoune, including rationale.\n\nInteractivity"
},
{
"path": "doc/interfacing.asciidoc",
"chars": 4994,
"preview": "Interfacing Kakoune with external programs\n==========================================\n\nIn order to interact with the ext"
},
{
"path": "doc/json_ui.asciidoc",
"chars": 3444,
"preview": "Json-Rpc user interface\n=======================\n\nKakoune user interfaces can be implemented through the\nhttps://www.json"
},
{
"path": "doc/kak.1",
"chars": 5889,
"preview": ".Dd June 15, 2021\n.Dt KAK 1\n.Os\n.Sh NAME\n.Nm kak\n.Nd a vim-inspired, selection oriented code editor\n.\n.Sh SYNOPSIS\n.Nm\n."
},
{
"path": "doc/pages/buffers.asciidoc",
"chars": 2278,
"preview": "= Buffers\n\n== Commands\n\nTo open buffers or navigate through the buffers list see\n<<commands#files-and-buffers,`:doc comm"
},
{
"path": "doc/pages/changelog.asciidoc",
"chars": 12661,
"preview": "= Changelog\n\nTo control the startup info message, see <<options#startup-info,`:doc options startup-info`>>\n\nThis changel"
},
{
"path": "doc/pages/command-parsing.asciidoc",
"chars": 3298,
"preview": "= Command Parsing\n\nKakoune commands, either loaded from a script or written in the command\nprompt, are parsed according "
},
{
"path": "doc/pages/commands.asciidoc",
"chars": 21943,
"preview": "= Commands\n\nSome commands take an exclamation mark (*!*), which can be used to force\nthe execution of the command (i.e. "
},
{
"path": "doc/pages/execeval.asciidoc",
"chars": 2438,
"preview": "= Execute-keys and Evaluate-commands\n\n*execute-keys* [<switches>] <key> ...::\n Run keys as if they were pressed.\n\n*ev"
},
{
"path": "doc/pages/expansions.asciidoc",
"chars": 16787,
"preview": "= Expansions\n\nWhile parsing a command (see <<command-parsing#,`:doc command-parsing`>>),\nKakoune recognises certain patt"
},
{
"path": "doc/pages/faces.asciidoc",
"chars": 6089,
"preview": "= Faces\n\n== Declaration\n\nA *face* determines how text is displayed. It has a foreground color,\na background color, and s"
},
{
"path": "doc/pages/faq.asciidoc",
"chars": 12976,
"preview": "= FAQ\n\n== The project\n\n=== How to pronounce the name of the project and what does it mean ?\n\nThe name of the project is "
},
{
"path": "doc/pages/highlighters.asciidoc",
"chars": 12080,
"preview": "= Highlighters\n\n== Description\n\nManipulation of the displayed text is done through highlighters, which can\nbe added or r"
},
{
"path": "doc/pages/hooks.asciidoc",
"chars": 8439,
"preview": "= Hooks\n\n== Description\n\nCommands can be registered to be executed when certain events arise. To\nregister a hook use the"
},
{
"path": "doc/pages/keymap.asciidoc",
"chars": 3027,
"preview": "= Keymap\n\n---\n ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┲"
},
{
"path": "doc/pages/keys.asciidoc",
"chars": 20821,
"preview": "= Keys\n\n== Key Syntax\n\nUsual keys are written using their ascii character, including capital\nkeys. Non printable keys us"
},
{
"path": "doc/pages/mapping.asciidoc",
"chars": 4794,
"preview": "= Mapping\n\n== Description\n\nCreating and removing shortcuts boils down to the following commands,\nrespectively:\n\n--------"
},
{
"path": "doc/pages/modes.asciidoc",
"chars": 4234,
"preview": "= Modes\n\n== Description\n\nKakoune is a modal editor which means that keys have different effects depending\non the current"
},
{
"path": "doc/pages/options.asciidoc",
"chars": 15297,
"preview": "= Options\n\n== Description\n\nKakoune can store named and typed values that can be used both to\ncustomize the core editor b"
},
{
"path": "doc/pages/regex.asciidoc",
"chars": 7696,
"preview": "= Regex\n\n== Regex syntax\n\nKakoune's regex syntax is inspired by ECMAScript, as defined by the\nECMA-262 standard (see <<r"
},
{
"path": "doc/pages/registers.asciidoc",
"chars": 3570,
"preview": "= Registers\n\n== Description\n\nRegisters are named lists of text -instead of simply text- in order to interact\nwell with m"
},
{
"path": "doc/pages/scopes.asciidoc",
"chars": 3569,
"preview": "= Scopes\n\n== Description\n\nScopes are groups in which a particular Kakoune object can have different\nvalues depending on "
},
{
"path": "doc/writing_scripts.asciidoc",
"chars": 4974,
"preview": "Writing kak scripts\n===================\n\nInteraction with external tools from a Kakoune session is supported\nthrough the"
},
{
"path": "gdb/kakoune.py",
"chars": 6299,
"preview": "import gdb.printing\n\nclass ArrayIterator:\n def __init__(self, data, count):\n self.data = data\n self.cou"
},
{
"path": "rc/detection/editorconfig.kak",
"chars": 3396,
"preview": "# http://editorconfig.org/#file-format-details\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\n"
},
{
"path": "rc/detection/file.kak",
"chars": 1084,
"preview": "define-command -hidden file-detection %{ evaluate-commands %sh{\n if [ -z \"${kak_opt_filetype}\" ]; then\n mime=$"
},
{
"path": "rc/detection/modeline.kak",
"chars": 5039,
"preview": "##\n## modeline.kak by lenormf\n##\n\n## Currently supported modeline format: vim\n## Also supports kakoune options with a 'k"
},
{
"path": "rc/filetype/apl.kak",
"chars": 3077,
"preview": "\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*\\.(apl|aplf|aplo|apln|aplc|apli|dyalog) %{\n set-option buffer filet"
},
{
"path": "rc/filetype/arch-linux.kak",
"chars": 109,
"preview": "# package build description file\nhook global BufCreate (.*/)?PKGBUILD %{\n set-option buffer filetype sh\n}\n"
},
{
"path": "rc/filetype/asciidoc.kak",
"chars": 3359,
"preview": "# http://asciidoc.org/\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .+\\.(a(scii)?doc|asc) %{\n "
},
{
"path": "rc/filetype/awk.kak",
"chars": 3494,
"preview": "# Detection\n# ---------\n\nhook global BufCreate .*\\.awk %{\n set-option buffer filetype awk\n}\n\n# Initialization\n# -----"
},
{
"path": "rc/filetype/c-family.kak",
"chars": 25974,
"preview": "# Detection\nhook global BufCreate .*\\.(cc|cpp|cxx|C|hh|hpp|hxx|H)$ %{\n set-option buffer filetype cpp\n}\n\nhook global "
},
{
"path": "rc/filetype/cabal.kak",
"chars": 3025,
"preview": "# http://haskell.org/cabal\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](cabal) %{\n "
},
{
"path": "rc/filetype/capnp.kak",
"chars": 3486,
"preview": "# https://capnproto.org/\n\nhook global BufCreate .*[.](capnp) %{\n set-option buffer filetype capnp\n}\n\n# Initialization"
},
{
"path": "rc/filetype/clojure.kak",
"chars": 12426,
"preview": "# http://clojure.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](clj|cljc|cljs|cljx|edn) "
},
{
"path": "rc/filetype/cmake.kak",
"chars": 1362,
"preview": "hook global BufCreate .+\\.cmake|.*/CMakeLists.txt %{\n set-option buffer filetype cmake\n}\n\nhook global BufCreate .*/CM"
},
{
"path": "rc/filetype/coffee.kak",
"chars": 4111,
"preview": "# http://coffeescript.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](coffee) %{\n "
},
{
"path": "rc/filetype/conf.kak",
"chars": 841,
"preview": "hook global BufCreate .+\\.(repo|cfg|properties|desktop) %{\n set-option buffer filetype conf\n}\n\nhook global WinCreate "
},
{
"path": "rc/filetype/coq.kak",
"chars": 5616,
"preview": "\n# Detection\n# --------\n\nhook global BufCreate .*\\.v %{\n set-option buffer filetype coq\n}\n\n# Initialization\n# -------"
},
{
"path": "rc/filetype/crystal.kak",
"chars": 13806,
"preview": "# Crystal\n# https://crystal-lang.org\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate '.*\\.cr' %{\n set-option buffer f"
},
{
"path": "rc/filetype/css.kak",
"chars": 7701,
"preview": "# http://w3.org/Style/CSS\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](css) %{\n se"
},
{
"path": "rc/filetype/cucumber.kak",
"chars": 3136,
"preview": "# http://cukes.info\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](feature|story) %{\n set-"
},
{
"path": "rc/filetype/cue.kak",
"chars": 6394,
"preview": "# https://cuelang.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](cue) %{\n set-option"
},
{
"path": "rc/filetype/d.kak",
"chars": 7117,
"preview": "# http://dlang.org/\n#\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*\\.di? %{\n set-option buffer filetype d\n}\n\n# I"
},
{
"path": "rc/filetype/dart.kak",
"chars": 5248,
"preview": "# https://dartlang.org/\n#\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*\\.dart %{\n set-option buffer filetype dar"
},
{
"path": "rc/filetype/dhall.kak",
"chars": 3804,
"preview": "# https://dhall-lang.org\n# \n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](dhall) %{\n se"
},
{
"path": "rc/filetype/diff-parse.pl",
"chars": 3297,
"preview": "#!/usr/bin/env perl\n\nuse warnings;\n\nsub quote {\n my $token = shift;\n $token =~ s/'/''/g;\n return \"'$token'\";\n}\n"
},
{
"path": "rc/filetype/diff.kak",
"chars": 5455,
"preview": "hook global BufCreate .*\\.(diff|patch) %{\n set-option buffer filetype diff\n}\n\nhook global WinSetOption filetype=diff "
},
{
"path": "rc/filetype/dockerfile.kak",
"chars": 1789,
"preview": "# http://docker.com\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# See https://docs.docker.com/reference/builder\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook "
},
{
"path": "rc/filetype/elixir.kak",
"chars": 5262,
"preview": "# http://elixir-lang.org\n# ----------------------\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](ex|exs) %{\n s"
},
{
"path": "rc/filetype/elm.kak",
"chars": 3427,
"preview": "# http://elm-lang.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](elm) %{\n set-option "
},
{
"path": "rc/filetype/elvish.kak",
"chars": 3522,
"preview": "# Syntax highlighting and indentation for Elvish (https://elv.sh)\n\nhook global BufCreate .*\\.elv %{\n set-option buffe"
},
{
"path": "rc/filetype/erlang.kak",
"chars": 3154,
"preview": "# Erlang/OTP\n# https://erlang.org\n# ----------------------\n\n# Detection and Initialization sections were adapted from rc"
},
{
"path": "rc/filetype/eruby.kak",
"chars": 775,
"preview": "# eRuby\n# http://www2a.biglobe.ne.jp/~seki/ruby/erb.html\n\nhook global BufCreate '.*\\.erb' %{\n set-option buffer filetyp"
},
{
"path": "rc/filetype/etc.kak",
"chars": 4630,
"preview": "# Highlighting for common files in /etc\nhook global BufCreate .*/etc/(hosts|networks|services) %{ set-option buffer fil"
},
{
"path": "rc/filetype/exherbo.kak",
"chars": 8262,
"preview": "## Repository metadata files\nhook global BufCreate .*/metadata/mirrors\\.conf %{ set-option buffer filetype palud"
},
{
"path": "rc/filetype/fennel.kak",
"chars": 4803,
"preview": "# http://fennel-lang.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.]fnl %{\n set-op"
},
{
"path": "rc/filetype/fidl.kak",
"chars": 3086,
"preview": "# Detection\nhook global BufCreate .*\\.fidl %{\n set-option buffer filetype fidl\n}\n\nhook global WinSetOption filetype=f"
},
{
"path": "rc/filetype/fish.kak",
"chars": 3440,
"preview": "# http://fishshell.com\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](fish) %{\n set-opt"
},
{
"path": "rc/filetype/forth.kak",
"chars": 495,
"preview": "hook global BufCreate .+\\.(fth|4th|fs|forth) %{\n set-option buffer filetype forth\n}\n\nhook global WinSetOption filetyp"
},
{
"path": "rc/filetype/fsharp.kak",
"chars": 7523,
"preview": "# https://fsharp.org/\n#\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](fs|fsx|fsi) %{\n set-option buffer filet"
},
{
"path": "rc/filetype/gas.kak",
"chars": 4924,
"preview": "# Detection\n# ---------\nhook global BufCreate .*\\.(s|S|asm)$ %{\n set-option buffer filetype gas\n}\n\nhook global WinSet"
},
{
"path": "rc/filetype/gdscript.kak",
"chars": 21056,
"preview": "# http://godotengine.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](gd) %{\n set-o"
},
{
"path": "rc/filetype/gentoo-linux.kak",
"chars": 94,
"preview": "# portage ebuild file\nhook global BufCreate .*\\.ebuild %{\n set-option buffer filetype sh\n}\n"
},
{
"path": "rc/filetype/git.kak",
"chars": 2700,
"preview": "hook global BufCreate .*(COMMIT_EDITMSG|MERGE_MSG) %{\n set-option buffer filetype git-commit\n}\n\nhook global BufCreate"
},
{
"path": "rc/filetype/github.kak",
"chars": 586,
"preview": "hook global BufCreate .*/CODEOWNERS %{\n set-option buffer filetype codeowners\n}\n\nhook global WinSetOption filetype=co"
},
{
"path": "rc/filetype/gjs.kak",
"chars": 1995,
"preview": "# https://github.com/ember-template-imports/ember-template-imports\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\n"
},
{
"path": "rc/filetype/gleam.kak",
"chars": 5642,
"preview": "# https://gleam.run/\n#\n# a lot of this file was taken from rc/filetype/go.kak and rc/filetype/hare.kak, thanks everyone "
},
{
"path": "rc/filetype/gluon.kak",
"chars": 3382,
"preview": "# http://gluon-lang.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](glu) %{\n set-optio"
},
{
"path": "rc/filetype/go.kak",
"chars": 7459,
"preview": "# https://golang.org/\n#\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*\\.go %{\n set-option buffer filetype go\n}\n\n#"
},
{
"path": "rc/filetype/graphql.kak",
"chars": 3862,
"preview": "# http://graphql.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](graphqls?) %{\n set-op"
},
{
"path": "rc/filetype/gren.kak",
"chars": 124,
"preview": "# http://gren-lang.org/\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](gren) %{\n set-option buffer filetype elm"
},
{
"path": "rc/filetype/groovy.kak",
"chars": 4689,
"preview": "# Adapted from the file created by Daniel Lewan TeddyDD\n\nhook global BufCreate \"(.+\\.(groovy|gvy|gy|gsh|gradle))|.+[Jj]e"
},
{
"path": "rc/filetype/haml.kak",
"chars": 2516,
"preview": "# http://haml.info\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](haml) %{\n set-option buff"
},
{
"path": "rc/filetype/hare.kak",
"chars": 7016,
"preview": "# detection\nhook global BufCreate .*[.]ha %{\n set-option buffer filetype hare\n}\n\n# initialisation\nhook global WinSetO"
},
{
"path": "rc/filetype/haskell.kak",
"chars": 5927,
"preview": "# http://haskell.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](hs) %{\n set-option bu"
},
{
"path": "rc/filetype/hbs.kak",
"chars": 4025,
"preview": "# http://handlebarsjs.com/\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](hbs) %{\n "
},
{
"path": "rc/filetype/hjson.kak",
"chars": 4679,
"preview": "# http://hjson.github.io\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](hjson) %{\n se"
},
{
"path": "rc/filetype/html.kak",
"chars": 3045,
"preview": "# http://w3.org/html\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*\\.html %{\n set-option buf"
},
{
"path": "rc/filetype/hyprlang.kak",
"chars": 2807,
"preview": "# https://hypr.land\n\nhook global BufCreate .*/hypr/.*[.]conf %{\n set-option buffer filetype hyprlang\n}\n\n# Initializat"
},
{
"path": "rc/filetype/i3.kak",
"chars": 4853,
"preview": "hook global BufCreate .*(sway|i3)/config %{\n set buffer filetype i3\n}\n\n# Initialization\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\nhook global"
},
{
"path": "rc/filetype/ini.kak",
"chars": 679,
"preview": "hook global BufCreate .+\\.ini %{\n set-option buffer filetype ini\n}\n\nhook global WinSetOption filetype=ini %{\n requ"
},
{
"path": "rc/filetype/janet.kak",
"chars": 3303,
"preview": "# http://janet-lang.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](janet|jdn) %{\n "
},
{
"path": "rc/filetype/java.kak",
"chars": 5751,
"preview": "hook global BufCreate .*\\.java %{\n set-option buffer filetype java\n}\n\n# Initialization\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\nhook global "
},
{
"path": "rc/filetype/javascript.kak",
"chars": 10946,
"preview": "# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.][cm]?(js)x? %{\n set-option buffer filetype javascript\n}\n\nhook glo"
},
{
"path": "rc/filetype/jinja.kak",
"chars": 2521,
"preview": "# https://palletsprojects.com/p/jinja/\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\nprovide-module jinja %[\n\nrequire-module p"
},
{
"path": "rc/filetype/json.kak",
"chars": 2047,
"preview": "# http://json.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](json) %{\n set-option buffer"
},
{
"path": "rc/filetype/json5.kak",
"chars": 4286,
"preview": "# http://json5.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](json5) %{\n set-option buff"
},
{
"path": "rc/filetype/julia.kak",
"chars": 5122,
"preview": "# http://julialang.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*\\.(jl) %{\n set-option"
},
{
"path": "rc/filetype/just.kak",
"chars": 3011,
"preview": "# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*/?[jJ]ustfile %{\n set-option buffer filetype justfile\n}\n\nhook global"
},
{
"path": "rc/filetype/kakrc.kak",
"chars": 6596,
"preview": "# http://kakoune.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate (.*/)?(kakrc|.*\\.kak) %{\n s"
},
{
"path": "rc/filetype/kdl.kak",
"chars": 7138,
"preview": "# https://kdl.dev\n# This supports both kdl v1 and v2.\n \nhook global BufCreate .*\\.kdl %{\n set-option buffer filetype "
},
{
"path": "rc/filetype/kickstart.kak",
"chars": 2212,
"preview": "hook global BufCreate .*\\.ks %{\n set-option buffer filetype kickstart\n}\n\nhook global WinSetOption filetype=kickstart "
},
{
"path": "rc/filetype/kitty.kak",
"chars": 17051,
"preview": "# https://sw.kovidgoyal.net/kitty/\n\nhook global BufCreate .*/kitty/.*[.]conf %{\n set-option buffer filetype kitty-con"
},
{
"path": "rc/filetype/kotlin.kak",
"chars": 10801,
"preview": "# References --------------------------------------------------------------------------------------- #\n# ‾‾‾‾‾‾‾‾‾‾\n# Te"
},
{
"path": "rc/filetype/latex.kak",
"chars": 6867,
"preview": "# https://www.latex-project.org/\n#\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*\\.(tex|cls|sty|dtx) %{\n set-opti"
},
{
"path": "rc/filetype/ledger.kak",
"chars": 5969,
"preview": "# Detection\n# ---------\n\n# The .ledger suffix is not required by ledger, but the best I can do.\nhook global BufCreate .*"
},
{
"path": "rc/filetype/lisp.kak",
"chars": 3156,
"preview": "# http://common-lisp.net\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](lisp) %{\n set"
},
{
"path": "rc/filetype/lua.kak",
"chars": 6296,
"preview": "# http://lua.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](lua|rockspec) %{\n set-option "
},
{
"path": "rc/filetype/mail.kak",
"chars": 1004,
"preview": "hook global BufCreate .+\\.eml %{\n set-option buffer filetype mail\n}\n\nhook global WinSetOption filetype=mail %{\n re"
},
{
"path": "rc/filetype/makefile.kak",
"chars": 2495,
"preview": "# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*(/?[mM]akefile|\\.mk|\\.make) %{\n set-option buffer filetype makefile\n"
},
{
"path": "rc/filetype/markdown.kak",
"chars": 5617,
"preview": "# http://daringfireball.net/projects/markdown\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nho"
},
{
"path": "rc/filetype/mercurial.kak",
"chars": 973,
"preview": "# https://www.mercurial-scm.org/\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*hg-e"
},
{
"path": "rc/filetype/mercury.kak",
"chars": 6640,
"preview": "# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](m) %{\n set-option buffer filetype mercury\n}\n\n# Initialization\n# "
},
{
"path": "rc/filetype/meson.kak",
"chars": 2851,
"preview": "# meson syntax highlighting for kakoune (https://mesonbuild.com)\n#\n# For reference see:\n# https://mesonbuild.com/Syntax."
},
{
"path": "rc/filetype/mlb.kak",
"chars": 1609,
"preview": "# http://mlton.org/MLBasis\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*\\.mlb %{\n set"
},
{
"path": "rc/filetype/moon.kak",
"chars": 5449,
"preview": "# http://moonscript.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](moon) %{\n set-o"
},
{
"path": "rc/filetype/nim.kak",
"chars": 5401,
"preview": "# https://nim-lang.org/\n#\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*\\.nim(s|ble)? %{\n set-option buffer filet"
},
{
"path": "rc/filetype/ninja.kak",
"chars": 3819,
"preview": "# ref: https://ninja-build.org/manual.html#ref_ninja_file\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .+\\.ninja %{\n "
},
{
"path": "rc/filetype/nix.kak",
"chars": 5444,
"preview": "# Nix package manager language\n# https://nixos.org/nix/manual/\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](nix"
},
{
"path": "rc/filetype/ocaml.kak",
"chars": 5657,
"preview": "# http://ocaml.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*\\.(ml|mli|mll|mly)$ %{\n set-o"
},
{
"path": "rc/filetype/odin.kak",
"chars": 5452,
"preview": "hook global BufCreate .*\\.odin %{\n set-option buffer filetype odin\n}\n\n# Initialization\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\nhook global "
},
{
"path": "rc/filetype/pascal.kak",
"chars": 10546,
"preview": "# https://www.freepascal.org/docs-html/ref/ref.html\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection, se"
},
{
"path": "rc/filetype/perf.kak",
"chars": 1328,
"preview": "provide-module perf-report %{\n add-highlighter shared/perf-report group\n add-highlighter shared/perf-report/above_"
},
{
"path": "rc/filetype/perl.kak",
"chars": 9291,
"preview": "# https://www.perl.org/\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*\\.(t|p[lm])$ %{\n se"
},
{
"path": "rc/filetype/php.kak",
"chars": 4881,
"preview": "# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](phpt?) %{\n set-option buffer filetype php\n}\n\n# Initialization\n# "
},
{
"path": "rc/filetype/pony.kak",
"chars": 6900,
"preview": "# http://ponylang.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](pony) %{\n set-option "
},
{
"path": "rc/filetype/prolog.kak",
"chars": 1976,
"preview": "# Prolog\n# ----------------------\n\n# Adapted from rc/filetype/erlang.kak\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\nhook global BufCreate "
},
{
"path": "rc/filetype/protobuf.kak",
"chars": 4107,
"preview": "# https://developers.google.com/protocol-buffers/\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*\\.proto$ %{\n set-"
},
{
"path": "rc/filetype/prql.kak",
"chars": 6647,
"preview": "# https://prql-lang.org/\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](prql) %{\n set-opti"
},
{
"path": "rc/filetype/pug.kak",
"chars": 3501,
"preview": "# Note: jade is changing its name to pug (https://github.com/pugjs/pug/issues/2184)\n# This appears to be a work in progr"
},
{
"path": "rc/filetype/purescript.kak",
"chars": 5484,
"preview": "# http://purescript.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n# Syntax reference\n# https://github.com/purescript/documentation/blob/ma"
},
{
"path": "rc/filetype/python.kak",
"chars": 10988,
"preview": "# http://python.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](py) %{\n set-option buff"
},
{
"path": "rc/filetype/r.kak",
"chars": 6880,
"preview": "# http://kakoune.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate (.*/)?(\\.Rprofile|.*\\.[rR]) %{"
},
{
"path": "rc/filetype/ragel.kak",
"chars": 3337,
"preview": "# http://complang.org/ragel\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# ragel.kak does not try to detect host language.\n\n# Detection\n"
},
{
"path": "rc/filetype/restructuredtext.kak",
"chars": 5549,
"preview": "# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](rst) %{\n set-option buffer filetype restructuredtext\n}\n\n# Initia"
},
{
"path": "rc/filetype/ron.kak",
"chars": 8176,
"preview": "# http://doc.rs/ron\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](ron) %{\n set-option buf"
},
{
"path": "rc/filetype/ruby.kak",
"chars": 10186,
"preview": "# http://ruby-lang.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*(([.](rb))|(irbrc)|(pryr"
},
{
"path": "rc/filetype/rust.kak",
"chars": 13363,
"preview": "# http://rust-lang.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](rust|rs) %{\n set-"
},
{
"path": "rc/filetype/sass.kak",
"chars": 3047,
"preview": "# http://sass-lang.com\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](sass) %{\n set-opt"
},
{
"path": "rc/filetype/scala.kak",
"chars": 3545,
"preview": "# http://scala-lang.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](scala|sbt|sc) %{\n "
},
{
"path": "rc/filetype/scheme.kak",
"chars": 8680,
"preview": "# http://www.scheme-reports.org\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate (.*/)?(.*\\.(scm"
},
{
"path": "rc/filetype/scss.kak",
"chars": 1644,
"preview": "# http://sass-lang.com\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](scss) %{\n set-opt"
},
{
"path": "rc/filetype/sh.kak",
"chars": 8234,
"preview": "hook global BufCreate .*\\.((z|ba|c|k|mk)?(sh(rc|_profile|env)?|profile)) %{\n set-option buffer filetype sh\n}\n\nhook gl"
},
{
"path": "rc/filetype/sml.kak",
"chars": 3187,
"preview": "# https://smlfamily.github.io\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*\\.(sml|fun"
},
{
"path": "rc/filetype/sql.kak",
"chars": 6223,
"preview": "# https://www.w3schools.com/sql/default.asp\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook g"
},
{
"path": "rc/filetype/sshconfig.kak",
"chars": 5382,
"preview": "hook global BufCreate .*/\\.ssh/config %{\n set-option buffer filetype ssh\n}\n\n# Initialization\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\nhook g"
},
{
"path": "rc/filetype/svelte.kak",
"chars": 1501,
"preview": "hook global BufCreate .*\\.svelte %[\n set-option buffer filetype svelte\n]\n\nhook global WinSetOption filetype=(svelte) "
},
{
"path": "rc/filetype/swift.kak",
"chars": 7240,
"preview": "#\n# MARK: - detection\n#\n\nhook global BufCreate .*\\.(swift) %{\n set-option buffer filetype swift\n}\n\n#\n# MARK: - initia"
},
{
"path": "rc/filetype/systemd.kak",
"chars": 481,
"preview": "# https://freedesktop.org/wiki/Software/systemd/\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾"
},
{
"path": "rc/filetype/taskpaper.kak",
"chars": 1943,
"preview": "# https://www.taskpaper.com\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*\\.taskpaper %{"
},
{
"path": "rc/filetype/tcl.kak",
"chars": 3305,
"preview": "hook global BufCreate .*[.](tcl) %{\n set-option buffer filetype tcl\n}\n\nhook global WinSetOption filetype=tcl %{\n r"
},
{
"path": "rc/filetype/terraform.kak",
"chars": 4506,
"preview": "# Terraform configuration language\n# https://www.terraform.io/docs/configuration/\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global "
},
{
"path": "rc/filetype/toml.kak",
"chars": 2466,
"preview": "# https://github.com/toml-lang/toml/tree/v0.4.0\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾"
},
{
"path": "rc/filetype/troff.kak",
"chars": 2235,
"preview": "# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*\\.\\d+ %{\n set-option buffer filetype troff\n}\n\n# Initialization\n# ‾‾‾"
},
{
"path": "rc/filetype/ttl.kak",
"chars": 3140,
"preview": "# Terse RDF Triple Language (Turtle)\n# of the W3C's Resource Description Framework (RDF):\n# https://www.w3.org/TR/turtle"
},
{
"path": "rc/filetype/tupfile.kak",
"chars": 1293,
"preview": "# http://gittup.org/tup/\n#\n\n# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*/?Tup(file|rules)(\\.\\w+)?$ %{\n set-optio"
},
{
"path": "rc/filetype/twig.kak",
"chars": 3508,
"preview": "# https://twig.symfony.com/doc/3.x/templates.html\n# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\n# Detection\n# ‾‾‾‾‾"
},
{
"path": "rc/filetype/typst.kak",
"chars": 1720,
"preview": "# Detection\n# ‾‾‾‾‾‾‾‾‾\n\nhook global BufCreate .*[.](typ) %{\n set-option buffer filetype typst\n}\n\n# Initialization\n# "
},
{
"path": "rc/filetype/vhdl.kak",
"chars": 17940,
"preview": "# Based on IEEE Std 1076‐2019\n\n# Detection\nhook global BufCreate .*[.](vhd[l]?) %[\n set-option buffer filetype vhdl\n]"
},
{
"path": "rc/filetype/void-linux.kak",
"chars": 115,
"preview": "# Void Linux package template\nhook global BufCreate .*/?srcpkgs/.+/template %{\n set-option buffer filetype sh\n}\n"
}
]
// ... and 2372 more files (download for full content)
About this extraction
This page contains the full source code of the mawww/kakoune GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2572 files (2.8 MB), approximately 858.5k tokens, and a symbol index with 2544 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.