i-search - 如何确定焦点是否仍在迷你缓冲区中?

时间:2013-10-20 02:01:25

标签: emacs elisp

我每天使用i-search前进/后退一百万次,但我仍然没有想出如何确定焦点是否仍在迷你缓冲区中。

我相信我的困惑源于搜索失败,然后尝试修改搜索参数,那就是文档被错误修改,因为焦点已经离开了迷你缓冲区 - 但是,我被欺骗了以为迷你缓冲区仍处于活动状态,因为我的搜索字词仍然显示 - 例如,

  • Failing wrapped I-search backward: abcdefg

  • Failing overwrapped I-search: abcedfg

  • Wrapped I-search: abcedfg

  • Overwrapped I-search backward: abcefg

  • Failing wrapped I-search: abcedfg

关于如何调整/修改i-search前进/后退的任何想法,以防止这种情况发生?

当isearch处于活动状态时,文档模式行可能会变为非活动状态,并且只要isearch函数完成,模式行就可以更新为活动状态。也许还有一条信息 - “功能已经退出。”

我正在考虑的是,当我正在搜索时,我正在考虑将我的文档设为只读,但当然这样会有点过分。

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:2)

事情是,除非你使用M-e编辑搜索字符串,否则在isearch期间,不是在迷你缓冲区中;它在你的文件中。我肯定是一个欣赏大量背景提示的人,但我从来没有发现isearch指示是不够的(Isearch在模式中,I-search:低于它,突出显示活动搜索结果,突出显示其他搜索结果)。

当您使用RET退出isearch时,状态行会显示“标记保存在搜索开始的位置”。除非您将search-edit-option设置为非默认值,否则除了特定于isearch的命令或输入之外的任何内容都将退出搜索。

如果您确实需要更多关于isearch正在进行的指示,可以使用isearch-mode-hookisearch-mode-end-hook。例如,要更改模式行颜色:

(add-hook 'isearch-mode-hook
          (lambda ()
            (set (make-local-variable 'isearch-mode-line-face-remap-cookie)
                 (face-remap-add-relative
                  'mode-line '((:foreground "ivory" :background "red") mode-line)))))

(add-hook 'isearch-mode-end-hook
          (lambda ()
            (face-remap-remove-relative isearch-mode-line-face-remap-cookie)))

或者,如果仍然没有足够高的可见度,您可以更改缓冲区文本的背景颜色:

(add-hook 'isearch-mode-hook
          (lambda ()
            (set (make-local-variable 'isearch-default-face-remap-cookie)
                 (face-remap-add-relative
                  'default '((:background "yellow") default)))))

(add-hook 'isearch-mode-end-hook
          (lambda ()
            (face-remap-remove-relative isearch-default-face-remap-cookie)))

顺便说一下,如果您还没有尝试过,请在C-h m时按isearch;有很多绑定可以让你自定义搜索,我在Emacs使用的第一个〜15年内没有意识到这一点。

答案 1 :(得分:2)

@NicholasRiley澄清了事情。要添加一点,以防它有用:

  • Isearch+(库`isearch+.el)使用模式行和Isearch提示来显示有关搜索状态的更多信息:

    • 区分大小写的模式行轻微模式:ISEARCH表示不区分大小写; Isearch,区分大小写。

    • 搜索结束时,打火机会突出显示。

    • 突出显示提示的部分内容,以指示搜索类型:正则表达式,单词,多缓冲区以及搜索是否已包围缓冲区。

  • 使用库oneonone.el,独立迷你缓冲框架的背景在Isearch期间具有不同的颜色。即使你不想要一个独立的迷你缓冲区,一般的想法可能会有所帮助。它使用这些钩子:

(add-hook 'isearch-mode-hook     '1on1-color-isearch-minibuffer-frame)
(add-hook 'isearch-mode-end-hook '1on1-color-minibuffer-frame-on-exit)
(add-hook 'minibuffer-setup-hook '1on1-color-minibuffer-frame-on-setup)
(add-hook 'minibuffer-exit-hook  '1on1-color-minibuffer-frame-on-exit)