commit 28080a138731f74d209ff5b36ff4a9e98801f2db
parent 0ea9ba1b921339c67f97e5b8cd32bce6ad85cd20
Author: Daniel Barlow <dan@telent.net>
Date: Thu, 29 Dec 2022 17:40:36 +0000
define-command parameters now specify a 'completer' function
Diffstat:
2 files changed, 18 insertions(+), 21 deletions(-)
diff --git a/command.fnl b/command.fnl
@@ -5,19 +5,11 @@
(local Buffer (require :buffer))
-(fn by-pairs [a]
- (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]
+(fn define-command [name ordered-params function]
;; required parameter names and default arguments
- (let [param-names (icollect [_ name val (by-pairs ordered-params)]
- name)
- params (collect [_ name val (by-pairs ordered-params)]
- (values name val))
+ (let [param-names (icollect [_ [name] (pairs ordered-params)] name)
+ params (collect [_ [name completer default] (pairs ordered-params)]
+ (values name {: completer : default}))
v {: name
: function
: param-names
@@ -26,15 +18,16 @@
(define-command
"quit-browser"
- #(Gtk.main_quit) [])
+ []
+ #(Gtk.main_quit))
(define-command
"visit-location"
+ [[:buffer #[$1] (fn [f] f.buffer.name)]
+ [:url #[$1] #(do "http://www.example.com")]
+ ]
(fn [{:url url :buffer buffer}]
- (let [b (Buffer.find buffer)] (: b :visit url)))
- [:buffer (fn [f] f.buffer.name)
- :url #(do "http://www.example.com")
- ])
+ (let [b (Buffer.find buffer)] (: b :visit url))))
(fn find-command [name]
(. commands name))
@@ -102,7 +95,7 @@
:active s.active
:error s.error
: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]
diff --git a/test/command.fnl b/test/command.fnl
@@ -5,12 +5,16 @@
(var 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
"multiply"
- (fn [{: a : b }] (set happened (* (tonumber a) (tonumber b))))
- [:a #(do "3") :b #(do "2")])
+ [[:a #[$1] #(do "3")]
+ [:b #[$1] #(do "2")]]
+ (fn [{: a : b }] (set happened (* (tonumber a) (tonumber b)))))
(before)
(let [commander (Command.commander)