// $DOTFILES/tools/zed/keymaps.json
// Date: 2025-01-25
// Author: js0ny
// Description: Zed keymaps

// Location:
// GNU/Linux: ~/.config/zed/keymaps.json
// Windows: %APPDATA%\Zed\keymaps.json
// Linking: (link the whole directory)
// ln -sf $DOTFILES/tools/zed ~/.config/zed

// Zed keymap

//

// For information on binding keys, see the Zed

// documentation: https://zed.dev/docs/key-bindings

//

// To see the default key bindings run `zed: open default keymap`

// from the command palette.

// https://github.com/zed-industries/zed/tree/main/assets/keymaps
// Sequence: https://zed.dev/docs/key-bindings#remapping-keys
[
  {
    "context": "Workspace",

    "bindings": {
      // "shift shift": "file_finder::Toggle"
    }
  },

  {
    "context": "Editor",

    "bindings": {
      // "j k": ["workspace::SendKeystrokes", "escape"]
      "alt-e": "editor::AddSelectionAbove", // Insert Cursor Above
      "alt-n": "editor::AddSelectionBelow" // Insert Cursor Below
    }
  },
  {
    "context": "vim_mode == normal || vim_mode == visual",

    "bindings": {
      "N": "vim::JoinLines",
      "l": "vim::InsertBefore",
      "L": "vim::InsertFirstNonWhitespace"
    }
  },
  {
    "context": "vim_mode == visual || vim_mode == operator",

    "bindings": {
      "H": "vim::StartOfLine",
      "I": "vim::EndOfLine"
    }
  },
  {
    "context": "vim_mode == normal",

    "bindings": {
      "H": "pane::ActivatePreviousItem",
      "I": "pane::ActivateNextItem"
    }
  },
  {
    "context": "GitPanel || ProjectPanel || CollabPanel || OutlinePanel || ChatPanel || VimControl || EmptyPane || SharedScreen || MarkdownPreview || KeyContextView",

    "bindings": {
      "space space": "file_finder::Toggle",
      "space ;": "command_palette::Toggle",
      "space f c": "zed::OpenSettings",
      "space f e c": "zed::OpenSettings",
      "space f t": "project_panel::ToggleFocus",
      "ctrl-w h": "workspace::ActivatePaneLeft",
      "ctrl-w i": "workspace::ActivatePaneRight",
      "ctrl-w e": "workspace::ActivatePaneUp",
      "ctrl-w n": "workspace::ActivatePaneDown"
    }
  },
  {
    "context": "vim_mode == normal || vim_mode == visual || vim_mode == operator",

    "bindings": {
      "n": "vim::Down",
      "e": "vim::Up",
      "i": "vim::Right",
      "k": "search::SelectNextMatch",
      "K": "search::SelectPreviousMatch",
      "N": ["workspace::SendKeystrokes", "n n n n n"],
      "E": ["workspace::SendKeystrokes", "e e e e e"],
      "Y": ["workspace::SendKeystrokes", "y $"]
    }
  },
  {
    "context": "ProjectPanel && not_editing",

    "bindings": {
      "n": "menu::SelectNext",
      "e": "menu::SelectPrevious",
      "i": "project_panel::ExpandSelectedEntry",
      "A": "project_panel::NewDirectory",
      "a": "project_panel::NewFile",
      "d": "project_panel::Delete"
    }
  }
]
