【问题标题】:How do I get the length of a file being opened in emacs init file?如何获取在 emacs 初始化文件中打开的文件的长度?
【发布时间】:2014-08-29 15:35:16
【问题描述】:

基本上,我有一个which-function-mode 在大文件上崩溃。是否可以只在文件少于1000行时才设置?

【问题讨论】:

  • 您是在问如何在打开缓冲区时有条件地设置它,还是在问是否可以在向缓冲区添加/减去时动态打开/关闭它?
  • 其实,没关系:which-function-mode 的文档字符串说它只能在全局范围内启用/禁用。
  • 我想你可能想看看find-file-noselect——你可以在显示缓冲区之前进行测试。这是一个复杂的示例,其中自定义函数对文件名/缓冲区名执行某些测试,然后决定在哪个窗口/框架中显示它(如果需要,创建框架):stackoverflow.com/a/18371427/2112489
  • 不过,困难在于which-function-mode 不是缓冲区本地的,而是全局的——您可以进行测试,但是当您打开那个大文件时,将对所有缓冲区全局禁用它.
  • @Dan 很好,但我如何实际获取文件的长度?

标签: emacs emacs24


【解决方案1】:

编辑:我刚刚注意到我忘记了您想要的内容已经由 which-function-mode 提供。只需自定义which-func-maxout

您可以尝试以下方法:

(add-hook 'find-file-hook
          (lambda ()
            (if (> (buffer-size) 100000) ;; More than 100K characters.
                (set (make-local-variable 'which-func-mode) nil))))

which-function-mode 是一种全局次要模式,但每个缓冲区都可以通过设置which-func-mode 单独启用/禁用它。遗憾的是,我认为上面的方法会失败,因为 which-function-mode 不希望其他代码设置 which-func-mode 所以它自己的 find-file-hook 会覆盖你的设置。

这就是说,1000 行并不大,因此没有任何借口可以让 which-function-mode 在此类文件上失败:您可能想M-x report-emacs-bug

【讨论】:

  • 整洁! Nayefc:如果出于某种原因确实限制了 1000 行,您可以 (setq which-func-maxout (* 1000 50)) 假定平均每行 50 个字符。这是默认最大值 500,000 的 10%。
  • @Stefan:它不会失败,但文件需要很长时间才能加载(大约 30 秒)。 @Dan:设置 which-func-maxout emacs 最初会在缓冲区中冻结几秒钟。我有:(which-function-mode) (setq which-func-maxout (* 1000 50)) (setq which-func-unknown "n/a") 为什么会这样?它似乎尝试加载它然后终止或什么..?
  • 除非文件真的非常大,否则 30 秒的额外扫描时间是多余的。请M-x report-emacs-bug 尽可能提供所有详细信息(对于初学者,主要模式)。另一件事:最好在激活模式之前执行setqs。
猜你喜欢
  • 2015-03-08
  • 1970-01-01
  • 2019-06-04
  • 2015-03-04
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 2012-05-27
  • 1970-01-01
相关资源
最近更新 更多