annotate lisp/energize/energize-init.el @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children 131b0175ea99
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1 ;;; -*- Mode:Emacs-Lisp -*-
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2 ;;; Copyright © 1990-1994 by Lucid, Inc. All Rights Reserved.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4 (defvar energize-auto-raise-screen t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5 "If T frames are automatically raised when Energize wants to show them.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7 (defvar energize-connect-hook nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8 "*Function or functions to run when the Energize connection is established.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
9
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10 (defvar energize-disconnect-hook nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11 "*Function or functions to run when the Emacs/Energize connection is closed.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
12
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
14 (defvar energize-screen-mode nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15 (defvar energize-split-screens-p t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17 (defun energize-multi-screen-mode ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18 "Call this function to put Energize into multi-frame mode.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
19
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
20 A frame named \"debugger\" will be used for the *Debugger* buffer,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
21 and its associated source files.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22 A frame named \"energize\" will be used for the Top-Level buffer.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
23 A frame named \"browser\" will be created for each L.E. Browser buffer.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
24 At most 5 of these will be created; then they will be reused.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
25 A frame named \"project\" will be created for each Project buffer.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
26 A frame named \"error-log\" will be created for the Error Log buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
27 and its associated source files (as when the Next Error command
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
28 displays a source file.)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
29 A frame named \"manual\" will be created for each UNIX Manual page.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
30 At most 5 of these will be created; then they will be reused.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
31
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32 If an external editor is being used, then source files will be displayed
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33 read-only in the \"debugger\" frame.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35 If an external editor is not being used, then frames named \"sources\"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36 will be created to edit source files. At most five of these will be
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37 created; then they will be reused. Find-file will use the current frame,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38 whatever that happens to be, but find-file-other-window, and selecting
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39 source files from the Buffers menu will use an existing frame displaying
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
40 the file in question, or create a new one if there isn't one.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42 Call `energize-single-screen-mode' to turn this off.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44 See the documentation for the function get-frame-for-buffer for
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45 information on how to customize this."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46 (interactive)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47 (put 'project 'instance-limit 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48 (put 'sources 'instance-limit 5)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49 (put 'manual 'instance-limit 5)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
50 (put 'browser 'instance-limit 5)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51 (put 'energize-debugger-mode 'frame-name 'debugger)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
52 (put 'gdb-mode 'frame-name 'debugger)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
53 (put 'energize-top-level-mode 'frame-name 'energize)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
54 (put 'energize-browser-mode 'frame-name 'browser)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
55 (put 'energize-breakpoint-mode 'frame-name 'browser)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
56 (put 'energize-project-mode 'frame-name 'project)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
57 (put 'energize-no-file-project-mode 'frame-name 'project)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
58 (put 'energize-log-mode 'frame-name 'error-log)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
59 (put 'energize-manual-entry-mode 'frame-name 'manual)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60 (if energize-external-editor
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
61 (setq get-frame-for-buffer-default-frame-name 'debugger)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
62 ;; hmmmm...
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
63 (setq get-frame-for-buffer-default-frame-name 'sources))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 (setq buffers-menu-switch-to-buffer-function 'pop-to-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65 (setq energize-screen-mode 'multi)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66 t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
67
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
68 (defun energize-several-screens-mode ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
69 "Call this function to put Energize into multi-frame mode,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
70 but with only a few frames. See also `energize-multi-screen-mode'.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72 A frame named \"debugger\" will be used for the *Debugger* buffer,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73 and its associated source files.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74 A frame named \"energize\" will be used for the Top-Level buffer.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75 A single frame named \"browser\" will be created for L.E. Browser buffers.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
76 A single frame named \"project\" will be created for Project buffers.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
77 A frame named \"error-log\" will be created for the Error Log buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
78 and its associated source files (as when the Next Error command
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
79 displays a source file.)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
80 A single frame named \"manual\" will be created for UNIX Manual page buffers.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
82 If an external editor is being used, then source files will be displayed
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
83 read-only in the \"debugger\" frame.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
84
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
85 If an external editor is not being used, then a single frame named
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
86 \"sources\" will be created to edit source files. Find-file will use the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
87 current frame, whatever that happens to be, but find-file-other-window,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
88 and selecting source files from the Buffers menu will use an existing frame
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
89 displaying the file in question, or create a new one if there isn't one.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
90
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
91 Call `energize-single-screen-mode' to turn this off.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
92
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
93 See the documentation for the function get-frame-for-buffer for
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
94 information on how to customize this."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
95 (interactive)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
96 (energize-multi-screen-mode)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
97 (remprop 'browser 'instance-limit)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
98 (remprop 'project 'instance-limit)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
99 (remprop 'manual 'instance-limit)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
100 (remprop 'sources 'instance-limit)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
101 (setq energize-screen-mode 'several)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
102 t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
103
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
104 (defun energize-single-screen-mode ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
105 "Call this function to put Energize into single-frame mode.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
106 All buffers will be displayed in the currently selected frame."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
107 (interactive)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
108 (remprop 'browser 'instance-limit)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
109 (remprop 'project 'instance-limit)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
110 (remprop 'manual 'instance-limit)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
111 (remprop 'sources 'instance-limit)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
112 (remprop 'energize-debugger-mode 'frame-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
113 (remprop 'gdb-mode 'frame-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
114 (remprop 'energize-top-level-mode 'frame-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
115 (remprop 'energize-browser-mode 'frame-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
116 (remprop 'energize-breakpoint-mode 'frame-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
117 (remprop 'energize-project-mode 'frame-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
118 (remprop 'energize-no-file-project-mode 'frame-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
119 (remprop 'energize-log-mode 'frame-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
120 (remprop 'energize-manual-entry-mode 'frame-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
121 (setq get-frame-for-buffer-default-frame-name nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
122 (setq buffers-menu-switch-to-buffer-function 'switch-to-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
123 (setq energize-screen-mode 'single)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
124 nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
125
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
126 (energize-single-screen-mode)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
127
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
128
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
129 ;;; Connecting and disconnecting
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
130
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
131 (or energize-attributes-mapping
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
132 (setq energize-attributes-mapping
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
133 (purecopy
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
134 '((0 . default)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
135 (1 . bold)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
136 (2 . italic)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
137 (3 . bold-italic)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
138 (4 . attributeSmall)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
139 (50 . attributeGlyph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
140 (51 . attributeSectionHeader)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
141 (52 . attributeToplevelFormGlyph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
142 (53 . attributeModifiedToplevelFormGlyph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
143 (54 . attributeBrowserHeader)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
144 (68 . attributeWriteProtected)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
145 (69 . attributeModifiedText)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
146 ))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
147
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
148 ;; Make the faces before emacs is dumped - this should be ok, they will be
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
149 ;; initialized from the resource database when the first frame is created.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
150 (let ((rest energize-attributes-mapping))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
151 (while rest
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
152 (make-face (cdr (car rest)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
153 (setq rest (cdr rest))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
154
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
155
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
156 (defun any-energize-buffers-p ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
157 (let ((rest (buffer-list))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
158 (result nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
159 (while rest
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
160 (if (energize-buffer-p (car rest))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
161 (setq result (car rest) rest nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
162 (setq rest (cdr rest))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
163 result))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
164
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
165 (defun connect-to-energize (server &optional enarg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
166 "Connect this emacs to a Energize server.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
167 The SERVER argument should be the name of the host that the kernel is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
168 running on (empty-string for localhost). It may also be of the form
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
169 ``hostname:user'' or ``:user'', meaning to use the server running with
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
170 userid USER."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
171 (interactive (if (connected-to-energize-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
172 (error "Already connected to the server.") ; you bogon.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
173 (list (read-string "connect to energize server: "))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
174 (if (connected-to-energize-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
175 (error "Already connected to the server.")) ; you bogon.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
176 (if (or (null server) (equal server ""))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
177 (setq server (or (getenv "ENERGIZE_PORT") (system-name))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
178 (setq default-frame-name "energize")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
179 (energize-rename-things)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
180 (energize-hack-external-editor-mode)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
181
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
182 (let ((energize-disconnect-hook
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
183 ;; If we're being run interactively, don't exit emacs if connecting
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
184 ;; to Energize fails! That's damn annoying.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
185 (if (and (interactive-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
186 (consp energize-disconnect-hook)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
187 (memq 'save-buffers-kill-emacs energize-disconnect-hook))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
188 (delq 'save-buffers-kill-emacs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
189 (copy-sequence energize-disconnect-hook))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
190 energize-disconnect-hook)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
191
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
192 (connect-to-energize-internal server enarg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
193 ;; Wait for the Top-Level buffer to be created.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
194 ;; This really should happen down in C, but...
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
195 (let ((p (or (get-process "energize")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
196 (error "Could not connect to Energize.")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
197 b)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
198 (while (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
199 (or (connected-to-energize-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
200 (error "Energize connection refused."))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
201 (not (setq b (any-energize-buffers-p))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
202 (accept-process-output p))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
203 ;; Make the displayed Energize buffer initially displayed.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
204 (pop-to-buffer b)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
205 (delete-other-windows)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
206 (run-hooks 'energize-connect-hook))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
207
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
208 (defun disconnect-from-energize ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
209 (interactive)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
210 "Close the connection to energize"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
211 (close-connection-to-energize))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
212
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
213 ;;; Energizing all buffers
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
214 ;; After being connected to energize this function energizes all the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
215 ;; buffers that contain files that Energize knows about.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
216
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
217 (defun energize-all-buffers ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
218 "Energize any buffer showing a file that the Energize server knows about.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
219 Has to be called after Emacs has been connected to Energize"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
220 (if (not (connected-to-energize-p))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
221 (error "You have to connect to Energize first"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
222 (save-window-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
223 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
224 (let ((buffers (buffer-list))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
225 (buffers-to-avoid '())
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
226 (lock-directory nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
227 buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
228 filename)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
229 (while buffers
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
230 (setq buffer (car buffers))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
231 (setq buffers (cdr buffers))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
232 (setq filename (buffer-file-name buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
233 (set-buffer buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
234 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
235 ((and filename
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
236 (not (energize-buffer-p buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
237 (energize-query-buffer filename t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
238 (cond ((buffer-modified-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
239 (if (y-or-n-p
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
240 (format
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
241 "Buffer %s must be saved to be Energized; save it? "
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
242 (buffer-name buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
243 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
244 (set-buffer buffer) ; oh, man...
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
245 (save-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
246 ;; said "no"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
247 (setq buffers-to-avoid (cons buffer buffers-to-avoid))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
248
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
249 ((and (null (verify-visited-file-modtime buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
250 (file-exists-p filename))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
251 (set-buffer buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
252 (if (y-or-n-p
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
253 (format "Buffer %s has changed on disk, revert? "
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
254 (buffer-name buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
255 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
256 (set-buffer buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
257 (revert-buffer nil t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
258 ;; said "no"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
259 (setq buffers-to-avoid (cons buffer buffers-to-avoid))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
260
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
261 ;; It's wrong to check to also see if someone else is locking
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
262 ;; the file. The file is already in the buffer, and the user
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
263 ;; isn't really modifying it -- we're just rewriting it because
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
264 ;; energize likes to do that. That's why locking should be
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
265 ;; disabled here.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
266 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
267 (if (not (memq buffer buffers-to-avoid))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
268 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
269 (message "Energizing buffer %s..." (buffer-name buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
270 (find-file-noselect filename))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
271 (message (format "Buffer %s not Energized." (buffer-name buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
272 (sit-for 1)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
273 (message nil)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
274
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
275 (add-hook 'energize-connect-hook 'energize-all-buffers)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
276
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
277
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
278 ;; This is called when the connection to Energize is lose (for whatever
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
279 ;; reason). We could just run the energize-disconnect-hook from C and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
280 ;; put this function on it, but then the user could hurt themselves.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
281 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
282 (defun de-energize-all-buffers ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
283 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
284 (let ((buffers (buffer-list))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
285 buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
286 (while buffers
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
287 (condition-case condition
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
288 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
289 (setq buffer (car buffers))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
290 (set-buffer buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
291 (cond ((not (energize-buffer-p buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
292 nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
293 ((eq (energize-buffer-type buffer) 'energize-source-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
294 (map-extents
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
295 (function (lambda (extent ignore)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
296 (if (extent-property extent 'energize)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
297 (delete-extent extent))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
298 nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
299 buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
300 (remove-hook 'write-file-data-hooks
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
301 'energize-write-data-hook)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
302 (setq revert-buffer-insert-file-contents-function nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
303 (ad-Orig-normal-mode-after-energize) ; #### necessary?
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
304 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
305 (t ; non-source-file Energize buffers
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
306 (set-buffer-modified-p nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
307 (if (eq (other-buffer buffer) buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
308 (set-buffer (get-buffer-create "*scratch*"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
309 (set-buffer (other-buffer buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
310 (kill-buffer buffer))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
311 (error ;; condition-case clause
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
312 (beep)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
313 (message "Error while de-Energizing: %s" condition)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
314 (setq buffers (cdr buffers)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
315 ;; now clean the menubar
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
316 (deactivate-all-energize-menu-items)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
317 (energize-rename-things 'back)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
318 (run-hooks 'energize-disconnect-hook)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
319 nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
320
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
321
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
322 (defun energize-rename-things (&optional back)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
323 ;; People who don't like emacs don't like seeing the word "Emacs" either
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
324 (let ((case-fold-search t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
325 (if (and (consp mode-line-buffer-identification)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
326 (stringp (car mode-line-buffer-identification))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
327 (string-match (if back "\\bEnergize\\b"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
328 "\\bL?Emacs\\([- \t]*[-._0-9]+\\)?\\b")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
329 (car mode-line-buffer-identification)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
330 (setq-default mode-line-buffer-identification
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
331 (cons
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
332 (concat (substring (car mode-line-buffer-identification)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
333 0 (match-beginning 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
334 (if back "Emacs" "Energize")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
335 (substring (car mode-line-buffer-identification)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
336 (match-end 0)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
337 (cdr mode-line-buffer-identification))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
338 ; (if (stringp frame-title-format)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
339 ; (if back
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
340 ; (if (string-match "^Energize\\b ?" frame-title-format)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
341 ; (setq-default frame-title-format "%S: %b"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
342 ; (or (string-match "Energize" frame-title-format)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
343 ; (setq-default frame-title-format "Energize: %b"))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
344 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
345 nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
346
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
347
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
348
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
349 ;;; The kernel is very random about the buffer-types it returns.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
350 ;;; This is a temporary permanent fix...
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
351
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
352 (defun energize-buffer-type (buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
353 "Returns a symbol denoting the type of an Energize buffer, or nil."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
354 (let ((type (energize-buffer-type-internal buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
355 (cond ((eq type 'energize-top-level-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
356 (cond ((equal "Error Log" (buffer-name buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
357 'energize-error-log-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
358 ((equal "*includers*" (buffer-name buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
359 'energize-includers-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
360 ((string-match "^Browser" (buffer-name buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
361 'energize-browser-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
362 (t type)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
363 ((eq type 'energize-unspecified-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
364 (signal 'error (list "buffer type unspecified" buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
365 ((and (null type) (energize-buffer-p buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
366 (signal 'error
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
367 (list "null buffer type for energize buffer" buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
368 (t type))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
369
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
370 (defun energize-extent-at (pos &optional buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
371 (extent-at pos buffer 'energize))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
372
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
373 (defun non-energize-errors-exist-p ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
374 ;; Whether `next-error' executed right now should do the emacs thing.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
375 ;; If we're in a *grep* or *compile* buffer, always do the emacs thing.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
376 ;; If we're in the Error Log, always do the Energize thing.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
377 ;; Otherwise, do the emacs thing if it would succeed; otherwise do the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
378 ;; Energize thing.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
379 (or (compilation-buffer-p (current-buffer)) ; in *grep*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
380 (and (not (eq (energize-buffer-type (current-buffer)) ; in ErrLog
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
381 'energize-error-log-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
382 ;; defined in compile.el (a XEmacs addition).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
383 (compilation-errors-exist-p))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
384
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
385
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
386 ;;; Misc Energize hook functions
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
387
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
388 (defvar inside-energize-buffer-creation-hook-function nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
389
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
390 (defun energize-buffer-creation-hook-function (buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
391 ;; This loser is called every time Energize wants to create a buffer,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
392 ;; whether it is being spontaniously displayed (as by the debugger) or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
393 ;; as a result of calling find-file -> energize-find-file-noselect ->
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
394 ;; energize-query-buffer.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
395 (let ((inside-energize-buffer-creation-hook-function t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
396 ;; the above is so we can call this from normal-mode, except when
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
397 ;; we're calling normal-mode.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
398 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
399 (set-buffer buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
400
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
401 ;; Energize always hands us truenames, or something close to them
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
402 ;; (it chomps the /tmp_mnt/ automounter cruft off.) Let the user
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
403 ;; set up a pretty translation just like they can for normal files.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
404 (if buffer-file-name
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
405 (setq buffer-file-name (abbreviate-file-name
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
406 (expand-file-name buffer-file-name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
407 default-directory (file-name-directory buffer-file-name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
408 (setq default-directory
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
409 (abbreviate-file-name (expand-file-name default-directory))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
410
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
411 (if buffer-file-name (set-buffer-modtime buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
412
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
413 (let ((type (energize-buffer-type buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
414 (cond ((eq type 'energize-top-level-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
415 (energize-top-level-mode))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
416 ((eq type 'energize-browser-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
417 (energize-browser-mode))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
418 ((eq type 'energize-includers-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
419 (energize-browser-mode))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
420 ((or (eq type 'energize-error-log-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
421 (eq type 'energize-log-file-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
422 (energize-log-mode)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
423 (setq buffer-read-only t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
424 ((eq type 'energize-project-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
425 (if (buffer-file-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
426 (energize-project-mode)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
427 (energize-no-file-project-mode)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
428 ((eq type 'energize-debugger-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
429 (energize-debugger-mode))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
430 ((eq type 'energize-breakpoint-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
431 (energize-breakpoint-mode))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
432 ((eq type 'energize-unix-manual-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
433 (energize-manual-mode))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
434 ((or (eq type 'energize-source-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
435 ;;(eq type 'energize-unspecified-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
436 ;;(null type)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
437 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
438 (compute-buffer-file-truename)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
439 (if (buffer-file-name buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
440 (after-find-file nil t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
441 (funcall default-major-mode))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
442 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
443 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
444 (signal 'error (list "unknown energize buffer type" type)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
445
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
446 (if (eq (energize-buffer-type (current-buffer)) 'energize-source-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
447 (energize-source-minor-mode))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
448
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
449 (energize-external-editor-set-mode buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
450 )))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
451
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
452 (setq energize-create-buffer-hook 'energize-buffer-creation-hook-function)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
453
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
454 ;;; Buffer modified hook
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
455
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
456 (defun energize-send-buffer-modified-1 (start end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
457 (if (not (energize-buffer-p (current-buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
458 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
459 (map-extents #'(lambda (ext ignore)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
460 (and (extent-property ext 'energize)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
461 (set-extent-face ext 'attributeModifiedText))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
462 nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
463 (current-buffer) start end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
464 (energize-send-buffer-modified t start end)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
465
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
466 (add-hook 'before-change-functions 'energize-send-buffer-modified-1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
467
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
468 ;;; Reverting buffers
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
469 ;;; This is called when Energize has informed us that a buffer has changed
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
470 ;;; on disk, and we need to revert.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
471
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
472 (defun energize-auto-revert-buffer (buf)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
473 (cond ((not (file-exists-p (buffer-file-name buf)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
474 ;; Signal an error here? Naah, let someone else deal with it.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
475 nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
476 ;; If it's not modified, just revert. If it is modified, ask.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
477 ((or (not (buffer-modified-p buf))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
478 (yes-or-no-p
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
479 (format "File %s changed on disk. Discard your edits? "
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
480 (file-name-nondirectory (buffer-file-name buf)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
481 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
482 (set-buffer buf)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
483 (revert-buffer t t)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
484
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
485 ;;; Energize kernel busy hook
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
486
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
487 (defun energize-message-if-not-in-minibuffer (reason)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
488 (if (not (eq (selected-window) (minibuffer-window)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
489 (message reason)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
490
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
491 (setq energize-kernel-busy-hook 'energize-message-if-not-in-minibuffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
492
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
493 ;;; set-buffer-modified-p hook
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
494
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
495 (defun energize-send-buffer-modified-2 (state start end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
496 (if (not (energize-buffer-p (current-buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
497 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
498 (if (not state)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
499 ;; If we're unmodifying the buffer, un-highlight all Energize extents.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
500 (let ((e (next-extent (current-buffer))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
501 (while e
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
502 (if (and (extent-property e 'energize)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
503 (eq (extent-face e) 'attributeModifiedText))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
504 (set-extent-face e nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
505 (setq e (next-extent e)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
506 (energize-send-buffer-modified state start end)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
507
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
508 (setq energize-buffer-modified-hook 'energize-send-buffer-modified-2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
509
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
510 ;;; hook in editorside.c
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
511
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
512 (setq energize-kernel-modification-hook nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
513
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
514
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
515 ;; command line
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
516
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
517 (defconst energize-args '(("-energize" . command-line-process-energize)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
518 ("-context" . command-line-process-energize-1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
519 ("-beam-me-up" . command-line-process-energize-1)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
520
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
521 (setq command-switch-alist (append command-switch-alist energize-args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
522
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
523 (fset 'command-line-process-energize 'command-line-process-energize-1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
524 (put 'command-line-process-energize-1 'undocumented t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
525 (defun command-line-process-energize-1 (arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
526 "Connect to the Energize server at $ENERGIZE_PORT."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
527 (let ((e-arg (car command-line-args-left))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
528 (e-host (getenv "ENERGIZE_PORT"))) ; maybe nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
529 (if (and e-arg (string-match "\\`[0-9a-fA-F]+[,][0-9a-fA-F]+\\'" e-arg))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
530 (setq command-line-args-left (cdr command-line-args-left))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
531 (setq e-arg nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
532 (message "Connecting to Energize...")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
533 (sit-for 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
534 (condition-case ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
535 (connect-to-energize e-host e-arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
536 (error
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
537 (beep)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
538 (if e-host
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
539 (message "Failed to connect to Energize at %s." e-host)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
540 (message "Failed to connect to Energize."))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
541 (sit-for 1)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
542
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
543
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
544 ;;; Originally defined in frame.el
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
545 ;;; If we're being invoked with -energize, then set the default
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
546 ;;; frame name to "energize"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
547 ;;; This is a total kludge; there ought to be a hook that gets
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
548 ;;; run before the first frame is created (either before or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
549 ;;; after term/x-win.el is loaded.)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
550
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
551 (or (fboundp 'energize-orig-frame-initialize)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
552 (fset 'energize-orig-frame-initialize
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
553 (symbol-function 'frame-initialize)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
554
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
555 (defun frame-initialize ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
556 (if (let ((rest energize-args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
557 (catch 'done
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
558 (while rest
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
559 (if (member (car (car rest)) command-line-args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
560 (throw 'done t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
561 (setq rest (cdr rest)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
562 nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
563 (setq default-frame-name "energize"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
564 (energize-orig-frame-initialize))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
565
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
566 (defun energize-x-initializations ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
567 (cond ((not noninteractive)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
568 (energize-define-function-keys)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
569 (energize-configure-font-lock-mode t (not (x-color-display-p)) t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
570 ;; faces will be initialized from the resource database when the first
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
571 ;; frame is created.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
572 (let ((rest energize-attributes-mapping))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
573 (while rest
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
574 (make-face (cdr (car rest)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
575 (setq rest (cdr rest))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
576 )))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
577
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
578 ;; Do these bindings after connecting to the X server, but before
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
579 ;;; loading any init files, so that init files can override them.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
580 (add-hook 'before-init-hook 'energize-x-initializations)