From: NickC <rep...@no...> - 2010-07-14 05:55:20
|
A beginner's question, but I can't figure out the syntax to add Opera browser to custom:*browsers*. I tried: (append custom:*browsers* (list :OPERA "opera" "-remote" "openURL(~a,new- tab)")) but this gives each element as an individual entry instead of the list surrounded by parentheses. For example, I want this: ...other entries...) (:OPERA "opera" "-remote" "openURL(~a,new-tab)") but get this: ...other entries...) :OPERA "opera" "-remote" "openURL(~a,new-tab)" Thanks, -- NickC |
From: edgar <edg...@we...> - 2010-07-14 14:37:41
|
> A beginner's question, but I can't figure out the syntax to add > Opera browser to custom:*browsers*. I tried: > (append custom:*browsers* (list :OPERA "opera" "-remote" > "openURL(~a,new-tab)")) > but this gives each element as an individual entry instead of the > list surrounded by parentheses. > > For example, I want this: > ...other entries...) (:OPERA "opera" "-remote" "openURL(~a,new-tab)") > but get this: > ...other entries...) :OPERA "opera" "-remote" "openURL(~a,new-tab)" Hi NickC, First of all: With my CLISP here, there already is an :OPERA browser defined in CUSTOM:*BROWSERS*, so APPENDing a second list, starting with :OPERA to the end of the list will be probably quite useless, because it will always be shadowed by the first entry and never be called. Here are several possibilities, first the quickest and dirtiest: (push (list :OPERA "opera" "-remote" "openURL(~a,new-tab)") custom:*browsers*) This stores your list at the beginning of CUSTOM:*BROWSERS*, where it will always be called first. PUSH modifies CUSTOM:*BROWSERS*, so you will need no SETF to make it stay there (until you quit CLISP). But I think the more elegant way would be to replace the :OPERA entry in CUSTOM:*BROWSERS* by using NSUBSTITUTE-IF: (nsubstitute-if (list :OPERA "opera" "-remote" "openURL(~a,new-tab)") #'(lambda (x) (eq :opera (car x))) custom:*browsers*) NSUBSTITUTE... like PUSH modifies CUSTOM:*BROWSERS*, SUBSTITUTE... (without N) makes a copy, and does not modify. NSUBSTITUTE-IF does both, it removes the old :OPERA entry and replaces it with your new list. If you insist in APPEND (or want to know why it didn't work), here are two working versions: (setf custom:*browsers* (append custom:*browsers* (list (list :OPERA "opera" "-remote" "openURL(~a,new-tab)")))) or using the ' (quote) read-macro: (setf custom:*browsers* (append custom:*browsers* '((:OPERA "opera" "-remote" "openURL(~a,new-tab)")))) APPEND 'splices' lists, what means it first removes the outer parens of the second argument before it puts the 'contents' (without the parens) into the first list. So if you want to put a list into another list, with APPEND you always need TWO pairs of parens around the list. The modifying version of APPEND is NCONC: (nconc custom:*browsers* '((:OPERA "opera" "-remote" "openURL(~a,new-tab)"))) Stores the new :OPERA entry in CUSTOM:*BROWSERS* without SETF. But with APPEND, the old :OPERA entry does not get removed from CUSTOM:*BROWSERS*. Anybody a better idea? I'm using the Debian "Iceweasel" Browser (GPL version of Firefox), which is also quite non-standard, but I usually edit the "config.lisp" file during compilation, so I do not need to modify CUSTOM:*BROWSERS*. But this looks of course different with pre-compiled CLISP packages. - edgar -- The author of this email does not necessarily endorse the following advertisements, which are the sole responsibility of the advertiser: |
From: Sam S. <sd...@gn...> - 2010-07-15 14:42:11
|
an excellent reply. a small simplification: edgar wrote: > (nsubstitute-if (list :OPERA "opera" "-remote" "openURL(~a,new-tab)") > #'(lambda (x) (eq :opera (car x))) > custom:*browsers*) (nsubstitute '(:OPERA "opera" "-remote" "openURL(~a,new-tab)") :OPERA custom:*browsers* :key #'car) http://www.lispworks.com/documentation/HyperSpec/Body/f_sbs_s.htm of you cal load clisp/emacs/clhs.el and do C-h C-s nsubstitute RET |
From: NickC <rep...@no...> - 2010-07-16 03:11:44
|
Many thanks for that very detailed reply. Clears up my confusion. -- NickC |