Questions tagged «keymap»

键映射是一种Lisp数据结构,用于指定各种键序列的键绑定。单个键映射直接指定各个事件的定义。当键序列由单个事件组成时,其在键图中的绑定就是该事件的键映射定义。

4
如何找出一个键绑定在哪个键映射中?
我已在中弹回'd'键gnus-article-mode,但是当该点位于附件上时,它的旧行为仍然有效。我可以看到rebinding并没有在那里生效C-h k d,但是它并没有告诉我那时什么键盘映射是有效的,因此我可以重新绑定它。 有办法找到答案吗? 这是一个精确的示例:我正在使用邪恶,并且希望文章处于运动模式。对于我的键盘布局,我将“ d”配置为向上键。 (evil-mode 1) (add-to-list 'evil-motion-state-modes 'gnus-article-mode) (setq evil-emacs-state-modes (remove 'gnus-article-mode evil-emacs-state-modes)) (define-key evil-motion-state-map "d" 'evil-previous-line) 为了确保考虑到邪恶键,我在本地地图中未设置gnus键: (defun as/alter-article-evil-map () (local-unset-key "d")) (add-hook 'gnus-article-mode-hook 'as/alter-article-evil-map) 不幸的是,当该点位于附件上时,“ d”键不再向上,但是它可以让我删除附件。我猜想那时还有其他绑定处于活动状态,因此是个问题。 解决方案我使用keymaps-at-point下面的方法从文本属性中找到使用的键盘映射。然后,我查看了绑定函数的代码以查找键映射的名称gnus-mime-button-map。以下代码实现了我想要的功能: (defun as/alter-article-evil-map () (define-key gnus-mime-button-map "d" nil)) (add-hook 'gnus-article-mode-hook 'as/alter-article-evil-map)

4
如何覆盖主要模式绑定
有时,我的全局键绑定被主要模式覆盖。一个简单的例子是我的init文件中的以下设置 (global-set-key (kbd "C-j") 'newline-and-indent) 但是,令人讨厌的是,这种键绑定被暂存缓冲区的默认模式“ Lisp Interaction”主要模式隐藏了。 当我发现自己处于主要模式(或次要模式)隐藏全局键绑定的情况时,如何找回它? 注:我的问题是不是“我怎样才能绑定C-j到newline-and-indent‘?模式’” Lisp的互动 我对一个更通用的答案感兴趣,该答案关于如何处理因某些主要/次要模式而被隐藏的冲突或用户键绑定的键映射。


1
如何区分TAB与Ci?
通常,出于历史原因,emacs将TAB密钥代码和C-i密钥视为相同,参见cf。有关功能键的emacs lisp文档或abo-abo关于“ TAB和?有什么区别?”问题的答案 。 注:在这篇文章中,键编码是TAB,<tab>和C-i; 另一方面tab,Ctrl+ 和+ i是键盘上的物理键。 但是,此刻,emacs将TAB和C-i视为相同,即(equal (kbd "TAB") (kbd "C-i"))-> t。 但是,由于我们不再生活在计算的困境中,所以我发现这非常烦人。有一些建议可以解决此问题,例如 “如何在不更改TAB的情况下将命令绑定到Ci?” Trey的解决方案不适用于我,该变量local-function-key-maps未更改。对其进行修改以使用delete而不是delq修改后的变量,但不会带来resolve ... tab和Ctrl+ i仍然相同。 转换为超级地图似乎是1980年代的解决方法...我可能也想使用Hyper+ i。 input-decode-mapCtrli我正在寻找使用+ 将+ 映射到一些后ASCII控制代码。除了不能与kbd宏一起正常工作外,这意味着必须修改将绑定Ctrl+ 的源代码的所有位i。考虑到所有源代码均已正确修改,这可以说是最好的解决方案。 采用(kbd "<tab>")了tab和(kbd "C-i")(这相当于(kbd "TAB")即在\t字面)为Ctrl+ i 做的工作,但你不得不修改所有这些使用了错误类型的源文件tab[阅读:键码TAB]这是烦人。 例如在github问题和emacs.sx中都提出了这个建议。 这些解决方案都不是真正的解决方案,我宁愿考虑它们(现有bug)的变通办法或黑客手段。 有没有办法强制 emacs映射tab到(kbd "<tab>")和,(kbd "TAB")而Ctrl+ i被映射为(kbd "C-i")缺少对emacs源代码的修改呢? 这种做法应该是在用户完全不可见,这意味着tab像键码<tab>,并TAB应该映射到一个而结合Ctrl+ i类似的键码C-i应该映射到另一个结合。 不太严重的一点是:这里的任何emacs开发人员可以评论是否会在某个时候在emacs源代码中对其进行更改/修复?

7
指向“快速查看”键的点预览文件
我想创建一个函数,对指向下方向的文件进行“快速查看”。 我想要的工作方式是按住一个功能键,然后使该文件在缓冲区中可见,但是当我松开该键时,缓冲区将关闭并且干缓冲区将返回。 我不想用关闭临时缓冲区 C-x k。 有没有办法在Emacs中实现此功能?如果可以将功能绑定到按键/按下,这似乎是可能的。

2
如何将Ci与TAB绑定在一起?
我想Control-i表演indent-region(基本上因为Xcode已经建立了该肌肉记忆)。 我意识到这一点Control-i,tab在Ascii的意义上是无法区分的,但是在键码意义上却是不可区分的。 我已经尝试了明显的方法: (global-unset-key (kbd "C-i")) (global-set-key (kbd "C-i") 'indent-region) 无济于事- 在当前上下文中,按键Control-i仍会执行任何tab操作。我可以做些什么来帮助Emacs区别对待tab按钮Control-i吗? 更新:我猜想通过重新映射选定区域时tab/ Control-i按下的内容,可以实现相同的结果。
16 keymap 

2
如何在组织模式下将密钥绑定到特定的议程命令/列表
我为组织议程添加了自定义键,以显示Sacha Chua之后所有未计划的TODO项目: (defun sacha/org-agenda-skip-scheduled () (org-agenda-skip-entry-if 'scheduled 'deadline 'regexp "\n]+>")) (setq org-agenda-custom-commands '(("u" "Unscheduled tasks" alltodo "" ((org-agenda-skip-function 'sacha/org-agenda-skip-scheduled) (org-agenda-overriding-header "Unscheduled TODO entries: "))))) 我可以用调出该列表C-c a u,但我只想将其绑定到一个键上。目前,我有一个简单的方法: (global-set-key (kbd "<f8>") 'org-todo-list) 但是我想使用上面的自定义命令。我已经仔细阅读了手册,但看不到如何做。
15 org-mode  keymap 

3
Emacs中最长的已知键序列是什么?
Qt支持Emacs样式的键绑定,但是最多只支持四个键。为了说明为什么应该增加此限制,显示具有更多键的Emacs样式的键绑定示例很有用。是否有任何已知的示例,或者甚至可以以编程方式找到Emacs键映射中定义的长键序列? 编辑:我以为这是常识,但是一个键序列是由读取的一组键read-key-sequence。尝试F1 k寻找您的候选者,看看它是描述您的命令还是命令之前的无关命令。

2
如何找出键序列真正的作用
我不时观察到编辑文本时的意外行为。我的第一个方法通常是C-h k用来查找给定键序列正在调用的功能。但是,有时文档与观察到的行为不一致。在这些情况下,我通常假定其他软件包已挂接到该函数或键序列中,并且正在修改其行为。 我如何找出 哪些 功能挂接到我的按键序列中? 我最近遇到的一个示例是,我按下了"键,并且在活动区域​​的开始和结尾处都插入了引号。我怀疑这不是Emacs的默认行为,因此我过去常常C-h k "查明实际上是在调用什么函数。 该describe-key文件告诉我,该函数self-insert-command被调用,这是一个内置的功能。长话短说,经过反复试验,我能够确定该行为是由引起的electric-pair-mode。将来,有没有比一次关闭一个可疑包裹直到找到罪魁祸首的结论更快的方法呢?
14 keymap  hooks 

2
特定于缓冲区的键绑定
是否可以设置特定于缓冲区的键绑定? 我的一个组织文件中包含以下内容: # Local Variables: # eval: (local-set-key (kbd "<f10>") 'some-custom-defun-specific-to-this-buffer) # End: 但是此绑定对于其他组织模式文件也同样有效。如果我使用其他主要模式打开文件,则会启动默认键绑定。 看来local-set-key是设置特定于主模式的绑定而不是特定于缓冲区的绑定。 如何使绑定仅在特定缓冲区中激活?

7
邪恶:以vim方式映射键盘绑定?
我试图使Evil函数evil-jump-to-tag,C-]行为像Emacs绑定M-.。 正常行为适合浏览标签文件,但我希望它也适用于Slime slime-edit-definition,Elisps elisp-slime-nav-find-elisp-thing-at-point,Clojures cider-jump-to-var等。 这些主要模式以及更多其他模式已经将等效的跳转绑定绑定到了键绑定上M-.。 为了在Evil模式下获得相同的行为,我是否需要为每种模式本地绑定一个键绑定,或者是否可以进行一个键绑定并告诉Emacs,每当按下此键时,请使用对该键绑定的功能在Emacs模式下?
13 keymap  evil 

1
邪恶正常状态图与邪恶运动状态图之间的差异
文档evil-normal-state-map: 正常状态的键盘映射。 文档evil-motion-state-map: 运动状态的按键图。 Vim是否具有所谓的“运动模式”?在Vim中,执行:help Normal-mode可以为您提供有关Vim模式的文档,而:help Motion-mode告诉我E149: Sorry, no help for Motion-mode。 另外,在以邪恶状态映射键时,应该使用哪个语句? (define-key evil-normal-state-map (kbd <key>) <command>) (define-key evil-motion-state-map (kbd <key>) <command>) 如果相关,我正在使用Spacemace。

2
org-mode sans箭头键
组织模式键盘映射默认为将箭头键用于公共功能。是否有人理智地重新映射了他们的组织模式设置,以完全避免使用箭头键? 请分享。
12 org-mode  keymap 

1
如何将C- [真正绑定(这次是真正的绑定)
有什么方法可以绑定C-[到某个东西,而不会M-弄乱所有(元)绑定吗? 这不是第一次出现这个问题。不幸的是,上一个线程中提供的唯一解决方案是a)特定于Linux,b)需要与Emacs无关的外部工具(同样是特定于Linux)。同样,我本可以在OS X上使用诸如Karabiner之类的东西C-[在Emacs 掌握之前盗取序列,但这既笨重又昂贵。 鉴于这是Emacs的是坚持翻译C-[来ESC,C-i来TAB,可能别人我非常想打破这些关系,并获得宝贵的键序列回来。最近,我全力以赴地解决了这个问题,并指责了安静无辜的smartparens模式。 这里涉及到一个可能的解决方案,function-key-map并key-translation-map在这里进行了讨论,但可惜它要么不再起作用,要么首先就不起作用(或者我做错了什么)。我认为这是朝正确的方向发展。

2
在同一缓冲区中使用两个主模式映射
我遇到了一些情况,其中非常需要将一种主要模式的键盘映射用作另一种主要模式的后备键盘映射。例如: 我在一些组织文档中写了很多LaTeX,因此latex-mode在编辑时轻松使用命令 会很棒org-mode。 我经常去Markc支持的irc会议室,因此将markdown-modekeybinds添加到中也很不错erc-mode。 在这两种情况下,此额外的键盘映射都应作为后备(这就是为什么我不能仅使用次要模式的原因)。我不希望乳胶命令覆盖任何org-mode键。我想要的是: 如果键是在latex-mode-mapAND中定义的,并且未在中定义,请 org-mode-map使用latex-mode-mapbinding。 问:如何将键盘映射设置为主要模式的后备键盘映射? 或 问:如何在不覆盖任何内容的情况下将键从一个主模式映射复制到另一个主模式映射? 只是要清楚。我知道我可以一一定义这些键,但是拥有一个自动化的解决方案将更加方便。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.