aboutsummaryrefslogtreecommitdiff
path: root/coq
diff options
context:
space:
mode:
authorPierre Courtieu2013-07-11 16:01:16 +0000
committerPierre Courtieu2013-07-11 16:01:16 +0000
commita21fea06fb43db947427df6e91f32207aa64d596 (patch)
tree6c1a18061068e9b84bae63fd6bd24a9edcb0bc11 /coq
parent5cd9adb60e8b6e5fd1ce87adcf263c3a8b358cdc (diff)
Fixing a big bug in coq project file management.
file and directory name were not adapted to where the current file is inside the directory structure. Now the absolute names are build.
Diffstat (limited to 'coq')
-rw-r--r--coq/coq.el20
1 files changed, 13 insertions, 7 deletions
diff --git a/coq/coq.el b/coq/coq.el
index 05894183..ac5be3b9 100644
--- a/coq/coq.el
+++ b/coq/coq.el
@@ -1053,29 +1053,34 @@ alreadyopen is t if buffer already existed."
;; No "." no "-" in coq modufe file names
;; TODO: look exactly at what characters are allowed.
(defconst coq-load-path--R-regexp
- "\\_<-R\\s-+\\_<\\(?1:\\(?:\\w\\|_\\|\\.\\)+\\)\\s-+\\_<\\(?2:\\(?:\\w\\|_\\|\\.\\)+\\)")
+ "\\_<-R\\s-+\\(?1:\\(?:\\w\\|_\\|\\.\\)+\\)\\s-+\\(?2:\\(?:\\w\\|_\\|\\.\\)+\\)")
(defconst coq-load-path--I-regexp
- "\\_<-I\\s-+\\_<\\(?1:\\(?:\\w\\|_\\|\\.\\)+\\)")
+ "\\_<-I\\s-+\\(?1:\\(?:\\w\\|_\\|\\.\\)+\\)")
;; match-string 1 must contain the string to add to coqtop command line, so we
;; ignore -arg, we use numbered subregexpr.
(defconst coq-prog-args-regexp
"\\_<\\(?1:-opt\\|-byte\\)\\|-arg\\(?:[[:blank:]]+\\(?1:[^ \t\n#]+\\)\\)?")
-(defun coq-read-option-from-project-file (projectbuffer regexp)
+(defun coq-read-option-from-project-file (projectbuffer regexp &optional dirprefix)
"look for occurrences of regexp in buffer projectbuffer and collect subexps.
The returned sub-regexp are the one numbered 1 and 2 (other ones
should be unnumbered). If there is only subexp 1 then it is added
as is to the final list, if there are 1 and 2 then a list
-contining both is added to the final list."
+contining both is added to the final list. If optional DIRPREFIX
+is non nil, then options ar considered as directory or file names
+and will be made absolute from directory named DIRPREFIX. This
+allows to call coqtop from a subdirectory of the project."
(let ((opt nil))
(when projectbuffer
(with-current-buffer projectbuffer
(goto-char (point-min))
(while (re-search-forward regexp nil t)
- (let ((first (match-string 1))
- (second (match-string 2)))
+ (let* ((firstfname (match-string 1))
+ (second (match-string 2))
+ (first (if (null dirprefix) firstfname
+ (expand-file-name firstfname dirprefix))))
(if second
(setq opt (cons (list first second) opt))
(setq opt (cons first opt))))))
@@ -1088,7 +1093,8 @@ contining both is added to the final list."
(cons "."
(coq-read-option-from-project-file
projectbuffer
- (concat coq-load-path--R-regexp "\\|" coq-load-path--I-regexp))))
+ (concat coq-load-path--R-regexp "\\|" coq-load-path--I-regexp)
+ (file-name-directory (buffer-file-name projectbuffer)))))
;; Look for other options (like -opt, -arg foo etc) in the project buffer
;; adds the -emacs option too