define-command parameters now specify a 'completer' function

main
Daniel Barlow 2022-12-29 17:40:36 +00:00
parent 0ea9ba1b92
commit 28080a1387
2 changed files with 18 additions and 21 deletions

View File

@ -5,19 +5,11 @@
(local Buffer (require :buffer)) (local Buffer (require :buffer))
(fn by-pairs [a] (fn define-command [name ordered-params function]
(let [iter (fn [_ a]
(match a
[k v & rest] (values rest k v)
_ nil))]
(values iter a a)))
(fn define-command [name function ordered-params]
;; required parameter names and default arguments ;; required parameter names and default arguments
(let [param-names (icollect [_ name val (by-pairs ordered-params)] (let [param-names (icollect [_ [name] (pairs ordered-params)] name)
name) params (collect [_ [name completer default] (pairs ordered-params)]
params (collect [_ name val (by-pairs ordered-params)] (values name {: completer : default}))
(values name val))
v {: name v {: name
: function : function
: param-names : param-names
@ -26,15 +18,16 @@
(define-command (define-command
"quit-browser" "quit-browser"
#(Gtk.main_quit) []) []
#(Gtk.main_quit))
(define-command (define-command
"visit-location" "visit-location"
[[:buffer #[$1] (fn [f] f.buffer.name)]
[:url #[$1] #(do "http://www.example.com")]
]
(fn [{:url url :buffer buffer}] (fn [{:url url :buffer buffer}]
(let [b (Buffer.find buffer)] (: b :visit url))) (let [b (Buffer.find buffer)] (: b :visit url))))
[:buffer (fn [f] f.buffer.name)
:url #(do "http://www.example.com")
])
(fn find-command [name] (fn find-command [name]
(. commands name)) (. commands name))
@ -102,7 +95,7 @@
:active s.active :active s.active
:error s.error :error s.error
:prompt (if s.active (or s.this-param "Command?" "") "") :prompt (if s.active (or s.this-param "Command?" "") "")
:default (and param (param self.frame)) :default (and param (param.default self.frame))
})) }))
(fn update-widget-state [{ : entry : prompt} result] (fn update-widget-state [{ : entry : prompt} result]

View File

@ -5,12 +5,16 @@
(var happened false) (var happened false)
(fn before [] (set happened false)) (fn before [] (set happened false))
(Command.define-command "no-args-command" #(set happened true) []) (Command.define-command
"no-args-command"
[]
#(set happened true))
(Command.define-command (Command.define-command
"multiply" "multiply"
(fn [{: a : b }] (set happened (* (tonumber a) (tonumber b)))) [[:a #[$1] #(do "3")]
[:a #(do "3") :b #(do "2")]) [:b #[$1] #(do "2")]]
(fn [{: a : b }] (set happened (* (tonumber a) (tonumber b)))))
(before) (before)
(let [commander (Command.commander) (let [commander (Command.commander)