From 7deed4bf2aab3b92f3b3d1d46fd6717b245c72d1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=BCdiger=20Sonderfeld?= Date: Fri, 18 Oct 2013 19:35:20 -0700 Subject: [PATCH] ffap.el: handle "/usr/include/c++/" directories. 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 | 7 +++++++ lisp/ffap.el | 24 +++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 65060df83ae..6a8946a6228 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2013-10-19 Rüdiger Sonderfeld + + * ffap.el: Handle "/usr/include/c++/" 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. (tiny change) * ido.el (dired-other-frame): Only list directories. (Bug#15638) diff --git a/lisp/ffap.el b/lisp/ffap.el index 737de8b5991..62bcb304710 100644 --- a/lisp/ffap.el +++ b/lisp/ffap.el @@ -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) -- 2.39.2