finished auto completion integration

svn: r7304
This commit is contained in:
Robby Findler 2007-09-10 00:46:31 +00:00
parent 6f83062a51
commit 6b6f397a64
11 changed files with 98 additions and 17 deletions

View File

@ -102,7 +102,7 @@
(add-info-specified-languages
get-default-language-settings
settings-preferences-symbol
get-all-scheme-manual-keywords
add-built-in-languages))
(define-signature drscheme:tools^
@ -177,6 +177,7 @@
error-delta
get-welcome-delta
get-dark-green-delta
drs-autocomplete-mixin
text%
text<%>
context<%>))

View File

@ -1310,15 +1310,39 @@
#f))
(super-new)))
(define get-all-scheme-manual-keywords
(let ([words #f])
(λ ()
(unless words
(set! words (text:get-completions/manuals
(list "gui"
"guide"
"help"
"mzscheme"
"mred"
"quick"
"r5rs"
"reference"
"scribble"
"web-server-guide"
"web-server-reference"))))
words)))
;; add-built-in-languages : -> void
(define (add-built-in-languages)
(let* ([extras-mixin
(let* ([words #f]
[extras-mixin
(λ (mred-launcher? one-line-summary)
(λ (%)
(class* % (drscheme:language:language<%>)
(define/override (get-one-line-summary) one-line-summary)
(define/override (use-namespace-require/copy?) #t)
(inherit get-module get-transformer-module get-init-code)
(define/augment (capability-value key)
(cond
[(eq? key 'drscheme:autocomplete-words)
(get-all-scheme-manual-keywords)]
[else (drscheme:language:get-capability-default key)]))
(define/override (create-executable setting parent program-filename)
(let ([executable-fn
(drscheme:language:put-executable

View File

@ -287,6 +287,7 @@
(install-help-browser-preference-panel)
(drscheme:tools:add-prefs-panel)
(drscheme:language:register-capability 'drscheme:autocomplete-words (listof string?) '())
(drscheme:language:register-capability 'drscheme:define-popup
(or/c (cons/c string? string?) false/c)
(cons "(define" "(define ...)"))

View File

@ -49,6 +49,12 @@
(define/override (use-namespace-require/copy?) #t)
(field [iteration-number 0])
(define/augment (capability-value key)
(cond
[(eq? key 'drscheme:autocomplete-words)
(drscheme:language-configuration:get-all-scheme-manual-keywords)]
[else (drscheme:language:get-capability-default key)]))
;; config-panel : as in super class
;; uses drscheme:language:simple-module-based-language-config-panel
;; and adds a collection paths configuration to it.

View File

@ -1786,7 +1786,15 @@ TODO
(send file get-definitions-text)
position)))))
(define drs-autocomplete-mixin
(λ (get-defs x)
(class (text:autocomplete-mixin x)
(define/override (get-all-words)
(let* ([definitions-text (get-defs this)]
[settings (send definitions-text get-next-settings)]
[language (drscheme:language-configuration:language-settings-language settings)])
(send language capability-value 'drscheme:autocomplete-words)))
(super-new))))
(define -text%
(drs-bindings-keymap-mixin
@ -1798,5 +1806,7 @@ TODO
(editor:info-mixin
(text:searching-mixin
(mode:host-text-mixin
(text:foreground-color-mixin
text:clever-file-format%)))))))))))))
(drs-autocomplete-mixin
(λ (txt) (send txt get-definitions-text))
(text:foreground-color-mixin
text:clever-file-format%))))))))))))))

View File

@ -955,6 +955,8 @@
" --- determines if the insert text box menu item in the special menu is visible"
"\\item \\scheme|(drscheme:language:register-capability 'drscheme:special:xml-menus (flat-contract boolean?) #t)|"
" --- determines if the insert scheme box, insert scheme splice box, and the insert xml box menu item ins the special menu are visible"
"\\item \\scheme|(drscheme:language:register-capability 'drscheme:autocomplete-words (listof string?) '()|"
" --- determines the list of words that are used when completing words in this language"
"\\end{itemize}")
(drscheme:language:capability-registered?

View File

@ -389,7 +389,9 @@ module browser threading seems wrong.
(mode:host-text-mixin
(text:delegate-mixin
(text:foreground-color-mixin
text:info%))))))))])
(drscheme:rep:drs-autocomplete-mixin
(λ (x) x)
text:info%)))))))))])
(class* definitions-super% (definitions-text<%>)
(inherit get-top-level-window)
@ -2717,6 +2719,18 @@ module browser threading seems wrong.
(define/override (edit-menu:between-find-and-preferences edit-menu)
(super edit-menu:between-find-and-preferences edit-menu)
(new menu-item%
[label (string-constant complete-word)]
[shortcut #\/]
[parent edit-menu]
[demand-callback
(λ (mi)
(send mi enable
(let ([ed (get-edit-target-object)])
(and ed
(is-a? ed text:autocomplete<%>)))))]
[callback (λ (x y)
(send (get-edit-target-object) auto-complete))])
(add-modes-submenu edit-menu))
;; capability-menu-items : hash-table[menu -o> (listof (list menu-item number key)))

View File

@ -2173,6 +2173,8 @@ designates the character that triggers autocompletion
;; ============================================================
;; auto-complete-text (mixin) implementation
(define selected-color (make-object color% 204 153 255))
(define autocomplete-mixin
(mixin ((class->interface text%)) (autocomplete<%>)
@ -2189,7 +2191,7 @@ designates the character that triggers autocompletion
; get-autocomplete-selected-color : -> string
; selected option background color in the autocomplete menu
(define/public (get-autocomplete-selected-color) "orange")
(define/public (get-autocomplete-selected-color) selected-color)
(define/public (completion-mode-key-event? key-event)
(cond

View File

@ -347,8 +347,7 @@
;(define/override (get-one-line-summary) one-line-summary)
(define/public (get-htdp-style-delta) style-delta)
(super-instantiate ()
(language-url "http://www.htdp.org/"))))
(super-new [language-url "http://www.htdp.org/"])))
(define (language-extension %)
(class %
@ -391,8 +390,10 @@
(go "." (drscheme:rep:get-welcome-delta))
(newline port)))
(define/private (htdp-manuals) (list (get-manual) #"teachpack" #"drscheme" #"help"))
(define/override (order-manuals x)
(values (list (get-manual) #"teachpack" #"drscheme" #"help") #f))
(values (htdp-manuals) #f))
(inherit get-module get-transformer-module get-init-code
use-namespace-require/copy?)
@ -561,8 +562,13 @@
(cadr x))])
(format "the teachpack '~a' was not found" name)))
(define keywords #f)
(define/augment (capability-value key)
(case key
[(drscheme:autocomplete-words)
(unless keywords
(set! keywords (text:get-completions/manuals (map bytes->string/utf-8 (htdp-manuals)))))
keywords]
[(drscheme:teachpack-menu-items) htdp-teachpack-callbacks]
[(drscheme:special:insert-lambda) #f]
[else (inner (drscheme:language:get-capability-default key)

View File

@ -275,7 +275,7 @@
(print-style print-full? allow-check? allow-test? run-tests? coverage? classpath) (make-inspector))
;ProfJ general language mixin
(define (java-lang-mixin level name number one-line dyn?)
(define (java-lang-mixin level name number one-line dyn? manual-dirname)
(when dyn? (dynamic? #t))
(class* object% (drscheme:language:language<%>)
(define/public (extra-repl-information settings port) (void))
@ -284,8 +284,17 @@
(define/public (metadata->settings m) #f)
(define/public (get-metadata-lines) #f)
(define autocomplete-words #f)
(define/public (capability-value s)
(cond
[(eq? s 'drscheme:autocomplete-words)
(unless autocomplete-words
(set! autocomplete-words
(if manual-dirname
(text:get-completions/manuals (list manual-dirname))
'())))
autocomplete-words]
[(eq? s 'drscheme:language-menu-title) (string-constant profj-java)]
[(memq s '(profj:special:java-comment-box
profj:special:java-examples-box
@ -884,15 +893,19 @@
(super-instantiate ())))
;Create the ProfessorJ languages
(define dynamic-lang% (java-lang-mixin 'full (string-constant profj-dynamic-lang) 6 (string-constant profj-dynamic-lang-one-summary) #t))
(define full-lang% (java-lang-mixin 'full (string-constant profj-full-lang) 5 (string-constant profj-full-lang-one-line-summary) #f))
(define advanced-lang% (java-lang-mixin 'advanced (string-constant profj-advanced-lang) 4 (string-constant profj-advanced-lang-one-line-summary) #f))
(define dynamic-lang% (java-lang-mixin 'full (string-constant profj-dynamic-lang) 6 (string-constant profj-dynamic-lang-one-summary) #t #f))
(define full-lang% (java-lang-mixin 'full (string-constant profj-full-lang) 5 (string-constant profj-full-lang-one-line-summary) #f #f))
(define advanced-lang% (java-lang-mixin 'advanced (string-constant profj-advanced-lang) 4 (string-constant profj-advanced-lang-one-line-summary) #f
"profj-advanced"))
(define intermediate+access-lang%
(java-lang-mixin 'intermediate+access
(string-constant profj-intermediate-access-lang) 3 (string-constant profj-intermediate-access-lang-one-line-summary) #f))
(string-constant profj-intermediate-access-lang) 3 (string-constant profj-intermediate-access-lang-one-line-summary) #f
"profj-intermediate-access"))
(define intermediate-lang%
(java-lang-mixin 'intermediate (string-constant profj-intermediate-lang) 2 (string-constant profj-intermediate-lang-one-line-summary) #f))
(define beginner-lang% (java-lang-mixin 'beginner (string-constant profj-beginner-lang) 1 (string-constant profj-beginner-lang-one-line-summary) #f))
(java-lang-mixin 'intermediate (string-constant profj-intermediate-lang) 2 (string-constant profj-intermediate-lang-one-line-summary) #f
"profj-intermediate"))
(define beginner-lang% (java-lang-mixin 'beginner (string-constant profj-beginner-lang) 1 (string-constant profj-beginner-lang-one-line-summary) #f
"profj-beginner"))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;

View File

@ -640,6 +640,8 @@ please adhere to these guidelines:
(replace-and-find-again-info "Replace the current text and search for the same string as before")
(replace-and-find-again-menu-item "Replace && Find Again")
(complete-word "Complete word") ; the complete word menu item in the edit menu
(preferences-info "Configure your preferences")
(preferences-menu-item "Preferences...")