数码资源网

文章频道 软件下载 安卓下载 苹果下载

当前位置:首页文章中心MAC教程mac其他教程 → 如何第三方输入法下如何将大写锁定键改为输入法切换键

如何第三方输入法下如何将大写锁定键改为输入法切换键

时间:2017-06-11 16:15:43人气:298作者:网友整理
键多多输入法v1.10.0.0
键多多输入法v1.10.0.0 for Android
  • 类型:安卓输入法大小:43.70M语言:简体中文 评分:4.4
  • 键多多输入法app是一款手机输入法软件,除了快速的联想打字功能外,还可以快速制作...
立即下载
计算器分屏版9.9.1.0.6.3
计算器分屏版9.9.1.0.6.3 for Android
  • 类型:安卓日常应用大小:16.58M语言:简体中文 评分:4.2
  • 计算器分屏版app是一款非常实用的计算工具。这款软件能够满足用户的不同计算需求。...
立即下载
键多多输入法8.3.0.0
键多多输入法8.3.0.0 for Android
  • 类型:安卓输入法大小:67.74M语言:简体中文 评分:3.0
  • 键多多输入法app这是一款输入法功能十分强大的一个软件,在键多多输入法app里,...
立即下载

今天为大家介绍如何第三方输入法下如何将大写定键改为输入法切换键供大家学习哦!大小写键的使用频率一直可以说能和关机键使用频率有着不分高下的使用频率。甚至在Chromebook 上,大写锁定键就被 Google 换成了更为常用搜索键。另外也有vimer把大写锁定键用作ESC键,效果也是丧心病狂!在Mac上大家都用大小写键用于切换输入法,可是第三方输入法就不会支持这个操作了。今天就告诉大家如何将第三方输入法下如何将大写锁定键改为输入法切换键。

如何第三方输入法下如何将大写锁定键改为输入法切换键特色

如何将第三方输入法下如何将大写锁定键改为输入法切换键方法:

更改键绑定

打开系统偏好设置-键盘-键盘-修饰键,将 Caps Lock 键设为“无操作”

下载 Seil(良心软件,良心作者),打开后将 Caps Lock 键映射为 Key Code 80(或者其他一个不存在的键,80代表F19)

打开系统偏好设置-键盘-快捷键-输入源,将切换输入法的快捷键设置为F19(通过选择后按一下Caps Lock)

Done! 但是现在问题来了:大写锁定的灯永远不亮,这不优美!我们希望指示灯也更改为能够指示输入法状态,即在英文状态下不亮,在拼音/五笔等输入法状态下亮。经过 Google 发现,OS X 提供了控制键盘灯的底层 API,可以手动控制其状态,详见 MacLight。这就好办了,于是我依次尝试了以下几种解决方案:

写一段 Shell 脚本来切换输入法(通过 AppleScript 模拟 Keystroke)+切换指示灯状态,通过 Automator 新建一个“服务”然后将大写锁定键绑定为运行该脚本。但是经过测试发现延时太大(~200ms),放弃。

用 Objective-C 写一个调用底层 API 的程序来切换输入法(通过TISSelectInputSource系列API)+切换指示灯状态,发现调用 API 切换输入法后需要切换到下一个输入窗口才会生效,并且延时依然很大,放弃。

用 Objective-C 写一个后台应用,通过NSDistributedNotificationCenter接收输入法变更事件,根据状态改变指示灯。科学!

最终采用了最后这种科学的方法。当然,这个后台应用只需要是命令行应用就可以了,通过launchctl等方式开机自动启动即可。不过由于强迫症什么的(方便启动、退出,方便加为登录启动项)还是写成了占领在状态栏的应用,并取名为IMLight,如下图:

如何第三方输入法下如何将大写锁定键改为输入法切换键截图

升级 macOS Sierra 后,Seil 无法正常使用了(IMLight 不影响),详见 Github 上的这个 issue,并且由于是系统接口的大改动,一时半会儿可能不会有修复更新。

Issue 中也有人提到,可以使用作者正在开发的另一个针对 Sierra 的项目 Karabiner-Elements,但是这个项目对我来说有几个问题:

与 IMLight 冲突(虽然不一定是他的问题,但是我暂时也不知道怎么修复…)

会使得系统偏好设置中的针对多个键盘的修饰键设置失效(比如无法把外接键盘的 alt 和 ⌘  互换),作者表示无法修复

另外的解决方案是在系统偏好设置中把 Caps Lock 设置为 Ctrl(或者其他),然后用其他软件重映射,比如 Keyboard Maestro(更改 Caps Lock 这件事情比较底层,需要内核级别的修改,而监听 Ctrl 等键这件事情就很简单了)。我使用免费的 hammerspoon 来实现:

local M = {}

local events = hs.eventtap.event.types

M.log = hs.logger.new('caps_remap', 'info')

M.last_flags_1 = {}

M.last_flags_0 = {}

M.last_time_1 = 0

M.last_time_0 = 0

M.timeout = 0.15

M.key = "ctrl"

M.action = function() hs.eventtap.keyStroke({}, "f19") end

local function _dict_has_no_other_key(dic)

for k,v in pairs(dic) do

if k ~= M.key then

return false

end

end

return true

end

function M.event_callback(e)

local typ = e:getType()

local code = e:getKeyCode()

local flags = e:getFlags()

local now = hs.timer.secondsSinceEpoch()

if _dict_has_no_other_key(flags) and not flags[M.key]

and _dict_has_no_other_key(M.last_flags_0) and M.last_flags_0[M.key]

and _dict_has_no_other_key(M.last_flags_1) and not M.last_flags_1[M.key]

and now - M.last_time_0 < M.timeout

then

M.log.i("Fire caps action")

if M.action then

M.action()

end

end

M.last_flags_1 = M.last_flags_0

M.last_flags_0 = flags

M.last_time_1 = M.last_time_0

M.last_time_0 = now

return false

end

function M.init(options)

if options.key then

M.key = options.key

end

if options.timeout then

M.timeout = options.timeout

end

if options.action then

M.action = options.action

end

M.watcher = hs.eventtap.new({events.flagsChanged}, M.event_callback)

M.watcher:start()

end

return M

如何第三方输入法下如何将大写锁定键改为输入法切换键

即快速按一下 ctrl(即 Caps Lock)会触发 F19,而其他包含 ctrl 的组合键并不会,可以满足要求了哦。

相关文章

感谢速联科技、八度网络、九九数据、亿恩科技、群英网络赞助部分带宽!

关于本站 | 联系方式 | 版权声明 | 下载帮助(?) | 网站地图

Copyright 2002-2020 95262.com 【数码资源网】 版权所有 粤ICP备2020128507号-1

本站所有软件来自互联网,版权归原著所有。如有侵权,敬请来信告知 ,我们将及时撤销。