Skip to content

Commit 99e5e92

Browse files
committed
Use the 'documentation-language-family read-language key to customize
how accessing the docs works
1 parent 8cd61ac commit 99e5e92

File tree

13 files changed

+186
-41
lines changed

13 files changed

+186
-41
lines changed

drracket-core-lib/drracket/private/app.rkt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@
1010
"../acks.rkt"
1111
"local-member-names.rkt"
1212
"frame-icon.rkt"
13+
"insulated-read-language.rkt"
1314
pict/snip pict)
1415

1516
(import [prefix drracket:unit: drracket:unit^]
16-
[prefix drracket:frame: drracket:frame^]
17+
[prefix drracket:frame: drracket:frame/int^]
1718
[prefix drracket:language-configuration: drracket:language-configuration/internal^]
1819
[prefix help-desk: drracket:help-desk^]
1920
[prefix drracket:tools: drracket:tools^])
@@ -244,7 +245,12 @@
244245
(let* ([docs-button (new button%
245246
[label (string-constant help-desk)]
246247
[parent button-panel]
247-
[callback (λ (x y) (help-desk:help-desk))])])
248+
[callback (λ (x y)
249+
(define-values (query-table sub)
250+
(drracket:frame:try-to-find-a-query-table-and-sub
251+
(drracket:frame:try-to-find-an-irl)))
252+
(help-desk:help-desk #:query-table query-table
253+
#:sub sub))])])
248254
(send docs-button focus))
249255
(send button-panel stretchable-height #f)
250256
(send button-panel set-alignment 'center 'center)

drracket-core-lib/drracket/private/frame.rkt

Lines changed: 57 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,8 @@
321321
mrlib/terminal
322322
browser/external
323323
(submod "." install-pkg)
324+
"local-member-names.rkt"
325+
"insulated-read-language.rkt"
324326
drracket/get-module-path)
325327
(provide frame@)
326328
(define-unit frame@
@@ -356,8 +358,7 @@
356358
(super on-subwindow-char receiver event)))
357359

358360
(inherit get-edit-target-window get-edit-target-object get-menu-bar)
359-
360-
361+
361362
(define/private (can-show-keybindings?)
362363
(define edit-object (get-edit-target-object))
363364
(and edit-object
@@ -375,7 +376,10 @@
375376
(bell)))
376377

377378
(define/override (help-menu:before-about help-menu)
378-
(make-help-desk-menu-item help-menu))
379+
(make-help-desk-menu-item help-menu
380+
(λ ()
381+
(and (is-a? this drracket:unit:frame<%>)
382+
(send (send (send this get-current-tab) get-defs) get-irl)))))
379383

380384
(define/override (help-menu:about-callback item evt) (drracket:app:about-drscheme))
381385
(define/override (help-menu:about-string) (string-constant about-drscheme))
@@ -757,18 +761,35 @@
757761
(when (exit:user-oks-exit)
758762
(exit:exit))
759763
#t))))
760-
(make-help-desk-menu-item help-menu)
764+
(make-help-desk-menu-item help-menu (λ () (try-to-find-an-irl)))
761765
(drracket-help-menu:after-about help-menu #f))
762766

763-
(define (make-help-desk-menu-item help-menu)
764-
(define (docs-menu-item label)
765-
(new menu-item%
766-
[label label]
767-
[parent help-menu]
768-
[callback (λ (item evt) (help:help-desk) #t)]))
769-
(docs-menu-item (string-constant racket-documentation))
770-
(new separator-menu-item% [parent help-menu])
771-
(docs-menu-item (string-constant help-desk)))
767+
(define (make-help-desk-menu-item help-menu maybe-get-irl)
768+
(define (get-menu-item-label)
769+
(define irl (maybe-get-irl))
770+
(define default-lang-name "Racket")
771+
(define lang-name
772+
(cond
773+
[irl
774+
(define ht
775+
(call-read-language irl
776+
'documentation-language-family
777+
(hash)))
778+
(hash-ref ht 'doc-language-name default-lang-name)]
779+
[else default-lang-name]))
780+
(format (string-constant x-documentation) lang-name))
781+
(new menu-item%
782+
[label (get-menu-item-label)]
783+
[parent help-menu]
784+
[demand-callback
785+
(λ (menu-item)
786+
(send menu-item set-label (get-menu-item-label)))]
787+
[callback (λ (item evt)
788+
(define irl (maybe-get-irl))
789+
(define ht (call-read-language irl 'documentation-language-family (hash)))
790+
(help:help-desk #:sub (hash-ref ht 'doc-path "index.html")
791+
#:query-table (hash-ref ht 'doc-query (hash)))
792+
#t)]))
772793

773794
(define (drracket-help-menu:after-about menu dlg-parent)
774795
(drracket:app:add-important-urls-to-help-menu menu '())
@@ -788,7 +809,29 @@
788809
[(1) (send-url "https://lists.racket-lang.org/")]
789810
[(2) (send-url "https://github.com/racket/racket/issues/new/choose")]))])
790811
(add-menu-path-item menu)
791-
(drracket:app:add-language-items-to-help-menu menu)))
812+
(drracket:app:add-language-items-to-help-menu menu))
813+
814+
;; this should be called when we're not in the context of a specific frame, but
815+
;; want an IRL. It'll look for a recently used frame and get that one's IRL (if any)
816+
(define (try-to-find-an-irl)
817+
(define drr-frame
818+
(for/or ([frame (in-list (cons (send (group:get-the-frame-group) get-active-frame)
819+
(send (group:get-the-frame-group) get-frames)))])
820+
(and (is-a? frame drracket:unit:frame%)
821+
frame)))
822+
(and drr-frame
823+
(send (send (send drr-frame get-current-tab) get-defs) get-irl)))
824+
825+
;; (or/c #f irl) -> (values hash string)
826+
(define (try-to-find-a-query-table-and-sub irl)
827+
(define ht
828+
(if irl
829+
(call-read-language irl
830+
'documentation-language-family
831+
(hash))
832+
(hash)))
833+
(values (hash-ref ht 'doc-query (hash))
834+
(hash-ref ht 'doc-path "index.html"))))
792835

793836

794837
(require (submod "." add-racket-to-path)

drracket-core-lib/drracket/private/help-desk.rkt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,11 @@
148148
'(default=1)))
149149
(equal? choice 1))
150150

151-
(define (help-desk [key #f] [context #f] [parent #f])
151+
(define (help-desk [key #f] [context #f] [parent #f]
152+
#:sub [sub #f]
153+
#:query-table [query-table (hash)])
152154
(when key (maybe-try-to-materialize-docs parent))
153-
(if key (perform-search key context) (send-main-page)))
155+
(if key
156+
(perform-search key context #:query-table query-table)
157+
(send-main-page #:query-table query-table
158+
#:sub (or sub "index.html"))))

drracket-core-lib/drracket/private/in-irl-namespace.rkt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,16 @@
245245
(-> read-only-text/c exact-integer?
246246
string?)
247247
string?)))))]
248+
[(documentation-language-family)
249+
(hash/dc
250+
[key symbol?]
251+
[val (key)
252+
(case key
253+
[(doc-language-name) string?]
254+
[(doc-path) path-string?]
255+
[(doc-query) (hash/c symbol? string? #:immutable #t)]
256+
[else any/c])]
257+
#:immutable #t)]
248258
[else
249259
(error 'key->contract "unknown key")]))
250260

drracket-core-lib/drracket/private/insulated-read-language.rkt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ Will not work with the definitions text surrogate interposition that
4646
'drracket:paren-matches
4747
'drracket:quote-matches
4848
'drracket:comment-delimiters
49-
'drracket:define-popup))
49+
'drracket:define-popup
50+
'documentation-language-family))
5051

5152
(provide
5253
(contract-out

drracket-core-lib/drracket/private/rep.rkt

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ TODO
5252
[prefix drracket:language-configuration: drracket:language-configuration/internal^]
5353
[prefix drracket:language: drracket:language/int^]
5454
[prefix drracket:app: drracket:app^]
55-
[prefix drracket:frame: drracket:frame^]
55+
[prefix drracket:frame: drracket:frame/int^]
5656
[prefix drracket:unit: drracket:unit^]
5757
[prefix drracket:text: drracket:text^]
5858
[prefix drracket:help-desk: drracket:help-desk^]
@@ -185,6 +185,14 @@ TODO
185185
"search-help-desk"
186186
(λ (frame)
187187
(define obj (send frame get-focus-object))
188+
(define irl
189+
(cond
190+
[(is-a? frame drracket:unit:frame%)
191+
(send (send (send frame get-current-tab) get-defs) get-irl)]
192+
[else
193+
(drracket:frame:try-to-find-an-irl)]))
194+
(define-values (query-table sub)
195+
(drracket:frame:try-to-find-a-query-table-and-sub irl))
188196
(cond
189197
[(is-a? obj text%)
190198
(define start (send obj get-start-position))
@@ -194,7 +202,7 @@ TODO
194202
(send obj get-text start end)))
195203
(cond
196204
[(or (not str) (equal? "" str))
197-
(drracket:help-desk:help-desk)]
205+
(drracket:help-desk:help-desk #:query-table query-table #:sub sub)]
198206
[else
199207
(let* ([l (send obj get-canvas)]
200208
[l (and l (send l get-top-level-window))]
@@ -208,9 +216,12 @@ TODO
208216
'drscheme:help-context-term))]
209217
[name (and l (send l get-language-name))])
210218
(drracket:help-desk:help-desk
211-
str (and ctxt (list ctxt name)) frame))])]
219+
str (and ctxt (list ctxt name)) frame
220+
#:query-table query-table
221+
#:sub sub))])]
212222
[else
213-
(drracket:help-desk:help-desk)])))
223+
(drracket:help-desk:help-desk #:query-table query-table
224+
#:sub sub)])))
214225

215226
;; keep this in case people use it in their keymaps
216227
(add-drs-function "execute" (λ (frame) (send frame execute-callback)))

drracket-core-lib/drracket/private/unit.rkt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@
107107
(define-unit unit@
108108
(import [prefix help-desk: drracket:help-desk^]
109109
[prefix drracket:app: drracket:app^]
110-
[prefix drracket:frame: drracket:frame^]
110+
[prefix drracket:frame: drracket:frame/int^]
111111
[prefix drracket:text: drracket:text^]
112112
[prefix drracket:rep: drracket:rep/int^]
113113
[prefix drracket:language-configuration: drracket:language-configuration/internal^]
@@ -148,7 +148,6 @@
148148
(unless added?
149149
(set! added? #t)
150150
(new separator-menu-item% [parent menu]))))])
151-
152151
(add-search-help-desk-menu-item text menu
153152
(let-values ([(x y)
154153
(send text dc-location-to-editor-location
@@ -197,6 +196,12 @@
197196
(void))))))
198197

199198
(define (add-search-help-desk-menu-item text menu position [add-sep void])
199+
(define irl (cond
200+
[(is-a? text drracket:rep:text%)
201+
(send (send text get-definitions-text) get-irl)]
202+
[(is-a? text (get-definitions-text%))
203+
(send text get-irl)]
204+
[else (drracket:frame:try-to-find-an-irl)]))
200205
(let* ([end (send text get-end-position)]
201206
[start (send text get-start-position)])
202207
(unless (= 0 (send text last-position))
@@ -227,7 +232,12 @@
227232
str
228233
(string-append short-str "...")))
229234
menu
230-
(λ x (help-desk:help-desk str (list ctxt name))))
235+
(λ x
236+
(define-values (query-table sub)
237+
(drracket:frame:try-to-find-a-query-table-and-sub irl))
238+
(help-desk:help-desk str (list ctxt name)
239+
#:query-table query-table
240+
#:sub sub)))
231241
(void)))))))
232242

233243
(define (filename->kind fn)

drracket-core-lib/drracket/tool-lib.rkt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ all of the names in the tools library, for use defining keybindings
4343
mzlib/pconvert
4444
syntax/toplevel
4545
drracket/tool-lib
46-
string-constants)))
46+
string-constants
47+
help/search)))
4748

4849
;; these two declarations produce all of the struct names
4950
;; but with "drscheme" in front instead of drracket
@@ -931,15 +932,18 @@ all of the names in the tools library, for use defining keybindings
931932
(->* ()
932933
((or/c #f string?)
933934
(or/c #f string? (list/c string? string?))
934-
(or/c (is-a?/c frame%) (is-a?/c dialog%) #f))
935+
(or/c (is-a?/c frame%) (is-a?/c dialog%) #f)
936+
#:sub string?)
935937
any)
936938
(()
937939
((search-key #f)
938940
(search-context #f)
939-
(parent #f)))
941+
(parent #f)
942+
(sub "index.html")))
940943
@{if @racket[search-key] is a string, performs a search in the docs with
941944
@racket[search-key] and @racket[search-context].
942-
Otherwise, calls @racket[send-main-page] with no arguments.
945+
Otherwise, calls @racket[send-main-page] with @racket[sub] as the
946+
@racket[#:sub] keyword argument.
943947

944948
The search may involve asking the user a question, in which case the
945949
dialog with the question uses @racket[parent] as its parent.

drracket-core-lib/info.rkt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
["racket-index" #:version "1.2"]
3131
"sandbox-lib"
3232
["scribble-lib" #:version "1.11"]
33-
["string-constants-lib" #:version "1.53"]
33+
["string-constants-lib" #:version "1.54"]
3434
["syntax-color-lib" #:version "1.4"]
3535
"simple-tree-text-markup-lib"
3636
"typed-racket-lib"

drracket-core/scribblings/drracket/menus.scrbl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -496,9 +496,11 @@ brings the corresponding window to the front.
496496

497497
@itemize[
498498

499-
@item{@defmenuitem{Help Desk} Opens the Help Desk. This is the clearing
500-
house for all documentation about DrRacket and its language.}
501-
499+
@item{@defmenuitem{Documentation} Opens the main
500+
documentation page. This is the clearing house for all
501+
documentation about the language family of the programming
502+
language in the definitions window.}
503+
502504
@item{@defmenuitem{About DrRacket...} Shows the credits for DrRacket.}
503505

504506
@item{@defmenuitem{Check for Updates...} Checks to see if a new version

0 commit comments

Comments
 (0)