做异端中的异端 -- Emacs裸奔之路3: 上古神键Hyper
谈一下快捷捷冲突的问题。
Emacs几乎穷尽所有组合键
我用下面命令,在Fundamental模式下,枚举所有绑定。
(defun keymap-lookup-test-fn(); printable keys(setq printable-chars (number-sequence 33 126))(setq i 0)(while (< i (length printable-chars)); (setq key-name (format "C-%c" (nth i printable-chars))); (setq key-name (format "M-%c" (nth i printable-chars)))(setq key-name (format "C-M-%c" (nth i printable-chars))); (setq key-name (format (concat custom-user-prefix-key "%c" (nth i printable-chars)))); (setq key-name (format (concat custom-user-prefix-key "C-%c" (nth i printable-chars)))); (setq key-name (format "C-x %c" (nth i printable-chars))); (setq key-name (format "C-x C-%c" (nth i printable-chars)))(setq key-desc (keymap-lookup (current-global-map) key-name))(message " ---------- %S : %S" key-name key-desc)(setq i (1+ i))))
发现没有使用的绑定只有:
- M-N
- M-O
- M-P
- C-M G
- C-M M
- C-M Q
- C-M X
- C-M Y
- C-M Z
- C-x c
- C-x g
- C-x j
- C-x y
- C-x C-a
- C-x C-g
- C-x C-h
- C-x C-y
M-n M-p 实际是配合其它命令使用的,不能再占用。
值得一提的是C-c本来是给用户使用的,但其它包可能会占用,Emacs自带的Org Mode就大量占用C-c,甚至Org自身的绑定都相互冲突。
无法保证其它Mode或者包可能占用组合,冲突问题无法化解。
我机器上,我会关掉所有可见的全局快捷键,以避免与Emacs绑定冲突。
于是,Emacs用户经常会面临一个问题,自定义命令,无键可绑!
Hyper键
Hyper存在于上古的Lisp machine,现在的键盘几乎没有这个键。
所以没有谁会使用这个键,这个对于用户来说可是一个宝贵资源。
但Hyper只存在传说中了,在硬件层面已经不支持。
USB标准里面根本没有空间给Hyper,一个字节已经占满,
出处:
https://files.microscan.com/helpfiles/ms4_help_file/ms-4_help-02-46.html
另外QMK中,也不支持Hyper键,这基本上证实,物理上的Hyper不存在了。
但Emacs并没有遗忘Hyper,可能是因为Lisp血统。
做法是在Emacs中把一个不常用的键映射成Hyper键,这个是纯属Emacs自己做的事,与物理上有没有Hyper没有关系。
下面的代码,把菜单键(KCAPP/KCMENU)配置成Hyper, 再把Hyper-b配置为打开ibuffer的快捷键。
(setq w32-apps-modifier 'hyper) ; Menu key
(global-set-key (kbd "H-b") 'ibuffer)
这样在键盘上按着菜单键,同时按下b键,就可以打开ibuffer.
QMK改键方案
这个是本文的重点。
Hyper方案的缺点是来自Emacs,即在Emacs是Hyper,在其它地方是菜单键。
所以你会时不时的在其它软件上打开菜单,另加上一个字母。
另外菜单键本身不是Modifier,并不是为组合设计的,存在按键冲突的可能。
所以这个方案并不完美。
我现在的方案是使用F12以上的功能键,即F13-F24,(常规键盘不存在这些键,但是允许使用的),再加组合键,使这个组合几乎唯一。
(setq custom-user-prefix-key "C-M-S-<f13> ")
(global-set-key (kbd (concat custom-user-prefix-key ";")) 'custom/move-to-midlle-forward)
这里使用Ctrl-Alt-Shift-F13做前缀,再加分号,执行一个自定义命令。
相信没有哪个厂家或者第三方包会使用这样一个怪异的组合了!
就算有,我还有F13后面的11个键可以选,再冲突比被陨石击中概率还小了!
但随之而来的问题是,自己如何方便都按下Ctrl-Alt-Shift-F13四个键呢?
直接的做法就是在QMK中录制这个组合的宏,再把这个宏赋值到你方便的键上。
但这个做法就是牺牲一个方便的键,这可是宝贵资源。
我的做法是,当这个键正常按下松开时,释放Ctrl-Alt-Shift-F13组合,
如果按住不放,着切换另一个键盘逻辑层。对应的键设置为LT(1,KCESC).
然后修改QMK源码,代码如下(位于keymap.c):
bool process_record_user(uint16_t keycode, keyrecord_t *record) {bool is_continue = true;switch (keycode) {case LT(1,KC_ESC):if (record->tap.count && record->event.pressed) {register_code16( LCTL(LALT(LSFT(KC_F13))) );is_continue = false; // Return false to ignore further processing of key} else if (record->tap.count && !record->event.pressed) {unregister_code16( LCTL(LALT(LSFT(KC_F13))) );is_continue = false; // Return false to ignore further processing of key}break;}return is_continue;
}
至此,这个世界清静了很多!
你的绑定只要你顺手就可以了,不再有与他人冲突的问题!
相关文章:
做异端中的异端 -- Emacs裸奔之路3: 上古神键Hyper
谈一下快捷捷冲突的问题。 Emacs几乎穷尽所有组合键 我用下面命令,在Fundamental模式下,枚举所有绑定。 (defun keymap-lookup-test-fn(); printable keys(setq printable-chars (number-sequence 33 126))(setq i 0)(while (< i (length printable…...
Java多线程介绍及使用指南
“多线程”:并发 要介绍线程,首先要区分开程序、进程和线程这三者的区别。 程序:具有一定功能的代码的集合,但是是静态的,没有启动运行 进程:启动运行的程序【资源的分配单位】 线程:进程中的…...
HarmonyOS 5.0应用开发——列表(List)
【高心星出品】 文章目录 列表(List)列表介绍列表布局设置主轴方向设置交叉轴方向 列表填充分组列表填充 滚动条位置设置滚动位置滚到监听 列表项侧滑 列表(List) 列表介绍 列表作为一种容器,会自动按其滚动方向排列…...
自动化电气行业的优势和劣势是什么
优势 市场需求广泛: 自动化电气技术广泛应用于电力系统、制造业、交通、农业等多个领域,随着智能化、数字化趋势的加强,其市场需求持续增长。在智能制造、智能电网等领域,自动化电气技术更是发挥着关键作用,推动了行业…...
第 42 章 - Go语言 设计模式
在Go语言中,设计模式是一种被广泛接受的解决常见问题的最佳实践。这些模式可以分为三类:创建型模式、结构型模式和行为型模式。下面我将结合案例以及源代码对这三种类型的设计模式进行详细讲解。 创建型模式 创建型模式主要关注对象的创建过程…...
【机器学习】---大语言模型
引言:开启大语言模型的奇幻旅程 近年来,人工智能(AI)领域正在经历一场前所未有的技术革命,而其中最耀眼的明星莫过于大语言模型(Large Language Models, LLMs)。这些模型,犹如现代科…...
挑战用React封装100个组件【002】
项目地址 https://github.com/hismeyy/react-component-100 组件描述 组件适用于需要展示图文信息的场景,比如产品介绍、用户卡片或任何带有标题、描述和可选图片的内容展示 样式展示 代码展示 InfoCard.tsx import ./InfoCard.cssinterface InfoCardProps {t…...
MarkDown-插入图片-图片url地址的生成获取方法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、url地址是什么二、如何获取图片的url地址1.了解图床2.使用图床获取图片URL地址2.1进入网站后,点击右下角“Select Image.”按钮,即可…...
插值、拟合和回归分析的相关知识
目录 0 序言 1 分段线性插值 2 多项式插值 3 样条插值 4 最小二乘拟合 5 多元线性回归 0 序言 在生产实践和科学研究中,常常有这些问题: 插值问题:由实验或测量得到变量间的一批离散样点,要求得到变量之间的函数关系或得到样点之外的…...
【小白学机器学习42】进行多次抽样,样本的分布参数和总体的分布参数的关系
目录 1 进行多次抽样,样本的分布参数和总体的分布参数的关系 2 样本容量越大,多次抽样的样本的分布参数和总体的分布参数的关系 3 随着样本容量增大,多次抽样均值的 平均值,方差的变化 4 随着样本容量增大,多次抽…...
链动星海 质引未来|中信银行加码科技金融 “接力式”服务助力“新质生产力”释放
11月26日,第二届中国国际供应链促进博览会(以下简称链博会)在北京中国国际展览中心开幕。中信集团以“链动星海 质引未来”为主题,亮相先进制造链展区。此次布展由中信金控主办、中信银行承办,携手中信证券、中信建投证…...
黑马2024AI+JavaWeb开发入门Day02-JS-VUE飞书作业
视频地址:哔哩哔哩 讲义作业飞书地址:飞书 一、作业1 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&l…...
云计算基础-期末复习
第一章:云计算概论 一、云计算的定义与特征 1. 定义: 云计算是一种通过网络以按需、可扩展的方式获取计算资源和服务的模式。它将计算资源视为一种公用事业,用户可以根据需求动态获取和释放资源,而无需了解底层基础设施的细节。…...
Java GET请求 请求参数在Body中使用Json格式传参
业务需要调个三方接口 使用GET请求方式 但是!请求参数不在Query中,竟然在Body中,使用Json格式传参 在API调试工具里面可以调通 在java代码里,死活调不通 网上搜了搜,找到一个靠谱的,记录一下 import o…...
AI数据分析工具(一)
Looker Studio(谷歌)-免费 优点 免费使用:对于中小型企业和个人用户来说,没有任何费用压力,可以免费享受到数据可视化和报表创建的功能。与Google服务集成:特别适合使用Google产品生态的企业,…...
go结构体匿名“继承“方法冲突时继承优先顺序
在 Go 语言中,匿名字段(也称为嵌入字段)可以用来实现继承的效果。当你在一个结构体中匿名嵌入另一个结构体时,嵌入结构体的方法会被提升到外部结构体中。这意味着你可以直接通过外部结构体调用嵌入结构体的方法。 如果多个嵌入结…...
【049】基于51单片机语音录放【Proteus仿真+Keil程序+报告+原理图】
☆、设计硬件组成:51单片机最小系统ISD4004语音芯片LM386音频放大器喇叭LCD1602液晶显示按键控制LED灯。 1、本设计采用STC89C51/52、AT89C51/52、AT89S51/52作为主控芯片,LCD1602液晶显示屏实时显示; 2、系统具有两种模式:录音…...
《软件项目管理》期末-复习题及参考答案
(1)赶工一个任务时,你应该关注( C ) A. 尽可能多的任务 B. 非关键任务 C. 加速执行关键路径上的任务 D. 通过成本最低化加速执行任务 (2)下列哪个不是项目管理计划的一部分?&#x…...
milvus 通俗易懂原理
向量值如何生成的 Milvus 是一个开源的向量数据库,专门用于处理高维向量的存储、搜索和分析。向量值本身通常来自于某些机器学习或深度学习模型的输出,尤其是在自然语言处理(NLP)、计算机视觉(CV)、推荐系…...
什么是撞库、拖库和洗库?
“撞库”是黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。 很多用户在不同网站使用的是相同的帐号密码,因此黑客可以通过获取用户在A网站的账户从而尝试登录B网…...
安卓-碎片的使用入门
1.碎片(Fragment)是什么 Fragment是依赖于Activity的,不能独立存在的,是Activity界面中的一部分,可理解为模块化的Activity,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用得非常广泛. Fragment不能独立存在,必须…...
华为IPD流程学习之——深入解读123页华为IPD流程体系设计方法论PPT
该方案全面介绍了华为IPD流程体系设计方法论,包括流程体系建设的背景、理念、架构、核心特征、构建模型、与组织和战略的关系、运营机制、数字化转型以及流程管理组织等内容,旨在为企业提供一套系统的流程体系建设指导,以提升运营效率、质量和…...
DriveMLLM:一个专为自动驾驶空间理解任务设计的大规模基准数据集
2024-11-20, 由武汉大学、中国科学院自动化研究所、悉尼科技大学、牛津大学等合创建了DriveMLLM数据集,该数据集是自动驾驶领域首个专为评估多模态大型语言模型(MLLMs)空间理解能力而设计的基准,对于推动自动驾驶技术的…...
高效处理 iOS 应用中的大规模礼物数据:以直播项目为例(1-礼物池)
引言 在现代iOS应用开发中,处理大规模数据是一个常见的挑战。尤其实在直播项目中,礼物面板作为展示用户互动的重要部分,通常需要实时显示海量的礼物数据。这些数据不仅涉及到不同的区域、主播的动态差异,还需要保证高效的加载与渲…...
python的函数与递归
需求: 编写一个函数,计算斐波那契数列的第 N 项,并使用递归实现。 为了计算斐波那契数列的第 N 项,可以使用递归方法。斐波那契数列的定义是: F(0) 0 F(1) 1 对于 n > 2,F(n) F(n-1) F(n-2)…...
RabbitMQ学习-Seven
再SpringBoot中使用MQ 1.创建SpringBoot项目 除了我们平常使用的一些工具依赖,还需要选择这个Spring for RabbitMQ依赖 2.需要在application.yml文件中进行配置 server:port :9090 spring:application:name:producerrabbitmq:host: 你的主机名port: 5672virtual-…...
中科亿海微SoM模组——波控处理软硬一体解决方案
本文介绍的波控处理软硬一体解决方案主要是面向相控阵天线控制领域,波控处理通过控制不同天线组件的幅相来调整天线波束的方向和增益,实现高精度角度控制和高增益。本方案由波控处理板、波控处理控制软件算法和上位机软件共同构成。波控处理SoM模组原型样…...
开源法律、政策和实践
#一切皆可开源# 木兰社区对《Open Source Law,Policy and Practice 》这本书的第二版进行了翻译,并发布在了gitee上。这本书是对开源文化、开源政策、法律的全面介绍。目录如下: 1 Open Source as Philosophy,Methodology,and CommerceUsing Law with …...
【计算视觉算法与应用】金字塔,下采样Gaussian Pyramid. 上采用 Laplacian Pyramid (code: py)
金字塔(Pyramid)在图像处理中主要用于多尺度分析和图像压缩。常见的图像金字塔有两种: 高斯金字塔(Gaussian Pyramid):用于下采样图像,生成分辨率逐渐降低的图像序列。拉普拉斯金字塔ÿ…...
基于BERT的语义分析实现
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...
深圳外贸公司待遇怎么样/网站排名优化化快排优化
15.1.路由检测插件 - RouteDebug 15.2.路由约束 15.3.命名路由 15.4.验证码 15.5.ASP.NET MVC 与 三层架构 15.6.Area区域 15.6.1.尝试将区域注册类放到 另外一个程序集中15.6.2.AreaName15.6.3.将区域控制器放到外面程序集15.7.将控制器类都放到单独程序集中 15.8.重新使用外部…...
临湘网站建设/整合营销传播案例
在不知道未来的时候,要把握住现在。 第一部分:结缘计算机 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?(必答)我上大学之前对于计算机专业真的了解不多,顶多知道它是…...
室内设计速成班学费/福州360手机端seo
1. scroll-view在android下需要设置容器overflow-x:scroll才能正常滚动,例如(华为P9不可用),要注意各种兼容性;2. 页面间跳转的大坑:问题描述:小程序中,当使用navigatorTo达到5层(或更多&#x…...
医疗网站建设计划书/公司模板建站
1. 流程定义节点a) <processname”” xmlns”” key””, version””>b) name:i. 流程定义的名称;c) key:i. 流程关键字(键值);ii. …...
怎么自己做个网站做链接跳转/婚恋网站排名前三
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ---------------------- 一、javascript调用C#代码解决方案 // 第一种情况: 1.后台方法: protected string CsharpVoid(string strCC) { return strCC; …...
wordpress HTML5游戏/百度推广的定义
一、导入相关jar包,pom依赖如下: <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>RELEASE</version></dependency> 二、开始撸代码 1.如果导出功能使用的比较…...