diff --git a/modules/applications/vim/home/keymaps.nix b/modules/applications/vim/home/keymaps.nix index f88c074..cefe442 100644 --- a/modules/applications/vim/home/keymaps.nix +++ b/modules/applications/vim/home/keymaps.nix @@ -29,6 +29,29 @@ let inherit desc; }; }; + + mkSmartWindowNav = key: direction: zellijDirection: desc: { + mode = "n"; + inherit key; + action.__raw = '' + function() + local current_win = vim.api.nvim_get_current_win() + vim.cmd.wincmd("${direction}") + + local at_edge = vim.api.nvim_get_current_win() == current_win + local in_zellij = vim.env.ZELLIJ ~= nil + local has_zellij_cli = vim.fn.executable("zellij") == 1 + + if at_edge and in_zellij and has_zellij_cli then + vim.system({ "zellij", "action", "move-focus-or-tab", "${zellijDirection}" }) + end + end + ''; + options = { + silent = true; + inherit desc; + }; + }; in { programs.nixvim = { @@ -98,14 +121,14 @@ in (mk "[l" "lprev" "前のLocation Listへ") # Window navigation - (mk "" "h" "左のウィンドウへ") - (mk "" "j" "下のウィンドウへ") - (mk "" "k" "上のウィンドウへ") - (mk "" "l" "右のウィンドウへ") - (mk "" "h" "左のウィンドウへ") - (mk "" "j" "下のウィンドウへ") - (mk "" "k" "上のウィンドウへ") - (mk "" "l" "右のウィンドウへ") + (mkSmartWindowNav "" "h" "left" "左のウィンドウへ(端ならZellijペイン/タブへ)") + (mkSmartWindowNav "" "j" "down" "下のウィンドウへ(端ならZellijペインへ)") + (mkSmartWindowNav "" "k" "up" "上のウィンドウへ(端ならZellijペインへ)") + (mkSmartWindowNav "" "l" "right" "右のウィンドウへ(端ならZellijペイン/タブへ)") + (mkSmartWindowNav "" "h" "left" "左のウィンドウへ(端ならZellijペイン/タブへ)") + (mkSmartWindowNav "" "j" "down" "下のウィンドウへ(端ならZellijペインへ)") + (mkSmartWindowNav "" "k" "up" "上のウィンドウへ(端ならZellijペインへ)") + (mkSmartWindowNav "" "l" "right" "右のウィンドウへ(端ならZellijペイン/タブへ)") # Alternate file / previous file (mk "" "" "直前のファイルへ戻る")