unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
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).