Skip to content

Commit d5222ac

Browse files
committed
Add Hammerspoon: banjiao
1 parent fd9de7a commit d5222ac

File tree

3 files changed

+67
-0
lines changed

3 files changed

+67
-0
lines changed

hammerspoon/README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Hammerspoon
2+
3+
## 键盘输入全角符号转半角`modules.banjiao`
4+
5+
> 在撰写MarkDown文档时,需要在中文输入法模式下键入大量的MarkDown控制符;但这些控制符需要使用半角
6+
7+
- 通过修改`app_map``replace_map`这两个字典调整脚本的行为
8+
9+
## Install
10+
11+
- 复制 `modules` 目录到目录 `~/.hammerspoon`
12+
- 修改 `~/.hammerspoon/init.lua` 文件激活对应模块

hammerspoon/init.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
require("modules.banjiao")

hammerspoon/modules/banjiao.lua

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
-- 键盘输入自动全角符号转半角符号
2+
3+
-- 事件的API https://www.hammerspoon.org/docs/hs.eventtap.event.html
4+
-- 按键(delete)定义表 https://github.com/Hammerspoon/hammerspoon/blob/master/extensions/keycodes/keycodes.lua
5+
6+
7+
-- 预定义生效的应用清单
8+
local app_map = {
9+
["Code"] = true,
10+
["Drafts"] = true,
11+
["Joplin"] = true,
12+
["Sublime Text"] = true
13+
}
14+
-- 预定义替换映射表
15+
local replace_map = {
16+
["·"] = "`",
17+
[""] = '"',
18+
[""] = '"',
19+
[""] = '>',
20+
[""] = '<',
21+
}
22+
23+
local function keyboardReplaceListener(event)
24+
-- print("-----")
25+
-- print(hs.inspect.inspect(event:asData()))
26+
-- print(event:getButtonState(0))
27+
-- print(hs.inspect.inspect(event:getCharacters()))
28+
-- print(hs.inspect.inspect(event:getFlags()))
29+
-- print(event:getKeyCode())
30+
-- print(event:getProperty(hs.eventtap.event.properties.eventSourceUserData))
31+
-- print(event:getRawEventData())
32+
-- print(event:getTouchDetails())
33+
-- print(event:getTouches())
34+
-- print(event:getType())
35+
-- print(event:getUnicodeString())
36+
37+
-- 只在指定的应用中生效
38+
local app_name = hs.application.frontmostApplication():name()
39+
-- print(app_name)
40+
if not app_map[app_name] then
41+
return
42+
end
43+
44+
-- 安装替换表执行替换
45+
local new_char = replace_map[event:getCharacters()]
46+
if new_char then
47+
local delete_event = require("hs.eventtap")
48+
delete_event.keyStroke({}, "delete")
49+
hs.eventtap.keyStrokes(new_char)
50+
end
51+
end
52+
53+
tap = hs.eventtap.new({ hs.eventtap.event.types.keyUp }, keyboardReplaceListener)
54+
tap:start()

0 commit comments

Comments
 (0)