-
修改键值映射
2016-05-18 13:13:27修改键值映射写博客动机:
其实这个是心血来潮,看到键盘hhkb想买ˊ_>ˋ
修改mac上的键盘映射,让键盘功能更加紧凑,顺便解决小拇指每次像瞎子一样摸来摸去的问题。。。。
App:KarabinerA powerful and stable keyboard customizer for OS X.
- You can easily customize from prepared settings.
- You can also add your own settings by XML.
最后,这个博客发表之后才发现的,原来
<kbd>
标签在CSDN博客里面是显示不出来的,但是在编辑器里面同步显示是正常的。
并且,CSDN这个编辑器好像是仿的StackEdit,布局加使用说明都好像……
最最后想吐槽的是,每次看着同步显示的都挺好,发表之后就丑得让人不想看第二次……
正文
对于我来说,平时很少用到右侧的 command 和option,而比较多用到的是delete和\,以及方向键,方向键准备用ctrl加F/B/E/A/P/N来替换。
又学会了一招,
<kbd>keyboard</kbd>
效果keyboard。然后一段话里如果出现两个<kbd>`</kbd>这里是测试<kbd>`</kbd>
的效果是——</kbd>这里是测试<kbd>
,所以最好转义一下:<kbd>\`</kbd>
,效果——`这里是测试`。Ctrl+F 光标前进一个字符,相当于右键(F = Forward)
Ctrl+B 光标后退一个字符,相当于左键(B = Backward)
Ctrl+A 移动到一行的开头(A = Ahead)
Ctrl+E 移动到一行的结尾(E = End)
Ctrl+P 上移一行,相当于上键(P = Previous)
Ctrl+N 下移一行,相当于下键(N = Next)具体需求说明:
由于ctrl在一个角落里,而caps lock属于不经常用的键,所以我将它们两个互换(这个我在
系统偏好设置>键盘>修饰键
里面已经换好了),换完之后记得每一个都试一下,看有没有冲突,比如我的Ctrl+N就和一个app(MiniNote)冲突了,将该快捷键删除之后(这时可能在系统偏好设置>快捷键
里面找不到,在app的Preferences
里面找找),方向键经测试,都可以正常使用。接下来就要个性化定制了,因为我打字比较快,经常打错,感觉delete有点远,将它映射到不常用的右边的command-R,另外我用
Markdown
编辑数学公式的时候经常会用到\,所以准备将它映射到右边的option-R,然后`换到右边大一点的delete,原来`的地方放esc。最后的键盘布局就是:
ok,现在要做的就是装好Karabiner,修改映射。
好了,我要开动啦!
现有的可以直接勾选,没有的一个(将右边的option设置为\)需要自己设置。
修改设置流程: How to add your own settings
参考配置修改文档:private.xml Reference Manual基本语法
可以通过
<item>
来增加一个新的设置:<?xml version="1.0"?> <root> <item> <name>Name of Setting</name> <appendix>Optional Description of Setting</appendix> <identifier>Unique Identifier of Setting</identifier> <autogen>Behavior Definition</autogen> <autogen>Behavior Definition</autogen> </item> <item>...</item> <item>...</item> </root>
在
<item>
标签中再用<name>
,<identifier>
,<autogen>
。<name>
<appendix>
: These values are used in Preference Pane.
<identifier>
: This value is used to identify setting. You need to specify a unique value. We recommend you to add a “private.” prefix to your identifier. It prevents conflicts with identifiers of prepared settings.
<autogen>
: Definition of this setting behavior.
For example,__KeyToKey__
,__PointingButtonToKey__
.关键在于
<autogen>
标签中的映射要写对。
实施ing:
由于它给出了KeyCode和ModifierFlag两个列表,所以一开始误以为键值分为两种类型(KeyCode和ModifierFlag)映射的时候要互相对应,实际上不是。
找到相关例子:change option_r to semicolon:
在文件夹
/Applications/Karabiner.app/Contents/Resources/
下找到现有各种设置的XML文件,包含上述例子的这个文件在
/Applications/Karabiner.app/Contents/Resources/include/checkbox/standards/option.xml
其中option_r是我以为的
KeyCode
,而semicolon是我以为的ModifierFlag
。从上述例子可以看出单个使用的键都标记为
KeyCode
,修饰键做组合用时才标记为ModifierFlag
。
所以将我需要的那个设置写到Preferences>Misc & Uninstall>Custom Setting
下的private.xml
中:<?xml version="1.0"?> <item> <name>Option_R to Backslash</name> <identifier>remap.optionR2backslash</identifier> <autogen>__KeyToKey__ KeyCode::OPTION_R, KeyCode::BACKSLASH</autogen> </item> </root>
然后在
Preferences>Change Key
中Reload XML
。
勾选需要的映射,最终的设置:
其它复杂的设置可以参考:
__KeyToKey__ syntax
.另一个需要注意的地方:
key repeat
部分:要选on,否则一个键长按也只相当于敲击一次,删除时要一个字母一个字母点很不方便。
至于按多久触发(Delay until repeat)和重复的灵敏度(Key repeat),这两个参数可以按自己的喜好设置。 -
linux 下修改键值,按下shift也可以修改
2017-11-21 11:02:54linux 下修改键值,按下shift的功能也可以修改参考的文章有
1:http://blog.csdn.net/laughing_sir/article/details/8718282
在终端输入
2:https://jiasule.v2ex.com/t/391081
3:http://blog.sina.com.cn/s/blog_680e2da40101btzf.html
前言: linux 下键盘 有3层 scancode,keycode,symbol 随便修改那一层都可以,我们现在是通过修改symbol的方式来修改的;
首先查看键值,可以通过xev | grep keycode(如果没有xev功能的话,可以网上下载一个,运行install.sh即可)
然后点击键盘,就可以得到对应按键的键值
比如
state 0x0, keycode 108 (keysym 0xff1b, Escape), same_screen YES,
XKeysymToKeycode returns keycode: 9
state 0x8, keycode 108 (keysym 0xff1b, Escape), same_screen YES,
XKeysymToKeycode returns keycode: 9
state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,查看的方法2:另外一种简便的方法查看键值可以查看:/usr/include/X11/keysymdef.h ,里面包含所有的符号名,在其中可以找到你想要的键名,里面也有些简短的注释。
查看的方法3:通过xmodmap -pk 来显示整个键盘的布局,我的电脑如下:
第一列是keycode 第二列表示keysym对应的值,第三列表示按下shift对应的内容;
第二步:把需要修改的键值改成你需要设置的键值,
得到键值之后,就在 “~” 目录下创建 .xmodmaprc(加.是为了隐藏文件) 文件,内容如下
keycode 10= 0x32 0x40
保存之后,在终端输入
xmodmap ~/.xmodmaprc
然后1键就变成2键了 同时!也会变成@ ^_^
其实,你不用每次都运行
xmodmap ~/.xmodmaprc
这个命令,可以把上面的命令做成一个脚本程序,例如:在 /usr/bin/ 目录下创建 key文件,内容如下- #!/bin/sh
- xmodmap ~/.xmodmaprc
保存后添加执行权限 chmod +x /usr/bin/key然后把key程序添加到系统自动启动的程序里面就大功告成了!!!
注意:对于一些修饰符的键值设置比较麻烦
直接输入 xmodmap, 不带参数, 输出结果是你当前键盘的一些修饰键的信息
比如我的机器上的输出是这样的:
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)把键码(keycode) 事件 转换为 keysym.这是第一层
然后 再参考 修饰 映射 modifier,来确定按下ctrl shift 之类按键后的反应
所以以上表第二行的内容为例.它表示的是大小写切换键Capslock
lock Caps_Lock (0x42)
括号里的0x42 从十六进制转换到 十进制 就是 66 , 也就是 CapsLock 这个按键对应keycode 66
按下Capslock 后, 系统接受到 keycode 66 , 系统转换为 Caps_Lock 这个keysym.
然后按照 modifier 映射表 把 Caps_Lock 转换为 lock 功能, 就是大小写转换.
layer1 layer2 layer3
keycode keysym modifier
keycode 66 ----> Caps_Lock ----> lock
所以,要修改键位, 就要把这两层映射关系都要改掉. 但是修改之前,要知道被修改按键现有的对应关系.
可以使用 "xmodmap -pke " 来输出现在所有keycode -> keysym 的映射.首先从修改 keycod -> keysym 入手.
比如 我的需求1:调换esc 和 ~
这两个键都不在modifier 里面, 所以直接调换一下这两个按键的keycode 和keysym 就可以了,
在你的.Xmodmap 文件里面写入
! first , exchange (1) esc (2) grave ,"~",
! keycode 9 = Escape NoSymbol Escape
! keycode 49 = grave asciitilde grave asciitilde
keycode 49 = Escape NoSymbol Escape
keycode 9 = grave asciitilde grave asciitilde
注: 感叹号! 在配置文件中是被当成注释,不运行的.
涉及到modifier的按键修改就麻烦一点了, 要用 add remove 来修改 modifier 映射
比如把 casplock 改成 delete. 我们要做的事情就要分成两步.
既要把 capslock 的keysym 改成 delete 的keysym , 又要把capslock 从 modifier中的lock 组里移除.
否则你直接运行
"xmodmap -e "keycode 66 = BackSpace BackSpace BackSpace BackSpace ""
你会发现, capslock 键已经可以当backspace 来删除之前的字符了.但同时, 它还起着 原来的Capslock的大小写切换功能,
再用"xmodmap"查看一下
shift Shift_L (0x32), Shift_R (0x3e)
lock BackSpace (0x42)
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
你看.
lock BackSpace (0x42)
这个 keycode 66 的按键虽然keysym 已经改写成 backspace 了, 但是它依然表示一个大小写切换的功能.
所以先把CapsLock 从 lock 中移除, 然后再修改keysym
remove lock = Caps_Lock
keycode 66 = BackSpace BackSpace BackSpace BackSpace
这样键盘上的那个capslock 按键就完全改成backspace 了.
remove lock = Caps_Lock 这一句表示从 lock 组里移除Caps_Lock 这个keysym.
同样添加一个keysym 也是类似的语法 : add lock = Caps_Lock -
键盘钩子修改键值
2011-08-03 00:25:02在修改键值的时候,需要挂住WH_GETMSG 挂住WM_KEYBORD是不可以的。一个按键 你会不清楚对方使用WM_KEYdwon KEYUP WM_CHAR哪个消息的,最好全部挂钩 #define DLL_EXPORTS #...在修改键值的时候,需要挂住WH_GETMSG 挂住WM_KEYBORD是不可以的。一个按键 你会不清楚对方使用WM_KEYdwon KEYUP WM_CHAR哪个消息的,最好全部挂钩
#define DLL_EXPORTS
#include"keyboard.h"
HMODULE CHookKeyBord::s_DllHandle = NULL;
HHOOK CHookKeyBord::m_hKeyBordHook = NULL;
LRESULT CHookKeyBord::KeyboardProc(int cCode, WPARAM wParam, LPARAM lParam )
{
MSG* msg = (MSG*) lParam;
cout<<" msg "<<msg->wParam<<endl;
if(msg->message == WM_KEYDOWN || msg->message == WM_KEYUP ||msg->message == WM_CHAR)
{
msg->wParam += 1;
cout<<msg->wParam<<endl;
return 1;
}
return CallNextHookEx(CHookKeyBord::m_hKeyBordHook,cCode,wParam,lParam);
}
CHookKeyBord::CHookKeyBord()
{
}
CHookKeyBord::~CHookKeyBord()
{
}
void CHookKeyBord::SetKeyBordHook(DWORD dwPid /* = 0 */)
{
CHookKeyBord::m_hKeyBordHook = SetWindowsHookEx(WH_GETMESSAGE,CHookKeyBord::KeyboardProc,CHookKeyBord::s_DllHandle,dwPid);
}
BOOL WINAPI DllMain(__in HANDLE _HDllHandle, __in DWORD _Reason, __in_opt LPVOID _Reserved)
{
CHookKeyBord::s_DllHandle =(HMODULE) _HDllHandle;
return true;
} -
java map 修改键值对_MAP键值对
2021-02-27 19:22:31转自网易博客 炎火所谓键值对,你可以查看jdk文档,找MAP接口,它的实现类都是键值对的形式保存数据的,键值对的代表map的key可以是什么类型的数据value可以是什么类型的数据。键:就是你存的值的编号key必须是一个...转自网易博客 炎火
所谓键值对,你可以查看jdk文档,找MAP接口,它的实现类都是键值对的形式保存数据的,键值对的代表map的key可以是什么类型的数据 value可以是什么类型的数据。
键:就是你存的值的编号
key必须是一个不变的值、如String、Integer之类.
值:就是你要存放的数据
value就是对应的值。
Map map = new HashMap();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
Map 遍历的四种方法
//第一种:普遍使用,二次取值
System.out.println("通过Map.keySet遍历key和value:");
for (String key : map.keySet()) {
System.out.println("key= "+
key + " and value= " + map.get(key));
}
//第二种
System.out.println("通过Map.entrySet使用iterator遍历key和value:");
Iterator> it =
map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry =
it.next();
System.out.println("key= "
+ entry.getKey() + " and value= " + entry.getValue());
}
//第三种:推荐,尤其是容量大时
System.out.println("通过Map.entrySet遍历key和value");
for (Map.Entry entry : map.entrySet()) {
System.out.println("key= "
+ entry.getKey() + " and value= " + entry.getValue());
}
//第四种
System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
for (String v : map.values()) {
System.out.println("value=
" + v);
}
-
键盘动态库开发(修改键值映射和键盘灯控制)
2020-07-22 15:20:19键盘动态库开发(修改键值映射和键盘灯控制)开发需求键盘功能键盘灯控制键值抓取功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一... -
android修改键值
2013-08-20 10:23:09首先要移植的是遥控器的...首先修改按键映射文件。gingerbread/sdk/emulator/keymaps/qwerty.kl。该文件确定了linux键值与android键值的对应关系。 注意事项:linux键值的选择不是没有限制的。选择不当,可能会导致 -
java修改键值对_java修改properties文件中的键值对的值
2021-02-27 15:19:01文件中的键值对如下:#话单文件名 最后4位序列号billFileNameNO:1#话单文件头序列流水号billHeaderStreamNO:1下面是修改值得代码:public void modifyConfigField(String key,String value){String path = ... -
IOS NSDictionary修改键值
2019-11-21 18:22:51先上代码,再解释。 NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys...NSDictionary是不可变字典,因此无法直接调用setValue修改,否则会宕机。需要先装换为可变字典,然后才能修改。 -
js修改键值对里的键
2020-11-30 20:58:27var age = '年龄'; // 给age赋值 var student = [{ name: "法外狂徒张三", age: 32, }, { name: "约翰塞纳", age: 31, }, { name: "兰迪奥顿", ...st -
python字典修改键值对_python学习04.13:Python dict字典基本操作(包括添加、修改、删除键值对)...
2020-12-30 16:47:012:修改现有字典中的键值对。3:从现有字典中删除指定的键值对。4:判断现有字典中是否存在指定的键值对。初学者要牢记,字典中常常包含多个键值对,而 key 是字典的关键数据,字典的基本操作都是围绕 key 值实现的... -
swift 字典NSDictionary的定义,修改键值,删除/添加键值
2014-10-20 09:17:59// Playground - noun: a place where people can play import UIKit //------------------------------------------------------------------------------ ...// dict1的所有“键值”类型一致(都是字符串) var dict1 -
shell sed命令修改键值对以及修改值
2011-04-02 16:03:531.如需要修改如下键值对 sed命令: sed 's#CERT_PATH.*$#CERT_PATH\" value=\"/opt/SUR/ReportServer/bin/workspace/conf/DPIConfig\"/>#g' DpiConfig.xml 解释: sed 's#键.*$#需要... -
mysql数据库修改键值后,如何快速消除重复记录?
2019-07-15 15:43:25Mysql中创建了一个表,有一个联合主键值(3个字段构成),导入了一些记录,现在想修改主键值(删除其中的一个字段),提示表中有重复记录,请问如何处理?有没有什么命令,系统会自动删除这些重复记录,而不是提示... -
jq 改数组的k值_在JSON jq中修改键值数组
2020-12-22 01:26:18{ "name": "DB_USERNAME", "value": "new" } 但我希望更多像就地修改或原始的整个json修改新值,如下所示: { "taskDefinition": { "containerDefinitions": [ { "name": "web", "image": "my-image", "environment":... -
巧治恶意网页病毒:让病毒自动还原被恶意修改键值
2006-08-29 10:34:00时间:2005-01-10 来源:不详 巧治恶意网页病毒:让病毒自动还原被恶意修改键值 单位的一台公用电脑接入了Internet互联网,没多久,就被一个恶意网页病毒感染了,出现如下症状:打开IE浏览器,会自动进入一个名为... -
PHP操作ini文件,读、写、修改键值
2013-06-09 00:11:56测试发现有一些小bug,新的键值对写不进去修改后的代码如下: class SimpleIniIterator { private $iniContent = array(); // 格式化键后的INI内容 private $fileContentString = ''; private $... -
window bat 批处理 修改注册表键值
2018-02-08 10:47:00把要修改的注册表导出来,往文件中修改键值,再双击执行 -
使用命令修改注册表键值及权限
2016-06-17 17:14:10很多时候,你可能需要对注册表的某些项进行权限的修改,...regini命令就是这样一个专门修改键值以及权限的命令。 regini命令格式为: regini regini.ini 这个命令需要一个ini文件 ,其中regini.ini的格式为: 注册 -
修改软件键值的
2011-10-04 15:53:18可以随意修改java操作系统的软件的键值 ,你手机的软件键值在网上可以找到, -
修改外键值
2018-05-24 17:03:38问题:Emp表的deptno(外键)和Dept表的deptno(主键)有外键关系,我现在要改两表中的deptno的值(在B表中有引用A表的值)我该怎么办?错误思路: update emp set ...方法1:先将外键关系disable,修改完成后再将它e... -
mysql 修改主键值
2021-01-06 10:11:411.实际工作当中我们使用mysql时可能要对一张表的主键值进行调整,这时就需要用到以下sql语句 2.首先查看主键值大小 select auto_increment from information_schema.TABLES where TABLE_NAME=‘表名’; 3.修改主键值... -
VB操作修改注册表键值
2013-03-11 09:50:56对注册表键值进行修改,可以加入值,然后设定成需要的值 -
如何修改QT键值映射
2020-08-21 10:09:08最近做一个嵌入式QT项目,当用户按设备上个小键盘区1 - 9的按键时,需要映射到其它的键值,而不是1 - 9。 尝试过单独起一个线程,从linux直接读取键值,用open("/dev/input/event3", O_RDWR)这种方法;也尝试过... -
delphi7中如何修改注册表键值
2019-09-24 18:41:30delphi7中如何修改注册表键值 Delphi / Windows SDK/API...delphi7中如何修改注册表键值啊? 详细点 最好有实例 procedure TClientMainForm.Sav... -
VC++ INI文件修改,读取键值
2012-04-12 22:14:39WINAPI提供了相应的函数...1. 修改键值 WritePrivateProfileStringW( __in_opt LPCWSTR lpAppName, __in_opt LPCWSTR lpKeyName, __in_opt LPCWSTR lpString, __in_opt LPCWSTR lpFileName ); 列