Skip to content

Commit e1c4e7f

Browse files
committed
Added a preferences list for identifiers which behave like ellipses.
1 parent 5e433c8 commit e1c4e7f

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

gui-lib/framework/private/main.rkt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,8 @@
378378
(preferences:set-default 'framework:fixup-open-parens #f boolean?)
379379
(preferences:set-default 'framework:paren-match #t boolean?)
380380
(let ([defaults-ht (make-hasheq)])
381+
(for-each (λ (x) (hash-set! defaults-ht x '...))
382+
'(... … ...+ …+ ::...))
381383
(for-each (λ (x) (hash-set! defaults-ht x 'for/fold))
382384
'(for/fold for/fold: for*/fold for*/fold:))
383385
(for-each (λ (x) (hash-set! defaults-ht x 'define))
@@ -458,8 +460,9 @@
458460
(preferences:set-default
459461
'framework:tabify
460462
(list defaults-ht #rx"^begin" #rx"^def" #rx"^(for\\*?(/|$)|with-)" #f)
461-
(list/c (hash/c symbol? (or/c 'for/fold 'define 'begin 'lambda) #:flat? #t)
462-
(or/c #f regexp?) (or/c #f regexp?) (or/c #f regexp?) (or/c #f regexp?)))
463+
(cons/c (hash/c symbol? (or/c 'for/fold 'define 'begin 'lambda '...) #:flat? #t)
464+
(or/c (list/c (or/c #f regexp?) (or/c #f regexp?) (or/c #f regexp?) (or/c #f regexp?))
465+
(list/c (or/c #f regexp?) (or/c #f regexp?) (or/c #f regexp?) (or/c #f regexp?) (or/c #f regexp?)))))
463466

464467
(define old-style-pred? (listof (list/c symbol? symbol?)))
465468
(define new-style-pred?

gui-lib/framework/private/racket.rkt

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -752,13 +752,22 @@
752752
(and snd-end
753753
(let ([snd-start (get-backward-sexp snd-end)])
754754
(and snd-start
755-
(equal? (get-text snd-start snd-end)
756-
"...")
755+
(text-is-ellipsis? (get-text snd-start snd-end))
757756
(let ([thrd-start (get-forward-sexp snd-end)])
758757
(and (or (not thrd-start)
759758
(not (= (position-paragraph thrd-start)
760759
(position-paragraph snd-start)))))))))))))
761760

761+
(define/private (text-is-ellipsis? text)
762+
(define pref (preferences:get 'framework:tabify))
763+
(define ht (car pref))
764+
(define ...-reg (and (> (length pref) 5) (list-ref pref 5)))
765+
(hash-ref
766+
ht
767+
(with-handlers ((exn:fail:read? (λ (x) #f)))
768+
(read (open-input-string text)))
769+
(λ () (and ...-reg (regexp-match ...-reg text)))))
770+
762771
(define/private (first-sexp-is-keyword? contains)
763772
(let ([fst-end (get-forward-sexp contains)])
764773
(and fst-end
@@ -2173,8 +2182,9 @@
21732182
(values (pick-out 'begin all-keywords null)
21742183
(pick-out 'define all-keywords null)
21752184
(pick-out 'lambda all-keywords null)
2176-
(pick-out 'for/fold all-keywords null))))
2177-
(define-values (begin-keywords define-keywords lambda-keywords for/fold-keywords)
2185+
(pick-out 'for/fold all-keywords null)
2186+
(pick-out '... all-keywords null))))
2187+
(define-values (begin-keywords define-keywords lambda-keywords for/fold-keywords ellipses-keywords)
21782188
(get-keywords (car (preferences:get 'framework:tabify))))
21792189
(define ((add-button-callback keyword-type keyword-symbol list-box) button command)
21802190
(define new-one
@@ -2276,8 +2286,13 @@
22762286
'for/fold
22772287
for/fold-keywords
22782288
(λ (x) (update-pref 4 x))))
2289+
(define-values (ellipses-list-box ellipses-regexp-text)
2290+
(make-column "Ellipses"
2291+
'...
2292+
ellipses-keywords
2293+
(λ (x) (update-pref 5 x))))
22792294
(define (update-list-boxes hash-table)
2280-
(define-values (begin-keywords define-keywords lambda-keywords for/fold-keywords)
2295+
(define-values (begin-keywords define-keywords lambda-keywords for/fold-keywords ellipses-keywords)
22812296
(get-keywords hash-table))
22822297
(define (reset list-box keywords)
22832298
(send list-box clear)
@@ -2286,14 +2301,18 @@
22862301
(reset define-list-box define-keywords)
22872302
(reset lambda-list-box lambda-keywords)
22882303
(reset for/fold-list-box for/fold-keywords)
2304+
(reset ellipses-list-box ellipses-keywords)
22892305
#t)
22902306
(define update-gui
22912307
(λ (pref)
22922308
(update-list-boxes (car pref))
22932309
(send begin-regexp-text set-value (or (object-name (list-ref pref 1)) ""))
22942310
(send define-regexp-text set-value (or (object-name (list-ref pref 2)) ""))
22952311
(send lambda-regexp-text set-value (or (object-name (list-ref pref 3)) ""))
2296-
(send for/fold-regexp-text set-value (or (object-name (list-ref pref 4)) ""))))
2312+
(send for/fold-regexp-text set-value (or (object-name (list-ref pref 4)) ""))
2313+
(send ellipses-regexp-text set-value (or (and (> (length pref) 5)
2314+
(object-name (list-ref pref 5)))
2315+
""))))
22972316
(preferences:add-callback 'framework:tabify (λ (p v) (update-gui v)))
22982317
(update-gui (preferences:get 'framework:tabify))
22992318
main-panel)

0 commit comments

Comments
 (0)