File: pg-dev.el

package info (click to toggle)
proofgeneral 4.5-3
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 5,172 kB
  • sloc: lisp: 33,783; makefile: 388; sh: 118; perl: 109
file content (181 lines) | stat: -rw-r--r-- 5,363 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
;;; pg-dev.el --- Developer settings for Proof General

;; This file is part of Proof General.

;; Portions © Copyright 1994-2012  David Aspinall and University of Edinburgh
;; Portions © Copyright 2003-2021  Free Software Foundation, Inc.
;; Portions © Copyright 2001-2017  Pierre Courtieu
;; Portions © Copyright 2010, 2016  Erik Martin-Dorel
;; Portions © Copyright 2011-2013, 2016-2017  Hendrik Tews
;; Portions © Copyright 2015-2017  Clément Pit-Claudel

;; Author:      David Aspinall <David.Aspinall@ed.ac.uk> and others

;; SPDX-License-Identifier: GPL-3.0-or-later

;;; Commentary:
;;
;; Some configuration of Emacs Lisp mode for developing PG, not needed
;; for ordinary users.
;;

;;; Code:

(require 'whitespace)

(eval-when-compile
  (require 'proof-site))

(with-no-warnings
  (setq proof-general-debug t))

;; Use checkdoc, eldoc, Flyspell, whitespace, copyright update
;; and byte compilation on save:

(add-hook 'emacs-lisp-mode-hook
	  (lambda ()
            (checkdoc-minor-mode 1)
            (eldoc-mode 1)
            (flyspell-prog-mode)
            (customize-set-variable 'whitespace-action '(cleanup))
            (define-key emacs-lisp-mode-map [(control c)(control c)]
              'emacs-lisp-byte-compile)
            (add-hook 'write-file-functions
                      'whitespace-write-file-hook nil t)
            (add-hook 'before-save-hook
                      'copyright-update nil t)))

;; Fill in template for new files

(add-hook 'find-file-hook 'auto-insert)

;; Configure indentation for our macros

(put 'proof-if-setting-configured 'lisp-indent-function 1)
(put 'proof-eval-when-ready-for-assistant 'lisp-indent-function 1)
(put 'proof-define-assistant-command 'lisp-indent-function 'defun)
(put 'proof-define-assistant-command-witharg 'lisp-indent-function 'defun)
(put 'defpgcustom 'lisp-indent-function 'defun)
(put 'proof-map-buffers 'lisp-indent-function 'defun)
(put 'proof-with-current-buffer-if-exists 'lisp-indent-function 'defun)

(defconst pg-dev-lisp-font-lock-keywords
  (list
    (concat "(\\(def" ;; also proof-def
	   ;; Function like things:
	   ;; Variable like things
	   "\\(pgcustom\\|pacustom\\)\\)"
    ;; Any whitespace and declared object.
    "[ \t'\(]*"
    "\\(\\sw+\\)?")
   '(1 font-lock-keyword-face)
   '(3 (cond ((match-beginning 2) 'font-lock-variable-name-face)
	     (t 'font-lock-function-name-face))
       nil t)))

;; Not working, see font-lock.el for usual emacs lisp settings.
;;(add-hook 'emacs-lisp-mode-hook
;;	  (lambda ()
;;	    (font-lock-add-keywords nil
;;				    'pg-dev-lisp-font-lock-keywords)))


;;
;; Path set for a clean environment to byte-compile within Emacs
;; without loading.
;;

(defun pg-loadpath ()
  (interactive)
  (proof-add-to-load-path "../generic/")
  (proof-add-to-load-path "../lib/"))


;;;
;;; Unload utility (not wholly successful)
;;;

(defun unload-pg ()
  "Attempt to unload Proof General (for development use only)."
  (interactive)
  (mapcar
   (lambda (feat) (condition-case nil
		    (unload-feature feat 'force)
		    (error nil)))
   '(proof-splash pg-assoc pg-xml proof-depends proof-indent proof-site
     proof-shell proof-menu pg-pbrpm pg-pgip proof-script
     proof-autoloads pg-response pg-goals proof-toolbar
     proof-easy-config proof-config proof
     proof-utils proof-syntax pg-user pg-custom
     proof-maths-menu proof-unicode-tokens
     pg-thymodes pg-autotest
     ;;
     coq-abbrev coq-db coq-unicode-tokens coq-local-vars coq coq-syntax
     coq-indent coq-autotest)))



;;
;; Proling interesting packages
;;

(require 'elp)

;;;###autoload
(defun profile-pg ()
  "Configure Proof General for profiling.  Use \\[elp-results] to see results."
  (interactive)
  (elp-instrument-package "proof-")
  (elp-instrument-package "pg-")
  (elp-instrument-package "scomint")
  (elp-instrument-package "unicode-tokens")
  (elp-instrument-package "coq")
  (elp-instrument-package "span")
  (elp-instrument-package "replace-") ; for replace-regexp etc
  (elp-instrument-package "re-search-") ; for re-search-forwad etc
  (elp-instrument-package "skip-chars-") ; for skip chars etc
  (elp-instrument-list
   '(string-match match-string re-search-forward re-search-backward
     skip-chars-forward skip-chars-backward
     goto-char insert
     set-marker marker-position
     nreverse nconc mapc
     member
     redisplay
     sit-for
     overlay-put overlay-start overlay-end make-overlay
     buffer-live-p kill-buffer
     process-status get-buffer-process
     delete-overlay move-overlay
     accept-process-output))
  (elp-instrument-package "font-lock"))

;; improve readability of profile results, give milliseconds
(defun elp-pack-number (number width)
  (format (concat "%" (number-to-string (- width 3)) ".2f")
	  (* 100 (string-to-number number))))


;;
;; Make references to bugs clickable; [e.g., trac #1]
;;

(defun pg-bug-references ()
  (interactive)
  (if (fboundp 'bug-reference-mode)
      (with-no-warnings
	(bug-reference-mode 1)
	(setq bug-reference-bug-regexp
	      "\\(?:[Tt]rac ?#\\)\\([0-9]+\\)"
	      bug-reference-url-format
	      "http://proofgeneral.inf.ed.ac.uk/trac/ticket/%s"))))

(add-hook 'emacs-lisp-mode-hook 'pg-bug-references)
(add-hook 'coq-mode-hook 'pg-bug-references)

(add-hook 'emacs-lisp-mode-hook 'goto-address-mode)


(provide 'pg-dev)

;;; pg-dev.el ends here