0

我如何编写一个程序来在所有其他程序中实现 vim 功能,如下所示:

  1. 在所有其他程序之前捕获击键
  2. 根据之前的状态决定是正常模式、插入模式还是可视模式
  3. 如果它处于插入模式,则将准确的击键发送到焦点窗口
  4. 如果没有从配置文件中读取相应的操作并将该操作(即另一个击键)发送到焦点窗口

例如,当我点击“j”时,如果它处于正常模式,它会发送“向下滚动”快捷方式,如果它处于插入模式,它会将“j”字符发送到焦点窗口或程序

我的问题是

可能吗 ?有没有类似的程序?如何在所有其他程序之前捕获击键?如何将击键发送到焦点窗口?实际上我需要使用什么库?

谢谢

4

1 回答 1

0

我有点找到我的答案了。使用i3wmxdotool您可以模拟类似 vim 的行为

在 i3wm 中,您可以定义不同的模式并为不同的操作分配相同的快捷方式,如下所示:

mode "workspace" {
    bindsym j workspace prev
    bindsym h workspace prev
    bindsym k workspace next 
    bindsym l workspace next 
    bindsym Escape mode "default"
}
bindsym $mod+w mode "workspace"

将上面的代码添加到您的 .i3/cofig 文件中,我使用 Mod4 (win key) 作为我的 $mod

现在当你点击 Mod4+w i3 进入工作区模式,你可以通过 hljk 更改工作区

这里是另一个实际上对我不起作用但也许对你有用的例子

mode "vim" {
    bindsym --release j exec --no-startup-id xdotool key --clearmodifiers Down 
    bindsym --release k exec --no-startup-id xdotool key --clearmodifiers Up
    bindsym --release h exec --no-startup-id xdotool key --clearmodifiers Left 
    bindsym --release l exec --no-startup-id xdotool key --clearmodifiers Right
    bindsym Escape mode "default"
}
bindsym $mod+m mode "vim"
于 2013-05-06T21:52:24.993 回答