就像在 DDE手势管理器:FAQ 中提到的,我对与电脑的交互方式一直有比较高的要求,毕竟工作加上生活娱乐,有太多太多的时间要花在电脑上了,符合个人习惯的操作方式可以极大地提高效率并缓解疲劳。除了触摸板手势和鼠标手势之外,我还有一些习惯的个人向系统快捷键设置,其中很重要使用频率极高的快捷键就是:通过单击键盘右侧的 Shift 按键切换输入法。

Why

切换中英文输入法是一个使用频率极高的操作,尤其是在写代码和文档的时候。一般来说,默认的切换方式有两种:

  1. 使用 Ctrl + Shift 组合键,这是最符合一般习惯的。但是由于需要使用左手的小拇指和无名指以略微扭曲的姿势去按,所以长时间频繁使用会比较容易造成疲劳,而且需要按两个键的组合键,相比于按下一个键总归要多花一点点时间,这在高速打字或者需要尽快跟随思路编写代码的时候,这一点点的差别就可能会让人感觉到不爽。
  2. 使用中文输入法自带的方式切换中英文模式,比如搜狗输入法中可以选择切换中英文模式的快捷键:
    sogou
    但是搜狗输入法给出的选项是同时对左右两侧的 Ctrl / Shift 键生效的,而我只希望右侧的 Shift 键响应中英文的切换,因为正常来说一般打字的时候是左手的使用压力比较大,左侧功能键使用的频率很高,而右侧功能键用得相对少一点,用右侧 Shift 键切换输入法可以更好地平衡左右手的疲劳程度;另外,写代码的时候经常需要按住左侧 Shift 键临时输入大写英文字母,有时会在下意识按下 Shift 键后思路跟上来发现接下来并不需要大写字母,此时松开 Shift 键,输入法却切换到中文了,还需要再按一次切换回英文,然后就会因为节奏被打断而恼火——所以我喜欢的模式是,左侧 Shift 键只响应按住时输入大写字母的操作,切换中英文操作则交给右侧 Shift 。

综上,之前我一直是关闭搜狗本身的切换快捷键,使用 Fcitx (搜狗输入法的 Linux 版是基于 Fcitx 框架的) 的设置项:
fcitx

即可实现想要的效果——但是,最新的 Deepin/UOS 系统为了更好地做到符合国人使用习惯的开箱即用,将输入法的设置限制在只能在系统设置模块里调整,fcitx 本身的设置不再生效:
dde

而这里又不允许将切换快捷键设置为 Shift_R 单个按键,于是我不得不寻找一种更为通用的替代方案。

在经过一些摸索之后,找到了 Xbindkeys 这个工具,可以通过全局绑定快捷键的方式实现想要的效果。 Xbindkeys 是一个允许将命令绑定到键盘上的某些键或组合键的程序,可以独立于窗口管理器和桌面环境工作,所以不论在使用的是什么发行版的 Linux,使用的是什么桌面环境,都可以使用这个程序实现统一的效果。

使用

安装

xbindkey被包含在大多数GNU/Linux发行版中,所以只需:

1
2
3
4
sudo apt install xbindkeys

# 这是一个图形化的配置工具,可以简化配置操作,而不用手动编写配置文件
sudo apt install xbindkeys-config

初始化配置

初次使用前需要先执行如下命令生成默认配置文件:

1
xbindkeys --defaults > ~/.xbindkeysrc

否则在使用 xbindkeys-config 工具编辑配置的时候会报如下错误:

1
2
3
4
5
Error : ~/.xbindkeysrc not found or reading not allowed.
please, create one with 'xbindkeys --defaults > ~/.xbindkeysrc'.
or, if you want scheme configuration style,
with 'xbindkeys --defaults-guile > ~/.xbindkeysrc.scm'.
段错误

使用 xbindkeys-config 进行配置

打开图形化配置工具

直接在终端中输入运行:xbindkeys-config,即可看到如下界面:
config

配置过程

  1. 点击左侧下方的 New 按钮增加一条配置

  2. 在右侧 Name 栏中输入该条配置的名称

  3. 点击 Get Key 按钮,将会弹出如上图中间左侧的窗口 XBindKey: Hit a key

  4. 鼠标点击一下这个弹出的窗口,确保其拥有输入焦点

  5. 按下想要绑定的快捷键,以我想绑定的右侧 Shift 为例,在 Get Key 按钮上面的Key输入框中会自动填入如下代码:
    Shift+Mod2 + Shift_R | m:0x11 + c:62
    经测试,绑定单个按键并不需要前面的修饰按键,所以只需要保留 Shift_R 即可

  6. Action 栏中输入想要触发的操作,以切换输入法为例,可以通过 xdotool 模拟发送 Ctrl + Shift 快捷键,所以填入如下代码:

    1
    xdotool keyup Shift_R && xdotool key Ctrl+Shift

    注意需要先用 xdotool keyup Shift_R, 释放我们实际按下的右 Shift 键,否则的话,系统接收到的组合键就变成了 Ctrl+Shift+Shift_R,无法完成输入法的切换

  7. 点击 Apply 按钮应用配置,即可测试效果

额外内容

xbindkeys 如何实现的开机自启

安装配置好后,发现重启后配置仍然生效,查看系统进程可以发现开机后 xbindkeys 进程会自动启动,但是通过 systemctl list-unit-files | grep xbindkeys 发现并没有注册开机启动服务,那么它是如何实现开机自启的呢?

查找后发现,xbindkeys安装后会在 /etc/xdg/autostart 目录下写入 xbindkeys.desktop 这个文件,从而实现的开机自启,这种方式与 Windows 中将程序的快捷方式放入 启动 文件夹下实现开机自启的方式类似。

另外,可以将desktop 文件放进 ~/.config/autostart 这个目录下,以单独为当前用户配置开机自启的程序

修改搜狗输入法的输入框配色

搜狗输入法默认的配色在暗色主题下不是很好看。参考星空黑这个皮肤的配色,打开搜狗的外观配置页面:
color
将颜色分别设置为:

  • 拼音串颜色: #EEEEEE
  • 第一候选颜色: #36ABBF
  • 非第一候选颜色: #EEEEEE

字体设置为: 18

效果:
skin