Mercurial > hg > xemacs-beta
comparison lisp/eos/sun-eos-menubar.el @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | 538048ae2ab8 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:376386a54a3c |
---|---|
1 ;;; sun-eos-menu.el --- Implements the XEmacs/SPARCworks menubar | |
2 | |
3 ;; Copyright (C) 1995 Sun Microsystems, Inc. | |
4 | |
5 ;; Maintainer: Eduardo Pelegri-Llopart <eduardo.pelegri-llopart@Eng.Sun.COM> | |
6 ;; Author: Eduardo Pelegri-Llopart <eduardo.pelegri-llopart@Eng.Sun.COM> | |
7 | |
8 ;; Keywords: SPARCworks EOS Era on SPARCworks menubar | |
9 | |
10 ;;; Commentary: | |
11 ;; This file contains functions that populate a SPARCworks menu | |
12 ;; Please send feedback to eduardo.pelegri-llopart@eng.sun.com | |
13 | |
14 ;;; Code: | |
15 | |
16 (require 'eos-common "sun-eos-common") | |
17 | |
18 (defun eos::toggle-sbrowser-selected-frame () | |
19 ;; Toggle whether this frame is selected for SBrowser | |
20 (interactive) | |
21 (if (equal eos::sbrowser-frame (selected-frame)) | |
22 (eos::select-sbrowser-frame nil) | |
23 (eos::select-sbrowser-frame (selected-frame))) | |
24 ) | |
25 | |
26 (defun eos::toggle-debugger-selected-frame () | |
27 ;; Toggle whether this frame is selected for Debugger | |
28 (interactive) | |
29 (if (equal eos::debugger-frame (selected-frame)) | |
30 (eos::select-debugger-frame nil) | |
31 (eos::select-debugger-frame (selected-frame))) | |
32 ) | |
33 | |
34 (defvar eos::long-menu | |
35 '( | |
36 ["Read and Execute a Dbx Command" eos::dbx-cmd (not (eq eos::key-mode 'none))] | |
37 ["Run" eos::run (not (eq eos::key-mode 'none))] | |
38 ["Fix" eos::fix (not (eq eos::key-mode 'none))] | |
39 "-----" | |
40 ["Print" eos::print (not (eq eos::key-mode 'none))] | |
41 ["Print *" eos::print* (not (eq eos::key-mode 'none))] | |
42 ["Dismiss Print" eos::dismiss-print-frame (not (eq eos::key-mode 'none))] | |
43 "-----" | |
44 ["Continue" eos::cont (not (eq eos::key-mode 'none))] | |
45 ["Stop" eos::stop-at (not (eq eos::key-mode 'none))] | |
46 ["Clear" eos::clear-at (not (eq eos::key-mode 'none))] | |
47 ["Next" eos::next (not (eq eos::key-mode 'none))] | |
48 ["Step" eos::step (not (eq eos::key-mode 'none))] | |
49 ["Step Up" eos::step-up (not (eq eos::key-mode 'none))] | |
50 ["Continue To" eos::cont-to (not (eq eos::key-mode 'none))] | |
51 "-----" | |
52 ["Stack Up" eos::up (not (eq eos::key-mode 'none))] | |
53 ["Stack Down" eos::down (not (eq eos::key-mode 'none))] | |
54 "-----" | |
55 ("Start Tool and Enable Frame" | |
56 ["Debugger" eos::start-debugger t] | |
57 ["Dbx" eos::start-dbx t] | |
58 ["SBrowser" eos::start-sbrowser t] | |
59 ) | |
60 "-----" | |
61 ["Enable Frame for SBrowser" | |
62 eos::toggle-sbrowser-selected-frame | |
63 :style toggle | |
64 :selected (equal eos::sbrowser-frame | |
65 (selected-frame))] | |
66 ["Enable Frame for Debugger and Dbx" | |
67 eos::toggle-debugger-selected-frame | |
68 :style toggle | |
69 :selected (equal eos::debugger-frame | |
70 (selected-frame))] | |
71 "-----" | |
72 ["News..." eos::sw-news t] | |
73 ) | |
74 ) | |
75 | |
76 (defvar eos::short-menu | |
77 '( | |
78 ("Start Tool and Enable Frame" | |
79 ["Debugger" eos::start-debugger t] | |
80 ["Dbx" eos::start-dbx t] | |
81 ["SBrowser" eos::start-sbrowser t] | |
82 ) | |
83 "-----" | |
84 ["Enable Frame for SBrowser" | |
85 eos::toggle-sbrowser-selected-frame | |
86 :style toggle | |
87 :selected (equal eos::sbrowser-frame | |
88 (selected-frame))] | |
89 ["Enable Frame for Debugger and Dbx" | |
90 eos::toggle-debugger-selected-frame | |
91 :style toggle | |
92 :selected (equal eos::debugger-frame | |
93 (selected-frame))] | |
94 "-----" | |
95 ["News..." eos::sw-news t] | |
96 ) | |
97 ) | |
98 | |
99 (defun eos::menubar-startup () | |
100 ;; Actions to do at startup for eos-menubar.el | |
101 (if (and (eq (device-type (selected-device)) 'x) | |
102 (or (not (local-variable-p 'current-menubar (current-buffer))) | |
103 (yes-or-no-p | |
104 "SPARCworks menu will be local (menubar is buffer-local); proceed?"))) | |
105 (progn | |
106 (add-menu-button '("Help") ["SPARCworks..." eos::sw-intro t]) | |
107 (add-submenu nil | |
108 (append '("SPARCworks") (copy-tree eos::short-menu)) | |
109 "VC" | |
110 ) | |
111 ))) | |
112 | |
113 ;; | |
114 ;; Insertion of text with a font | |
115 ;; | |
116 | |
117 (defun eos::insert-italics (a-string) | |
118 (eos::insert-with-font a-string 'italic)) | |
119 | |
120 (defun eos::insert-bold (a-string) | |
121 (eos::insert-with-font a-string 'bold)) | |
122 | |
123 (defun eos::insert-with-font (a-string a-font) | |
124 (interactive "") | |
125 (let (a b ext) | |
126 (setq a (point)) | |
127 (insert a-string) | |
128 (setq b (point)) | |
129 (setq ext (make-extent a b)) | |
130 (set-extent-face ext (find-face a-font)) | |
131 )) | |
132 | |
133 ;; | |
134 ;; Generic insert code | |
135 ;; | |
136 | |
137 (defun eos::insert (s) | |
138 (let ((len (length s)) | |
139 (pos 0) | |
140 (newpos 0) | |
141 (state 'normal)) | |
142 (while (< pos len) | |
143 (setq newpos (string-match "#[bnir]" s pos)) | |
144 (if (and newpos (> newpos pos)) | |
145 (progn | |
146 (cond ((equal (aref s (+ newpos 1)) ?b) ; bold | |
147 (if (equal state 'normal) | |
148 (progn | |
149 (insert (substring s pos newpos)) | |
150 (setq state 'bold)) | |
151 (error "found bold when not in normal"))) | |
152 ((equal (aref s (+ newpos 1)) ?r) ; red | |
153 (if (equal state 'normal) | |
154 (progn | |
155 (insert (substring s pos newpos)) | |
156 (setq state 'red)) | |
157 (error "found red when not in normal"))) | |
158 ((equal (aref s (+ newpos 1)) ?i) ; italics | |
159 (if (equal state 'normal) | |
160 (progn | |
161 (insert (substring s pos newpos)) | |
162 (setq state 'italics)) | |
163 (error "found italics when not in normal"))) | |
164 ((equal (aref s (+ newpos 1)) ?n) ; normal | |
165 (cond ((equal state 'italics) | |
166 (eos::insert-italics (substring s pos newpos)) | |
167 (setq state 'normal)) | |
168 ((equal state 'bold) | |
169 (eos::insert-bold (substring s pos newpos)) | |
170 (setq state 'normal)) | |
171 ((equal state 'normal) | |
172 (error "found normal when in normal")))) | |
173 (t | |
174 (error "internal error")) | |
175 ) | |
176 (setq pos (+ newpos 2)) | |
177 ) | |
178 (if (equal state 'normal) | |
179 (progn | |
180 (insert (substring s pos)) | |
181 (setq pos len)) | |
182 (error "eos::insert with unclosed special font")) | |
183 )) | |
184 )) | |
185 | |
186 ;; | |
187 ;; Introduction File | |
188 ;; | |
189 | |
190 (defun eos::sw-intro () | |
191 "Generate an intro buffer." | |
192 (interactive) | |
193 (let ((buffer1 (get-buffer-create " *SPARCworks Intro*")) | |
194 ) | |
195 (switch-to-buffer buffer1) | |
196 (setq buffer-read-only nil) | |
197 (delete-region (point-min) (point-max)) | |
198 (eos::insert " | |
199 #bSPARCworks Editor Integration#n | |
200 Eos is copyright (c) 1995 by Sun Microsystems. | |
201 | |
202 #bIntroduction (for Eos 1.5.x)#n | |
203 | |
204 #iSPARCworks#n is a set of integrated programming tools from SunSoft that | |
205 support the program development cycle. #iXEmacs#n is a version of the Emacs | |
206 editor that includes interfaces to the selection service and to the | |
207 #iToolTalk#n service. The #iEos#n package uses these two interfaces to provide | |
208 a simple yet useful editor integration with three SPARCworks tools: | |
209 the #iSourceBrowser#n, the #iDebugger#n and #iDbx#n. Eos requires XEmacs 19.12 | |
210 or above, and SW3.0.1 or above. | |
211 | |
212 When used with Eos, the Debugger and SourceBrowser do not include a | |
213 source pane for displaying of sources and instead use an XEmacs frame. | |
214 Then the user can interact with the XEmacs frame in a way very similar | |
215 to how the source panes of the SW tools would be used. The user can also | |
216 start Dbx and request that sources be shown in XEmacs. | |
217 | |
218 #bSimple Startup#n | |
219 | |
220 In most cases, the user will start an interaction with Eos as follows: | |
221 | |
222 (1) Start XEmacs, | |
223 | |
224 (2) Load \"eos.el\" to add a SPARCworks submenu to the menubar (this | |
225 step might not be needed if Eos is preloaded to your XEmacs binary), and | |
226 | |
227 (3) On some XEmacs frame use the SPARCworks submenu and start the | |
228 desired tool and simultaneously enable that frame to display sources. | |
229 | |
230 The toolbar for the enabled frame will change after (3) to show that | |
231 this frame will behave as the source display for the SW tool and to | |
232 indicate that some actions on the tool can be performed from this frame. | |
233 | |
234 The actions available depend on the SW tool. The interaction model for | |
235 the Debugger and the SourceBrowser can be described as #iselect on the | |
236 XEmacs frame and then click on the button on the SW tool#n. As an example, | |
237 a browser query can be performed by selecting some text and then clicking | |
238 on the query button on the SBrowser tool; the source for the first match | |
239 will appear in the XEmacs frame, together with a glyph showing the match. | |
240 | |
241 The Debugger and Dbx can also be driven from XEmacs. Most frequently | |
242 this will be done using the ToolBar. Entries in the toolbar of a frame | |
243 enabled for debugging are deactivated when there is not enough information | |
244 to invoke their associated commands (due to technical reasons, it is | |
245 necessary for XEmacs to have had a frame enabled for Debugger/Dbx when | |
246 a debug or attach command was issued to Debugger/Dbx to make most toolbar | |
247 commands active). As an example, to set a breakpoint at some line, select | |
248 a position in that line and then click on the toolbar icon with the stop | |
249 with the arrow inside. | |
250 | |
251 #bDetails#n | |
252 | |
253 #iManual Startup#n | |
254 | |
255 In the scenario described above, the user simultaneously starts a tool | |
256 and enables a frame for that tool. The two actions can also be done | |
257 independently. The tools (Source Browser, Debugger, and Dbx) have to | |
258 be started with the \"-editor\" option and the XEmacs frame can be | |
259 enabled manually using the SPARCworks submenu. The most common use | |
260 of this feature is to disable and re-enable a frame, be it to recover | |
261 the default toolbar, or to avoid conflicts with other active tools | |
262 (see the paragraph below on multiple active tools). | |
263 | |
264 #iFrame Enabling#n | |
265 | |
266 At any given time there can be at most one frame enabled to display | |
267 Source Browser sources, and at most one frame enabled to display | |
268 Debugger and Dbx sources. The same XEmacs frame can be used for both | |
269 types of sources. The toolbar of an enabled frame always starts with | |
270 an informational icon. This icon is a large-font #ii#n with either a | |
271 smaller-font #iB#n, if the frame has browsing enabled, and/or a smaller-font | |
272 #iD#n, if the frame has debugging enabled. | |
273 | |
274 If no frames are enabled for a given tool, the editor integration for | |
275 that tool is disabled. This means that XEmacs deregisters the TT | |
276 patterns relevant to this tool, and XEmacs does not receive any | |
277 messages from that tool. | |
278 | |
279 #iMultiple Active Tools#n | |
280 | |
281 In order to provide a simpler user model, Eos has no provisions to | |
282 #igracefully#n support more than one simultaneous active tool of a | |
283 given class per TT session. A Debugger and a SourceBrowser, or a Dbx | |
284 and a SourceBrowser, can coexist gracefully, but a Debugger and a Dbx | |
285 cannot, and neither can two SourceBrowsers, two Debuggers, or two | |
286 dbxs. This simplification is consistent with the needs of most users. | |
287 | |
288 The implementation of Eos notifies the user if she attempts to start two | |
289 conflicting tools, but it does not enforce the restriction. In some | |
290 cases two conflicting tools can be used profitably by a careful user, | |
291 but in others the result is likely to be chaos. An example of the first | |
292 is using two SourceBrowsers, and one of the later is attempting to send | |
293 debugging commands from XEmacs to two debuggers. | |
294 | |
295 If a user really needs to have multiple active tools, she can do this | |
296 in a safe way by creating several TT sessions (e.g. using #ittsession | |
297 -c /bin/csh#n, see the man page for ttsession), and placing the tools | |
298 with their own XEmacses in separate TT sessions. | |
299 | |
300 #iA Visual Data Inspector in XEmacs#n | |
301 | |
302 Users that choose to drive the debugger from XEmacs also have | |
303 available a #ivery simple#n but fast visual data inspector. The results | |
304 of #iprint#n and #iprint*#n commands are formatted into an XEmacs buffer | |
305 (#i\"*Eos Print Output*\"#n) and presented into a separate frame. | |
306 This frame is mapped and unmapped so that, except for the first time, | |
307 it appears quickly. | |
308 | |
309 #iBuffers for Debugger/Dbx Interaction#n | |
310 | |
311 When starting dbx as a subprocess, a buffer will be created to interact | |
312 with dbx. The name of this buffer is of the form #i\"*Eos dbx*\"#n. | |
313 | |
314 If a dbx engine is receiving requests from both Debugger and XEmacs | |
315 (e.g. it was started via #idebugger -editor#n), the responses to | |
316 commands sent by XEmacs will be shown in the echo area and will be | |
317 recorded in a read-only buffer (#i\"*Eos Debugger Log*\"#n), but responses | |
318 to Debugger commands will not appear. Conversely, responses to Debugger | |
319 commands will appear in the Debugger transcript pane but not in XEmacs's | |
320 log buffer. This is a limitation of the underlying TT protocols. | |
321 | |
322 #bTTY Support#n | |
323 | |
324 Although tty support is not an official part of Eos, it is possible | |
325 with some extra effort and specialized knowledge from the user. | |
326 | |
327 #iStarting a ToolTalk Session#n | |
328 | |
329 Eos requires a ToolTalk communication. This may require starting a TT | |
330 session by: | |
331 | |
332 (0) Start a ToolTalk session, and a shell so that all processes | |
333 started from this shell will use the new TT session. Do this by | |
334 executing \"ttsession -c /bin/csh\" - or whatever shell you use | |
335 | |
336 At this point, you can start your XEmacs on that shell, as shown in | |
337 step (1) above. Note that, since there is no TTY toolbar in 19.12 | |
338 (nor 19.13), an alternative mechanism must be used to enable the | |
339 (tty) frame. | |
340 | |
341 A typical use for tty is to interact with dbx. The command | |
342 #ieos::start-dbx#n will select the tty frame for debugging and will start | |
343 a dbx buffer. From this point on, dbx will use this tty frame to show | |
344 its sources. The introduction and news messages can be generated | |
345 using the commands #ieos::sw-intro#n and #ieos::sw-news#n. You can interact | |
346 with the dbx subprocess by typing to its associated input buffer or | |
347 using some key bindings. | |
348 | |
349 #iKey Bindings#n | |
350 | |
351 A tty user can interact with Eos by invoking directly the Eos | |
352 commands, evaluating elisp expressions, or through some key-bindings. | |
353 The expert user may provide her own key bindings. Eos also provides two | |
354 set of global bindings, which are activated by evaluating the | |
355 expressions (eos::set-key-mode 'prefix) or (eos::set-key-mode | |
356 'function). | |
357 | |
358 #bKnown Bugs#n | |
359 | |
360 Due to a bug in the internal subprocess machinery of XEmacs 19.12, the | |
361 default prompt of dbx subprocesses will show the full path to the binary. | |
362 The prompt can be overridden using the ksh variable PS1\; one way to do | |
363 this is by adding the following line to your ~/.dbxrc: | |
364 | |
365 PS1='(dbx) ' | |
366 | |
367 #bFeedback#n | |
368 | |
369 You are encouraged to send us feedback via the Comments button in | |
370 the About Box of either SPARCworks tool, or directly to | |
371 eos-comments@cs.uiuc.edu. | |
372 | |
373 #bEnjoy.#n") | |
374 (setq buffer-read-only t) | |
375 (goto-char (point-min)) | |
376 (view-mode nil 'kill-buffer) ;; assume the new view-less | |
377 )) | |
378 | |
379 ;; | |
380 ;; Cheat Sheets for keyboard mappings | |
381 ;; | |
382 ;; This depends on the mapping being used! | |
383 ;; | |
384 | |
385 (defun eos::sw-cheat-sheet () | |
386 "Generate buffer that has a description of the key maps that can be | |
387 printed, cut and then taped somewhere (like on the keyboard or on your | |
388 monitor). This is particularly useful for the function keys" | |
389 (interactive) | |
390 (let ((buffer1 (get-buffer-create " *Cheat Sheets*")) | |
391 ) | |
392 (switch-to-buffer buffer1) | |
393 (setq buffer-read-only nil) | |
394 (delete-region (point-min) (point-max)) | |
395 (eos::insert " | |
396 #bCheat Sheets for Eos#n | |
397 | |
398 This buffer has a description of the key maps that can be printed, cut | |
399 and then taped somewhere (like on the keyboard or on your monitor). | |
400 This is particularly useful for the function keys since their numbers | |
401 don't any particular mnemonic value. | |
402 | |
403 | |
404 #bWhen using function keys#n #i[Options->SPARCworks->Use Function Keys]#n | |
405 | |
406 ---------------------------------------- | |
407 | |
408 F6 F7 F8 F9 | |
409 | |
410 Do Print Cont ---- Next | |
411 Run Print* Stop <Ctrl> Step | |
412 Fix Dismiss Clear <Shft> Step Up | |
413 | |
414 | |
415 ---------------------------------------- | |
416 | |
417 #bWhen using prefix map#n #i[Options->SPARCworks->Use C-c d Prefix Map]#n | |
418 | |
419 ---------------------------------------- | |
420 Basic prefix: C-c d | |
421 | |
422 | |
423 Do % | |
424 Run r | |
425 Fix f | |
426 | |
427 Print p | |
428 Print* C-p | |
429 | |
430 Cont c | |
431 Stop b (for breakpoint) | |
432 Clear C-b | |
433 | |
434 Next n | |
435 Step s | |
436 Step up C-s | |
437 | |
438 Up u | |
439 Down d | |
440 ---------------------------------------- | |
441 | |
442 ") | |
443 (setq buffer-read-only t) | |
444 (goto-char (point-min)) | |
445 (view-mode nil 'kill-buffer) ;; assume the new view-less | |
446 )) | |
447 | |
448 ;; | |
449 ;; News files | |
450 ;; | |
451 | |
452 (defun eos::sw-news () | |
453 "Generate a News buffer." | |
454 (interactive) | |
455 (let ((buffer1 (get-buffer-create " *Eos News*")) | |
456 ) | |
457 (switch-to-buffer buffer1) | |
458 (setq buffer-read-only nil) | |
459 (delete-region (point-min) (point-max)) | |
460 (eos::insert " | |
461 #bEos News#n | |
462 | |
463 See the #iHelp#n top-level menu for additional information on the | |
464 SPARCworks lightweight editor integration (Eos). The current version | |
465 of Eos is available as the contents of the variable eos::version. | |
466 | |
467 #bversion 1.5.2#n | |
468 | |
469 Support for 19.12 and 19.13. Works on TTYs. Uses real ToolBar. | |
470 Toolbars for debugger & content inspector are frame-local. | |
471 Better icons and glyphs. Support for (load-library \"eos\"). | |
472 Ease-of-use: startup for tools. | |
473 Icon files are now defined \"in-line\" to simplify administration. | |
474 | |
475 Removed the following to simplify use: | |
476 - Textual toolbar (from 1.4). | |
477 - Option submenu to add keymaps for debugger use. | |
478 - Popup menu. | |
479 - Any pretenses to support SW3.0; use SW3.0.1 instead. | |
480 | |
481 #bversion 1.4.1#n | |
482 | |
483 Added eos::add-button interface. | |
484 | |
485 #bversion 1.4#n | |
486 | |
487 Added toolbar like in dbxtool. Toolbar uses echo-help to show | |
488 meaning of buttons, (setq inhibit-help-echo t) if you don't | |
489 want it. | |
490 | |
491 Selection now remains after \"print\"-like commands. Now it | |
492 is possible to have the *debugger* buffer in the frame selected | |
493 for displaying debugged sources. | |
494 | |
495 Added a command to relayout debugger buffers so they show in | |
496 a layout similar to that of dbxtool. | |
497 | |
498 #bversion 1.3#n | |
499 | |
500 Provided popup-menu bindings for those debugger actions | |
501 that operate on the contents of the selection or its position; | |
502 selectable via options. | |
503 | |
504 The *debugger* buffer now support M-p and M-n. | |
505 | |
506 #bversion 1.2#n | |
507 | |
508 Better support for interactions via *debugger* buffer and directly | |
509 using a prefix map and function keys. | |
510 | |
511 Converted to use new toggle and radio menus, reorganizing | |
512 SPARCworks menu to factor out help and options into submenus, | |
513 which are now available under the Options and Help top-level menus. | |
514 | |
515 #bversion 1.1#n | |
516 | |
517 Some internal cleanup. | |
518 | |
519 Eos now provides basic machinery to drive the debugger | |
520 engine directly using ToolTalk messages. This feature is | |
521 not yet very well polished. You can try using it at your own risk, | |
522 or await for release 1.2 (soon to come) that will provide a better | |
523 interface and improved functionality, as well as documentation | |
524 for the interface. | |
525 | |
526 #bversion 1.0#n | |
527 | |
528 First widely available release. Supports simple #iselect and click#n model. | |
529 | |
530 #bPossible Future Enhancements#n | |
531 | |
532 * Add a \"peek-in-source\" mechanism to show the values of | |
533 expressions in the sources. | |
534 | |
535 * The comint package should be generalized to allow for TT-based | |
536 interpreters and it should be used in Eos. | |
537 | |
538 * Key & popup bindings should probably be a minor mode (currently | |
539 it conflicts with cc-mode). | |
540 | |
541 * Should support locking a print frame to force new print frames. Also, | |
542 should allow for following fields in print frames. | |
543 | |
544 | |
545 #bFeedback#n | |
546 | |
547 Send feedback to #ieos-comments@cs.uiuc.edu#n") | |
548 (setq buffer-read-only t) | |
549 (goto-char (point-min)) | |
550 (view-mode nil 'kill-buffer) ;; assume the new view-less | |
551 )) | |
552 | |
553 (provide 'eos-menubar) | |
554 | |
555 ;;; sun-eos-debugger.el ends here |