我从windows转到ubuntu,想实现跟windows一样的输入法,现在用的是美式英文和ibus-cangjie输入法,想通过点击左shift来改变输入法的布局,google了一下,发现tweak里面的附加布局设置可以帮到我。
但是,问题是它完全覆盖了左移键。例如,在 Windows 中,我可以在英语模式下长按 Shift 键输入大写字母并从数字键输入符号。当我在 Ubuntu 中执行此操作时,长按左移键后,它会立即更改为另一种布局。因此,我无法使用左移键输入大写字母和符号。
有什么方法可以实现正确的行为:短按 Shift 键时输入布局会发生变化,长按 Shift 键时字母会大写或用数字键输入符号?
答案1
智能拼音和拼音符号(该ibus-libpinyin
软件包)用作Shift在中文和英文之间切换的内置快捷方式。因此,当您长按时,Shift您可以输入大写英文字母而无需切换模式。只需点击即可Shift将模式更改为中文或从中文更改为中文。
所以如果你使用智能拼音或者拼音符号并禁用您通过调整设置的快捷方式,它应该可以执行您想要的操作。
答案2
@GunnarHjalmarsson 的答案与 Windows 上的答案相比似乎非常合适。但正如您在评论中提到的,它并不合适。
你可以找到一种解决方法,但是会浪费一些时间而且不是一个好主意。
解决方法
首先删除您从 gnome-tweaks 中所做的设置,即左 Shift 键作为切换布局。
通过命令行设置自定义键盘快捷键这个帖子。
给出任意名称。
给出命令,给出我们不常用的bash /path/to/script
密钥,或者按照相同想法根据需要更改任何其他密钥。XF86Phone
xcpae
使用命令安装包sudo apt install xcape
阅读手册页
man xcape
运行命令
xcape -e 'Shift_L=XF86Phone'
脚本 (来源):
#!/bin/bash
totalLang=$(gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager()._mruSources.length" | grep -oP "(?<=').*?(?=')")
currentLang=$(gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().currentSource.index" | grep -oP "(?<=').*?(?=')")
declare -i math=$currentLang+1
if [ "$math" -lt "$totalLang" ]; then
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources["$currentLang+1"].activate()"
else
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()"
fi