ShowyEdge
作为一个对工具有绝对掌控欲的强迫症程序员来说,无法得心应手的切换中英文输入法一直让我耿耿于怀。我想实现的是不用看通知栏就能知道当前输入法的状态,一键切换到自己需要的输入法,做到对输入法的绝对掌控。
# Mac
本来一开始打算中英文全部使用百度的,无奈系统自带的英文无法删除(可以删除,但不想那么折腾),而且就算你使用 shift
切换百度的中英文,系统有时候莫名其妙会切换到系统的英文; 每次输入都需要查看顶部状态栏,而且有的软件全屏后会隐藏顶部状态栏,这时要不先随便输入一下查看输入源,要不鼠标滑到顶部查看输入源,极其影响效率
解决方法:
- 放弃百度输入法,均使用系统自带的 (不是说百度不好,只是觉得自带的也可以)
- 切换输入法仍使用
Caps Lock
- 使用
ShowyEdge
给输入源添加不同颜色
注:ShowyEdge
推荐是在顶部状态栏,但我们一般输入位置是在屏幕中下部的,这样查看当前输入源还是不方便,所以本人将 ShowyEdge
放置在屏幕左侧靠下位置
在 VSCode
中的中文输入法效果图(英文就是透明的,没有那个蓝条):
具体配置看下图:
注:英文输入源的颜色是透明的,因为常用英文,透明不影响视觉; 中文输入源的颜色是蓝色的,这是本人征求设计同学的意见而选择的,因为蓝色在白色和黑色背景下都显眼
注:这个图主要是调整 ShowyEdge
的位置,可以根据自己喜好自定义
这样只需要看一下屏幕左下角,就可以知道当前输入法状态了,完美!
Install: brew install showyedge --cask
下载地址:ShowyEdge - Software for macOS (opens new window)
# Windows
Windows
没有类似的软件,那只能自己实现一个了
这里还是使用 AutoHotkey (opens new window)
使用 Gui (opens new window) 展示输入法状态,然后在切换输入法时显隐控件
ps: 由于本人没有找到 ahk
如何监听输入源变化的代码,故这里偷个懒,和自己实现的切换输入法联动一下
; Gui 展示输入法状态
CustomColor := "0352ff" ; 可以为任意 RGB 颜色,这里还是蓝色
MyInput := 0 ; 定义显隐变量
Gui +LastFound +AlwaysOnTop -Caption +ToolWindow ; +ToolWindow 避免显示任务栏按钮和 alt-tab 菜单项.
Gui, Color, %CustomColor%
Gui, Show, x0 y400 w3 h500 NoActivate ; x/y/w/h 调整位置和大小,NoActivate 让当前活动窗口继续保持活动状态.
;=====================================================================o
; 按键修饰符
; CapsLock 短按切换输入法,先按其他功能键再按 CapsLock 为切换大小写;CapsLock 与其他某个键同按时,CapsLock 映射为 ctrl,如 CapsLock + w => ctrl + w
; https://zhuanlan.zhihu.com/p/389784449
; 切换是否显示输入法状态
UpdateOSD(arg) {
Gui +LastFound
if (arg) {
Gui, Hide
} else {
Gui, Show, NoActivate
}
}
#InstallKeybdHook
; 禁用大写功能,防止误触
SetCapsLockState, alwaysoff
*Capslock::
Send {LControl Down}
KeyWait, CapsLock
Send {LControl Up}
if ( A_PriorKey = "CapsLock" )
{
; ctrl + shift 切换输入法
Send {ctrl down}{shift down}
Send {shift up}{ctrl up}
MyInput := !MyInput
UpdateOSD(MyInput)
}
; CapsLock + [ 进入 normal 模式,并切换到英文输入法,系统配置的切换到英文快捷键是 ctrl + 0
if ( A_PriorKey = "[")
{
; Send {Esc}
Send ^0
MyInput := 1
UpdateOSD(MyInput)
return
}
return
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 更新
最近发现这个输入法指示器工具:KBLAutoSwitch - 中英文输入法自动切换、输入法指示器 [Windows] - 小众软件 (opens new window),不仅能提示中英文,还能提示中文输入法下英文状态,非常牛逼
就研究了一下,发现是通过这个获取激活窗口键盘布局 (opens new window)
然后用定时器来刷新输入源
由于这个工具有很多功能,而我又只需要获取输入法指示器这一个功能,故就不需要这个软件了,只把输入法指示器的功能提取出来即可
而且也不需要和自己实现的切换输入法耦合在一起了
注:以下是 AHK V2 语法
CustomColor := "0352ff" ; 可以为任意 RGB 颜色
MyInput := 1 ; 定义显隐变量。1: 英文,隐藏,2: 中文,显示
MyGui := Gui()
MyGui.Opt("+LastFound +AlwaysOnTop -Caption +ToolWindow") ; +ToolWindow 避免显示任务栏按钮和 alt-tab 菜单项
MyGui.BackColor := CustomColor
MyGui.Show("x0 y400 w3 h500 NoActivate") ; NoActivate 让当前活动窗口继续保持活动状态。
MyGui.Hide()
updateInput(arg := MyInput) {
global MyInput
MyInput := !arg
MyGui.Opt("+LastFound")
if (MyInput) {
MyGui.Hide()
} else {
MyGui.Show("NoActivate")
}
}
getIMEKBL(win_id := "") { ; 获取激活窗口键盘布局
if (win_id = "")
win_id := WinExist("A") ; 获取当前活动窗口 ID
thread_id := DllCall("GetWindowThreadProcessId", "UInt", win_id, "UInt", 0)
IME_State := DllCall("GetKeyboardLayout", "UInt", thread_id)
switch IME_State
{
case 134481924:
return 0
case 67699721:
return 1
default:
return 1
}
}
checkInput() {
LastKBLCode := getIMEKBL()
If (LastKBLCode != MyInput)
updateInput()
}
checkInput()
SetTimer checkInput, 100
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
同时也更新一下自己实现的切换输入法(也是 AHK V2):
;=====================================================================o
; 按键修饰符
; CapsLock 短按切换输入法,先按其他功能键再按 CapsLock 为切换大小写;CapsLock 与其他某个键同按时,CapsLock 映射为 ctrl,如 CapsLock + w => ctrl + w
; https://zhuanlan.zhihu.com/p/389784449
; #InstallKeybdHook
; 禁用大写功能,防止误触
SetCapsLockState "AlwaysOff"
*Capslock::
{
Send "{LControl Down}"
KeyWait "CapsLock"
Send "{LControl Up}"
if ( A_PriorKey = "CapsLock" )
{
Send "{alt down}{shift down}"
Send "{alt up}{shift up}"
}
; CapsLock + [ 进入 normal 模式,并切换到英文输入法,系统配置的切换到英文快捷键是 ctrl + 8
if ( A_PriorKey = "[")
{
; Send {Esc}
Send "^8"
return
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
- 01
- 搭配 Jenkins 实现自动化打包微前端多个项目09-15
- 02
- 自动化打包微前端多个项目09-15
- 03
- el-upload 直传阿里 oss 并且显示自带进度条和视频回显封面图06-05