/kks

Handy Kakoune companion.

Primary LanguageGoThe UnlicenseUnlicense

kks

Handy Kakoune companion.

Installation

From release binaries

Download the compiled binary for your system from Releases page and put it somewhere in your $PATH.

From source

Requires Go installed on your system.

Clone the repository and run go build, then copy the compiled binary somewhere in your $PATH.

If Go is configured to install packages in $PATH, it's also possible to install without cloning the repository: run go install github.com/kkga/kks@latest.

AUR

kks is packaged in the Arch User Repository: https://aur.archlinux.org/packages/kks/

Kakoune and shell integration

Kakoune configuration

Source kks init to add kks-connect command to Kakoune...

eval %sh{ kks init }

... and use your terminal integration to connect provided scripts, for example: kks-connect terminal kks-files.

Kakoune mappings example

map global normal -docstring 'terminal'         <c-t> ': kks-connect terminal<ret>'
map global normal -docstring 'files'            <c-f> ': kks-connect terminal-popup kks-files<ret>'
map global normal -docstring 'buffers'          <c-b> ': kks-connect terminal-popup kks-buffers<ret>'
map global normal -docstring 'live grep'        <c-g> ': kks-connect terminal-popup kks-grep<ret>'
map global normal -docstring 'lines in buffer'  <c-l> ': kks-connect terminal-popup kks-lines<ret>'
map global normal -docstring 'recent files'     <c-r> ': kks-connect terminal-popup kks-mru<ret>'
map global normal -docstring 'vcs client'       <c-v> ': kks-connect terminal-popup lazygit<ret>'
map global normal -docstring 'file browser'     <c-h> ': kks-connect terminal-panel kks-lf<ret>'

Or, if you prefer having a dedicated user mode:

declare-user-mode pick
map global normal <c-p> -docstring 'pick mode'        ': enter-user-mode pick<ret>'
map global pick f       -docstring 'files'            ': kks-connect terminal-popup kks-files<ret>'
map global pick F       -docstring 'files (all)'      ': kks-connect terminal-popup kks-files -HI<ret>'
map global pick g       -docstring 'git files'        ': kks-connect terminal-popup kks-git-files<ret>'
map global pick b       -docstring 'buffers'          ': kks-connect terminal-popup kks-buffers<ret>'
map global pick /       -docstring 'live grep'        ': kks-connect terminal-popup kks-grep<ret>'
map global pick l       -docstring 'lines in buffer'  ': kks-connect terminal-popup kks-lines<ret>'
map global pick r       -docstring 'recent files'     ': kks-connect terminal-popup kks-mru<ret>'
map global pick <a-f>   -docstring 'filetypes'        ': kks-connect terminal-popup kks-filetypes<ret>'

For more terminal integrations and for the (quite handy) popup command, see:

Shell configuration

You may want to set the EDITOR variable to kks edit so that connected programs work as intended:

export EDITOR='kks edit'

Possibly useful aliases:

alias k='kks edit'
alias ks='eval $(kks-select)'
alias ka='kks attach'
alias kkd='kks kill; unset KKS_SESSION KKS_CLIENT' # kill+detach
alias kcd='cd $(kks get %sh{pwd})'

Commands

This is the output of kks -h. Certain commands take additional flags, see kks <command> -h to learn more.

USAGE
  kks <command> [-s <session>] [-c <client>] [<args>]

COMMANDS
  new, n         create new session
  edit, e        edit file
  send, s        send command
  attach, a      attach to session
  kill           kill session
  ls             list sessions and clients
  get            get %val{..}, %opt{..} and friends
  cat            print buffer content
  env            print env
  init           print Kakoune definitions

ENVIRONMENT VARIABLES
  KKS_SESSION
      Kakoune session
  KKS_CLIENT
      Kakoune client
  KKS_DEFAULT_SESSION
      Session to try when KKS_SESSION is empty
  KKS_USE_GITDIR_SESSIONS
      If set, use git root dir name for creating/connecting to session

Use "kks <command> -h" for command usage.

Unknown command

When unknown command is run, kks will try to find an executable named kks-<command> in $PATH. If the executable is found, kks will run it with all arguments that were provided to the unknown command.

Configuration

kks can be configured through environment variables.

Automatic sessions based on git directory

export KKS_USE_GITDIR_SESSIONS=1

When KKS_USE_GITDIR_SESSIONS is set to any value and KKS_SESSION is empty, running kks edit will do the following:

  • if file is inside a git directory, kks will search for an existing session based on top-level git directory name and connect to it;
  • if a session for the directory doesn't exist, kks will start a new session and connect to it.

Default session

export KKS_DEFAULT_SESSION='mysession'

When context is not set (KKS_SESSION is empty), running kks edit will check for a session defined by KKS_DEFAULT_SESSION variable. If the session is running, kks will connect to it instead of starting a new session.

kks will not start the default session if it's not running. You can use the autostarting mechanism of your desktop to start it with kak -d -s mysession.

Provided scripts

script function
kks-buffers pick buffers
kks-fifo pipe stdin to Kakoune fifo buffer
kks-files pick files
kks-filetypes pick and set filetype in current buffer
kks-git-files pick files from git ls-files
kks-grep search for pattern in working directory
kks-lf open lf with current buffer file selected
kks-lines jump to line in buffer
kks-md-heading jump to markdown heading
kks-mru pick recently opened file
kks-select select Kakoune session and client to set up environment

Similar projects