0
|
1 ;;; -*- Mode:Emacs-Lisp -*-
|
|
2 ;;; Copyright (c) 1991, 1992, 1993, 1994 by Lucid, Inc. All Rights Reserved.
|
|
3
|
|
4 ;;; This file contains the definitions of existing functions which Energize
|
|
5 ;;; must encapsulate. (The number of such functions should be minimized.)
|
|
6
|
|
7
|
|
8 ;;; This is greatly complicated by the fact that both the old functions
|
|
9 ;;; and the new functions are dumped. The only method I've found that
|
|
10 ;;; works and doesn't have obscure bootstrapping/feedback problems is
|
|
11 ;;; to RELOAD the original definition of the function we are advising
|
|
12 ;;; at compile time so that we can extract its original docstring, and
|
|
13 ;;; emit a modified version of that to the .elc version of this file.
|
|
14
|
|
15
|
|
16 (eval-when-compile ; this only works at compile-time anyway...
|
|
17
|
|
18 (or noninteractive
|
|
19 (error "bad idea to compile this file in a non-batch-mode emacs!"))
|
|
20
|
|
21 (load-library "advice")
|
|
22 (fset 'ad-make-freeze-docstring 'ad-make-plain-docstring)
|
|
23
|
|
24 (load-library "files.el")
|
|
25 (load-library "userlock.el")
|
|
26 (load-library "compile.el")
|
|
27 (load-library "gdb.el")
|
|
28
|
|
29 ) ;closes eval-when-compile
|
|
30
|
|
31
|
|
32 ;;; The actual definitions
|
|
33
|
|
34 (defadvice ask-user-about-lock (around energize freeze)
|
|
35 "Energize buffers do this by asking the server."
|
|
36 (if (energize-buffer-p (current-buffer))
|
|
37 (setq ad-return-value t) ; note: return value matters
|
|
38 ad-do-it))
|
|
39
|
|
40 (defadvice normal-mode (after energize freeze)
|
|
41 "If this is an Energize buffer, the Energize modes are turned on as well."
|
|
42 (if (and (energize-buffer-p (current-buffer))
|
|
43 (not inside-energize-buffer-creation-hook-function))
|
|
44 (funcall energize-create-buffer-hook (current-buffer))))
|
|
45
|
|
46 (defadvice find-file-noselect (around energize freeze)
|
|
47 "This function has been encapsulated to work with Energize."
|
|
48 (if (and (connected-to-energize-p)
|
|
49 (not (file-directory-p (ad-get-arg 0)))
|
|
50 (energize-query-buffer (ad-get-arg 0) t))
|
|
51 ;; after-find-file and abbreviate-file-name are called from
|
|
52 ;; energize-buffer-creation-hook-function, which is run from
|
|
53 ;; editorside.c (way down under energize-query-buffer).
|
|
54 ;; This is a mess...
|
|
55 (setq ad-return-value ; note: return value matters
|
|
56 (energize-query-buffer (ad-get-arg 0)))
|
|
57 ;; else
|
|
58 ad-do-it))
|
|
59
|
|
60 (defadvice write-file (around energize freeze)
|
|
61 "When executed on an Energize buffer, this will cause all
|
|
62 annotations to be lost (that is, the buffer will become a
|
|
63 normal buffer, not one that the Energize server knows about.)"
|
|
64 (if (not (energize-write-file-buffer-p))
|
|
65 ad-do-it
|
|
66 ;; else...
|
|
67 (let ((filename (ad-get-arg 0)))
|
|
68 (if (and (file-exists-p filename)
|
|
69 (not
|
|
70 (yes-or-no-p (format "File %s already exists. Overwrite it? "
|
|
71 filename))))
|
|
72 (error "Aborted"))
|
|
73 (write-region (point-min) (point-max) filename nil nil)
|
|
74 (if buffer-file-name
|
|
75 (revert-buffer t t)) ; revert this buffer from the Energize server
|
|
76 (kill-buffer nil) ; kill the current buffer, to lose Energize properties
|
|
77 (set-window-buffer ; and now visit the "new" file, and all that entails
|
|
78 (selected-window)
|
|
79 (find-file-noselect filename)))))
|
|
80
|
|
81 (defadvice set-visited-file-name (around energize freeze)
|
|
82 "The file name associated with an Energize buffer cannot be changed in this\
|
|
83 way.\nUse the `write-file' command instead."
|
|
84 (if (and (energize-write-file-buffer-p)
|
|
85 (not (equal (ad-get-arg 0) buffer-file-name)))
|
|
86 (error "Can't change the name associated with an Energize buffer.")
|
|
87 (prog1
|
|
88 ad-do-it
|
|
89 (if (energize-buffer-p (current-buffer))
|
|
90 (energize-mode-internal)))))
|
|
91
|
|
92 (defadvice next-error (around energize freeze)
|
|
93 "This function has been encapsulated to work with the Energize Error Log."
|
|
94 (if (or (not (connected-to-energize-p))
|
|
95 (non-energize-errors-exist-p))
|
|
96 ad-do-it
|
|
97 (energize-execute-command (if (ad-get-arg 0)
|
|
98 "previouserror"
|
|
99 "nexterror"))))
|
|
100
|
|
101 (defadvice gdb-break (around energize freeze)
|
|
102 "This function has been encapsulated to work with the Energize debugger."
|
|
103 (if (not (energize-buffer-p (current-buffer)))
|
|
104 ad-do-it
|
|
105 (energize-execute-command "setbreakpoint")))
|
|
106
|
|
107 (defadvice gdb-step (around energize freeze)
|
|
108 "This function has been encapsulated to work with the Energize debugger."
|
|
109 (if (not (energize-buffer-p (current-buffer)))
|
|
110 ad-do-it
|
|
111 (let ((arg (ad-get-arg 0)))
|
|
112 (while (> arg 0)
|
|
113 (energize-execute-command "steponce")
|
|
114 (setq arg (1- arg))))))
|
|
115
|
|
116 (defadvice gdb-stepi (around energize freeze)
|
|
117 "This function has been encapsulated to work with the Energize debugger."
|
|
118 (if (not (energize-buffer-p (current-buffer)))
|
|
119 ad-do-it
|
|
120 (let ((arg (ad-get-arg 0)))
|
|
121 ;; there's no energize command for this, so do it this way...
|
|
122 (save-excursion
|
|
123 (set-buffer "*Debugger*")
|
|
124 (goto-char (point-max))
|
|
125 (insert (format "stepi %d" arg))
|
|
126 (comint-send-input)))))
|