hishtory/client/cmd/configKeyBindings.go
David Dworken c933cbc792
Add support for custom key bindings for #190 (#209)
* Add support for custom key bindings for #190

* Add tests for configuring custom key bindings

* Simplify key bindings test

* Add docs on custom key bindings + error message for unhandled actions
2024-04-28 13:50:09 -07:00

91 lines
3.4 KiB
Go

package cmd
import (
"fmt"
"strings"
"github.com/ddworken/hishtory/client/hctx"
"github.com/ddworken/hishtory/client/lib"
"github.com/spf13/cobra"
)
var getKeyBindingsCmd = &cobra.Command{
Use: "key-bindings",
Short: "Get the currently configured key bindings for the TUI",
Run: func(cmd *cobra.Command, args []string) {
ctx := hctx.MakeContext()
config := hctx.GetConf(ctx)
fmt.Println("up: \t\t\t" + strings.Join(config.KeyBindings.Up, " "))
fmt.Println("down: \t\t\t" + strings.Join(config.KeyBindings.Down, " "))
fmt.Println("page-up: \t\t" + strings.Join(config.KeyBindings.PageUp, " "))
fmt.Println("page-down: \t\t" + strings.Join(config.KeyBindings.PageDown, " "))
fmt.Println("select-entry: \t\t" + strings.Join(config.KeyBindings.SelectEntry, " "))
fmt.Println("select-entry-and-cd: \t" + strings.Join(config.KeyBindings.SelectEntryAndChangeDir, " "))
fmt.Println("left: \t\t\t" + strings.Join(config.KeyBindings.Left, " "))
fmt.Println("right: \t\t\t" + strings.Join(config.KeyBindings.Right, " "))
fmt.Println("table-left: \t\t" + strings.Join(config.KeyBindings.TableLeft, " "))
fmt.Println("table-right: \t\t" + strings.Join(config.KeyBindings.TableRight, " "))
fmt.Println("delete-entry: \t\t" + strings.Join(config.KeyBindings.DeleteEntry, " "))
fmt.Println("help: \t\t\t" + strings.Join(config.KeyBindings.Help, " "))
fmt.Println("quit: \t\t\t" + strings.Join(config.KeyBindings.Quit, " "))
fmt.Println("jump-start-of-input: \t" + strings.Join(config.KeyBindings.JumpStartOfInput, " "))
fmt.Println("jump-end-of-input: \t" + strings.Join(config.KeyBindings.JumpEndOfInput, " "))
fmt.Println("word-left: \t\t" + strings.Join(config.KeyBindings.WordLeft, " "))
fmt.Println("word-right: \t\t" + strings.Join(config.KeyBindings.WordRight, " "))
},
}
var setKeyBindingsCmd = &cobra.Command{
Use: "key-bindings",
Short: "Set custom key bindings for the TUI",
Args: cobra.MinimumNArgs(2),
Run: func(cmd *cobra.Command, args []string) {
ctx := hctx.MakeContext()
config := hctx.GetConf(ctx)
switch args[0] {
case "up":
config.KeyBindings.Up = args[1:]
case "down":
config.KeyBindings.Down = args[1:]
case "page-up":
config.KeyBindings.PageUp = args[1:]
case "page-down":
config.KeyBindings.PageDown = args[1:]
case "select-entry":
config.KeyBindings.SelectEntry = args[1:]
case "select-entry-and-cd":
config.KeyBindings.SelectEntryAndChangeDir = args[1:]
case "left":
config.KeyBindings.Left = args[1:]
case "right":
config.KeyBindings.Right = args[1:]
case "table-left":
config.KeyBindings.TableLeft = args[1:]
case "table-right":
config.KeyBindings.TableRight = args[1:]
case "delete-entry":
config.KeyBindings.DeleteEntry = args[1:]
case "help":
config.KeyBindings.Help = args[1:]
case "quit":
config.KeyBindings.Quit = args[1:]
case "jump-start-of-input":
config.KeyBindings.JumpStartOfInput = args[1:]
case "jump-end-of-input":
config.KeyBindings.JumpEndOfInput = args[1:]
case "word-left":
config.KeyBindings.WordLeft = args[1:]
case "word-right":
config.KeyBindings.WordRight = args[1:]
default:
lib.CheckFatalError(fmt.Errorf("unknown action %q, run `hishtory config-get keybindings` to see the list of currently configured key bindings", args[0]))
}
lib.CheckFatalError(hctx.SetConfig(config))
},
}
func init() {
configGetCmd.AddCommand(getKeyBindingsCmd)
configSetCmd.AddCommand(setKeyBindingsCmd)
}