gpt4 book ai didi

emacs - 在 Emacs 迷你缓冲区中执行命令的简洁方法

转载 作者:行者123 更新时间:2023-12-01 06:59:35 24 4
gpt4 key购买 nike

考虑以下示例:我想使用迷你缓冲区中的 ido 读取一个文件,但合并我经常使用的所有目录。我不能只执行

(ido-find-file)
(ido-merge-work-directories)

因为第二个sexp只有在用户选择完文件后才会执行。接下来的问题是:在迷你缓冲区的命令循环中执行命令的最佳/最干净的方法是什么?

我知道的唯一方法是将我想要的命令绑定(bind)到一个键序列,并将该序列添加到 unread-command-events,这样一旦我们进入迷你缓冲区命令循环,键就会运行:

(setq unread-command-events (append (listify-key-sequence (kbd "M-s")) unread-command-events)) ; std key-binding for ido-merge-work-directories
(ido-find-file)

但这很hacky,我想知道是否有更好的解决方案。

谢谢!

编辑:澄清一下,这个问题与 ido 无关。让我解释。当您调用诸如查找文件、切换到缓冲区或任何需要迷你缓冲区交互的功能时,将创建“递归编辑”——即命令循环内的命令循环。

所以,代码:

(message "A")
(recursive-edit)
(message "B")

打印 A,然后暂停函数的执行并重新进入命令循环。您可以四处移动、打开文件等,直到您离开递归编辑,然后打印“B”。

那么,让我重新表述一下我的问题:如果您创建递归编辑,那么您如何在创建的新命令循环中执行命令(在同一函数中)?如果我必须输入额外的键,这不算数。对于 ido 示例,要合并目录,ido 必须正在运行:在调用 ido 之前执行合并目录不在 ido 的命令循环内。如果您之后执行它,则 ido 会破坏其命令循环。

最佳答案

所以我认为您的问题有三个答案:

  • 您可以在迷你缓冲区映射中绑定(bind)键,就像其他键一样。有several keymaps可能相关。

  • ido 有许多 Hook 可用于更改各种函数的行为,特别是 ido-make-*-hook 变量似乎相关。 (如果您从未使用过它,M-x describe-variable,又名 \C-h v,是您的 friend 。)

  • 如果您想要普遍更改函数的行为并且没有可用的 Hook ,您应该考虑 defadvice。就您而言,我认为您可以使用(未​​经测试!):

    (defadvice ido-find-file (before)
    (ido-merge-work-directories))
    (ad-activate ido-find-file)

    您可以将这些行添加到您的 .emacs:

    (when (require 'ido)
    (defadvice ido-find-file (before)
    (ido-merge-work-directories))
    (ad-activate ido-find-file))

关于emacs - 在 Emacs 迷你缓冲区中执行命令的简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11380918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com