如何更改Emacs可用的堆栈大小?

时间:2012-06-29 21:32:44

标签: emacs elisp

当我使用相对较大的TAGS文件运行 anything-c-etags-select 命令时,我总是在迷你缓冲区内得到错误消息,如 regexp matcher中的堆栈溢出在Emacs上。在*Messages*缓冲区中,出现如下日志消息:

File TAGS is large (9MB), really open? (y or n) 
Loading tag file...70%
and: Stack overflow in regexp matcher

似乎Emacs没有足够的堆栈大小来读取整个标记数据。有没有办法增加Emacs的堆栈大小?

我尝试使用2个版本的Emacs:

  • 适用于Mac OS X 24.1(通用二进制)的Emacs
  • 适用于Mac OS X 23.4的Emacs(通用二进制文件)

但是,他们都显示了相同的错误信息。

提前致谢!

2 个答案:

答案 0 :(得分:1)

可能很容易为您解决方法:

        

更好的是:[\ 0- \ 377 [:nonascii:]] *避免“regexp中的堆栈溢出   匹配器“用于大文本,例如,> 34K。

......和/或......

        

我的代码表位于不同的位置,具体取决于我的代码   与...合作。我发现很容易产生环境变量   $ DEVELOP指向我正在使用的目录,其中包含TAGS   vi的电子邮件和标签。

答案 1 :(得分:0)

我确认如果 string-match 函数的第二个参数太大,则该函数无法处理该参数。我添加了对函数的限制,如下所示:

$ git diff
diff --git a/lisp/anything/anything-config.el b/lisp/anything/anything-config.el
index 23f00e5..cee5e13 100644
--- a/lisp/anything/anything-config.el
+++ b/lisp/anything/anything-config.el
@@ -7001,7 +7001,7 @@ If not found in CURRENT-DIR search in upper directory."
                        (anything-aif (string-match "\177" i)
                            (substring i 0 it)
                          i))
-           do (cond ((and elm (string-match "^\\(.+\\),[0-9]+" elm))
+           do (cond ((and elm (< (length elm) 2000) (string-match "^\\(.+\\),[0-9]+" elm))
                      (setq fname (match-string 1 elm)))
                     (elm (setq cand (concat fname ": " elm)))
                     (t (setq cand nil)))

我认为这是一种快速而又肮脏的黑客行为,但现在它的工作正常。