28
28
(defun emacs-rc nil "" (interactive)
32
32
(defun emacs-macro nil "" (interactive)
36
36
(defun emacs-macro-control-text nil "" (interactive)
40
40
(defun emacs-macro-print-text nil "" (interactive)
44
44
(defun emacs-cell (result-type) "" (interactive)
45
(setq spread-name (buffer-name))
46
(setq r (count-lines 1 (point)))
47
(setq c (current-column))
50
(format "emacs.cell('%s', %s, %s, %s)"
51
spread-name r c result-type
45
(setq spread-name (buffer-name))
46
(setq r (count-lines 1 (point)))
47
(setq c (current-column))
50
(format "emacs.cell('%s', %s, %s, %s)"
51
spread-name r c result-type
55
(set-buffer "*command*")
57
(goto-char (point-min))
58
(setq beg (point)) (end-of-line)
59
(if (equal result-type "4")
61
(setq command (buffer-substring beg (point)))
63
(spread-insert command)
65
(setq command (read-string "> " (buffer-substring beg (point))))
67
(spread-insert command)
68
(spread-insert "invisible(assign(.Active, x))")
69
(spread-print-find spread-name nil)
70
(goto-line r)(forward-char c)
55
(set-buffer "*command*")
57
(goto-char (point-min))
58
(setq beg (point)) (end-of-line)
59
(if (equal result-type "4")
61
(setq command (buffer-substring beg (point)))
63
(spread-insert command)
65
(setq command (read-string "> " (buffer-substring beg (point))))
67
(spread-insert command)
68
(spread-insert "invisible(assign(.Active, x))")
69
(spread-print-find spread-name nil)
70
(goto-line r)(forward-char c)
74
74
(defun spread-insert (spread-command) "" (interactive)
75
75
(goto-char (point-max))
76
76
(insert spread-command)
77
77
(comint-send-input)
78
78
(accept-process-output spread-process)
81
81
(defun revert-t-t nil "revert-buffer with no questions asked"
83
83
(revert-buffer t t)
86
86
(defun revert-t-t-read-only nil "revert-buffer, no questions, read-only"
88
88
(revert-buffer t t)
89
89
(setq buffer-read-only t)
92
92
(define-key global-map "\C-cv" 'revert-t-t)
105
105
(define-key spread-mode-map [mouse-2] 'spread-mouse-print-find-emacs)
106
106
(define-key spread-mode-map [mouse-3] 'spread-mouse-rc)
107
;; (define-key spread-mode-map [double-mouse-1] 'spread-mouse-rc) ;doesn't work
107
;; (define-key spread-mode-map [double-mouse-1] 'spread-mouse-rc) ;doesn't work
109
109
(define-key spread-mode-map [menu-bar spread]
110
110
(cons "Spread" (make-sparse-keymap "Spread")))
111
; (define-key spread-mode-map [menu-bar spread spread-macro]
112
; '("macro" . spread-macro))
111
; (define-key spread-mode-map [menu-bar spread spread-macro]
112
; '("macro" . spread-macro))
113
113
(define-key spread-mode-map [menu-bar spread spread-before]
114
114
'("before" . spread-before))
115
115
(define-key spread-mode-map [menu-bar spread spread-after]
118
118
(cons "Macro" (make-sparse-keymap "sprdtwo")))
119
119
(define-key spread-mode-map [menu-bar spread spread-macro display]
120
120
'("after" . spread-display))
121
; (define-key spread-mode-map [mouse-2] 'emacs-menu-print-find-ww)
121
; (define-key spread-mode-map [mouse-2] 'emacs-menu-print-find-ww)
124
124
(defun spread-mouse-rc (event) "move point then enter"
125
125
(interactive "e")
126
126
(mouse-set-point event)
130
130
(defun spread-mouse-print-find-emacs (event) "move point then find file"
131
131
(interactive "e")
132
132
(mouse-set-point event)
133
133
(emacs-print-find-emacs)
136
136
(defun spread-mode () "Major mode for spreadsheets.\\{spread-mode-map}"
143
143
(setq major-mode 'spread-mode)
144
144
(if (equal (buffer-name) ".Registry") (spread-highlight-macro))
145
145
(setq buffer-read-only t)
149
149
;; from dired.el L547
150
; (put-text-property (point)
152
; (dired-move-to-end-of-filename)
154
; 'mouse-face 'highlight)
150
; (put-text-property (point)
152
; (dired-move-to-end-of-filename)
154
; 'mouse-face 'highlight)
156
156
;; (put-text-property (point) (mark) 'mouse-face 'highlight)
159
159
(defun spread-highlight-macro nil
160
"highlight spread.frame names for mouse access"
163
(goto-char (point-min))
164
(search-forward "**macro**")(forward-char)
166
(toggle-read-only -1)
168
(setq beg (point))(end-of-line)
169
(not (= beg (point)))
171
(put-text-property beg (1-(point)) 'mouse-face 'highlight)
160
"highlight spread.frame names for mouse access"
163
(goto-char (point-min))
164
(search-forward "**macro**")(forward-char)
166
(toggle-read-only -1)
168
(setq beg (point))(end-of-line)
169
(not (= beg (point)))
171
(put-text-property beg (1-(point)) 'mouse-face 'highlight)
179
179
(defun emacs-print-find-emacs nil "" (interactive)
180
180
(beginning-of-line)
181
181
(setq beg (point)) (end-of-line) (backward-char)
182
182
(setq spread-name (buffer-substring beg (point)))
183
183
(spread-print-find spread-name nil)
189
(defun find-spread-frame-directory nil
190
"Locate directory in which spread.frame functions are stored."
189
(defun find-spread-frame-directory nil
190
"Locate directory in which spread.frame functions are stored."
191
191
(list-command-history)
192
192
(set-buffer "*Command History*")
193
193
(goto-char (point-min))
196
196
(end-of-line)(search-backward "/")
197
197
(goto-char (match-end 0))
198
198
(setq spread-frame-directory
199
(expand-file-name (buffer-substring beg (point))))
199
(expand-file-name (buffer-substring beg (point))))
202
202
(defun inferior-spread-mode ()
203
"Major mode for running spread.frames under S/Splus."
203
"Major mode for running spread.frames under S/Splus."
204
204
(comint-run S-program)
205
205
(setq comint-prompt-regexp shell-prompt-pattern)
206
206
(setq major-mode 'inferior-spread-mode)
209
209
(setq spread-process (get-buffer-process (current-buffer)))
210
210
(set-process-filter spread-process 'comint-output-filter)
211
211
(set-variable 'comint-output-filter-functions
212
'(spread-output-filter
213
comint-postoutput-scroll-to-bottom)
212
'(spread-output-filter
213
comint-postoutput-scroll-to-bottom)
215
215
(set-variable 'comint-scroll-to-bottom-on-output "this")
216
216
(set-variable 'comint-scroll-show-maximum-output t)
217
(if (not(file-writable-p ".Data/.Audit"))
217
(if (not(file-writable-p ".Data/.Audit"))
218
218
(accept-process-output spread-process))
219
(accept-process-output spread-process)
219
(accept-process-output spread-process)
223
223
(defun spread-output-filter (str)
224
"detect errors in S output"
224
"detect errors in S output"
226
226
(string-match "Dumped" str)
227
227
(string-match "Error" str)
230
(switch-to-buffer-other-window S-buffer)
231
(comint-show-maximum-output)
232
(set-variable 'quit-flag t); beeps and writes "quit" in the message area
230
(switch-to-buffer-other-window S-buffer)
231
(comint-show-maximum-output)
232
(set-variable 'quit-flag t); beeps and writes "quit" in the message area
240
;(put 'spread-region 'menu-enable 'mark-active)
241
;(put 'spread-validate-region 'menu-enable 'mark-active)
242
;(put 'spread-print 'menu-enable '(stringp spread-print-file))
243
;(put 'spread-alt-print 'menu-enable '(stringp spread-print-file))
244
;(put 'spread-view 'menu-enable '(stringp spread-print-file))
245
;(put 'spread-recenter-output-buffer 'menu-enable '(get-buffer "*spread-shell*"))
246
;(put 'spread-kill-job 'menu-enable '(spread-shell-running))
240
;(put 'spread-region 'menu-enable 'mark-active)
241
;(put 'spread-validate-region 'menu-enable 'mark-active)
242
;(put 'spread-print 'menu-enable '(stringp spread-print-file))
243
;(put 'spread-alt-print 'menu-enable '(stringp spread-print-file))
244
;(put 'spread-view 'menu-enable '(stringp spread-print-file))
245
;(put 'spread-recenter-output-buffer 'menu-enable '(get-buffer "*spread-shell*"))
246
;(put 'spread-kill-job 'menu-enable '(spread-shell-running))
250
250
(defun emacs-menu-print-find (spread-name) "" (interactive)
251
251
(spread-print-find spread-name nil)
254
254
(defun spread-print-find (spread-name update-Registry)
255
255
"Place SPREAD-NAME in foreground of S-buffer (*S* or *Splus*),
260
260
(set-buffer S-buffer)
262
262
(format "print.find.emacs('%s', update.Registry=%s)"
263
spread-name (if update-Registry "T" "F")))
263
spread-name (if update-Registry "T" "F")))
264
264
(if update-Registry
265
265
(save-excursion (spread-find-file ".Registry")))
266
266
(spread-print-sprds)
267
267
(switch-to-buffer spread-name)
270
270
(defun spread-print-sprds () "Display in buffers all views of spread.frame"
273
(set-buffer "*command*")
275
(goto-char (point-min))
273
(set-buffer "*command*")
275
(goto-char (point-min))
277
(while (< (point) (point-max))
278
(set-buffer "*command*")
279
(setq beg (point)) (end-of-line)
280
(setq spread-name-i (buffer-substring beg (point)))
281
(save-excursion (spread-find-file spread-name-i))
277
(while (< (point) (point-max))
278
(set-buffer "*command*")
279
(setq beg (point)) (end-of-line)
280
(setq spread-name-i (buffer-substring beg (point)))
281
(save-excursion (spread-find-file spread-name-i))
285
285
(defun spread-find-file (spread-name) "Display one view of spread.frame"
313
313
(setq spread-home-directory (dired-current-directory))
314
314
(find-spread-frame-directory)
315
315
(kill-buffer "*Command History*")
316
(if (not spread-directory-p)
316
(if (not spread-directory-p)
317
317
(progn (make-directory spread-directory)
318
(setq spread-directory-p t)))
318
(setq spread-directory-p t)))
319
319
(setq S-program (read-string "Splus or S? " "Splus"))
320
320
(setq S-buffer (concat "*" S-program "*"))
321
321
(if (not (get-buffer S-buffer))
322
(get-buffer-create S-buffer))
322
(get-buffer-create S-buffer))
323
323
(if (get-buffer-process S-buffer) (set-variable 'quit-flag t))
324
324
(set-buffer S-buffer)
325
325
(cd spread-home-directory)
326
326
(inferior-spread-mode)
328
328
(format "attach('%s.Data')" spread-frame-directory))
330
330
(format "emacs.start('%s')" spread-directory))
331
331
(find-file spread-command-file)
332
332
(spread-find-file ".Registry")