From: Emilio Lopes <lopes.emilio@gmail.com>
Subject: Reposting cmuscheme patches as context diffs
Date: Tue, 26 Jul 2005 17:57:32 +0200 [thread overview]
Message-ID: <72463bb5050726085746b5d84a@mail.gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 73 bytes --]
At request I'm reposting here my changes to cmuscheme as context diffs.
[-- Attachment #2: cmuscheme-runscheme.patch --]
[-- Type: application/octet-stream, Size: 2615 bytes --]
*** orig/lisp/cmuscheme.el
--- mod/lisp/cmuscheme.el
***************
*** 300,311 ****
"Switch to the scheme process buffer.
With argument, position cursor at end of buffer."
(interactive "P")
! (if (get-buffer scheme-buffer)
(pop-to-buffer scheme-buffer)
! (error "No current process buffer. See variable `scheme-buffer'"))
! (cond (eob-p
! (push-mark)
! (goto-char (point-max)))))
(defun scheme-send-region-and-go (start end)
"Send the current region to the inferior Scheme process.
--- 300,312 ----
"Switch to the scheme process buffer.
With argument, position cursor at end of buffer."
(interactive "P")
! (if (or (and scheme-buffer (get-buffer scheme-buffer))
! (scheme-interactively-start-process))
(pop-to-buffer scheme-buffer)
! (error "No current process buffer. See variable `scheme-buffer'"))
! (when eob-p
! (push-mark)
! (goto-char (point-max))))
(defun scheme-send-region-and-go (start end)
"Send the current region to the inferior Scheme process.
***************
*** 417,429 ****
for a minimal, simple implementation. Feel free to extend it.")
(defun scheme-proc ()
! "Return the current scheme process. See variable `scheme-buffer'."
! (let ((proc (get-buffer-process (if (eq major-mode 'inferior-scheme-mode)
! (current-buffer)
! scheme-buffer))))
! (or proc
! (error "No current process. See variable `scheme-buffer'"))))
!
;;; Do the user's customisation...
--- 418,444 ----
for a minimal, simple implementation. Feel free to extend it.")
(defun scheme-proc ()
! "Return the current Scheme process, starting one if necessary.
! See variable `scheme-buffer'."
! (unless (and scheme-buffer
! (get-buffer scheme-buffer)
! (comint-check-proc scheme-buffer))
! (scheme-interactively-start-process))
! (or (scheme-get-process)
! (error "No current process. See variable `scheme-buffer'")))
!
! (defun scheme-get-process ()
! "Return the current Scheme process or nil if none is running."
! (get-buffer-process (if (eq major-mode 'inferior-scheme-mode)
! (current-buffer)
! scheme-buffer)))
!
! (defun scheme-interactively-start-process (&optional cmd)
! "Start an inferior Scheme process. Return the process started.
! Since this command is run implicitly, always ask the user for the
! command to run."
! (save-window-excursion
! (run-scheme (read-string "Run Scheme: " scheme-program-name))))
;;; Do the user's customisation...
[-- Attachment #3: cmuscheme-startfile.patch --]
[-- Type: application/octet-stream, Size: 2890 bytes --]
*** orig/lisp/cmuscheme.el
--- mod/lisp/cmuscheme.el
***************
*** 233,243 ****
;;;###autoload
(defun run-scheme (cmd)
! "Run an inferior Scheme process, input and output via buffer *scheme*.
If there is a process already running in `*scheme*', switch to that buffer.
With argument, allows you to edit the command line (default is value
! of `scheme-program-name'). Runs the hooks `inferior-scheme-mode-hook'
! \(after the `comint-mode-hook' is run).
\(Type \\[describe-mode] in the process buffer for a list of commands.)"
(interactive (list (if current-prefix-arg
--- 233,247 ----
;;;###autoload
(defun run-scheme (cmd)
! "Run an inferior Scheme process, input and output via buffer `*scheme*'.
If there is a process already running in `*scheme*', switch to that buffer.
With argument, allows you to edit the command line (default is value
! of `scheme-program-name').
! If a file `~/.emacs_SCHEMENAME' exists, it is given as initial input.
! Note that this may lose due to a timing error if the Scheme processor
! discards input when it starts up.
! Runs the hook `inferior-scheme-mode-hook' \(after the `comint-mode-hook'
! is run).
\(Type \\[describe-mode] in the process buffer for a list of commands.)"
(interactive (list (if current-prefix-arg
***************
*** 246,258 ****
(if (not (comint-check-proc "*scheme*"))
(let ((cmdlist (scheme-args-to-list cmd)))
(set-buffer (apply 'make-comint "scheme" (car cmdlist)
! nil (cdr cmdlist)))
(inferior-scheme-mode)))
(setq scheme-program-name cmd)
(setq scheme-buffer "*scheme*")
(pop-to-buffer "*scheme*"))
;;;###autoload (add-hook 'same-window-buffer-names "*scheme*")
(defun scheme-send-region (start end)
"Send the current region to the inferior Scheme process."
(interactive "r")
--- 250,273 ----
(if (not (comint-check-proc "*scheme*"))
(let ((cmdlist (scheme-args-to-list cmd)))
(set-buffer (apply 'make-comint "scheme" (car cmdlist)
! (scheme-start-file (car cmdlist)) (cdr cmdlist)))
(inferior-scheme-mode)))
(setq scheme-program-name cmd)
(setq scheme-buffer "*scheme*")
(pop-to-buffer "*scheme*"))
;;;###autoload (add-hook 'same-window-buffer-names "*scheme*")
+ (defun scheme-start-file (prog)
+ "Return the name of the start file corresponding to PROG.
+ Search in the directories \"~\" and \"~/.emacs.d\", in this
+ order. Return nil if no start file found."
+ (let* ((name (concat ".emacs_" (file-name-nondirectory prog)))
+ (start-file (concat "~/" name)))
+ (if (file-exists-p start-file)
+ start-file
+ (let ((start-file (concat user-emacs-directory name)))
+ (and (file-exists-p start-file) start-file)))))
+
(defun scheme-send-region (start end)
"Send the current region to the inferior Scheme process."
(interactive "r")
[-- Attachment #4: cmuscheme-trace.patch --]
[-- Type: application/octet-stream, Size: 4299 bytes --]
*** orig/lisp/cmuscheme.el
--- mod/lisp/cmuscheme.el
***************
*** 127,132 ****
--- 127,134 ----
(define-key scheme-mode-map "\C-c\M-r" 'scheme-send-region-and-go)
(define-key scheme-mode-map "\C-c\M-c" 'scheme-compile-definition)
(define-key scheme-mode-map "\C-c\C-c" 'scheme-compile-definition-and-go)
+ (define-key scheme-mode-map "\C-c\C-t" 'scheme-trace-procedure)
+ (define-key scheme-mode-map "\C-c\C-x" 'scheme-expand-current-form)
(define-key scheme-mode-map "\C-c\C-z" 'switch-to-scheme)
(define-key scheme-mode-map "\C-c\C-l" 'scheme-load-file)
(define-key scheme-mode-map "\C-c\C-k" 'scheme-compile-file) ;k for "kompile"
***************
*** 143,148 ****
--- 145,154 ----
'("Compile Definition & Go" . scheme-compile-definition-and-go))
(define-key map [com-def]
'("Compile Definition" . scheme-compile-definition))
+ (define-key map [exp-form]
+ '("Expand current form" . scheme-expand-current-form))
+ (define-key map [trace-proc]
+ '("Trace procedure" . scheme-trace-procedure))
(define-key map [send-def-go]
'("Evaluate Last Definition & Go" . scheme-send-definition-and-go))
(define-key map [send-def]
***************
*** 153,159 ****
'("Evaluate Region" . scheme-send-region))
(define-key map [send-sexp]
'("Evaluate Last S-expression" . scheme-send-last-sexp))
! )
(defvar scheme-buffer)
--- 159,165 ----
'("Evaluate Region" . scheme-send-region))
(define-key map [send-sexp]
'("Evaluate Last S-expression" . scheme-send-last-sexp))
! )
(defvar scheme-buffer)
***************
*** 311,316 ****
--- 317,385 ----
(beginning-of-defun)
(scheme-compile-region (point) end))))
+ (defcustom scheme-trace-command "(trace %s)"
+ "*Template for issuing commands to trace a Scheme procedure.
+ Some Scheme implementations might require more elaborate commands here.
+ For PLT-Scheme, e.g., one should use
+
+ (setq scheme-trace-command \"(begin (require (lib \\\"trace.ss\\\")) (trace %s))\")
+
+ For Scheme 48 and Scsh use \",trace %s\"."
+ :type 'string
+ :group 'cmuscheme)
+
+ (defcustom scheme-untrace-command "(untrace %s)"
+ "*Template for switching off tracing of a Scheme procedure.
+ Scheme 48 and Scsh users should set this variable to \",untrace %s\"."
+
+ :type 'string
+ :group 'cmuscheme)
+
+ (defun scheme-trace-procedure (proc &optional untrace)
+ "Trace procedure PROC in the inferior Scheme process.
+ With a prefix argument switch off tracing of procedure PROC."
+ (interactive
+ (list (let ((current (symbol-at-point))
+ (action (if current-prefix-arg "Untrace" "Trace")))
+ (if current
+ (read-string (format "%s procedure [%s]: " action current) nil nil (symbol-name current))
+ (read-string (format "%s procedure: " action))))
+ current-prefix-arg))
+ (when (= (length proc) 0)
+ (error "Invalid procedure name"))
+ (comint-send-string (scheme-proc)
+ (format
+ (if untrace scheme-untrace-command scheme-trace-command)
+ proc))
+ (comint-send-string (scheme-proc) "\n"))
+
+ (defcustom scheme-macro-expand-command "(expand %s)"
+ "*Template for macro-expanding a Scheme form.
+ For Scheme 48 and Scsh use \",expand %s\"."
+ :type 'string
+ :group 'cmuscheme)
+
+ (defun scheme-expand-current-form ()
+ "Macro-expand the form at point in the inferior Scheme process."
+ (interactive)
+ (let ((current-form (scheme-form-at-point)))
+ (if current-form
+ (progn
+ (comint-send-string (scheme-proc)
+ (format
+ scheme-macro-expand-command
+ current-form))
+ (comint-send-string (scheme-proc) "\n"))
+ (error "Not at a form"))))
+
+ (defun scheme-form-at-point ()
+ (let ((next-sexp (thing-at-point 'sexp)))
+ (if (and next-sexp (string-equal (substring next-sexp 0 1) "("))
+ next-sexp
+ (save-excursion
+ (backward-up-list)
+ (scheme-form-at-point)))))
+
(defun switch-to-scheme (eob-p)
"Switch to the scheme process buffer.
With argument, position cursor at end of buffer."
[-- Attachment #5: Type: text/plain, Size: 142 bytes --]
_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-devel
reply other threads:[~2005-07-26 15:57 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=72463bb5050726085746b5d84a@mail.gmail.com \
--to=lopes.emilio@gmail.com \
--cc=eclig@gmx.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).