我是abbrev-mode
的忠实粉丝,我想要一些类似的东西:你开始输入,一旦你输入一些标点符号(或只是一个空格就足够了)它会调用一个函数< em>(如果我在特殊缩写后键入空格,当然,就像缩写模式一样)。
我绝对不希望每次击中太空都执行某些功能......
因此,不是使用abbrev-mode
扩展缩写,而是运行我选择的函数。
当然它需要与abbrev-mode
兼容,我一直在使用它。
我怎样才能得到这种行为?
答案 0 :(得分:3)
编辑: 您修改后的问题会添加一些我的答案未解决的关键细节。菲尔斯提供了一种解决这个问题的方法。另一种方法是使用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)
您可能希望在自定义模式映射中执行此操作,以便在切换模式时可以恢复正常行为。除了自我插入之外,在全球范围内设置空间是没有用的。
答案 1 :(得分:3)
一种方法可能是使用pre-abbrev-expand-hook
。我自己不使用缩写模式,但它听起来好像你可以用这种方式重复使用缩写模式机制,并简单地定义一些扩展到自己(或什么都没有?)的“缩写”,然后你抓住它们在那个钩子里,采取你想做的任何行动。
expand
库显然是相关的,提供expand-expand-hook
,这可能是另一种选择?
编辑:哎呀;自{23.1}起,pre-abbrev-expand-hook
已过时
abbrev-expand-functions
是要使用的正确变量:
围绕`expand-abbrev'的包装钩。 使用一个参数调用此特殊挂钩上的函数: 执行缩写扩展的函数。它应该回来 如果扩张发生的缩写符号。
有关代码,请参阅M-x find-function RET expand-abbrev RET
,您还需要阅读C-h f with-wrapper-hook RET
以了解如何使用此挂钩。
答案 2 :(得分:2)
每个缩写都由几个元素组成。主要元素包括名称(例如&#34; fbf&#34;),扩展(您喜欢的任何字符串)和钩子(被调用的函数)。在您的情况下,听起来您希望扩展为空字符串,只需将foo-bar-for-the-win
指定为挂钩。