【问题标题】:egg.el is loaded but egg-minor-mode is not enabled (no "C-x v" key bindings)egg.el 已加载但 egg-minor-mode 未启用(无“C-x v”键绑定)
【发布时间】:2011-12-24 20:29:13
【问题描述】:

所有“M-x egg-”命令都可以正常工作

M-x egg-start-new-branch
   start new branch with name: xxx

但是所有的“C-x v”键绑定仍然绑定到“vc-”命令 (我希望 C-x v b 绑定到 egg-start-new-branch)

C-h k
   C-x v b runs the command vc-switch-backend, which is an interactive

除了做 (require 'egg) 之外,我还需要做其他事情吗?


附加信息

"描述变量:egg-minor-mode"

 "egg-minor-mode is a variable defined in `egg.el'. Its value is t"

"M-x describe-minor-mode" -> egg-minor-mode

 "no such minor mode"

【问题讨论】:

    标签: git emacs


    【解决方案1】:

    有点晚了,但我遇到了同样的问题。 您在评论中提到您正在使用 git 1.7。问题是,egg 需要 1.6 版才能工作,它实际上会检查您使用的是该版本at line 5939。可以看到,当字符串不匹配时,when 表单的主体不会被执行;但这正是设置键盘映射的地方!

    因此,如果您想冒险,可以将 1.6. 替换为 1.1.7.(但是当您将 git 升级到 1.8 时,您必须记住更改它)和 egg-mode将加载罚款,键盘映射和所有。不过,使用风险自负;我不知道 1.7 版本引入了哪些变化,egg 可能会做一些意想不到的事情。

    【讨论】:

    • 太棒了;确实,在将 1.6 替换为 1.7 之后,键绑定起作用了,并且可能还打开了一罐蠕虫 :) 谢谢!
    • 有人应该报告错误;如果 git 版本错误,它不应该只是死掉并留下僵尸模式。
    【解决方案2】:

    你可以为鸡蛋做M-x customize-group 并检查egg-mode-key-prefix 的值吗?这必须设置为"C-x v" 才能正常工作;如果您在任何地方更改它(可能在您的 .emacs 中?),键绑定将无法正常工作。

    【讨论】:

    • C-h w egg-start-new-branch 是否告诉您不同的绑定?
    • @philis: 我得到“egg-start-new-branch is not on any key”
    • @tikhon: C-h v (Describe variable) egg-mode-key-prefix 返回 'Its value is "C-x v"'
    • @jd:变量egg-mode-key-prefix 具有该值或任何值这一事实并不能说明您是否处于使用该变量的模式。当您尝试使用C-x v 时,您是否在egg-minor-mode 中?
    【解决方案3】:

    我不熟悉egg。也许您必须处于某种模式(例如egg-minor-mode)才能使您期望的键绑定处于活动状态?

    如果您觉得/知道您处于正确的模式并且该模式的键绑定似乎不包括您所期望的,您可以通过执行以下操作仔细查看:Load library help-fns+.el, and use C-h M-k 查看您感兴趣的每个键映射的绑定。另请参阅HelpPlus

    另一个想法当然是看一下egg源代码,看看发生了什么。 Emacs 调试器是你的朋友:M-x debug-on-entry SOME-FUNCTION

    IOW,除非这里的其他人可以为您提供一些具体的鸡蛋知识帮助(抱歉;我没有),否则您最好的选择是翻找一下以了解发生了什么。

    (稍后)实际上,我现在看到您在主题行中提到了模式,您自己。所以试试这个,加载文件然后打开次要模式:

    (require 'egg)
    (egg-minor-mode 1)
    

    【讨论】:

    • Drew:(第 1 部分)我尝试了以下方法。确保 (require 'egg) 和 (egg-minor-mode 1) 在我的 .emacs 中。同时加载 help-fns+。重新启动 emacs 并打开一个受 git 控制的 python 文件。做了一个“描述变量:egg-minor-mode”并返回“egg-minor-mode 是在 `egg.el' 中定义的变量。它的值是 t”。到目前为止,一切看起来都很好。但是请注意,如果我执行“C-h m”来列出文件的模式,它会显示 python 模式和几个次要模式;然而 egg-minor-mode 不是其中之一。
    • Drew: (part-2): 另外,如果我执行“M-x describe-minor-mode”并键入,例如,auto-complete-mode 它会描述它;但是如果我尝试 egg-minor-mode,我会得到“没有这样的次要模式”。那么,似乎变量 egg-minor-mode 为“true”,但模式并没有真正启用?使用 help-fns+,如果我执行“M-x describe-keymap egg-minor-mode-map”,所有预期的键映射都会列出,但那些是未启用的,我猜是因为 egg-minor-mode 没有启动-in.
    • 在这种情况下,听起来(egg-minor-mode 1) 不是打开模式的方式,这意味着它不遵循正常的约定。您将需要查看定义模式的源文件。但首先尝试M-x egg-minor-mode,手动打开它。如果在您这样做之后一切正常,请执行C-h f egg-minor-mode 并单击指向其定义的链接。检查其文档字符串并查看代码,以确定如何使用 Lisp 将其打开。 (是的,你不能总是通过变量的值来判断模式是开还是关。)
    • 另外,如果egg-minor-mode 不是全局次要模式,那么您需要在同一个缓冲区中使用它作为您打开它的位置。如果在初始化文件中打开它,则需要确保在所需的缓冲区中打开它。 (with-current-buffer (get-buffer-create "foo") (egg-minor-mode 1)).
    • 快速浏览代码后我的印象是,您只需要在要启用该模式的缓冲区(例如文件)中执行 M-x egg-minor-mode。尝试一下。此外,显然您需要 GIT 版本 1.6(否则它什么也不做),然后只需 C-x C-f 应该使用 egg-minor-mode。见egg-minor-mode-find-file-hook定义后的代码。
    【解决方案4】:

    我以前没有使用过 egg-mode,但为了调试我尝试了这个。我通过查看 git 存储库安装了 egg.el。

    git clone git://github.com/byplayer/egg.git
    

    之后我启动了emacs,发出了M-x load-file,并给出了路径t/egg/egg.el,它加载成功。之后,我在该文件夹C-x C-f 中打开了一个文件,然后是t/egg/egg.el。文件加载后,Emacs 立即自动进入 Major Mode Emacs-Lisp 和 minor-mode egg。而C-x v 直接在状态栏中显示我:Egg:file:。所以一切似乎开箱即用。

    当你打开一个文件来自动测试egg-minor-mode时,你确定你打开的是一个用git签入的文件,你的文件夹/路径中有一个.git文件夹吗?

    除非对您的 .emacs 和设置有更多了解,否则我无法进一步调试,但我无法重现您的错误。

    【讨论】:

    • Mattias:这是我从 github 克隆的一个 python 项目。所有 git 命令都在命令 shell 中运行,当我打开一个 python 文件时,在 emacs 缓冲区的状态栏中,我会看到当前的 Git 分支/信息。启动 emacs 时我没有收到任何错误(没有错误消息要求启动 w/--debug-info),并且所有 egg- 命令都可以通过 M-x egg-... 正常工作(因此,我的 . emacs 文件似乎正在工作?)。只是键绑定不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    相关资源
    最近更新 更多