自动禁用特定主要模式的全局次要模式

2023-11-23

我已全局激活居中光标模式,如下所示:

(require 'centered-cursor-mode)
(global-centered-cursor-mode 1)

它工作正常,但有一些主要模式我想自动禁用它。例如 slime-repl 和 shell。

还有另一个问题处理同样的问题,但有另一种次要模式。不幸的是,答案仅提供了此特定次要模式(全局智能选项卡模式)的解决方法,它不适用于居中光标模式。

我尝试了这个钩子,但没有效果。变量不会改变。

(eval-after-load "slime"
  (progn
    (add-hook 'slime-repl-mode-hook (lambda ()
                                      (set (make-local-variable 'centered-cursor-mode) nil)))
    (slime-setup '(slime-repl slime-autodoc))))

Global minor modes created with the define-globalized-minor-mode1 macro are a bit tricky. The reason your code doesn't appear to do anything is that globalized modes utilise after-change-major-mode-hook to activate the buffer-local minor mode that they control; and that hook runs immediately after the major mode's own hooks4.

各个模式可能会实现指定某种黑名单的自定义方法或防止在某些情况下启用该模式的其他方法,因此一般来说值得查看相关的M-x customize-group包的选项来查看此类设施是否存在。然而,对于任何全球化的次要模式来说,目前我还没有一个很好的、干净的通用方法来实现这一目标。

遗憾的是MODE-enable-in-buffers该宏定义的函数不执行相同的操作(with-current-buffer buf (if ,global-mode ...))检查哪个是由全局模式函数执行的。如果是的话,你could只需使用 slime-repl-mode-hook 将全局模式变量设置为 buffer-local 和 nil。

A quick hack is to check2 what the turn-on argument is for the globalized minor mode definition (in this instance it's centered-cursor-mode itself3), and write some around advice to stop that from being evaluated for the modes in question.

(defadvice centered-cursor-mode (around my-centered-cursor-mode-turn-on-maybe)
  (unless (memq major-mode
                (list 'slime-repl-mode 'shell-mode))
    ad-do-it))
(ad-activate 'centered-cursor-mode)

我们的一些东西cando(具有简单的可重用模式)是在启用缓冲区本地次要模式后立即再次禁用它。一个after-change-major-mode-hook添加的功能APPEND论证add-hook将在全球化次要模式起作用后可靠地运行,因此我们可以执行以下操作:

(add-hook 'term-mode-hook 'my-inhibit-global-linum-mode)

(defun my-inhibit-global-linum-mode ()
  "Counter-act `global-linum-mode'."
  (add-hook 'after-change-major-mode-hook
            (lambda () (linum-mode 0))
            :append :local))

1 or its alias define-global-minor-mode which I feel should be avoided, due to the potential for confusion with "global" minor modes created with define-minor-mode. "Globalized" minor modes, while still involving a global minor mode, work very differently in practice, so it is better to refer to them as "globalized" rather than "global".

2 C-hf define-globalized-minor-mode RET shows that turn-on is the third argument, and we check that in the mode definition with M-x find-function RET global-centered-cursor-mode RET.

3 with this approach, that fact is going to prevent you from ever enabling this minor mode with slime-repl-mode or shell-mode buffers, whereas a globalized minor mode with a separate turn-on function could still be invoked in its non-global form if you so desired.

4 https://stackoverflow.com/a/19295380/324105

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动禁用特定主要模式的全局次要模式 的相关文章

  • 如何让 Emacs 在保存文件时创建中间目录?

    有没有办法在 emacs 中创建文件夹树 类似于 mkdir p in bash 基本上 我希望 emacs 创建所有中间模具 如果它们不存在 当我保存文件时 功能make directory这样做 您的具体问题可能会这样解决 add ho
  • 如何告诉 emacs 以 C++ 模式打开 .h 文件?

    我应该向 emacs 在 Windows 上 文件中添加哪些行 以使其以 C 模式打开 h 文件 默认为C模式 尝试这个 add to list auto mode alist h c mode 每当您打开 h 文件时 都会使用 C 模式
  • 在 Emacs 中移动到搜索查找的开始和结束位置

    接受搜索时如何将点置于搜索字符串的开头或结尾 所以说你执行 C s foobar 当我按 RET 时 我希望将光标置于找到的字符串的末尾 如果按 C RET 则将光标置于开头 Thanks 尝试这个 defun my isearch exi
  • 如何在保存之前对 Emacs 中更改的行执行操作?

    我想添加一个 before save hook 我可以在其中仅对自上次保存以来更改的行执行一些操作 例如 删除尾随空格 检查缩进等 我不想对整个文件执行此操作 并且我知道每个选项都有单独的选项 只是为了删除所有更改行的尾随空格 等等 但我想
  • 更改组织模式新一天开始的时间

    我使用组织模式来计时我的工作 有时我会工作几个小时到午夜 例如 我记录的时间从 2013 年 6 月 3 日晚上 10 点开始 到 2013 年 6 月 4 日凌晨 2 点结束 组织模式在凌晨 0 点进行划分 开始新的一天 但如果将 0am
  • Emacs Windows 拼写检查 - aspell 或 hunspell

    我在Windows XP操作系统上使用emacs 23 1 50版本 我无法使用 emacs wiki 提供的示例将 hunspell 或 aspell 设置为 emacs 的一部分 任何人都有 Windows XP 的工作配置 请帮助我
  • 有没有办法使用 emacs 安装 R 包?

    我正在使用 ESS 但每次需要安装新软件包时 我都必须使用 R gui 有没有办法在不离开 emacs 的情况下做到这一点 From help Startup Example of Rprofile site local add MASS
  • 如何从 ispell 私人词典中删除条目?

    我想知道如何从 ispell 私人词典中删除一个 错误插入的 条目 单词 EDIT 经过更多挖掘后 我仍然无法从默认字典中删除条目 但我认为解决方案可能是构建哈希程序 问题是生成要删除的条目列表 我找不到简单的示例 您应该能够编辑您的个人词
  • Emacs:如何拉动最后拉动的文本,无论后续杀戮如何?

    我经常发现自己在完成一些杀戮后反复猛拉一些东西 它变成了一个像这样的过程 C y C y M y C y M y M y C y M y M y M y 每次我删除一些文本时 它都会将第一个删除推回到删除环中 以便我需要循环遍历所有删除以返
  • emacs24 语义补全

    我正在尝试使用 emacs 24 及其附带的 cedet 版本来完成语义 补全适用于我在自己的源文件中定义的类 但补全不适用于标准库或 STL 内容这是我的 emacs 配置 require cedet require semantic r
  • 如果文件有自动保存数据,emacs-daemon 启动会冻结

    我设置了桌面 el这样 emacs 在启动时会自动重新打开上次我杀死 emacs 时保持打开状态的所有文件 现在 当我将 emacs 作为守护进程启动并且重新打开的文件之一具有自动保存数据时 守护进程会显示通常的自动保存数据消息 file
  • 如何更改 emacs 上的光标颜色

    我对 Emacs 的颜色做了一些更改 现在唯一的问题是光标在黑色背景上为黑色 我必须更改它 我该怎么办 如果您运行的是最新版本的 emacs 您可以使用 Set cursor color to white set cursor color
  • 如何启动 VBS 的交互式控制台?

    与这个问题非常相似 如何启动 Perl 的交互式控制台 https stackoverflow com questions 73667 how can i start an interactive console for perl 我只是希
  • Pymacs 助手在 30 秒后未启动

    我见过其他关于此的问题 但没有一个得到真正的回答 而且没有一个是我的问题 我有一个新系统 emacs 23 1 Centos 6 2 我认为 我下载了最新的 pymacs 并安装了它 但是 我得到 error Pymacs helper d
  • 如何在 Emacs Lisp 中“URL 解码”字符串?

    我有一个像 foo 20bar 这样的字符串 我想要其中的 foo bar 我知道 Emacs Lisp 中必须有一个内置函数来解码 URL 编码的字符串 查询字符串 但我今天找不到它 无论是在我的文档中还是在我的文档中都找不到它 lisp
  • Emacs 强制组织模式捕获缓冲区在新窗口中打开

    如何强制组织模式的捕获缓冲区在新窗口中打开 我试过 setq special display regexps Capture 但它不起作用 我立即看到一个新窗口 然后 org mode 进行两个垂直分割 我使用 3 个垂直分割 并将捕获缓冲
  • Emacs/Swank/Paredit for Clojure 的温和教程

    我要转向 Emacs 来工作Clojure http en wikipedia org wiki Clojure Lisp 为了能够执行以下操作 我需要在 Emacs 上设置哪些信息 自动匹配 生成相应的右括号 自动缩进 Lisp Cloj
  • 设置 Emacs 进行 Erlang 编程

    Emacs 是 Erlang 编程的首选 IDE 有很多好的模式 distel erlware mode 默认的 erlang 模式 但是您对设置 Emacs 进行专业 Erlang 开发有何建议 按照中所述设置 erlang mode自述
  • 配置jedi不自动完成?

    我在 emacs 中安装了 jedi mode 来进行 python 编辑 因为我发现C and C 对于跳转到定义并返回非常有用 然而 自动完成并不是我想要的 当我尝试在安装了 jedi 的情况下使用 emacs 时 它会不断尝试提供建议
  • emacs 临时文件的 .gitignore 正则表达式

    我正在尝试 gitignore emacs 临时 自动保存文件 我在用着 在我的 gitignore 中 But git add A在子文件夹中运行仍然给我 new file make collections py new file nor

随机推荐

  • iOS 8 CoreBluetooth 已弃用 RSSI 方法

    所以从阅读CBPeripheralDelegate文档 看来RSSI and peripheralDidUpdateRSSI error iOS 8 中已弃用 Xcode 警告 iOS 8 0 中已弃用 rssi 我注意到我的信号强度指示器
  • 测量 Cortex m7 上的时钟周期数

    我一直在测量 Cortex m4 上的时钟周期计数 现在想在 Cortex m7 上进行测量 我使用的板子是STM32F746ZG 对于 m4 一切都适用 volatile unsigned int DWT CYCCNT volatile
  • R光栅包将图像分割成多个

    我有一个如下图 它是2579 2388像素 假设它的左下角位于 0 0 我想从该图像创建多个图像 如下所示并将它们保存在工作文件夹中 每个图像的大小为 100 100 像素 每个图像将通过其左下角坐标保存 第一张图像的左下角位于 0 0 右
  • 将通用列表转换为 CSV 字符串

    我有一个整数值列表 List 并且想生成一串逗号分隔值 即列表中的所有项目输出到单个逗号分隔列表 我的想法 1 将列表传递给方法 2 使用stringbuilder迭代列表并追加逗号 3 测试最后一个字符 如果是逗号 则将其删除 你怎么看
  • 在 dataclass(slots=True) 子类中调用 super() 时出现类型错误

    我试图从数据类调用超类方法slots True在 Python 3 10 5 中 from dataclasses import dataclass dataclass slots True class Base def hi self p
  • TK框架双重实现问题

    我正在测试使用 Tkinter 模块创建 GUI 我试图使用 PIL 将图像添加到 GUI 我的代码如下所示 import Tkinter as tk from PIL import Image ImageTk root tk Tk roo
  • 未找到活动数据。使用谷歌分析 v4

    我收到此错误 I GAV4 7915 Thread GAThread 5 main 未找到活动数据 有人知道我出了什么问题吗 我正在使用 Android API 级别 20 谷歌分析 v4 安卓设备4 2 2 Constants TRACK
  • 对 HTML 实体进行编码但忽略 HTML 标签 - 在 PHP 中

    我有一个可能看起来像这样的字符串 str p Me Mrs Jones br live in strong style color FFF Espa a strong p htmlentities str ENT COMPAT UTF 8
  • 在node.js中使用formidable和express时如何更改上传路径

    实际上我遇到了两个问题 一 如何更改上传路径 我的文件夹结构是这样的 app js upload 我的节点代码位于 app js 中并从中启动 所以我想将上传图片上传到上传文件夹 我更改路径 var form new formidable
  • iOS 11 禁用密码自动填充附件视图选项?

    截至目前 我想选择退出 iOS 11 提供的新选项 即在应用程序中建议密码 当我在 iOS 11 上运行该应用程序时 我在键盘顶部看到自动填充选项 但我的用户名和密码文本字段甚至不显示 所以 我的问题是 如何一起禁用新密码自动填充功能 以便
  • WPF 中的 DialogResult 与FolderBrowserDialog

    我第一次在 WPF 中实现FolderBrowserDialog 但我一点也不喜欢它 除了我发现我的项目中没有引用 Windows Forms 的问题之外 现在我在尝试查看 DialogResult 返回值是什么时遇到了麻烦 对于 Open
  • MSBuild如何找到Delphi搜索路径?

    如果我启动 RAD Studio 命令提示符并运行 msbuild t Rebuild 在项目目录中 msbuild 将显示调用 dcc32 的完整命令行 包括所有路径设置 MSBuild 使用哪种魔法来根据 IDE 设置 存储在注册表中
  • 多次加密(MD5)可以提高安全性吗?

    我看到有人用 MD5 对用户密码进行多次加密以提高安全性 我不确定这是否有效 但看起来不太好 那么 这有意义吗 我们假设您使用的哈希函数是一个完美的单向函数 然后你可以像查看它的输出一样查看它的输出 随机神谕 其输出值在有限的值范围内 MD
  • Titanium appcelerator 是否值得在 ipad、iphone 和 android 上开发基于相机的应用程序? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我想构建一个手机 平板电脑应用程序 其核心功能是用相机拍照 查看图片和接收通知 我还想针对 iphone ipad 和 android 平台 Titanium appcelerator 因
  • 如何使用 boto3 在 2 个不同帐户的 S3 存储桶之间复制文件

    我正在尝试使用 boto3 将文件从供应商 S3 存储桶传输到我的 S3 存储桶 我正在使用 sts 服务来承担访问供应商 s3 存储桶的角色 我能够连接到供应商存储桶并获取存储桶的列表 我遇到CopyObject operation Ac
  • form.reset() 是如何工作的?

    我知道form reset 会将所有表单字段重置为其默认值 但这是如何工作的呢 是浏览器的DOM实现吗 即浏览器知道上次回发 获取中从服务器发送的最后一个值是什么以及何时reset 称为浏览器重置这些值 DOM 规范tells us它 执行
  • 如何将 Magento 库存设置更改为网站范围而不是全局范围?

    我们有一个多商店设置 magento 跨多个域运行 其中一些网站是批发 B2B 网站 一些是零售 B2C 网站 我们对每个零售和批发网站有不同的价格 这在 magento 配置中很容易做到 我们这样做是因为我们强制批发客户使用购物车中允许的
  • “cout<<(char*)NULL”在这里执行“close(1)”吗? [复制]

    这个问题在这里已经有答案了 在下面的代码中我使用了cout lt lt char NULL 在这一行之后 我的程序没有在输出屏幕上打印任何内容 这是否意味着我已经做到了close 1 with cout这里 这里到底发生了什么 这是一个错误
  • 数据表更改界面语言

    我目前正在使用角度数据表 如何查看其他语言的表格界面 我的意思是西班牙语中的 显示条目 搜索 显示 20 个条目中的 1 到 10 个 文字 您需要定义这样的语言结构 丹麦实现 我在我的角度数据表应用程序中使用的 var language
  • 自动禁用特定主要模式的全局次要模式

    我已全局激活居中光标模式 如下所示 require centered cursor mode global centered cursor mode 1 它工作正常 但有一些主要模式我想自动禁用它 例如 slime repl 和 shell