2012-06-29 12 views
5

Po uruchomieniu polecenia -c-etags-select ze stosunkowo dużym plikiem TAGS, zawsze pojawia się komunikat o błędzie: Przepełnienie stosu w module wyrażeń regularnych wewnątrz mini bufora w Emacs. W buforze *Messages* pojawia się komunikat dziennika następująco:Jak zmienić rozmiar stosu dostępny dla Emacsa?

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

Wydaje się, że Emacs nie ma wystarczającej ilości żetonów, aby przeczytać cały dane znaczników. Czy istnieje sposób na zwiększenie rozmiaru stosu Emacs?

Próbowałem to z 2 wersjach Emacs:

  • Emacs dla Mac OS X 24.1 (Universal Binary)
  • Emacs Dla systemu Mac OS X 23.4 (Universal Binary)

ale obaj pokazywali ten sam komunikat o błędzie.

Z góry dziękuję!

+0

Możesz sprawdzić, czy zastąpienie słowa 'Wszystko' słowem [' Helm'] (https://github.com/emacs-helm/helm#readme) rozwiązuje problem, ponieważ jest on aktywnie rozwijany. – phils

+0

Dziękujemy! Próbowałem 'Helm', ale nadal istnieje ten sam problem. – mahata

+0

W takim przypadku możesz przesłać im raport o błędzie; być może mogą to naprawić w następnym wydaniu. – phils

Odpowiedz

1

Możliwie proste obejścia dla Ciebie:

Jeszcze lepiej: [\ 0- \ 377 [: nonascii:]] * unika „przepełnienie stosu w regexp dopasowującego” w przypadku dużych tekstów, np.> 34k.

... i/lub ...

Moje tagi tabele znajdują się w różnych miejscach, w zależności od kodu jestem pracuje. Zauważyłem, że łatwo jest mieć zmienną środowiskową $ DEVELOP wskazującą na katalog, w którym pracuję, który ma TAGI dla Emacs i znaczniki dla vi.

+0

Dziękujemy! Te 2 linki są pomocne! – mahata

0

I potwierdził, że jeśli argument 2 dla string-match funkcji jest zbyt duża, funkcja nie obsługiwać argument. I dodaje ograniczenie dla funkcji w następujący sposób:

$ 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))) 

Myślę, że to rodzaj szybkiego i brudne siekać, ale to działa dobrze teraz.

+0

Dodałem [wydanie] (https://github.com/emacs-helm/helm/issues/77) na ster.Przełącz się na to i prześlij PR. –

+0

Dziękujemy za dodanie problemu! – mahata