Hello, Pierre Neidhardt <[email protected]> writes:
> I came up with the following function, it seems to work well (need to > test a little more though). > > Before I could submit a patch, I was wondering where I should place it: > it seems that placing it in guix/utils.scm triggers a whole world > rebuild. > > Is there a way around it or should I send this patch to core-updates? Not what you're asking for, but I had a few comments about the implementation: > --8<---------------cut here---------------start------------->8--- > (define* (make-desktop-entry-file destination #:key > (type "Application") ; One of > "Application", "Link" or "Directory". > (version "1.1") > name > (generic-name name) > (no-display #f) What about only providing default values only for mandatory keys, i.e., only "type" (name is also mandatory, but it has no default value). I think the function currently adds entries that are not necessary. > (define* (parse key value #:optional locale) > (set! value (match value > (#t "true") > (#f "false") > ((? number? n) n) > ((? string? s) (escape-semicolon s)) > ((? list? value) > (catch 'wrong-type-arg > (lambda () (string-join (map escape-semicolon value) > ";")) > (lambda args (error "List arguments can only contain > strings: ~a" args)))) > (_ (error "Value must be a boolean, number, string or list > of strings")))) > (format #t "~a=~a~%" > (if locale > (format #f "~a[~a]" key locale) > key) > value)) I wonder if it wouldn't be better to stick to the specification. For example :comment expects a string, or an alist: shouldn't the function return an error if its value is something else? It requires us to hard-code the allow value types in the function, but Not every packager knows these specifications, and it could help them a bit. Also, we can limit keys to allowed ones, for increased typo checking. > (set! key > (string-join (map string-titlecase > (string-split (symbol->string > (keyword->symbol key)) > #\-)) > "")) The docstring may explain that, e.g., compound :mime-type key becomes MimeType. In any case, it looks nice and useful. Regards, -- Nicolas Goaziou
