Skip to content

Commit f1bc5ad

Browse files
author
墨航
committed
Init commit
0 parents  commit f1bc5ad

11 files changed

+1298
-0
lines changed

.gitignore

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# Created by .ignore support plugin (hsz.mobi)
2+
### JetBrains template
3+
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
4+
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
5+
6+
.idea/
7+
# User-specific stuff:
8+
.idea/workspace.xml
9+
.idea/tasks.xml
10+
.idea/dictionaries
11+
.idea/vcs.xml
12+
.idea/jsLibraryMappings.xml
13+
14+
# Sensitive or high-churn files:
15+
.idea/dataSources.ids
16+
.idea/dataSources.xml
17+
.idea/dataSources.local.xml
18+
.idea/sqlDataSources.xml
19+
.idea/dynamic.xml
20+
.idea/uiDesigner.xml
21+
22+
# Gradle:
23+
.idea/gradle.xml
24+
.idea/libraries
25+
26+
# Mongo Explorer plugin:
27+
.idea/mongoSettings.xml
28+
29+
## File-based project format:
30+
*.iws
31+
32+
## Plugin-specific files:
33+
34+
# IntelliJ
35+
/out/
36+
37+
# mpeltonen/sbt-idea plugin
38+
.idea_modules/
39+
40+
# JIRA plugin
41+
atlassian-ide-plugin.xml
42+
43+
# Crashlytics plugin (for Android Studio and IntelliJ)
44+
com_crashlytics_export_strings.xml
45+
crashlytics.properties
46+
crashlytics-build.properties
47+
fabric.properties
48+
### OSX template
49+
*.DS_Store
50+
.AppleDouble
51+
.LSOverride
52+
53+
# Icon must end with two \r
54+
Icon
55+
56+
# Thumbnails
57+
._*
58+
59+
# Files that might appear in the root of a volume
60+
.DocumentRevisions-V100
61+
.fseventsd
62+
.Spotlight-V100
63+
.TemporaryItems
64+
.Trashes
65+
.VolumeIcon.icns
66+
.com.apple.timemachine.donotpresent
67+
68+
# Directories potentially created on remote AFP share
69+
.AppleDB
70+
.AppleDesktop
71+
Network Trash Folder
72+
Temporary Items
73+
.apdisk
74+

README.md

+111
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
# Capslock
2+
3+
*Make CapsLock Great Again! —— Vonng*
4+
5+
将Capslock改造为强大的超级功能键
6+
7+
* 功能强大:CapsLock将与所有按键摩擦出火花。包括:Vim导航键、窗口控制、媒体控制、Bash控制、应用快捷方式、鼠标键、上档键、便捷括号、快捷删除等。
8+
* 跨平台:基于[AutoHotKey](http://www.ahkscript.org/)(Win),[Karabiner](https://pqrs.org/osx/karabiner/)(OSX)
9+
* 部署迁移方便:无论是放在U盘 还是Github上,仅需简单几步即可复刻环境。
10+
11+
## 前言
12+
13+
CapsLock,即所谓大写锁定键,起源可以追溯至打字机时代。不像今天的键盘,打字机是纯机械的设备,当按下Shift时,整套设备会与墨条纸袋发生位移,使原来的小写字母“上档”为大写字母。这样的操作对于小拇指来说是不小的负担,以至于接连输入两三个大写字母都显得比较困难。于是,在今天Capslock的位置上出现了其原型:Shiftlock功能键,可以在大小写状态之间切换与保持。这样的设计减轻了打字员的负担,同时也解决了一指禅选手的困境。
14+
15+
然而随着科技的进步,这样的问题已经不存在了。除了一指禅选手(也许再加上和大堆大堆宏定义的C,C++程序员),Shift已经能够完全满足人们的需求。然而这样一个'多余'的按键仍然顺着历史惯性保留了下来,占据了键盘的黄金位置。
16+
17+
历史上有很多人注意到了这一点,Capslock曾经在很多环境中被用作Ctrl,也在很多环境中用作语言切换的快捷键。某些方式还可以将两种模式集成:单按为语言切换/ESC,按住则表现为Ctrl。但是可以做的远远不止这些:不妨让CapsLock成为一个全新的、诸如`Ctrl`,` Alt`, `Shift`, `Win`, `Cmd`的新修饰键:**Hyper**
18+
19+
## 说明
20+
21+
本着策略与机制相分离的原则,这里将`CapsLock`的功能设计规划与实现分成两部分。
22+
23+
首先来看一下标准的104键盘布局:
24+
25+
![](images/keyboard-layout.jpg)
26+
27+
因为大多数笔记本和我用的87键盘没有数字键盘,所以这里数字键盘就不考虑了,Special Keys区大多数键笔记本键盘也没有,所以也不适合放什么重要的功能键。
28+
29+
设计如下:
30+
31+
![](images/function-spec.png)
32+
33+
1. `CapsLock`单独按下与长按的区分
34+
35+
传统上扩展`Capslock`,要么是将其语言切换,要么是将其作为`Control`。但其实这两个功能并不矛盾,一个是单按触发,一个是按下时触发,所以完全可以合并在一起。
36+
37+
单独按下Capslock时,会触发**语言切换**功能,按住不放时,则激活一个新的功能键`Hyper`,替代传统的`Ctrl`实现更多更丰富的定制功能。当然,另一种做法是将单独按下改造为`ESC`,这就要视需求选择了。
38+
39+
2. 导航键
40+
41+
导航键包括:``,``````,`Home`,`End`,`PgUp`,`PgDn`,提供了一套通用的光标移动操作。不过这些键都远离核心键区,导致移动光标需要把右手移开,这一点煞是恼人。最好是将这些导航键映射到右手的核心键区,通过按下`Capslock`键启用,同时需要在移动光标的同时,对文本选取的功能(`Shift`)提供良好支持。
42+
43+
按下Capslock时,传统的VIM导航键`h,j,k,l`映射为方向键,而将这四个键上方的`u,i,o,p`分别映射为`PageUp`,`Home`, `End`,`PageDown `,提供全局的导航操作。另一方面,因为按下左手需要按下`Capslock`,右手需要控制导航键,都不适合按下两侧的`Shift`键进入文本选择模式,这时候比较好的选择是由左手大拇指同时按下⌘(Mac)或Alt(Win),将组合键映射为导航键+`Shift`提供文本选取支持。
44+
45+
这样,vim的导航不仅可以在vim的所有模式中使用,也可以在系统中全局使用了。
46+
47+
3. 删除键
48+
49+
删除是极其频繁的功能,包括前删(BackSpace)与后删(Delete)。不过Mac和Windows的操作不太一致有些恼人,而且这两个键也都是远离核心键区操作不便。
50+
51+
`Capslock`+`nm,.`映射到不同的删除功能上,首先这四个键在`h`,`j`,`k`,`l`正下方,操作非常方便。`Hyper + m`映射为前删`Delete`(Mac)或退格`BackSpace`(Win),`Hyper+ ,`设计为后删`ForwardDelete`(Mac)或`Delete`(Windows)。同时`n``.`则映射为相应的按下`Option`(Mac)或`Ctrl`(Win)的版本,即前删后删一个单词,类似vim的`dw``db`,提高长句删除效率。
52+
53+
这样一来,Mac与Windows的删除行为终于保持一致了,而且删除功能由右手最为灵活的食指和中指负责操作,能大大提高编辑效率。
54+
55+
4. 上档键
56+
57+
上档是CapsLock的传统功能。但通常Capslock对第二排数字键不起作用,这里不妨反其道行之,将Capslock+数字键映射为对应的上档符号,当然也可以考虑映射为其他的一些命令,例如IDE调试命令,配置切换命令等。同时,一些编程中的高频符号,比如括号,下划线,等于号,也可以从右上角拉下来,放到核心键区。
58+
59+
比如`CapsLock+; : _``Capslock + ' : =``Capslock + [ : (``Capslock + ] : )`。这样一来,高频符号下划线和等号就可以方便的录入了,而圆括号映射到方括号这里,让小中大括号一家终于团聚在一起,也减少了输入圆括号的手指位移。
60+
61+
5. 窗口控制
62+
63+
除了切换应用程序窗口`⌘Tab`(Mac), `Alt+Tab`(Win)外,还有许多经常用到的窗口操作:譬如关闭窗口(关闭应用程序),关闭标签页,切换标签页等。
64+
65+
CapsLock+Q是Quit,关闭窗口的意思,映射到`⌘Q`(Mac)或`Alt+F4`(Win)。
66+
67+
CapsLock+W是关闭当前标签,映射到`⌘W`(Mac)或`Ctr+W`(Win)
68+
69+
CapsLock+S是Switch的意思,切换当前标签页,映射到`^Tab`(Mac & Win)。
70+
71+
CapsLock+A是两个挨着的键,一起按就是另一个窗口管理软件的Moom的meta-key。可以方便的缩放摆弄窗口,很好用。
72+
73+
这几个快捷方式非常常用,在IDE或者浏览器里都很方便。
74+
75+
6. Bash控制
76+
77+
在Bash中,我们习惯Capslock作为Ctrl使用。但是最常用的,必不可少的其实只有几个:
78+
79+
CapsLock+Z映射到`^Z`,用于发送SIGTSTP挂起作业。
80+
81+
CapsLock+X映射到`^B`,是终端复用软件Tmux的metakey。
82+
83+
CapsLock+C映射到`^C`,用于发送SIGINT中断作业。
84+
85+
CapsLock+V映射到`,`,是Vim的`<Leader> key`
86+
87+
CapsLock+D映射到`^D`,用于发送`EOF`
88+
89+
当然,在Windows下面,这些键可以作为传统的编辑键:撤销,剪切,拷贝,粘贴……
90+
91+
7. 媒体控制:
92+
93+
在没有`Fn`的外接键盘上如何使用Mac的传统功能键?用`Hyper+FX`解忧愁。Capslock+F1就是调低亮度,依此类推。
94+
95+
8. 应用快捷键:
96+
97+
应用快捷键应当可以用一只手就轻松按出,这也限制了应用快捷键所能使用的键区。基本上适合作为应用快捷键的按键就是左手食指覆盖的键区了。
98+
99+
这里`ERTYFGB`作为应用快捷键,加上⌘总共可以设置14个高频应用程序的快捷方式。这里是我的设置:
100+
101+
`Hyper-E: Google Chrome.app``Hyper-⌘E: Finder`,E取自Explore的涵义。
102+
103+
`Hyper-R: iTerm``Hyper-⌘R: Ctrl+R (Run)`,R取自Run。
104+
105+
`Hyper-T: Sublime Text.app``Hyper-⌘T: Typora`,T取自Text,放置了常用的文本编辑器。
106+
107+
`Hyper-F: Dash.app``Dictionary`,F取自Find的涵义。最常用的查询软件。
108+
109+
`Hyper-G: IntelliJ IDEA.app``Hyper-⌘G: Clion`,G就是`Great`的意思,所以放了IDE😂。
110+
111+
`Hyper-B`可以放一些别的东西,目前当做了呼叫Emoji窗口的快捷键(`^⇧Space`)。

images/function-overview.png

77.9 KB
Loading

images/function-overview副本.png

77.9 KB
Loading

images/function-spec.png

237 KB
Loading

images/keyboard-layout.jpg

39.2 KB
Loading

osx/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Refer this
2+
[使用seil和karabiner做Mac键盘映射](http://www.macgg.com/archives/34148.html)

0 commit comments

Comments
 (0)