]> code.delx.au - gnu-emacs-elpa/blobdiff - packages/ada-mode/gpr-query.el
remove bogus execute priv
[gnu-emacs-elpa] / packages / ada-mode / gpr-query.el
old mode 100755 (executable)
new mode 100644 (file)
index 36cbd33..71761c3
@@ -31,6 +31,7 @@
 ;; M-x gpr-query
 
 (require 'ada-mode) ;; for ada-prj-*, some other things
+(require 'gnat-core)
 (require 'cl-lib)
 (require 'compile)
 
   (with-current-buffer (gpr-query--session-buffer session)
     (let ((process-environment (ada-prj-get 'proc_env)) ;; for GPR_PROJECT_PATH
 
-         ;; WORKAROUND: gnatcoll-1.6 can't handle aggregate projects; M910-032
-         ;; gpr_query can handle some aggregate projects, but not all
-         (project-file (file-name-nondirectory
-                        (or (ada-prj-get 'gpr_query_file)
-                            (ada-prj-get 'gpr_file)))))
+         (project-file (file-name-nondirectory (ada-prj-get 'gpr_file))))
       (erase-buffer); delete any previous messages, prompt
       (setf (gpr-query--session-process session)
+           ;; gnatcoll-1.6 can't handle aggregate projects; M910-032
+           ;; gpr_query can handle some aggregate projects, but not all
            ;; FIXME: need good error message on bad project file:
-           ;;          "can't handle aggregate projects? - set gpr_query_file")
+           ;;          "can't handle aggregate projects?")
            (start-process (concat "gpr_query " (buffer-name))
                           (gpr-query--session-buffer session)
                           "gpr_query"
@@ -80,7 +79,6 @@
       ;; check for warnings about invalid directories etc
       (goto-char (point-min))
       (when (search-forward "warning:" nil t)
-       (pop-to-buffer (current-buffer))
        (error "gpr_query warnings"))
       )))
 
 
 (defun gpr-query-session-wait (session)
   "Wait for the current command to complete."
+  (unless (process-live-p (gpr-query--session-process session))
+    (gpr-query-show-buffer session)
+    (error "gpr-query process died"))
+
   (with-current-buffer (gpr-query--session-buffer session)
     (let ((process (gpr-query--session-process session))
          (search-start (point-min))
        (setq wait-count (1+ wait-count)))
       (if (process-live-p process)
          (message (concat "running gpr_query ... done"))
-       (pop-to-buffer (current-buffer))
+       (gpr-query-show-buffer session)
        (error "gpr_query process died"))
       )))
 
@@ -148,8 +150,10 @@ If WAIT is non-nil, wait for command to complete.
 Return buffer that holds output."
   (gpr-require-prj)
   (let ((session (gpr-query-cached-session)))
+    ;; always wait for previous command to complete; also checks for
+    ;; dead process.
+    (gpr-query-session-wait session)
     (with-current-buffer (gpr-query--session-buffer session)
-      ;; FIXME: Check prev command complete (might not have waited); look for prompt at EOB
       (erase-buffer)
       (process-send-string (gpr-query--session-process session)
                           (concat cmd "\n"))
@@ -171,6 +175,11 @@ Return buffer that holds output."
     (message "Killed %d sessions" count)
     ))
 
+(defun gpr-query-show-buffer (&optional session)
+  "For `ada-show-xref-tool-buffer'; show gpr-query buffer for current project."
+  (interactive)
+  (pop-to-buffer (gpr-query--session-buffer (or session (gpr-query-cached-session)))))
+
 ;;;;; utils
 
 (defun gpr-query-get-src-dirs (src-dirs)
@@ -363,6 +372,7 @@ buffer in another window."
     ["Find and select project ..."   ada-build-prompt-select-prj-file t]
     ["Select project ..."            ada-prj-select                   t]
     ["Show current project"          ada-prj-show                     t]
+    ["Show gpr-query buffer"         gpr-query-show-buffer            t]
     ["Next compilation error"        next-error                       t]
     ["Show secondary error"          ada-show-secondary-error         t]
     ["Goto declaration/body"         gpr-query-goto-declaration       t]
@@ -435,7 +445,8 @@ Enable mode if ARG is positive"
        (cond
         ((looking-at gpr-query-ident-file-type-regexp)
          ;; process line
-         (let* ((found-file (match-string 1))
+         ;; 'expand-file-name' converts Windows directory separators to normal Emacs
+         (let* ((found-file (expand-file-name (match-string 1)))
                 (found-line (string-to-number (match-string 2)))
                 (found-col  (string-to-number (match-string 3)))
                 (found-type (match-string 4))
@@ -490,7 +501,6 @@ Enable mode if ARG is positive"
        )
 
       (when (null result)
-       (pop-to-buffer (current-buffer))
        (error "gpr_query did not return other item; refresh?"))
 
       (message "parsing result ... done")
@@ -529,7 +539,6 @@ Enable mode if ARG is positive"
               (string-to-number (match-string 3)))))
 
       (when (null result)
-       (pop-to-buffer (current-buffer))
        (error "gpr_query did not return a result; refresh?"))
 
       (message "parsing result ... done")
@@ -541,6 +550,7 @@ Enable mode if ARG is positive"
   (setq ada-make-package-body       'ada-gnat-make-package-body)
 
   (add-hook 'ada-syntax-propertize-hook 'gnatprep-syntax-propertize)
+  (add-hook 'ada-syntax-propertize-hook 'ada-gnat-syntax-propertize)
 
   ;; must be after indentation engine setup, because that resets the
   ;; indent function list.
@@ -553,6 +563,7 @@ Enable mode if ARG is positive"
   (setq ada-xref-all-function        'gpr-query-all)
   (setq ada-xref-overriding-function 'gpr-query-overriding)
   (setq ada-xref-overridden-function 'gpr-query-overridden-1)
+  (setq ada-show-xref-tool-buffer    'gpr-query-show-buffer)
 
   (add-to-list 'completion-ignored-extensions ".ali") ;; gnat library files, used for cross reference
   )
@@ -563,6 +574,7 @@ Enable mode if ARG is positive"
   (setq ada-make-package-body       nil)
 
   (setq ada-syntax-propertize-hook (delq 'gnatprep-syntax-propertize ada-syntax-propertize-hook))
+  (setq ada-syntax-propertize-hook (delq 'ada-gnat-syntax-propertize ada-syntax-propertize-hook))
   (setq ada-mode-hook (delq 'ada-gpr-query-setup ada-mode-hook))
 
   (setq ada-xref-other-function      nil)
@@ -570,6 +582,7 @@ Enable mode if ARG is positive"
   (setq ada-xref-all-function        nil)
   (setq ada-xref-overriding-function nil)
   (setq ada-xref-overridden-function nil)
+  (setq ada-show-xref-tool-buffer    nil)
 
   (setq completion-ignored-extensions (delete ".ali" completion-ignored-extensions))
   )