From f9b2ed86077a79718b083e49f752cf01457e1459 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Fri, 10 Jan 2014 06:20:05 +0100 Subject: Racket: better behaviour of geiser-eval-buffer For buffers containing a #lang directive, geiser-eval-buffer was simply broken: one cannot send the whole region wrapped in a `begin' in that case. We try now to send the region below, although a real solution would imply using #%module-begin as the wrapper, in order to be robust for languages that define their own version of the macro (such as TR). But people should use C-c C-a or C-c C-k and leave this silly function alone instead. --- NEWS | 3 +++ elisp/geiser-mode.el | 21 +++++++++------------ elisp/geiser-racket.el | 10 +++++++--- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/NEWS b/NEWS index 6131f19..2d3b741 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,9 @@ - Better support for Typed Racket: (re)definitions now work for typed/racket modules (thanks to Sam Tobin-Hochstadt). + - Better behaviour for geiser-eval-buffer in racket + buffers that contain a #lang directive. But you'd better use C-c + C-k instead. * Version 0.5 (Dec 9, 2013) diff --git a/elisp/geiser-mode.el b/elisp/geiser-mode.el index b5c10fd..3bc5494 100644 --- a/elisp/geiser-mode.el +++ b/elisp/geiser-mode.el @@ -1,6 +1,6 @@ ;; geiser-mode.el -- minor mode for scheme buffers -;; Copyright (C) 2009, 2010, 2011, 2012, 2013 Jose Antonio Ortega Ruiz +;; Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jose Antonio Ortega Ruiz ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the Modified BSD License. You should @@ -93,23 +93,20 @@ With prefix, goes to the REPL buffer afterwards (as (interactive "r") (geiser-eval-region start end t)) +(geiser-impl--define-caller geiser-eval--bounds eval-bounds () + "A pair with the bounds of a buffer to be evaluated, defaulting + to (cons (point-min) . (point-max)).") + (defun geiser-eval-buffer (&optional and-go raw nomsg) "Eval the current buffer in the Geiser REPL. With prefix, goes to the REPL buffer afterwards (as `geiser-eval-buffer-and-go')" (interactive "P") - (let ((start (point-min)) - (end (point-max))) - (save-restriction - (narrow-to-region start end) - (check-parens)) - (geiser-debug--send-region nil - start - end - (and and-go 'geiser--go-to-repl) - (not raw) - nomsg))) + (let* ((bounds (geiser-eval--bounds geiser-impl--implementation)) + (from (or (car bounds) (point-min))) + (to (or (cdr bounds) (point-max)))) + (geiser-eval-region from to and-go raw nomsg))) (defun geiser-eval-buffer-and-go () "Eval the current buffer in the Geiser REPL and visit it afterwads." diff --git a/elisp/geiser-racket.el b/elisp/geiser-racket.el index 59886e3..e466ce3 100644 --- a/elisp/geiser-racket.el +++ b/elisp/geiser-racket.el @@ -1,6 +1,6 @@ ;; geiser-racket.el -- geiser support for Racket scheme -;; Copyright (C) 2009, 2010, 2011, 2012, 2013 Jose Antonio Ortega Ruiz +;; Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jose Antonio Ortega Ruiz ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the Modified BSD License. You should @@ -137,11 +137,14 @@ using start-geiser, a procedure in the geiser/server module." (geiser-syntax--form-from-string (match-string-no-properties 1)))) "#f")) -(defun geiser-racket--implicit-module () +(defun geiser-racket--implicit-module (&optional pos) (save-excursion (goto-char (point-min)) (when (re-search-forward "^#lang " nil t) - (buffer-file-name)))) + (if pos (progn (end-of-line) (list (point))) (buffer-file-name))))) + +(defun geiser-racket--eval-bounds () + (geiser-racket--implicit-module t)) (defun geiser-racket--find-module () (let ((bf (geiser-racket--implicit-module)) @@ -428,6 +431,7 @@ Use a prefix to be asked for a submodule name." (import-command geiser-racket--import-command) (exit-command geiser-racket--exit-command) (find-symbol-begin geiser-racket--symbol-begin) + (eval-bounds geiser-racket--eval-bounds) (display-error geiser-racket--display-error) (external-help geiser-racket--external-help) (check-buffer geiser-racket--guess) -- cgit v1.2.3