Przyspiesz TeX-insert-macro on \ input

10

W latex-modeprzypadku używam TeX-insert-macrowpisać \input{...} makro, AUCTeX dogodnie oferuje dokończenie nazw plików, co jest dobre. Wydaje się jednak, że szuka wielu miejsc, aby skompilować listę ukończeń, ponieważ emacs zawiesza się przez prawie minutę na moim biednym małym laptopie.

Czy istnieje sposób na TeX-insert-macrozaoferowanie głupiego uzupełniania nazw plików?
Przez „głupi” rozumiem ten, który dostajesz, gdy dzwonisz find-file. Przez większość czasu plik, który chcę wprowadzić, znajduje się tylko o jeden katalog dalej, więc byłoby to więcej niż w porządku.

Jeśli nie jest to możliwe, czy istnieje inny sposób na przyspieszenie?
Zauważyłem, że kiedy wstawiam \includemakro, lista nazw plików jest znacznie krótsza, więc może istnieje sposób na wykorzystanie tej listy również do \input makra.

Malabarba
źródło
Istnieje również cdlatex-insert-filenamepakiet cdlatex. Uważam, że jest to pomocne przy wstawianiu plików graficznych do środowiska postaci.
Vamsi

Odpowiedzi:

6

Masz kilka rozwiązań:

Po pierwsze, nie jest to zmienna dostosowywania tego zachowania: TeX-arg-input-file-search.

Jeśli TeX-arg-input-filepowinien szukać plików. Jeśli wartość wynosi t, pliki w ścieżce wyszukiwania TeX są wyszukiwane i udostępniane do uzupełnienia. Nazwa pliku jest następnie wstawiana bez katalogu i rozszerzenia. Jeśli wartość wynosi zero, nazwę pliku można określić ręcznie i wstawić ze ścieżką względem katalogu bieżącego bufora oraz z rozszerzeniem. Jeśli wartość wynosi ask, zostaniesz zapytany o metodę, która ma być używana przy każdym TeX-arg-input-filewywołaniu.

Ten dokument nie jest wystarczająco jasny, ale nilwydaje się, że spełnia swoje zadanie.

(setq TeX-arg-input-file-search nil)

Zmienna ta wpływa na wszystkie funkcje, które wywołują TeX-arg-input-file, w tym input, includei usepackage. W przypadku tego drugiego zachowanie może być nieoczekiwane.

Następnie jest bardziej hackerskie rozwiązanie, które powinno działać dla wszystkich funkcji: TeX-arg-input-filezawiera localflagę dla tego zachowania (ta flaga jest na przykład ustawiona na tfor include).

Najwyraźniej możesz zastąpić dowolne inne ustawienie, po prostu dodając kolejny wpis dla polecenia, więc:

(add-hook 'LaTeX-mode-hook 
  (lambda nil 
     (TeX-add-symbols '("input" (TeX-arg-input-file "File" t)))))

Ostatnim rozwiązaniem, jeśli masz długotrwałe sesje emacsa, jest po prostu odpuścić. Wygląda na to, że faza „przeszukiwania plików” buforuje swoje wyniki, dlatego należy ją wywoływać tylko raz na sesję.

T. Verron
źródło
Niesamowite! Spodziewałem się trochę włamania, chyba nie doceniłem auctex.
Malabarba
1
Hmpf, wygląda na to, że hack rzeczywiście był właściwą drogą, zobacz moją edycję. Jeśli hacky rozwiązanie lepiej odpowiada Twoim potrzebom, powiedz mi, bym mógł zmienić kolejność odpowiedzi.
T. Verron,
1
Masz rację, ponieważ pakiet użytkowy byłby niepożądany. Dziękuję za aktualizację. Rzeczywiście buforuje wyniki, ale opóźnienie ~ 1 min wystarcza, aby niepokoić mnie, nawet jeśli jest to tylko jeden raz na bufor.
Malabarba
1
Zmieniłem treść. Ponownie patrząc na kod, myliłem się TeX-global-input-files(zmienna zawierająca wynik wyszukiwania) nie jest lokalnie buforowana, więc wyszukiwanie powinno odbywać się tylko raz na sesję emacs . Być może byłoby to bardziej interesujące, gdyby mogło się to zdarzyć asynchronicznie, jednak zamrożenie ~ 1 minuty jest rzeczywiście zbyt długie.
T. Verron,