如何获取在emacs init file中打开的文件的长度?

如何获取在emacs init file中打开的文件的长度?,emacs,emacs24,Emacs,Emacs24,基本上,我有一个功能模式,在大文件上崩溃。只有当文件少于1000行时才可以设置它吗?编辑:我刚刚注意到我忘记了您想要的功能模式已经提供了。只需自定义哪个函数maxout 您可以尝试以下方法: (add-hook 'find-file-hook (lambda () (if (> (buffer-size) 100000) ;; More than 100K characters. (set (make-local-

基本上,我有一个
功能模式,在大文件上崩溃。只有当文件少于1000行时才可以设置它吗?

编辑:我刚刚注意到我忘记了您想要的功能模式已经提供了。只需自定义哪个函数maxout

您可以尝试以下方法:

(add-hook 'find-file-hook
          (lambda ()
            (if (> (buffer-size) 100000) ;; More than 100K characters.
                (set (make-local-variable 'which-func-mode) nil))))
哪个功能模式
是全局次要模式,但是每个缓冲区可以通过设置
哪个功能模式
来单独启用/禁用它。遗憾的是,我认为上述操作将失败,因为哪个函数模式不希望其他代码设置
哪个函数模式
,因此它自己的
查找文件挂钩
将覆盖您的设置


这就是说,1000行并不大,因此没有理由解释哪种函数模式在这些文件上失败:您可能想
M-x报告emacs bug

您是在询问如何在打开缓冲区时有条件地设置它,还是在向缓冲区添加/从缓冲区中减去时可以动态地打开/关闭它?实际上,nevermind:which function mode的docstring表示只能全局启用/禁用它。我想您可能需要查看
查找文件noselect
——您可以在显示缓冲区之前进行测试。下面是一个复杂的示例,其中自定义函数对文件名/缓冲区名执行某些测试,然后决定在哪个窗口/帧中显示它(必要时创建帧):但困难在于
哪个函数模式
不是缓冲区本地模式,而是全局模式--您可以进行测试,但是当你打开那个大文件时,会对所有缓冲区全局禁用它。@Dan这很好,但是我如何才能得到文件的长度呢?很好!Nayefc:如果出于某种原因1000行确实是限制,那么您可以
(setq which func maxout(*1000 50))
,它假定平均每行50个字符。这是默认最大值500000的10%。@Stefan:这不会失败,但加载文件需要很长时间(大约30秒)@丹:设置哪个func maxout emacs最初在缓冲区中冻结几秒钟。我有:
(哪个函数模式)(setq哪个函数maxout(*1000 50))(setq哪个函数未知“n/a”)
为什么?它似乎试图加载它,然后终止或其他什么..?除非文件真的非常大,否则30秒的额外扫描时间是多余的。请
M-x报告emacs bug
尽可能提供所有详细信息(对于初学者,主要模式)。另一件事:最好在激活模式之前执行
setq
s。