|
321 | 321 | mrlib/terminal |
322 | 322 | browser/external |
323 | 323 | (submod "." install-pkg) |
| 324 | + "local-member-names.rkt" |
| 325 | + "insulated-read-language.rkt" |
324 | 326 | drracket/get-module-path) |
325 | 327 | (provide frame@) |
326 | 328 | (define-unit frame@ |
|
356 | 358 | (super on-subwindow-char receiver event))) |
357 | 359 |
|
358 | 360 | (inherit get-edit-target-window get-edit-target-object get-menu-bar) |
359 | | - |
360 | | - |
| 361 | + |
361 | 362 | (define/private (can-show-keybindings?) |
362 | 363 | (define edit-object (get-edit-target-object)) |
363 | 364 | (and edit-object |
|
375 | 376 | (bell))) |
376 | 377 |
|
377 | 378 | (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))))) |
379 | 383 |
|
380 | 384 | (define/override (help-menu:about-callback item evt) (drracket:app:about-drscheme)) |
381 | 385 | (define/override (help-menu:about-string) (string-constant about-drscheme)) |
|
757 | 761 | (when (exit:user-oks-exit) |
758 | 762 | (exit:exit)) |
759 | 763 | #t)))) |
760 | | - (make-help-desk-menu-item help-menu) |
| 764 | + (make-help-desk-menu-item help-menu (λ () (try-to-find-an-irl))) |
761 | 765 | (drracket-help-menu:after-about help-menu #f)) |
762 | 766 |
|
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)])) |
772 | 793 |
|
773 | 794 | (define (drracket-help-menu:after-about menu dlg-parent) |
774 | 795 | (drracket:app:add-important-urls-to-help-menu menu '()) |
|
788 | 809 | [(1) (send-url "https://lists.racket-lang.org/")] |
789 | 810 | [(2) (send-url "https://github.com/racket/racket/issues/new/choose")]))]) |
790 | 811 | (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")))) |
792 | 835 |
|
793 | 836 |
|
794 | 837 | (require (submod "." add-racket-to-path) |
|
0 commit comments