Windows——AutoHotKey

初次了解AutoHotKey,是在Win下最爱效率神器: AutoHotKey | 晚晴幽草轩这篇博客中,博主有对AutoHotKey作详细介绍,这里不在赘余。当时打字很慢,更苦于写代码时需要经常按方向键、Home/End等按键(当然这些问题有些编辑器可以解决),个人而言很是痛苦,直到遇到了AutoHotKey,解决了一大痛点,可以用它来重新布局我的键盘。看到了@冯若航大佬分享的AHK脚本AutoHotKey常用函数或小技巧有哪些分享?,稍微做了一丁点修改及删减,主要的按键映射如下图所示(其余功能见代码):

这里稍微说明一下:将CapsLock键映射为了ESC键,CapsLock键通过CapsLock + \来实现,图中的实现默认为和CapsLock组合按下时生效;另外,关于光标移动,比如CapsLock + H映射为Home键,若再同时按下Alt键,则可实现选中当前光标到Home键位置之间的文本,其余的比如CapsLock + Alt + U实现向前选中一个字词皆类似,依此类推(另外,还可按住CapsLock + Alt不松手,多次按下不同的光标移动映射按键来实现快速精确的选中文本)。

这里也把代码贴一下,如下CapsLock.ahk所示:

;---- CapsLock Initializer ----
SetCapsLockState, AlwaysOff

;---- CapsLock + \ === CapsLock ----
CapsLock & \::
GetKeyState, CapsLockState, CapsLock, T
if CapsLockState = D
    SetCapsLockState, AlwaysOff
else
    SetCapsLockState, AlwaysOn
KeyWait, \
return

;---- CapsLock === ESC ----
CapsLock::Send, {ESC}

;---- Editor ----
CapsLock & z:: Send, ^z      ; Z = Cancel
CapsLock & x:: Send, ^x      ; X = Cut
CapsLock & c:: Send, ^c      ; C = Copy
CapsLock & v:: Send, ^v      ; V = Paste
CapsLock & a:: Send, ^a      ; A = Select All
CapsLock & g:: Send, ^y      ; Y = Redo
;---- ---- ---- ----
CapsLock & f:: Send, ^f      ; F = Find
CapsLock & w:: Send, ^w      ; W = Close
CapsLock & s:: Send, ^s      ; S = Save
CapsLock & e:: Send, !{F4}   ; E = Exit

;---- CapsLock + D === Copy Current Line ----
CapsLock & d:: send, {Home}+{End}^c{End}

;---- CapsLock + R === AppsKey(Menu Key) ----
CapsLock & r:: Send, {AppsKey}

;---- CapsLock + T === Ctrl + Tab ----
CapsLock & t:: Send, ^{Tab}

;---- ---- ---- ----
CapsLock & =:: Send, ^{WheelUp}
CapsLock & -:: Send, ^{WheelDown}
CapsLock & Space:: Send, {Shift}

;---- Delete ----
CapsLock & ,:: Send, {Del}              ; , = Del char after
CapsLock & .:: Send, ^{Del}             ; . = Del word after
CapsLock & /:: Send, +{End}{Del}        ; / = Del all  after
CapsLock & m:: Send, {BS}               ; m = Del char before
CapsLock & n:: Send, ^{BS}              ; n = Del word before
CapsLock & b:: Send, +{Home}{Del}       ; b = Del all  before

;---- U === Word Before ----
CapsLock & u::
if getkeystate("alt") = 0
    Send, ^{Left}
else
    Send, ^+{Left}
return

;---- O === Word After ----
CapsLock & o::
if getkeystate("alt") = 0
    Send, ^{Right}
else
    Send, ^+{Right}
return

;---- P === PageDown ----
CapsLock & p::
if getkeystate("alt") = 0
    Send, {PgDn}
else
    Send, +{PgDn}
return

;---- Y === PageUp ----
CapsLock & y::
if getkeystate("alt") = 0
    Send, {PgUp}
else
    Send, +{PgUp}
return

;---- H === Home ----
CapsLock & h::
if getkeystate("alt") = 0
    Send, {Home}
else
    Send, +{Home}
return

;---- ; === End ----
CapsLock & `;::
if getkeystate("alt") = 0
    Send, {End}
else
    Send, +{End}
return

;---- J === Left ----
CapsLock & j::
if getkeystate("alt") = 0
    Send, {Left}
else
    Send, +{Left}
return

;---- K === Down ----
CapsLock & k::
if getkeystate("alt") = 0
    Send, {Down}
else
    Send, +{Down}
return

;---- I === Up ----
CapsLock & i::
if getkeystate("alt") = 0
    Send, {Up}
else
    Send, +{Up}
return

;---- L === Right ----
CapsLock & l::
if getkeystate("alt") = 0
    Send, {Right}
else
    Send, +{Right}
return

;---- Mouse Controller ----
CapsLock & Up::    MouseMove, 0, -10, 0, R  ;Mouse Up
CapsLock & Down::  MouseMove, 0, 10, 0, R   ;Mouse Down
CapsLock & Left::  MouseMove, -10, 0, 0, R  ;Mouse Left
CapsLock & Right:: MouseMove, 10, 0, 0, R   ;Mouse Right

;---- CapsLock + Enter(Push Release) === Mouse Left Push(Release) ----
CapsLock & Enter::
SendEvent {Blind}{LButton down}
KeyWait Enter
SendEvent {Blind}{LButton up}
return

;---- Scroll Left ----
CapsLock & WheelUp::    ; 向左滚动
ControlGetFocus, fcontrol, A
Loop 2  ; <-- 增加这个值来加快滚动速度
    SendMessage, 0x114, 0, 0, %fcontrol%, A  ; 0x114 是 WM_HSCROLL, 它后面的 0 是 SB_LINELEFT
return

;---- Scroll Right ----
CapsLock & WheelDown::  ; 向右滚动
ControlGetFocus, fcontrol, A
Loop 2  ; <-- 增加这个值来加快滚动速度
    SendMessage, 0x114, 1, 0, %fcontrol%, A  ; 0x114 是 WM_HSCROLL, 它后面的 1 是 SB_LINERIGHT
return

Linux——Xmodmap

但在使用Linux时,没有了AutoHotKey的按键映射,很不习惯,最后找到了Xmodmap的解决方案。参考链接:Xmodmap (简体中文),这里也把配置文件~/.Xmodmap分享出来,如下所示:

!-- xmodmap ~/.Xmodmap --!
! Caps_Lock -> Mode_switch
clear  lock
add    mod5 = Caps_Lock
keycode  66 = Mode_switch

! Caps_Lock + space -> Escape
keycode  65 = space NoSymbol Escape

! Caps_Lock + r     -> Menu
keycode  27 = r R Menu

! Caps_Lock + ,     -> Delete
keycode  59 = comma less Delete

! Caps_Lock + m     -> BackSpace
keycode  58 = m M BackSpace

! Caps_Lock + y     -> Prior
keycode  29 = y Y Prior

! Caps_Lock + p     -> Next
keycode  33 = p P Next

! Caps_Lock + i     -> Up
keycode  31 = i I Up

! Caps_Lock + k     -> Down
keycode  45 = k K Down

! Caps_Lock + j     -> Left
keycode  44 = j J Left

! Caps_Lock + l     -> Right
keycode  46 = l L Right

! Caps_Lock + h     -> Home
keycode  43 = h H Home

! Caps_Lock + ;     -> End
keycode  47 = semicolon colon End

具体的功能实现过程可参考上述链接Xmodmap以及Xmodmap Command。不足之处:牺牲了CapsLock键,并且无法实现组合键的映射,仅仅实现了以上的部分单个按键的映射(具体仅包含以下按键:Escape、Menu、Delete、BackSpace、PgUp、PgDn、Up、Down、Left、Right、Home、End)。

Linux中的AutoHotKey键映射替代方案的更多相关文章

  1. Linux 中的 AutoHotKey 键映射替代方案

    1. Windows 之 AutoHotKey 初次了解AutoHotKey,是在Win 下最爱效率神器:AutoHotKey | 晚晴幽草轩这篇博客中,博主有对AutoHotKey作详细介绍,这里不 ...

  2. hibernate中基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同

    基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同,主要区别是在配置映射文件上会有区别 两个持久化类为Manager和Department 1:基于主键映射1-1关联关系 1)使用其他持久化 ...

  3. linux中的 IO端口映射和IO内存映射

    参考自:http://blog.csdn.net/zyhorse2010/article/details/6590488 CPU地址空间 (一)地址的概念 1)物理地址:CPU地址总线传来的地址,由硬 ...

  4. Hibernate 中 联合主键映射 组合关系映射 大对象映射(或者说文本大对象,二进制数据大对象)

    Clob:文本大对象,最长4G Blob:二进制数据大对象,最长4G util: public class HibUtil { private static SessionFactory sessio ...

  5. linux中设置TAB键的宽度

    对于编程的人员来说,常常须要排版代码,这时候就须要TAB键,但TAB键的宽度太大,非常有可能代码太长,延伸到下一行,这个时候你就须要设置TAB键的宽度了. linux下设置TAB键的宽度,做法例如以下 ...

  6. linux中终端控制键Ctrl+C,Ctrl+Z,Ctrl+D的使用场合

    1.Ctrl+C比较暴力,就是发送Terminal到当前的程序,比如你正在运行一个查找功能,文件正在查找中,Ctrl+C就会强制结束当前的这个进程.2.Ctrl+Z是把当前的程序挂起,暂停执行这个程序 ...

  7. linux中如何使用微软鼠标的第4、5键

    虽说使用linux的 人大都对微软没什么好感,但不能否认微软确实也出了不少好东西呀,比如微软鼠标(IE系列) icon_smile.gif IE 2.0和以上版本都有5个按钮,除了正常的左中右外,两侧 ...

  8. Vim中的键映射【转】

    转自:http://www.cnblogs.com/softwaretesting/archive/2011/09/28/2194515.html http://www.pythonclub.org/ ...

  9. [转] linux下shell中使用上下键翻出历史命名时出现^[[A^[[A^[[A^[[B^[[B的问题解决,Linux使用退格键时出现^H解决方法

    [From] https://www.zmrbk.com/post-2030.html https://blog.csdn.net/suifengshiyu/article/details/40952 ...

随机推荐

  1. Office文档WEB端在线浏览(转换成Html)

    最近在做了一个项目,要求是对Office文档在线预览.下面给大家分享一下我的方法. 1.第一种方法(不建议使用)我是在网上搜了一个利用COM组件对office文档进行转换,但是此方法必须要装Offic ...

  2. abstract关键字、final关键字、static关键字、访问修饰符详解

     abstract关键字.final关键字.static关键字.访问修饰符详解 abstract关键字: final关键字: static关键字: 访问修饰符:

  3. aiohttp web服务端(server)样例 (非client)

    python版本 python3.6 (其他版本需要小改,版本>python3.4) 参考网址:https://www.cnblogs.com/ameile/p/5589808.html  as ...

  4. MySQL导入sql文件,过大导致错误

    --导入sql脚本文件,报错: Navicat 导入数据报错 --- 1153 - Got a packet bigger than 'max_allowed_packet' bytes2006 - ...

  5. 14 微服务电商【黑马乐优商城】:day02-springcloud(理论篇一:HttpClient的简单使用)

    本项目的笔记和资料的Download,请点击这一句话自行获取. day01-springboot(理论篇) :day01-springboot(实践篇) day02-springcloud(理论篇一: ...

  6. Qt QGraphicsScene||GraphicsView函数刷新多次内存溢出问题

    需将QGraphicsScene *scene = new QGraphicsScene;放入上面声明头文件中声明: cpp文件中声明: 使用: 需要添加这个 scene->clear(); 这 ...

  7. istio介绍

    核心架构 解决的问题 故障排查 1.  这个请求在哪里失败了?A有调用B吗? 2.  为什么用户的请求/页面hung住了? 3.  为什么系统这么慢?那个组件最慢? 应用容错性 1.  客户端没有配置 ...

  8. Uber坚持不盈利,葫芦里到底卖的是什么药?

    近日,据媒体报道在美国科罗拉多州阿斯彭举办的<财富>科技头脑风暴大会上,Uber CEO达拉·科斯罗萨西表示,Uber无需在2019年下半年上市计划实施前保持盈利状态. 首先要明确一点的是 ...

  9. ClipboardMonitor的下载和使用

    本工具可以实时监视剪贴板的变化,可以用于32位和64位的Excel. 在任务窗格上面输入一个正则表达式,例如(\d+)\-(\d+),按下Enter确认. 然后在其他地方,例如浏览器页面或者记事本中复 ...

  10. HTMLTestRunner 报告框架使用

    HTMLTestRunner 报告框架使用 file_path = base_path + '/Report/report.html' with open(file_path, 'wb') as f: ...