我非常abbrev-mode
喜欢并且我想要一些类似的东西:你开始输入,一旦你输入一些标点符号(或者只是一个空格就足够了)它会调用一个函数(如果我在一个特殊的缩写之后输入空格, 当然, 就像 abbrev-mode 一样) .
我绝对不想每次点击空格时都执行某些功能......
因此,它不会使用 扩展缩写abbrev-mode
,而是运行我选择的功能。
当然它需要与abbrev-mode
我一直使用的兼容。
我怎样才能得到这种行为?
我非常abbrev-mode
喜欢并且我想要一些类似的东西:你开始输入,一旦你输入一些标点符号(或者只是一个空格就足够了)它会调用一个函数(如果我在一个特殊的缩写之后输入空格, 当然, 就像 abbrev-mode 一样) .
我绝对不想每次点击空格时都执行某些功能......
因此,它不会使用 扩展缩写abbrev-mode
,而是运行我选择的功能。
当然它需要与abbrev-mode
我一直使用的兼容。
我怎样才能得到这种行为?
编辑:您修改后的问题添加了一些我的回答没有解决的关键细节。phils 提供了一种解决此问题的方法。另一种是使用yasnippet。您可以在代码段模板中包含任意 lisp 代码,因此您可以执行以下操作:
# -*- mode: snippet -*-
# name: foobars
# key: fbf
# binding: direct-keybinding
# --
`(foo-bar-for-the-win)`
您需要确保您的函数没有返回任何内容,否则它将被插入缓冲区。我不使用缩写模式,所以我不知道这是否会引入冲突。yas/snippet 需要进行一些试验才能使其运行,但是一旦设置好它就非常方便。
原始答案:您可以将空间绑定到您喜欢的任何功能。您可以将所有标点键绑定到相同的功能或不同的功能。
(define-key your-mode-map " " 'your-choice-function)
您可能希望在自定义模式映射中执行此操作,以便在切换模式时恢复正常行为。将空间设置为除自插入之外的任何东西都是无益的。
一种方法是使用pre-abbrev-expand-hook
. 我自己不使用缩写模式,但听起来好像您可以通过这种方式重新使用缩写模式机制,并简单地定义一些扩展为自己(或什么都没有?)的“缩写”,然后你抓住它们在那个钩子里,采取你想做的任何行动。
该expand
库显然是相关的,并且提供了expand-expand-hook
,这可能是另一种选择?
编辑:哎呀;pre-abbrev-expand-hook
自 23.1 起已过时
abbrev-expand-functions
是要使用的正确变量:
`expand-abbrev' 周围的包装钩。这个特殊钩子上的函数用一个参数调用:一个执行缩写扩展的函数。如果发生扩展,它应该返回缩写符号。
查看M-x find-function RET expand-abbrev RET
代码,您还需要阅读C-h f with-wrapper-hook RET
以了解如何使用此挂钩。
每个缩写都由几个元素组成。主要元素包括名称(例如“fbf”)、扩展名(您喜欢的任何字符串)和钩子(被调用的函数)。在您的情况下,听起来您希望扩展为空字符串,只需将您的指定foo-bar-for-the-win
为钩子。