source: ThirdParty/mpqc_open/lib/elisp/SC.el@ 7516f6

Action_Thermostats Adding_MD_integration_tests Adding_StructOpt_integration_tests AutomationFragmentation_failures Candidate_v1.6.1 ChemicalSpaceEvaluator Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Exclude_Hydrogens_annealWithBondGraph Fix_Verbose_Codepatterns ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion Gui_displays_atomic_force_velocity JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool PythonUI_with_named_parameters Recreated_GuiChecks StoppableMakroAction TremoloParser_IncreasedPrecision
Last change on this file since 7516f6 was 860145, checked in by Frederik Heber <heber@…>, 8 years ago

Merge commit '0b990dfaa8c6007a996d030163a25f7f5fc8a7e7' as 'ThirdParty/mpqc_open'

  • Property mode set to 100644
File size: 12.2 KB
Line 
1;;
2;; SC.el: stuff for formatting files in the SC libraries
3;;
4;; Copyright (C) 1996 Limit Point Systems, Inc.
5;;
6;; Author: Curtis Janssen <cljanss@ca.sandia.gov>
7;; Maintainer: SNL
8;;
9;; This file is part of MPQC.
10;;
11;; MPQC is free software; you can redistribute it and/or modify
12;; it under the terms of the GNU General Public License as published by
13;; the Free Software Foundation; either version 2, or (at your option)
14;; any later version.
15;;
16;; MPQC is distributed in the hope that it will be useful,
17;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19;; GNU General Public License for more details.
20;;
21;; You should have received a copy of the GNU General Public License
22;; along with the MPQC; see the file COPYING. If not, write to
23;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24;;
25;; The U.S. Government is granted a limited license as per AL 91-7.
26;;
27
28(require 'cc-mode)
29(cond ((> emacs-major-version 19) (c-initialize-cc-mode)))
30
31(setq clj-c-basic-half-offset 2)
32
33(defun clj-adaptive-block-open (langelem)
34 ;; when substatement is on semantics list, return
35 ;; -(c-basic-offset - clj-c-basic-half-offset) to give a
36 ;; total offset of clj-c-basic-half-offset,
37 ;; otherwise return clj-c-basic-half-offset
38 (if (assq 'substatement c-semantics)
39 (+ clj-c-basic-half-offset (- c-basic-offset))
40 clj-c-basic-half-offset))
41
42(defun clj-lineup-math (langelem)
43 ;; line up math statement-cont so that stuff after the "+", "-", etc
44 ;; lines up with the stuff after the equals
45 (save-excursion
46 (let ((adjustment (progn
47 (beginning-of-line)
48 (skip-chars-forward " \t" (c-point 'eol))
49 (- (current-column)
50 (progn (skip-chars-forward " \t+-/*" (c-point 'eol))
51 (current-column)))))
52 (curcol (progn
53 (goto-char (cdr langelem))
54 (current-column))))
55 (skip-chars-forward "^=" (c-point 'eol))
56 (if (/= (following-char) ?=)
57 ;; there's no equal sign on the line
58 c-basic-offset
59 ;; calculate indentation column after equals and ws and sign
60 (forward-char 1)
61 (skip-chars-forward " \t-")
62 (+ (- (current-column) curcol) adjustment))
63 )))
64
65(defun clj-adaptive-block-close (langelem)
66 ;; these closes blocks in a way that is consistent with the way
67 ;; clj-adaptive-statement-block-intro indents the first statement
68 (- (clj-adaptive-statement-block-intro langelem)
69 (- c-basic-offset clj-c-basic-half-offset))
70)
71
72(defun clj-adaptive-statement-block-intro (langelem)
73 ;; this lines up the first statement in a block by a full basic
74 ;; offset, unless we are lining up to a "{" which is already
75 ;; half indented
76 (save-excursion
77 (progn
78 (goto-char (cdr langelem))
79 (if (/= (following-char) ?{)
80 ;; next char is not a "{"
81 c-basic-offset
82 ;; use remainder of half offset
83 (- c-basic-offset clj-c-basic-half-offset))
84 )))
85
86(defun clj-condensed-adaptive-statement-block-intro (langelem)
87 ;; this lines up the first statement in a block by a full basic
88 ;; offset, unless we are lining up to a "{" which is already
89 ;; indented
90 (save-excursion
91 (progn
92 (goto-char (cdr langelem))
93 (if (/= (following-char) ?{)
94 ;; next char is not a "{"
95 c-basic-offset
96 ;; we're already indendted
97 0)
98 )))
99
100(defun clj-condensed-adaptive-block-close (langelem)
101 ;; these closes blocks in a way that is consistent with the way
102 ;; clj-condensed-adaptive-statement-block-intro indents the first statement
103 (clj-condensed-adaptive-statement-block-intro langelem)
104)
105
106;;
107;; this is the style to use when editting Ed's files
108;;
109(c-add-style "ETS" '((c-basic-offset . 2)
110 (c-offsets-alist . ((access-label . -)
111 (inclass . ++)
112 (label . 0)
113 ))
114 )
115 )
116
117;;
118;; this is the style to use when editing Curt's files
119;;
120(c-add-style "CLJ" '(
121 (c-offsets-alist . (
122 (block-open . clj-adaptive-block-open)
123 (statement . c-lineup-runin-statements)
124 (statement-cont . clj-lineup-math)
125 (statement-block-intro . clj-adaptive-statement-block-intro)
126 (defun-block-intro . 2)
127 (inher-intro . 2)
128 (access-label . -2)
129 (block-close . clj-adaptive-block-close)
130 (member-init-intro . 2)
131 )
132 ))
133)
134
135;;
136;; Curt's other style
137;;
138(c-add-style "CLJ-CONDENSED" '(
139 ;(c-echo-syntactic-information-p . t)
140 (c-basic-offset . 2)
141 (c-offsets-alist . (
142 (statement-block-intro . clj-condensed-adaptive-statement-block-intro)
143 (statement-cont . c-lineup-math)
144 (inclass . ++)
145 (access-label . -)
146 (block-close . clj-condensed-adaptive-statement-block-intro)
147 (substatement-open . +)
148 (block-open . +)
149 )
150 ))
151)
152
153(defun clj-condensed-style ()
154 "Change to condensed C indentation"
155 (interactive)
156 (c-set-style "CLJ-CONDENSED")
157 )
158(defun clj-style ()
159 "Change to insane C indentation"
160 (interactive)
161 (c-set-style "CLJ")
162 )
163(defun ets-style ()
164 "Change to sensible C indentation"
165 (interactive)
166 (c-set-style "ETS")
167 )
168
169(define-key c-mode-map "\C-ce" 'ets-style)
170(define-key c-mode-map "\C-cj" 'clj-style)
171(define-key c-mode-map "\C-cc" 'clj-condensed-style)
172(define-key c-mode-map "\C-j" 'reindent-then-newline-and-indent)
173(define-key c-mode-map "\C-m" 'newline-and-indent)
174
175(define-key c++-mode-map "\C-ce" 'ets-style)
176(define-key c++-mode-map "\C-cj" 'clj-style)
177(define-key c++-mode-map "\C-cc" 'clj-condensed-style)
178(define-key c++-mode-map "\C-j" 'reindent-then-newline-and-indent)
179(define-key c++-mode-map "\C-m" 'newline-and-indent)
180
181(define-key java-mode-map "\C-ce" 'ets-style)
182(define-key java-mode-map "\C-cj" 'clj-style)
183(define-key java-mode-map "\C-cc" 'clj-condensed-style)
184(define-key java-mode-map "\C-j" 'reindent-then-newline-and-indent)
185(define-key java-mode-map "\C-m" 'newline-and-indent)
186
187;;
188;; stuff for CLJ's compile hacks
189;;
190
191(defun compile-modify-path (thisdir)
192 (let ((tmpdir (expand-file-name thisdir)))
193 (setq thisdir "")
194 (while (>= (length tmpdir) (length sc-src-dir))
195 (if (string= (substring tmpdir 0 (length sc-src-dir)) sc-src-dir)
196 (let ()
197 (setq thisdir (concat thisdir sc-arch-dir))
198 (setq tmpdir (substring tmpdir (length sc-src-dir) nil))
199 )
200 (let ()
201 (setq thisdir (concat thisdir (substring tmpdir 0 1)))
202 (setq tmpdir (substring tmpdir 1 nil))
203 )
204 )
205 )
206 (setq thisdir (concat thisdir tmpdir))
207 )
208 thisdir
209)
210
211;;
212;; stuff for inserting copyleft notices
213;;
214
215(defvar copyleft-owner "Limit Point Systems, Inc."
216 "This is the owner of the copyleft. Defaults to LPS.")
217
218(defun set-copyleft-owner (owner)
219 "Set the copyleft-owner variable."
220 (interactive (list (read-from-minibuffer "Copyleft Owner: "
221 copyleft-owner nil nil nil)))
222 (setq copyleft-owner owner))
223
224(defvar copyleft-author user-full-name
225 "This is the author of the file. Defaults to the user editing the file.")
226
227(defun set-copyleft-author (author)
228 "Set the copyleft-author variable."
229 (interactive (list (read-from-minibuffer "Author: "
230 copyleft-author nil nil nil)))
231 (setq copyleft-author author))
232
233(defvar copyleft-address user-mail-address
234 "This is the email address of the author of the file. Defaults to the
235 address of the user editing the file.")
236
237(defun set-copyleft-address (address)
238 "Set the copyleft-address variable."
239 (interactive (list (read-from-minibuffer "E-mail address: "
240 copyleft-address nil nil nil)))
241 (setq copyleft-address address))
242
243(defvar copyleft-maintainer "LPS"
244 "This is the official maintaner of the file. Defaults to LPS")
245
246(defun set-copyleft-maintainer (maintainer)
247 "Set the copyleft-maintainer variable."
248 (interactive (list (read-from-minibuffer "Maintainer: "
249 copyleft-maintainer nil nil nil)))
250 (setq copyleft-maintainer maintainer))
251
252(defvar copyleft-default-comment-start "#"
253 "The default symbol to use to begin a comment. Defaults to \"#\".")
254
255(defvar copyleft-default-comment-cont "#"
256 "The default symbol to use to continue a comment. Defaults to \"#\".")
257
258(defvar copyleft-default-comment-end "#"
259 "The default symbol to use to end a comment. Defaults to \"#\".")
260
261(defun copyleft-set-comments (start cont end)
262 "Set the comment symbols.
263
264 (copyleft-set-comments START CONT END)"
265 (interactive (list (read-from-minibuffer "Comment start: "
266 copyleft-default-comment-start nil nil nil)
267 (read-from-minibuffer "Comment continue: "
268 copyleft-default-comment-cont nil nil nil)
269 (read-from-minibuffer "Comment end: "
270 copyleft-default-comment-end nil nil nil)
271 ))
272
273 (setq copyleft-default-comment-start start)
274 (setq copyleft-default-comment-cont cont)
275 (setq copyleft-default-comment-end end)
276)
277
278(defun insert-copyleft ()
279 "Insert the notice."
280 (interactive)
281 (set-window-point (display-buffer (current-buffer)) (point-min))
282 (cond ((eq major-mode 'c++-mode)
283 (setq comment-start "//")
284 (setq comment-cont "//")
285 (setq comment-end "//")
286 )
287 ((eq major-mode 'c-mode)
288 (setq comment-start "/*")
289 (setq comment-cont " *")
290 (setq comment-end " */")
291 )
292 ((eq major-mode 'emacs-lisp-mode)
293 (setq comment-start ";;")
294 (setq comment-cont ";;")
295 (setq comment-end ";;")
296 )
297 ((eq major-mode 'makefile-mode)
298 (setq comment-start "#")
299 (setq comment-cont "#")
300 (setq comment-end "#")
301 )
302 ('t
303 (setq comment-start copyleft-default-comment-start)
304 (setq comment-cont copyleft-default-comment-cont)
305 (setq comment-end copyleft-default-comment-end)
306 )
307 )
308
309 (setq description (read-from-minibuffer "Description: "))
310
311 (insert comment-start "\n")
312 (insert comment-cont " " (file-name-nondirectory buffer-file-name)
313 (cond ((not (string= description "")) (concat " --- " description "\n"))
314 ('t "\n")))
315 (insert comment-cont "\n")
316 (insert comment-cont " Copyright (C) "
317 (substring (current-time-string) 20) " "
318 copyleft-owner "\n")
319 (insert comment-cont "\n")
320 (insert comment-cont " Author: " copyleft-author " <" copyleft-address ">\n")
321 (insert comment-cont " Maintainer: " copyleft-maintainer "\n")
322 (insert comment-cont "\n")
323 (insert comment-cont " This file is part of the SC Toolkit.\n")
324 (insert comment-cont "\n")
325
326 (insert comment-cont " The SC Toolkit is free software; you can redistribute it and/or modify\n")
327 (insert comment-cont " it under the terms of the GNU Library General Public License as published by\n")
328 (insert comment-cont " the Free Software Foundation; either version 2, or (at your option)\n")
329 (insert comment-cont " any later version.\n")
330 (insert comment-cont "\n")
331
332 (insert comment-cont " The SC Toolkit is distributed in the hope that it will be useful,\n")
333 (insert comment-cont " but WITHOUT ANY WARRANTY; without even the implied warranty of\n")
334 (insert comment-cont " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n")
335 (insert comment-cont " GNU Library General Public License for more details.\n")
336 (insert comment-cont "\n")
337
338 (insert comment-cont " You should have received a copy of the GNU Library General Public License\n")
339 (insert comment-cont " along with the SC Toolkit; see the file COPYING.LIB. If not, write to\n")
340 (insert comment-cont " the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.\n")
341 (insert comment-cont "\n")
342
343 (insert comment-cont " The U.S. Government is granted a limited license as per AL 91-7.\n")
344 (insert comment-end "\n")
345)
346
347(define-key c-mode-map "\C-ci" 'insert-copyleft)
348(define-key c++-mode-map "\C-ci" 'insert-copyleft)
349(define-key java-mode-map "\C-ci" 'insert-copyleft)
Note: See TracBrowser for help on using the repository browser.