3
3
;; Copyright (C) 1989--1994 Bates, Kademan, Ritter and Smith
4
4
;; Copyright (C) 1997--2010 A.J. Rossini, Rich M. Heiberger, Martin
5
;; Maechler, Kurt Hornik, Rodney Sparapani, and Stephen Eglen.
5
;; Maechler, Kurt Hornik, Rodney Sparapani, and Stephen Eglen.
6
6
;; Copyright (C) 2011--2012 A.J. Rossini, Richard M. Heiberger, Martin Maechler,
7
;; Kurt Hornik, Rodney Sparapani, Stephen Eglen and Vitalie Spinu.
7
;; Kurt Hornik, Rodney Sparapani, Stephen Eglen and Vitalie Spinu.
9
;; Original Author: David Smith <dsmith@stats.adelaide.edu.au>
10
;; Maintainers: ESS-core <ESS-core@r-project.org>
9
;; Author: David Smith <dsmith@stats.adelaide.edu.au>
10
;; Maintainer: ESS-core <ESS-core@r-project.org>
12
12
;; This file is part of ESS
40
40
(require 'ess-inf))
42
(autoload 'ess-eval-region "ess-inf" "[autoload]" t)
43
(autoload 'ess-eval-region-and-go "ess-inf" "[autoload]" t)
44
(autoload 'ess-eval-function "ess-inf" "[autoload]" t)
45
(autoload 'ess-eval-function-and-go "ess-inf" "[autoload]" t)
46
(autoload 'ess-eval-line "ess-inf" "[autoload]" t)
47
(autoload 'ess-eval-line-and-go "ess-inf" "[autoload]" t)
48
(autoload 'ess-eval-line-and-step "ess-inf" "[autoload]" t)
50
(autoload 'comint-previous-prompt "comint" "[autoload]" t)
51
(autoload 'comint-next-prompt "comint" "[autoload]" t)
53
(autoload 'ess-load-file "ess-inf" "[autoload]" t)
54
(autoload 'ess-request-a-process "ess-inf" "(autoload)" nil)
55
(autoload 'get-ess-buffer "ess-inf" "(autoload)" nil)
56
(autoload 'ess-switch-to-ESS "ess-inf" "(autoload)" nil)
57
(autoload 'ess-switch-to-end-of-ESS "ess-inf" "(autoload)" nil)
58
(autoload 'ess-eval-linewise "ess-inf" "(autoload)" nil)
59
(autoload 'inferior-ess-get-old-input "ess-inf" "(autoload)" nil)
42
(autoload 'ess-eval-region "ess-inf" "[autoload]" t)
43
(autoload 'ess-eval-region-and-go "ess-inf" "[autoload]" t)
44
(autoload 'ess-eval-function "ess-inf" "[autoload]" t)
45
(autoload 'ess-eval-function-and-go "ess-inf" "[autoload]" t)
46
(autoload 'ess-eval-line "ess-inf" "[autoload]" t)
47
(autoload 'ess-eval-line-and-go "ess-inf" "[autoload]" t)
48
(autoload 'ess-eval-line-and-step "ess-inf" "[autoload]" t)
50
(autoload 'comint-previous-prompt "comint" "[autoload]" t)
51
(autoload 'comint-next-prompt "comint" "[autoload]" t)
53
(autoload 'ess-load-file "ess-inf" "[autoload]" t)
54
(autoload 'ess-request-a-process "ess-inf" "(autoload)" nil)
55
(autoload 'get-ess-buffer "ess-inf" "(autoload)" nil)
56
(autoload 'ess-switch-to-ESS "ess-inf" "(autoload)" nil)
57
(autoload 'ess-switch-to-end-of-ESS "ess-inf" "(autoload)" nil)
58
(autoload 'ess-eval-linewise "ess-inf" "(autoload)" nil)
59
(autoload 'inferior-ess-get-old-input "ess-inf" "(autoload)" nil)
61
61
; ess-transcript-mode
62
62
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
74
74
(define-key ess-transcript-mode-map "\C-c\C-s" 'ess-switch-process)
75
75
(define-key ess-transcript-mode-map "\C-c\C-r" 'ess-eval-region)
76
76
(define-key ess-transcript-mode-map "\C-c\M-r" 'ess-eval-region-and-go)
77
;; (define-key ess-transcript-mode-map "\M-\C-x" 'ess-eval-function)
78
;; (define-key ess-transcript-mode-map "\C-c\M-f" 'ess-eval-function-and-go)
79
;; (define-key ess-transcript-mode-map "\C-c\C-j" 'ess-eval-line)
80
;; (define-key ess-transcript-mode-map "\C-c\M-j" 'ess-eval-line-and-go)
77
;; (define-key ess-transcript-mode-map "\M-\C-x" 'ess-eval-function)
78
;; (define-key ess-transcript-mode-map "\C-c\M-f" 'ess-eval-function-and-go)
79
;; (define-key ess-transcript-mode-map "\C-c\C-j" 'ess-eval-line)
80
;; (define-key ess-transcript-mode-map "\C-c\M-j" 'ess-eval-line-and-go)
82
82
(define-key ess-transcript-mode-map "\C-c\C-k" 'ess-force-buffer-current)
83
83
(define-key ess-transcript-mode-map "\C-c\C-q" 'ess-quit)
85
85
(define-key ess-transcript-mode-map "\C-c\C-j" 'ess-transcript-send-command)
86
86
(define-key ess-transcript-mode-map "\C-c\M-j" 'ess-transcript-send-command-and-move)
87
(define-key ess-transcript-mode-map "\M-\C-a" 'ess-beginning-of-function)
88
(define-key ess-transcript-mode-map "\M-\C-e" 'ess-end-of-function)
87
(define-key ess-transcript-mode-map "\M-\C-a" 'ess-beginning-of-function)
88
(define-key ess-transcript-mode-map "\M-\C-e" 'ess-end-of-function)
89
89
(define-key ess-transcript-mode-map "\C-c\C-y" 'ess-switch-to-ESS)
90
90
(define-key ess-transcript-mode-map "\C-c\C-z" 'ess-switch-to-end-of-ESS)
91
91
(define-key ess-transcript-mode-map "\C-c\C-v" 'ess-display-help-on-object)
92
92
(define-key ess-transcript-mode-map "\C-c\C-d" 'ess-dump-object-into-edit-buffer)
93
93
(define-key ess-transcript-mode-map "\C-c\C-t" 'ess-execute-in-tb)
94
(define-key ess-transcript-mode-map "\C-c\t" 'ess-complete-object-name)
95
(define-key ess-transcript-mode-map "\C-a" 'comint-bol)
96
(define-key ess-transcript-mode-map "\M-\t" 'comint-replace-by-expanded-filename)
97
(define-key ess-transcript-mode-map "\M-?" 'comint-dynamic-list-completions)
94
(define-key ess-transcript-mode-map "\C-c\t" 'ess-complete-object-name)
95
(define-key ess-transcript-mode-map "\C-a" 'comint-bol)
96
(define-key ess-transcript-mode-map "\M-\t" 'comint-replace-by-expanded-filename)
97
(define-key ess-transcript-mode-map "\M-?" 'comint-dynamic-list-completions)
98
98
(define-key ess-transcript-mode-map "\C-c\C-k" 'ess-request-a-process)
99
(define-key ess-transcript-mode-map "{" 'ess-electric-brace)
100
(define-key ess-transcript-mode-map "}" 'ess-electric-brace)
101
(define-key ess-transcript-mode-map "\e\C-h" 'ess-mark-function)
102
(define-key ess-transcript-mode-map "\e\C-q" 'ess-indent-exp)
103
;(define-key ess-transcript-mode-map "\177" 'backward-delete-char-untabify)
104
(define-key ess-transcript-mode-map "\t" 'ess-indent-command)
99
(define-key ess-transcript-mode-map "{" 'ess-electric-brace)
100
(define-key ess-transcript-mode-map "}" 'ess-electric-brace)
101
(define-key ess-transcript-mode-map "\e\C-h" 'ess-mark-function)
102
(define-key ess-transcript-mode-map "\e\C-q" 'ess-indent-exp)
103
;(define-key ess-transcript-mode-map "\177" 'backward-delete-char-untabify)
104
(define-key ess-transcript-mode-map "\t" 'ess-indent-command)
106
106
(define-key ess-transcript-mode-map "\C-c\C-p" 'comint-previous-prompt)
107
107
(define-key ess-transcript-mode-map "\C-c\C-n" 'comint-next-prompt)
108
108
;; (define-key ess-transcript-mode-map "\C-c\C-n" 'ess-eval-line-and-step)
110
(define-key ess-transcript-mode-map "\r" 'ess-transcript-send-command-and-move)
111
(define-key ess-transcript-mode-map "\M-\r" 'ess-transcript-send-command)
112
(define-key ess-transcript-mode-map "\C-c\r" 'ess-transcript-copy-command)
110
(define-key ess-transcript-mode-map "\r" 'ess-transcript-send-command-and-move)
111
(define-key ess-transcript-mode-map "\M-\r" 'ess-transcript-send-command)
112
(define-key ess-transcript-mode-map "\C-c\r" 'ess-transcript-copy-command)
113
113
(define-key ess-transcript-mode-map "\C-c\C-w" 'ess-transcript-clean-region))
115
115
(easy-menu-define
116
ess-transcript-mode-menu ess-transcript-mode-map
117
"Menu for use in S transcript mode."
119
["What is this? (beta)" ess-mouse-me t]
120
["Describe" describe-mode t]
121
["About" (ess-goto-info "Transcript Mode") t]
122
["Send bug report" ess-submit-bug-report t]
124
["Mark cmd group" mark-paragraph t]
125
["Previous prompt" comint-previous-prompt t]
126
["Next prompt" comint-next-prompt t]
128
["Send and move" ess-transcript-send-command-and-move t]
129
["Copy command" ess-transcript-copy-command t]
130
["Send command" ess-transcript-send-command t]
131
["Clean Region" ess-transcript-DO-clean-region t]
132
["Switch S process" ess-switch-process t]
116
ess-transcript-mode-menu ess-transcript-mode-map
117
"Menu for use in S transcript mode."
119
["What is this? (beta)" ess-mouse-me t]
120
["Describe" describe-mode t]
121
["About" (ess-goto-info "Transcript Mode") t]
122
["Send bug report" ess-submit-bug-report t]
124
["Mark cmd group" mark-paragraph t]
125
["Previous prompt" comint-previous-prompt t]
126
["Next prompt" comint-next-prompt t]
128
["Send and move" ess-transcript-send-command-and-move t]
129
["Copy command" ess-transcript-copy-command t]
130
["Send command" ess-transcript-send-command t]
131
["Clean Region" ess-transcript-DO-clean-region t]
132
["Switch S process" ess-switch-process t]
135
135
(unless (featurep 'xemacs)
136
136
(if (featurep 'ess-trans)
137
137
(define-key ess-transcript-mode-map [menu-bar ess-trans]
138
(cons "ess-trans" ess-transcript-mode-menu))
138
(cons "ess-trans" ess-transcript-mode-menu))
139
139
(eval-after-load "ess-trans"
140
140
'(define-key ess-transcript-mode-map
143
ess-transcript-mode-menu)))))
143
ess-transcript-mode-menu)))))
145
145
(when (featurep 'xemacs)
146
146
(defun ess-transcript-mode-xemacs-menu ()
147
"Hook to install `ess-transcript-mode' menu for XEmacs (w/ easymenu)."
148
(if 'ess-transcript-mode
149
(easy-menu-add ess-transcript-mode-menu)
150
(easy-menu-remove ess-transcript-mode-menu)))
147
"Hook to install `ess-transcript-mode' menu for XEmacs (w/ easymenu)."
148
(if 'ess-transcript-mode
149
(easy-menu-add ess-transcript-mode-menu)
150
(easy-menu-remove ess-transcript-mode-menu)))
152
152
(add-hook 'ess-transcript-mode-hook 'ess-transcript-mode-xemacs-menu))
215
215
(let* ((proc (or ess-local-process-name
216
(ess-request-a-process "Evaluate into which process? " t)))
217
(ess-buf (get-ess-buffer proc)))
216
(ess-request-a-process "Evaluate into which process? " t)))
217
(ess-buf (get-ess-buffer proc)))
218
218
(setq ess-local-process-name proc)
219
219
(if (get-buffer-window ess-buf) nil
220
220
(display-buffer ess-buf t))
221
221
(let ((input (inferior-ess-get-old-input)))
224
(goto-char (point-max))
225
(ess-eval-linewise input)))))
224
(goto-char (point-max))
225
(ess-eval-linewise input)))))
227
227
(defun ess-transcript-send-command-and-move ()
228
228
"Send the command on this line, and move point to the next command."
230
;; (ess-transcript-send-command) ;; This doesn't work properly
231
;; replacement code begins
232
(let* ((proc (or ess-local-process-name
233
(ess-request-a-process "Evaluate into which process? " t)))
234
(ess-buf (get-ess-buffer proc)))
235
(setq ess-local-process-name proc)
236
(if (get-buffer-window ess-buf) nil
237
(display-buffer ess-buf t))
238
(let ((input (inferior-ess-get-old-input)))
241
(goto-char (point-max))
242
(ess-eval-linewise input nil nil nil 1))))
243
;; replacement code ends
230
;; (ess-transcript-send-command) ;; This doesn't work properly
231
;; replacement code begins
232
(let* ((proc (or ess-local-process-name
233
(ess-request-a-process "Evaluate into which process? " t)))
234
(ess-buf (get-ess-buffer proc)))
235
(setq ess-local-process-name proc)
236
(if (get-buffer-window ess-buf) nil
237
(display-buffer ess-buf t))
238
(let ((input (inferior-ess-get-old-input)))
241
(goto-char (point-max))
242
(ess-eval-linewise input nil nil nil 1))))
243
;; replacement code ends
244
244
(goto-char ess-temp-point)
245
245
(comint-next-prompt 1))
269
269
(unless inferior-ess-prompt
270
270
(error "Cannot clean ESS transcript region in this mode!
271
271
That only works in ess-transcript-mode or inferior-ess-mode ('*R*' etc)."
272
;; Maybe call ess-clean-region-in-new-transcript ?"))
272
;; Maybe call ess-clean-region-in-new-transcript ?"))
274
274
(let ((do-toggle (and buffer-read-only even-if-read-only))
275
(ess-prompt-rx (concat "^" inferior-ess-prompt)))
275
(ess-prompt-rx (concat "^" inferior-ess-prompt)))
277
277
(if do-toggle (toggle-read-only 0))
278
278
(save-restriction
279
(unless (featurep 'xemacs) ;; does not exist in xemacs:
281
(narrow-to-region beg end)
282
(goto-char (point-min))
283
(delete-non-matching-lines ess-prompt-rx)
284
(goto-char (point-min))
285
;; (replace-regexp * * ) :
286
(while (re-search-forward ess-prompt-rx nil t)
287
(replace-match "" nil nil)))
279
(unless (featurep 'xemacs) ;; does not exist in xemacs:
281
(narrow-to-region beg end)
282
(goto-char (point-min))
283
(delete-non-matching-lines ess-prompt-rx)
284
(goto-char (point-min))
285
;; (replace-regexp * * ) :
286
(while (re-search-forward ess-prompt-rx nil t)
287
(replace-match "" nil nil)))
289
289
(if do-toggle (toggle-read-only 1)))))