# 影子输入法

影子输入法是简单、简洁、高度自定义的输入法。取名“影子”,意在效率上发力,让你有不一样的输入,让你指间生花,让你的操作像一片“影子”!影子输入法是开源、绿色、安全的输入法。

# 基础用法

# 基本配置

  • 提升权限(UIA):建议勾选,避免管理员用户启动的应用输入法无法上屏。
  • 注册系统(TSF):根据个人习惯,如果影子输入法为主力输入法,建议勾选。

# 快捷造词

  • 触发热键:Alt + CapsLock

# 模糊音设置

模糊音为发音不标准的用户,根据自己的发音习惯,修正拼音/双拼输入文字内容。

# 进阶功能

# 内置命令管理器

内置命令管理器影子输入法提供的一些内置命令,用于快捷实现一些特定功能,比如魔法字符串、超级命令等。

内置命令管理器中,可以自定义命令名称,以下是我自己的设置规则:

magic = m 	; 魔法字符串
run = s		; 超级命令
clip = c	; 剪贴板

# 魔法字符串

魔法字符串可以自定义短语,通过输入关键字来达到快速输入常用字符串的目的。该功能可以代替 AHK 脚本热字串的功能。

在影子输入法中,要使用该功能,需要在进阶选项中勾选 魔法字符串 选项。

定义方法:

打开“词库管理工具”,在 extend / hotstrings 表中定义热字串,如:

key = zh
value = 中华人民共和国
comment = 中国

使用方法:

在影子输入法中文输入状态下输入 magic/zh (如果自定义了命令名称,则输入 m/zh),即可直接录入“中华人民共和国”。

# 超级命令

超级命令实际上执行了一个独立的 AHK 脚本,用于完成热字串所无法实现的功能。

在影子输入法中,要使用该功能,需要在进阶选项中勾选 超级命令 选项。

定义方法:

打开“词库管理工具”,在 extend / function 表中自定义脚本。每个脚本的 comment 描述了该脚本的类型。

  • {func} :表示内置命令,内置命令在内置命令管理器中有详细描述
  • {Script} : 表示标准 AHK 脚本,采用 AHK v1 语法编写
  • 没有描述:表示标准 cmd 指令

以下是两个例子:

key:
	day
comment:
	{func}当前时间
value:
	date/yyyy年MM月dd日

该例子调用了内置命令 date ,并指定了日期输出格式。

使用方法:

在影子输入法中文输入状态下输入 run/day (如果自定义了命令名称,则输入 s/day),即可直接输入当前日期。

key:
	test
comment:
	{Script}点击坐标
value:
    SendInput, 演示文本。
    Sleep, 100
    MouseClick, left, 100, 100
    Sleep, 100
    MouseClick, left, 100, 200
    Sleep, 100
    MouseClick, left, 100, 300
    Sleep, 100
    SendInput, {ENTER}

该例子为标准 AHK 脚本,在当前文本框内输入了“演示文本”,并依次点击三个坐标,最后按下回车键。

使用方法:

在影子输入法中文输入状态下输入 run/test (如果自定义了命令名称,则输入 s/test),即可直接触发脚本动作。

# 剪贴板

影子输入法可以记录剪贴板历史记录(仅限于文本记录),启用该功能,需要在进阶选项中勾选 剪贴板历史 选项。

使用方法:

  • clip/ :显示历史记录
  • clip/z :清除剪贴板历史纪录

# 自定义功能

# 修改输入法中英文指示器样式

; 文件路径:Lib/keylist.ahk
; 第660行起

fg:=(!(srf_mode&&srf_inputing)&&GetKeyState("CapsLock", "T")?"A":srf_mode||IME_GETOPENSTATUS()?"中":"英")
ToolTip, % fg, Caret_.X+5, Caret_.Y+30
Btt(fg,Caret_.X+5, Caret_.Y+30,,"style32")
SetYzLogo(fg="中", 0)

目前只是注释掉了,具体如何修改显示样式,后面有空再研究。

# 映射 Emacs 键位

影子输入法,要适配Emacs键位,只需要修改3个按键即可。

esc   -> C-g
right -> C-f
left  -> C-b

修改方法:

在 Lib / keylist.ahk 文件中,找到 esc / left / right 按键绑定方法,直接替换,或者在对应的方法下边,用 Emacs 键位重新实现一遍即可。

>^g::
If (!srf_inputing){
		SetYzLogo(srf_mode:=0, 1)
		SetTimer, ToolTipInputStatus, -10
	}
	Gosub srf_value_off
	If (srf_mode&&Escfg=3){
		SetYzLogo(srf_mode:=0, 1)
		SetTimer, ToolTipInputStatus, -10
	}
Return

>^b::
	tfzm:="", dwselect:=0
	If (!insertpos){
		insertpos:=leftcaret(StrLen(srf_all_Input)+1)
	} Else {
		insertpos:=leftcaret(insertpos)
	}
	Gosub srf_tooltip_fanye
Return

>^f::
	tfzm:="", dwselect:=0
	If (!insertpos){
		insertpos:=1
	} Else {
		insertpos:=Min(insertpos+1,StrLen(srf_all_Input)+1)
	}
	Gosub srf_tooltip_fanye
Return

# 影子输入法与Putty按键冲突

影子输入法默认 Alt+s,Alt+w 这些快捷键绑定了管理功能,与putty冲突,要屏蔽这些快捷键,直接修改 config.json 文件,屏蔽 hotkeys 的所有键值。

也可以直接删掉,如要恢复,从 confit--.json 文件中复制过来即可

"gesture": {},
"hotkeys": {
    "!d": {
        "Action": "MenuZWin",
        "Comment": "\u4EC5\u663E\u793A\u7A97\u53E3\u83DC\u5355",
        "FilterMode": "",
        "Sep": "0"
    },
    "!q": {
        "Action": "MenuZAll",
        "Comment": "\u663E\u793A\u5E38\u89C4\u83DC\u5355",
        "FilterMode": "\u641C\u7D22",
        "Sep": "1"
    },
    "!s": {
        "Action": "MenuZAll",
        "Comment": "\u663E\u793A\u5E38\u89C4\u83DC\u5355",
        "FilterMode": "",
        "Sep": "0"
    },
    "!w": {
        "Action": "MenuZAll",
        "Comment": "\u663E\u793A\u5E38\u89C4\u83DC\u5355",
        "FilterMode": "\u9996\u9009\u9879",
        "Sep": "1"
    },
    "!x": {
        "Action": "MenuZAll",
        "Comment": "\u663E\u793A\u5E38\u89C4\u83DC\u5355",
        "FilterMode": "\u6587\u4EF6\u64CD\u4F5C",
        "Sep": "1"
    }
}