From 8272f990353ecad183c19b544db3fd6f6dbd5d30 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Wed, 6 Jul 2016 16:03:52 -0500 Subject: [PATCH] adjust tabifying behavior to mess with blank lines less Be more like Emacs: when indenting only change the whitespace on a blank line when indenting just a single line (e.g. when hitting return or when hitting tab with a selection that doesn't span multiple lines) closes racket/drracket#65 --- gui-lib/framework/private/racket.rkt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/gui-lib/framework/private/racket.rkt b/gui-lib/framework/private/racket.rkt index 902b9030..39b71689 100644 --- a/gui-lib/framework/private/racket.rkt +++ b/gui-lib/framework/private/racket.rkt @@ -777,6 +777,7 @@ (unless (is-stopped?) (define first-para (position-paragraph start-pos)) (define end-para (position-paragraph end-pos)) + (define tabifying-multiple-paras? (not (= first-para end-para))) (with-handlers ([exn:break? (λ (x) #t)]) (dynamic-wind @@ -787,7 +788,14 @@ (λ () (let loop ([para first-para]) (when (<= para end-para) - (tabify (paragraph-start-position para)) + (define start (paragraph-start-position para)) + (define end (paragraph-end-position para)) + (define skip-this-line? + (and tabifying-multiple-paras? + (for/and ([i (in-range start (+ end 1))]) + (char-whitespace? (get-character i))))) + (unless skip-this-line? + (tabify start)) (parameterize-break #t (void)) (loop (add1 para)))) (when (and (>= (position-paragraph start-pos) end-para)