annotate lisp/energize/energize-vi.el @ 90:99da576a67e7 xemacs-20-0

Import from CVS: tag xemacs-20-0
author cvs
date Mon, 13 Aug 2007 09:10:46 +0200
parents 131b0175ea99
children
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 © 1992-1993 by Lucid, Inc. All Rights Reserved.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3 ;;; Energize support for the Editor of the Beast, and others.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5 (evi-define-key '(vi motion ex) "\C-x" 'evi-emacs-command)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6 (evi-define-key '(vi motion) "\177" 'evi-backward-char)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7 (evi-define-key '(vi) "\C-z" 'evi-quit-evi)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
9 (evi-define-key '(vi motion top-level) 'button3 'energize-popup-menu)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11 (setq evi-meta-prefix-char ?\C-a)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
12
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13 (defvar energize-external-editor nil) ; nil, vi, or a string
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
14 (defvar energize-internal-editor nil) ; nil or vi
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15 (defvar energize-internal-viewer nil) ; nil, vi, or less
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16 (defvar energize-vi-terminal-emulator nil) ; xterm, shelltool, or cmdtool
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18 (defun ex-quit (discard)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
19 ;; originally defined in evi.el
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
20 ;; The old version would exit emacs; this version just kills the current
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
21 ;; buffer and deletes the current window (and frame if appropriate.)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22 (and (not discard) (buffer-file-name) (buffer-modified-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
23 (evi-error
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
24 "No write since last change (use :quit! to override)"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
25 ;; #### Since we're unmodifying this buffer with the intent of killing it,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
26 ;; we need to avoid telling Energize that we have unmodified it, or for some
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
27 ;; reason it recreates the buffer later. I don't understand...
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
28 (let ((energize-buffer-modified-hook nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
29 (set-buffer-modified-p nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
30 (delete-auto-save-file-if-necessary)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
31 (kill-buffer (current-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32 (setq ex-user-buffer (current-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33 (condition-case nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34 (delete-window (selected-window))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35 ;; ignore error about trying to delete only window on only frame
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36 (error nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39 (defun ex-write-all-and-quit (quietly)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
40 ;; originally defined in evi.el
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41 ;; The old version would exit emacs; this version just kills the current
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42 ;; buffer and deletes the current window (and frame if appropriate.)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43 (save-some-buffers quietly)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44 (ex-quit t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46 (defun energize-external-editor-set-menubar ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47 "Set the menubar to be used for the external editor"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48 (delete-menu-item '("File" "Open..."))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49 (add-menu-item '("File") "View..." 'find-file-other-window t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
50 "Save")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51 (add-menu-item '("File") '("Edit" . "")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
52 'energize-edit-buffer-externally t "Save")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
53 (delete-menu-item '("File" "Exit XEmacs")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
54
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
55 (defun energize-internal-editor-set-menubar ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
56 "Set the menubar to be used for the internal editor"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
57 (add-menu-item '("File") "Open..." 'find-file t "Save")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
58 (delete-menu-item '("File" "View..."))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
59 (delete-menu-item '("File" "Edit"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60 (add-menu-item '("File") "Exit XEmacs" 'save-buffers-kill-emacs t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
61
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
62
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
63 (defun sensitize-external-editor-menus-hook ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 ;; make the "Edit File" menu item be inactive if this buffer doesn't have a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65 ;; file, and make it contain the name of the file that will be edited.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66 (let* ((menu (cdr (car (find-menu-item current-menubar '("File")))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
67 (ef (car (find-menu-item menu '("Edit File")))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
68 (if (null ef)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
69 t ; no change
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
70 (let ((name buffer-file-name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71 (if (eq (energize-buffer-type (current-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72 'energize-top-level-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73 (setq name nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74 (aset ef 2 (if name t nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75 (aset ef 3 (if name (file-name-nondirectory buffer-file-name) nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
76 nil))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
77
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
78 (add-hook 'activate-menubar-hook 'sensitize-external-editor-menus-hook)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
79
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
80 (defun energize-edit-buffer-externally-p (buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81 (and energize-external-editor
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
82 (eq 'energize-source-buffer (energize-buffer-type buffer))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
83
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
84 (defun energize-edit-buffer-externally-1 (buffer extent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
85 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
86 (set-buffer buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
87 (cond ((numberp extent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
88 (goto-char extent))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
89 ((null extent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
90 (goto-char 1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
91 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
92 (goto-char (extent-start-position extent))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
93 (energize-begin-external-edit (buffer-file-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
94 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
95 (beginning-of-line)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
96 (1+ (count-lines 1 (point)))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
97
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
98 (defun energize-edit-buffer-externally ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
99 "Edit the currently-displayed buffer in $ENERGIZE_EDIT_MODE."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
100 (interactive)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
101 (if (not buffer-file-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
102 (error "Buffer not associated with a file"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
103 (energize-edit-buffer-externally-1 (current-buffer) (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
104
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
105
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
106 ;;; keeping track of inferior vi processes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
107 ;;; the energize_vi command can locate and reuse a running vi, but that's
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
108 ;;; an expensive operation on X terminals, since the query-tree takes a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
109 ;;; *lot* of server traffic. So if we know that there's no vi editing the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
110 ;;; file (at least not one that *we* started) we can tell it to go ahead
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
111 ;;; and start a new one without checking for an old one. If we used a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
112 ;;; smarter wrapper (one that told us the window id, or talked to the kernel
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
113 ;;; directly) instead of xterm, we wouldn't need the query-tree at all.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
114
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
115 (defvar energize-vi-procs nil) ; vi is a special case (we're more clever)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
116 (defvar energize-other-external-editor-procs nil) ; random others
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
117
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
118 (defun energize-vi-buffer-being-edited-p (file)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
119 (let ((rest energize-vi-procs)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
120 result)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
121 (while rest
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
122 (if (string-equal file (cdr (car rest)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
123 (setq result t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
124 rest nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
125 (setq rest (cdr rest))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
126 result))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
127
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
128 (defvar energize-vi-wrapper "energize_vi")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
129
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
130 (defun energize-begin-external-edit (file line)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
131 (let* ((ez-path (getenv "ENERGIZE_PATH"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
132 (exec-path (if ez-path
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
133 (append exec-path (list ez-path))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
134 exec-path))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
135 (dir (file-name-directory file))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
136 (name (file-name-nondirectory file))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
137 (vi-p (eq energize-external-editor 'vi))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
138 (program (if vi-p energize-vi-wrapper energize-external-editor))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
139 (pretty (cond (vi-p "vi")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
140 ((string-match "[ \t]" program) program)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
141 (t (file-name-nondirectory program))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
142 (procname (format "*%s %s*" (if vi-p "energize_vi" pretty) name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
143 (edited-p (and vi-p (energize-vi-buffer-being-edited-p file)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
144 proc msg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
145 (setq line (if vi-p (format "+%d" line) "")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
146 msg (format "%s %s %s %s..." (if edited-p "Reselecting" "Launching")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
147 pretty name line))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
148 (message "%s" msg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
149 (let ((default-directory dir)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
150 (inhibit-quit t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
151 (cond (vi-p
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
152 (setq proc
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
153 (apply 'start-process procname nil program
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
154 dir name line
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
155 (cond ((eq energize-vi-terminal-emulator 'xterm)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
156 "-xterm")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
157 ((eq energize-vi-terminal-emulator 'cmdtool)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
158 "-cmdtool")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
159 ((eq energize-vi-terminal-emulator 'shelltool)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
160 "-shelltool")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
161 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
162 (signal 'error
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
163 (list
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
164 "energize-vi-terminal-emulator unknown"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
165 energize-vi-terminal-emulator))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
166 (if edited-p '("-search") '())))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
167 (setq energize-vi-procs (cons (cons proc file) energize-vi-procs))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
168 (set-process-sentinel proc 'energize-vi-sentinel)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
169 (set-process-filter proc 'energize-vi-filter))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
170 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
171 ;; ### hack a %-spec for line number info
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
172 ;; (setq proc (start-process procname nil program name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
173 (setq proc (start-process procname nil "/bin/sh" "-c"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
174 (concat program " " name)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
175 (setq energize-other-external-editor-procs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
176 (cons (cons proc file)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
177 energize-other-external-editor-procs))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
178 (set-process-sentinel proc 'energize-external-editor-sentinel)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
179 (set-process-filter proc 'energize-external-editor-filter))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
180 (if edited-p
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
181 (while (progn (accept-process-output)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
182 (eq 'run (process-status proc)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
183 (sleep-for 1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
184 (accept-process-output)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
185 (sit-for 1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
186 (if (eq 0 (process-exit-status proc)) ; don't blow away error message
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
187 (message "%s Done." msg))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
188 nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
189
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
190 (defun energize-external-editor-sentinel-1 (process state name list-var)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
191 (let ((rest (symbol-value list-var))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
192 (got-it nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
193 (let ((inhibit-quit t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
194 (while rest
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
195 (if (eq process (car (car rest)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
196 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
197 (set list-var (delq (car rest) (symbol-value list-var)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
198 (setq got-it (car rest)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
199 rest nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
200 (setq rest (cdr rest))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
201 (if got-it
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
202 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
203 (energize-notice-external-editor-termination (cdr got-it))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
204
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
205 (if (and state (string-match "\n+\\'" state))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
206 (setq state (substring state 0 (match-beginning 0))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
207 (if (and (not (eq 0 (process-exit-status (car got-it))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
208 state
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
209 (not (equal state "")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
210 (error "%s: %s" (process-name process) state))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
211
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
212 ; (if (not (eq 0 (process-exit-status (car got-it))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
213 ; (error "vi process exited with code %s"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
214 ; (process-exit-status (car got-it))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
215
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
216 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
217 (beep)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
218 (message "unknown %s process died with %S" name state))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
219
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
220 (defun energize-vi-sentinel (process state)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
221 (energize-external-editor-sentinel-1 process state "vi" 'energize-vi-procs))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
222
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
223 (defun energize-external-editor-sentinel (process state)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
224 (energize-external-editor-sentinel-1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
225 process state "external editor" 'energize-other-external-editor-procs))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
226
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
227 (defun energize-external-editor-filter (process output)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
228 (beep)
70
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents: 0
diff changeset
229 (message "%s" output))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
230
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
231 (defun energize-vi-filter (process output)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
232 ;; this will only get called if energize_vi (or the xterm) print error msgs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
233 (energize-external-editor-filter process output))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
234
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
235 (defun energize-notice-external-editor-termination (filename)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
236 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
237 ;; when an external vi process edits, automatically revert any buffers
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
238 ;; associated with the file that was being edited, unless those buffers
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
239 ;; are modified (which shouldn't really happen in the vi model or doing
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
240 ;; things.)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
241 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
242 ;; ## Since one vi process may have edited several files, possibly we
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
243 ;; ## should map over all energize files and revert as appropriate instead
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
244 ;; ## of only checking the file that the vi in question was started to edit.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
245 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
246 (let ((buffer (get-file-buffer filename)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
247 (cond ((null buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
248 nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
249 ((verify-visited-file-modtime buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
250 nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
251 ((buffer-modified-p buffer) ; Hey, how'd that happen?
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
252 (if (not (file-exists-p filename))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
253 (error "File %s no longer exists! Buffer modified!"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
254 (file-name-nondirectory filename))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
255 (beep)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
256 (if (yes-or-no-p
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
257 (format "File %s changed on disk. Discard your edits? "
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
258 (file-name-nondirectory filename)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
259 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
260 (set-buffer buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
261 (revert-buffer t t)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
262 ; ((not (file-exists-p filename)) ; File gone; kill buffer.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
263 ; (kill-buffer buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
264 (t ; not modified; just revert
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
265 (let* ((w (get-buffer-window buffer)) ; let's not thrash so much
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
266 (p (and w (window-point w)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
267 (s (and w (window-start w))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
268 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
269 (set-buffer buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
270 (revert-buffer t t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
271 (if p (set-window-point w p))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
272 (if s (set-window-start w s)))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
273
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
274
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
275 ;; evi mode
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
276
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
277 (defun energize-evi-mode ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
278 (evi)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
279 ;; vi users like to be able to edit read-only files, but we shouldn't
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
280 ;; let them edit the Energize non-file buffers.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
281 (if (and (energize-buffer-p (current-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
282 (or (null buffer-file-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
283 (memq (energize-buffer-type (current-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
284 '(energize-top-level-buffer energize-browser-buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
285 energize-error-log-buffer energize-includers-buffer))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
286 (setq buffer-read-only t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
287 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
288
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
289
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
290 (defun energize-external-editor-set-mode (buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
291 ;; If an external editor is in use, then source buffers should be
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
292 ;; read-only in one manner or another.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
293 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
294 (set-buffer buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
295 (let* ((type (energize-buffer-type buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
296 (debugger-p (eq type 'energize-debugger-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
297 (always-editable-p (memq type '(energize-project-buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
298 energize-debugger-buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
299 energize-breakpoint-buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
300 )))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
301 (editable-p (or always-editable-p
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
302 (and (null energize-external-editor)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
303 (not buffer-read-only)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
304
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
305 (or editable-p (setq buffer-read-only t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
306 (cond (editable-p
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
307 (cond ((eq energize-internal-editor nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
308 nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
309 ((eq energize-internal-editor 'vi)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
310 (if (not debugger-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
311 (energize-evi-mode)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
312 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
313 (signal 'error
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
314 (list "unknown value for energize-internal-editor"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
315 energize-internal-editor)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
316 ((eq energize-internal-viewer 'vi)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
317 (energize-evi-mode))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
318 ((eq energize-internal-viewer 'less)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
319 ;; put it in view-mode, but don't change the major-mode symbol
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
320 ;; so that the buffers go in the appropriate frames.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
321 (let ((major-mode major-mode))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
322 (view-mode)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
323 ((eq energize-internal-viewer 'nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
324 nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
325 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
326 (signal 'error
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
327 (list "unknown value for energize-internal-viewer"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
328 energize-internal-viewer)))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
329
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
330 (defun external-editor-hack-popup (choices)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
331 (if energize-external-editor
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
332 (let ((rest choices)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
333 file)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
334 (while rest
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
335 (if (and (vectorp (car rest))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
336 (equal "editfile" (aref (car rest) 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
337 (>= (length (car rest)) 4)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
338 (stringp (setq file (aref (car rest) 3))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
339 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
340 (setcdr rest
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
341 (cons (vector "View File"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
342 (list 'pop-to-buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
343 (list 'find-file-noselect file))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
344 t file)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
345 (cdr rest)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
346 (setq rest nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
347 (setq rest (cdr rest)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
348 choices)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
349
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
350
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
351
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
352 (defvar energize-search-match-data nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
353
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
354 (defun energize-search-internal (args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
355 ;; called from editorside.c
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
356 (let* ((case-fold-search (not (nth 0 args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
357 (match-word-p (nth 1 args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
358 (regexp-string-p (nth 2 args)) ; string for which to search is regex
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
359 (regexp-p (or match-word-p regexp-string-p)) ; use regex function?
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
360 (back-p (not (nth 3 args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
361 (search-string (nth 4 args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
362 (search (if match-word-p
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
363 (concat "\\b"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
364 (if regexp-string-p ; coerce to regexp
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
365 search-string
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
366 (regexp-quote search-string))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
367 "\\b")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
368 search-string))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
369 (replace (nth 5 args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
370 (fn (if back-p
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
371 (if regexp-p 're-search-backward 'search-backward)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
372 (if regexp-p 're-search-forward 'search-forward))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
373 (setq this-command 'energize-search)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
374 (cond ((equal search "")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
375 (setq energize-search-match-data nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
376 (error "No search string specified")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
377 (cond ((consp replace)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
378 ;; the "replace all" button was selected
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
379 (setq replace (car replace))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
380 ;; replace the one just searched for, if any
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
381 (cond ((and (eq last-command 'energize-search)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
382 energize-search-match-data)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
383 (store-match-data energize-search-match-data)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
384 (if back-p
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
385 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
386 (replace-match replace nil (not regexp-p)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
387 (replace-match replace nil (not regexp-p)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
388 ;; now replace all the rest
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
389 (let ((count 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
390 (while (funcall fn search nil t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
391 (if back-p
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
392 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
393 (replace-match replace nil (not regexp-p)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
394 (replace-match replace nil (not regexp-p)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
395 (setq count (1+ count)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
396 (message "%d replacement%s done." count (if (= count 1) "" "s")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
397 ;; (setq this-command nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
398 (setq energize-search-match-data nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
399 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
400 ;; otherwise, one of the search buttons was selected
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
401 (cond (replace
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
402 (or (eq last-command 'energize-search) ; fuck!!
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
403 (error "Last command was not a successful search."))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
404 (or energize-search-match-data (error "Last search failed"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
405 (store-match-data energize-search-match-data)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
406 (if back-p
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
407 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
408 (replace-match replace nil (not regexp-p)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
409 (replace-match replace nil (not regexp-p)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
410 (setq energize-search-match-data nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
411 (or (funcall fn search nil t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
412 (signal 'error
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
413 (list (cond ((and back-p regexp-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
414 "Reverse regexp search failed")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
415 (back-p "Reverse search failed")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
416 (regexp-p "Regexp search failed")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
417 (t "Search failed"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
418 search)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
419 (cond (zmacs-regions
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
420 (push-mark (if (= (point) (match-beginning 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
421 (match-end 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
422 (match-beginning 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
423 t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
424 (zmacs-activate-region)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
425 (setq energize-search-match-data (match-data))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
426 ))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
427
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
428
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
429 (defvar energize-edit-modes-specified nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
430
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
431 (defun energize-set-edit-modes-minibuf-prompt ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
432 (let* ((ee (completing-read "External editor (RET for none): "
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
433 nil nil nil nil t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
434 (te (if (equal ee "vi")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
435 (completing-read
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
436 "Terminal emulator in which to run vi (xterm, shelltool, or cmdtool): "
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
437 '(("xterm") ("shelltool") ("cmdtool")) nil t nil t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
438 ""))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
439 (iv (completing-read
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
440 "View buffers using which keybindings (emacs, vi, or less): "
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
441 '(("emacs") ("vi") ("less")) nil t nil t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
442 (ie (completing-read
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
443 "Edit other buffers using which keybindings (emacs or vi): "
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
444 '(("emacs") ("vi")) nil t nil t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
445 (ms (y-or-n-p "Use multiple windows? "))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
446 (sp (y-or-n-p "Split screens? "))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
447 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
448 (if (equal ee "") (setq ee nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
449 (if (equal te "") (setq te "xterm"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
450 (if (equal iv "") (setq iv "emacs"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
451 (if (equal ie "") (setq ie "emacs"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
452 (list ee (intern te) (intern iv) (intern ie) ms sp)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
453
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
454 (defun energize-set-edit-modes-dbox-prompt ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
455 (let* ((ee (cond ((member energize-external-editor '("" "emacs" nil)) 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
456 ((member energize-external-editor '("vi" vi))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
457 (cond ((eq energize-vi-terminal-emulator 'xterm) 1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
458 ((eq energize-vi-terminal-emulator 'cmdtool) 2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
459 (t (error "unrecognised terminal emulator"))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
460 (t 3)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
461 (o (if (and (stringp energize-external-editor)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
462 (not (equal energize-external-editor "vi")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
463 energize-external-editor
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
464 ""))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
465 (iv (cond ((memq energize-internal-viewer '(nil emacs)) 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
466 ((eq energize-internal-viewer 'vi) 1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
467 ((eq energize-internal-viewer 'less) 2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
468 (t (error "unrecognised internal-viewer"))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
469 (ie (cond ((memq energize-internal-editor '(nil emacs)) 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
470 ((eq energize-internal-editor 'vi) 1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
471 (t (error "unrecognised internal-editor"))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
472 (ms (cond ((memq energize-screen-mode '(nil single)) 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
473 ((eq energize-screen-mode 'several) 1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
474 ((eq energize-screen-mode 'multi) 2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
475 (t (error "unrecognised screen-mode"))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
476 (sp (if energize-split-screens-p 1 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
477
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
478 (result (energize-edit-mode-prompt ee ie iv o ms sp))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
479 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
480 (setq ee (nth 0 result)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
481 iv (nth 1 result)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
482 ie (nth 2 result)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
483 o (nth 3 result)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
484 ms (nth 4 result)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
485 sp (nth 5 result))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
486 (list (cond ((= ee 0) nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
487 ((= ee 1) "vi")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
488 ((= ee 2) "vi")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
489 ((= ee 3) o)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
490 (t (error "ee losing")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
491 (cond ((= ee 1) 'xterm)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
492 ((= ee 2) 'cmdtool)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
493 (t nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
494 (cond ((= iv 0) 'emacs)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
495 ((= iv 1) 'vi)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
496 ((= iv 2) 'less)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
497 (t (error "iv losing")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
498 (cond ((= ie 0) 'emacs)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
499 ((= ie 1) 'vi)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
500 (t (error "ie losing")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
501 (cond ((= ms 0) 'single)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
502 ((= ms 1) 'several)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
503 ((= ms 2) 'multi)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
504 (t (error "ms losing")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
505 (cond ((= sp 0) 'nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
506 ((= sp 1) 't)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
507 (t (error "sp losing")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
508 )))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
509
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
510 (defun energize-set-edit-modes (external-editor
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
511 terminal-emulator
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
512 internal-viewer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
513 internal-editor
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
514 multi-screen-p
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
515 split-screens-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
516 "Prompts for the various edit and view modes of Energize.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
517
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
518 The \"external editor\" is the editor which Energize should use when
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
519 you ask it to edit a file. If you simply hit return, the files will
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
520 be edited in Lucid Emacs. The default for this is taken from the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
521 environment variable $ENERGIZE_EXTERNAL_EDITOR.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
522
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
523 If you specify \"vi\" as your external editor, then you will be asked
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
524 which terminal emulator window should be launched to run the vi (either
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
525 xterm, shelltool, or cmdtool.) The default for this is taken from the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
526 environment variable $ENERGIZE_VI_WRAPPER.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
527
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
528 Many of the Energize buffers (such as the Browsers) are not editable.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
529 You have three choices for which keybindings you would like to use for
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
530 moving and searching around in those buffers: \"emacs\", \"vi\", or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
531 \"less\" (which is a popular variant of \"more\"). The default for
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
532 this is taken from the environment variable $ENERGIZE_VIEW_MODE.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
533
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
534 Some Energize buffers (such as the Project buffers) are editable, and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
535 an external editor cannot be used on them. For these buffers, you have
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
536 a choice of either \"emacs\" or \"vi\" keybindings. The default for
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
537 this is taken from the environment variable $ENERGIZE_EDIT_MODE.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
538
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
539 If you are not using an external editor, then specifying \"vi\" here
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
540 means that evi, the emacs vi emulator, will be used to edit your source
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
541 files as well.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
542
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
543 You will also be asked whether Energize should automatically pop up multiple
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
544 windows (\"frames\" in emacs terminology) or should use and reuse one only
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
545 \(which is the traditional emacs model.) The default for this is taken from
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
546 the environment variable $ENERGIZE_MULTI_SCREEN_MODE.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
547
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
548 Sometimes Energize wants to display two buffers at once, for example, the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
549 Debugger buffer and the source file corresponding to the current stack frame.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
550 You have two choices for how this should happen: one is to display the source
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
551 in the debugger frame, `splitting' the frame vertically, and the other is to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
552 use two frames, one for the debugger and one for the source. The default for
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
553 this is taken from the envvironment variable $ENERGIZE_SPLIT_SCREENS_P."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
554 ;; (interactive (energize-set-edit-modes-minibuf-prompt))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
555 (interactive (energize-set-edit-modes-dbox-prompt))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
556 (if (null terminal-emulator) (setq terminal-emulator 'xterm))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
557 (if (equal energize-external-editor "emacs")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
558 (setq energize-external-editor nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
559
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
560 (or (null external-editor)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
561 (stringp external-editor)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
562 (signal 'wrong-type-argument (list 'stringp external-editor)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
563 (or (symbolp terminal-emulator)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
564 (signal 'wrong-type-argument (list 'symbolp terminal-emulator)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
565 (or (symbolp internal-viewer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
566 (signal 'wrong-type-argument (list 'symbolp internal-viewer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
567 (or (symbolp internal-editor)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
568 (signal 'wrong-type-argument (list 'symbolp internal-editor)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
569 (or (memq split-screens-p '(t nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
570 (error "split-screens-p must be t or nil"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
571
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
572 (cond ((equal external-editor "") (setq energize-external-editor nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
573 ((equal external-editor "vi") (setq energize-external-editor 'vi))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
574 (t (setq energize-external-editor external-editor)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
575
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
576 (if (eq internal-viewer 'emacs) (setq internal-viewer nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
577 (if (eq internal-editor 'emacs) (setq internal-editor nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
578 (setq energize-vi-terminal-emulator terminal-emulator)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
579 (setq energize-internal-editor internal-editor)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
580 (setq energize-internal-viewer internal-viewer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
581
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
582 (cond ((and (null energize-internal-viewer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
583 (null energize-internal-editor))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
584 ;; Emacs all the way. They must be clueful.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
585 ;; (remove-hook 'energize-disconnect-hook 'save-buffers-kill-emacs)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
586 (setq pop-up-windows energize-split-screens-p))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
587 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
588 ;; (add-hook 'energize-disconnect-hook 'save-buffers-kill-emacs)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
589 (setq pop-up-windows nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
590
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
591 (cond (energize-external-editor
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
592 (add-hook 'energize-disconnect-hook 'save-buffers-kill-emacs)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
593 (energize-external-editor-set-menubar))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
594 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
595 (remove-hook 'energize-disconnect-hook 'save-buffers-kill-emacs)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
596 (energize-internal-editor-set-menubar)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
597
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
598 (cond ;((eq multi-screen-p energize-screen-mode)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
599 ; nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
600 ((memq multi-screen-p '(t multi))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
601 (energize-multi-screen-mode))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
602 ((memq multi-screen-p '(nil single))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
603 (energize-single-screen-mode))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
604 ((memq multi-screen-p '(several))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
605 (energize-several-screens-mode))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
606 (t (error "multi-screen-p %S unrecognised" multi-screen-p)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
607
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
608 (setq energize-split-screens-p split-screens-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
609
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
610 (let ((buffers (buffer-list)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
611 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
612 (while buffers
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
613 (if (energize-buffer-p (car buffers))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
614 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
615 (set-buffer (car buffers))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
616 (normal-mode)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
617 (energize-buffer-creation-hook-function (car buffers))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
618 (setq buffers (cdr buffers)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
619 (setq energize-edit-modes-specified t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
620 nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
621
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
622 (defun energize-hack-external-editor-mode ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
623 (if energize-edit-modes-specified
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
624 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
625 (condition-case c
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
626 (let ((ee (getenv "ENERGIZE_EXTERNAL_EDITOR"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
627 (te (getenv "ENERGIZE_VI_WRAPPER"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
628 (iv (getenv "ENERGIZE_VIEW_MODE"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
629 (ie (getenv "ENERGIZE_EDIT_MODE"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
630 (ms (getenv "ENERGIZE_MULTI_SCREEN_MODE"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
631 (sp (getenv "ENERGIZE_SPLIT_SCREENS_P"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
632 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
633 (if (member ee '("" nil)) (setq ee nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
634 (if (member te '("" nil)) (setq te "xterm"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
635 (if (member iv '("" nil)) (setq iv "emacs"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
636 (if (member ie '("" nil)) (setq ie "emacs"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
637 (if (member sp '("" nil)) (setq sp "yes"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
638 (if ms (setq ms (downcase ms)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
639 (setq sp (downcase sp))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
640 (let ((standard-output (function external-debugging-output)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
641 (if (member te '("xterm" "shelltool" "cmdtool"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
642 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
643 (princ (format
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
644 "$ENERGIZE_VI_WRAPPER is %S, not xterm, shelltool, or cmdtool.\n" te))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
645 (setq te nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
646 (if (member iv '("emacs" "vi" "less"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
647 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
648 (princ (format
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
649 "$ENERGIZE_VIEW_MODE is %S, not emacs, vi, or less.\n"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
650 iv))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
651 (setq iv nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
652 (if (member ie '("emacs" "vi" "less"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
653 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
654 (princ (format
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
655 "$ENERGIZE_EDIT_MODE is %S, not emacs or vi.\n" ie))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
656 (setq ie nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
657 (cond ((member ms '("yes" "y" "true" "on" "1" "" "multi" "many"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
658 "often"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
659 (setq ms 'multi))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
660 ((member ms '("no" "n" "false" "off" "0" "single"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
661 "never"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
662 (setq ms 'single))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
663 ((member ms '("several" "some" "few" "sometimes"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
664 (setq ms 'several))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
665 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
666 (if ms
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
667 (princ
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
668 (format
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
669 "$ENERGIZE_MULTI_SCREEN_MODE was %S, not often, sometimes, or never\n"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
670 ms)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
671 (setq ms (or energize-screen-mode
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
672 (if (and (null ee)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
673 (equal iv "emacs")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
674 (equal ie "emacs"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
675 'single
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
676 'multi)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
677 (cond ((member sp '("yes" "y" "true" "on" "1" ""))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
678 (setq sp t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
679 ((member sp '("no" "n" "false" "off" "0"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
680 (setq sp nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
681 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
682 (princ
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
683 (format "$ENERGIZE_SPLIT_SCREENS_P was %S, not a boolean.\n"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
684 sp))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
685 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
686 (energize-set-edit-modes ee (intern te) (intern iv) (intern ie) ms sp)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
687 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
688 ;; condition-case
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
689 (error
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
690 (let ((standard-output (function external-debugging-output)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
691 (princ "Internal error: %S\n" c))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
692
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
693
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
694 ;;; Make the buffers menu say "view file" if in external-editor mode
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
695 ;;; Originally defined in menubar.el
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
696
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
697 (defun format-buffers-menu-line (buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
698 "Returns a string to represent the given buffer in the Buffer menu.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
699 nil means the buffer shouldn't be listed. You can redefine this."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
700 (if (string-match "\\` " (setq buffer (buffer-name buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
701 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
702 (if energize-external-editor
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
703 (concat
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
704 ; (if (buffer-file-name (get-buffer buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
705 ; "View File "
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
706 ; "View Buffer ")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
707 "View "
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
708 buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
709 buffer)))