]> git.eshelyaron.com Git - emacs.git/commitdiff
ffap.el: handle "/usr/include/c++/<version>" directories.
authorRüdiger Sonderfeld <ruediger@c-plusplus.de>
Sat, 19 Oct 2013 02:35:20 +0000 (19:35 -0700)
committerGlenn Morris <rgm@gnu.org>
Sat, 19 Oct 2013 02:35:20 +0000 (19:35 -0700)
Ref: http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00387.html

* lisp/ffap.el (ffap-alist): Use ffap-c++-mode for c++-mode.
(ffap-c++-path): New variable.
(ffap-c++-mode): New function.

lisp/ChangeLog
lisp/ffap.el

index 65060df83ae142658f8bf2e26d8750b2b053da76..6a8946a6228be90060d1d0fc4f9cfb5dcca894c3 100644 (file)
@@ -1,3 +1,10 @@
+2013-10-19  Rüdiger Sonderfeld  <ruediger@c-plusplus.de>
+
+       * ffap.el: Handle "/usr/include/c++/<version>" directories.
+       (ffap-alist): Use ffap-c++-mode for c++-mode.
+       (ffap-c++-path): New variable.
+       (ffap-c++-mode): New function.
+
 2013-10-19  Joe Vornehm Jr.  <joe.vornehm@gmail.com>  (tiny change)
 
        * ido.el (dired-other-frame): Only list directories.  (Bug#15638)
index 737de8b59911274da1b08035e4d18c7bb946249c..62bcb304710d02870e4c76ef10d0a220fecbd1bd 100644 (file)
@@ -769,7 +769,7 @@ This uses `ffap-file-exists-string', which may try adding suffixes from
     ;; (lisp-interaction-mode . ffap-el-mode) ; maybe
     (finder-mode . ffap-el-mode)       ; type {C-h p} and try it
     (help-mode . ffap-el-mode)         ; maybe useful
-    (c++-mode . ffap-c-mode)           ; search ffap-c-path
+    (c++-mode . ffap-c++-mode)         ; search ffap-c++-path
     (cc-mode . ffap-c-mode)            ; same
     ("\\.\\([chCH]\\|cc\\|hh\\)\\'" . ffap-c-mode) ; stdio.h
     (fortran-mode . ffap-fortran-mode) ; FORTRAN requested by MDB
@@ -866,6 +866,28 @@ URL, or nil.  If nil, search the alist for further matches.")
 (defun ffap-c-mode (name)
   (ffap-locate-file name t ffap-c-path))
 
+(defvar ffap-c++-path
+  (let ((c++-include-dir (with-temp-buffer
+                           (when (eq 0 (ignore-errors
+                                         (call-process "g++" nil t nil "-v")))
+                             (goto-char (point-min))
+                             (if (re-search-forward "--with-gxx-include-dir=\
+\\([^[:space:]]+\\)"
+                                                      nil 'noerror)
+                                 (match-string 1)
+                               (when (re-search-forward "gcc version \
+\\([[:digit:]]+.[[:digit:]]+.[[:digit:]]+\\)"
+                                                   nil 'noerror)
+                                 (expand-file-name (match-string 1)
+                                                   "/usr/include/c++/")))))))
+    (if c++-include-dir
+        (cons c++-include-dir ffap-c-path)
+      ffap-c-path))
+  "List of directories to search for include files.")
+
+(defun ffap-c++-mode (name)
+  (ffap-locate-file name t ffap-c++-path))
+
 (defvar ffap-fortran-path '("../include" "/usr/include"))
 
 (defun ffap-fortran-mode (name)