;; 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"
;; 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"))
)))
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"))
(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)
["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]
(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))
)
(when (null result)
- (pop-to-buffer (current-buffer))
(error "gpr_query did not return other item; refresh?"))
(message "parsing result ... done")
(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")
(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.
(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
)
(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)
(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))
)