Henry Henry
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)

Henry

小学生中的前端大佬
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)
  • Mac

    • macOS 上有哪些值得推荐的常用软件
    • Karabiner-Elements
    • Alfred
    • Mac 自定义应用程序快捷键
    • Mac 下搭建 Java 开发环境
    • Mac 常用快捷键
    • Mac 使用 技巧
    • Mac 终端软件安装利器 - Homebrew
    • MacTalk
    • iTerm2 用法与技巧
    • Mac 使用 Homebrew 安装 node
    • Mac 使用 VS Code 配合 Remote Development 插件连接 Windows 远程服务器
    • 借助 Homebrew Cask, 教你快速下载安装 Mac App 新姿势
    • hammerspoon-AppWindowSwitcher 快速启动及切换 App
    • 使用魔法上网后无法访问部分国内网站
  • Windows

  • Linux

  • ShowyEdge
    • Mac
    • Windows
      • 更新
  • 开发效率提升之工具篇
  • 操作系统
Henry
2023-04-12
目录
Mac
Windows
更新

ShowyEdge

作为一个对工具有绝对掌控欲的强迫症程序员来说,无法得心应手的切换中英文输入法一直让我耿耿于怀。我想实现的是不用看通知栏就能知道当前输入法的状态,一键切换到自己需要的输入法,做到对输入法的绝对掌控。

# Mac

本来一开始打算中英文全部使用百度的,无奈系统自带的英文无法删除(可以删除,但不想那么折腾),而且就算你使用 shift 切换百度的中英文,系统有时候莫名其妙会切换到系统的英文; 每次输入都需要查看顶部状态栏,而且有的软件全屏后会隐藏顶部状态栏,这时要不先随便输入一下查看输入源,要不鼠标滑到顶部查看输入源,极其影响效率

解决方法:

  1. 放弃百度输入法,均使用系统自带的 (不是说百度不好,只是觉得自带的也可以)
  2. 切换输入法仍使用 Caps Lock
  3. 使用 ShowyEdge 给输入源添加不同颜色

注:ShowyEdge 推荐是在顶部状态栏,但我们一般输入位置是在屏幕中下部的,这样查看当前输入源还是不方便,所以本人将 ShowyEdge 放置在屏幕左侧靠下位置

在 VSCode 中的中文输入法效果图(英文就是透明的,没有那个蓝条):

具体配置看下图:

ShowyEdge

注:英文输入源的颜色是透明的,因为常用英文,透明不影响视觉; 中文输入源的颜色是蓝色的,这是本人征求设计同学的意见而选择的,因为蓝色在白色和黑色背景下都显眼

ShowyEdge

注:这个图主要是调整 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
1
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
1
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
  }
}
1
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
编辑 (opens new window)
#Windows#Mac
上次更新: 1/26/2024, 7:56:29 AM
实用的 bash 自定义脚本
开发效率提升之工具篇

← 实用的 bash 自定义脚本 开发效率提升之工具篇→

最近更新
01
搭配 Jenkins 实现自动化打包微前端多个项目
09-15
02
自动化打包微前端多个项目
09-15
03
el-upload 直传阿里 oss 并且显示自带进度条和视频回显封面图
06-05
更多文章>
0 comments
Anonymous
Markdown is supported

Be the first person to leave a comment!

Theme by Vdoing | Copyright © 2017-2025 HenryTSZ | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式