GNU bug report logs - #21194
2015-06-01; add support for ffap via kpsewhich

Previous Next

Package: auctex;

Reported by: Nicolas Richard <youngfrog <at> members.fsf.org>

Date: Wed, 5 Aug 2015 17:36:01 UTC

Severity: normal

Done: Nicolas Richard <youngfrog <at> members.fsf.org>

Bug is archived. No further changes may be made.

Full log


Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Nicolas Richard <youngfrog <at> members.fsf.org>
To: bug-auctex <at> gnu.org
Subject: 2015-06-01; add support for ffap via kpsewhich
Date: Wed, 05 Aug 2015 19:34:56 +0200
Hi all,

I'm using the following customizations, which I thought I'd share with
you. As the subject says it, it uses kpsewhich for guessing a filename
at point. It allows to use M-x ffap with point on "geometry" to find
geometry.sty, or with point on "memoir" to find memoir.cls.

It is very quick because it calls kpsewhich only once.

I'm not making this into an actual patch because while it works
fine on my system, it's not ready for inclusion yet. I'm open to
your ideas to make it better and eventually include it.

;; a first step is :
;; don't allow braces as possible characters in a filename (otherwise
;; \input{foo} is seen as a possible filename, instead of just foo)
;; (this is because of a recent change in emacs, see commit
;; ba6c32b6decaa2a72a3d5f854efd513e8e82c118 for detail)

(push '(latex-mode "--:\\\\$+<>@-Z_[:alpha:]~*?" "<@" "@>;.,!:")
      ffap-string-at-point-mode-alist)

;; second step is to extend rules for finding file at point, and use kpsewhich

(defun yf/ffap-latex-mode (name)
  "ffap function in latex buffers"
  (if (file-exists-p name)
      name
    (let ((curbuf (current-buffer)))
      (with-temp-buffer 
        (let ((suffixes '(".sty" ".cls" ".ltx" ".tex" "" ".ldf"))
              (prefixes '("" "beamertheme"
                          "beamercolortheme"
                          "beamerfonttheme"
                          "beamerinnertheme"
                          "beameroutertheme"))
              args)
          (setq args (apply #'append (mapcar
                                      (lambda (suffix)
                                        (mapcar
                                         (lambda (prefix)
                                           (concat prefix name suffix))
                                         prefixes))
                                      suffixes)))
          (let ((process-environment (buffer-local-value 'process-environment curbuf))
                (exec-path (buffer-local-value 'exec-path curbuf)))
            (apply #'call-process "kpsewhich"  nil  t  nil args))
          (when (< (point-min) (point-max))
            (buffer-substring (goto-char (point-min)) (point-at-eol))))))))

;; use the above
(advice-add 'ffap-latex-mode :override 'yf/ffap-latex-mode)

Comments welcome!

Nicolas.




This bug report was last modified 9 years and 291 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.