freenode/#clim - IRC Chatlog
Search
4:42:18
loke
beach: I'l thinking about building a simple configuration system for mcclim that can be extended later.
4:44:27
loke
beach: In my case right now? Fonts, and hinting behaviour. Other things I've considered are things such as default colours, default sizer of things (fonts, buttons). Other things would be things like language settings, number formats. How being able to configure scrollbar locations, etc...
4:46:06
loke
I was thinking about doing a prototype implementation. Should I just build that as a stadnalone project?
4:47:41
loke
I don't know. I want to base it off of the ideas in the öcustomise” framework in Emacs. You define customisable variables. Emacs has a macro ‘defcustom’ for that purpose. A customiseable variable has some metdata, sych as validator functions, documentations and callbacks that are called when their values are changed.
4:48:13
loke
Customisable variables are grouped in, well, groups, so that you can browse all the settings.
4:49:16
loke
(clim:define-customisable-variable KEYWORD-COLOUR :type COLOUR :group SECOND-CLIMACS :documentation "The colour of keywords in a Lisp source file")
4:49:55
loke
and then a gui to choose the colour would be automatically provided by the :type thingy
4:50:52
beach
2. the group could use the Common Lisp package system for its name. Emacs Lisp does not have packages.
4:54:41
loke
So if a variable value is of type ‘font’, there should be a trsentaion method for customisable fonts that displays an example and provides a meny to choose a different value.
4:55:42
loke
The question then is: When using such a value, what should the API be? I have two choices:
4:58:45
loke
Or... should the config system manage this stuff, and load the valued on demand and stuff, and I simply use symbols to refer to the variables?
4:59:42
beach
However, keep in mind that Emacs Lisp does things in certain ways because it lacks features that Common Lisp has, such as packages, CLOS, etc.
5:00:43
loke
Using method 1 would make it easy to write custom method by specialising on (EQL 'NAME)
5:02:47
loke
But am I to assume you're OK with the idea of a universal config system, allowing you to have a program that visualises the settings and provides a single interface to perform this configuration?
5:03:14
loke
DEFINE-CUSTOMISABLE-VARIABLE would register the variable in a repository so you can get a list of all such values.
5:04:31
loke
This was all kicked off by me needeing a good way to store the HINTING preference. I can't just have it as a DEFVAR since the value needs to be set before any fonts are loaded. Setting it later have no effect. But, if I have a callback when the value is changed, I can flush the cache at that time.
5:04:58
loke
ALso, I realise that I need to make the font tyypes (:FIXED, :ROMAN, etc...) customisable. But to do that you need a graphical way to choose fonts.
5:07:13
loke
Another alternative would be to have the customisation system referring to an underlying DEFVAR. In other words, when reading the vfalue, you'd just read the value of the *FOO* variable normally, and the customisation system would simply do (SETF (SYMBOL-VALUE '*FOO*) ...) when setting it. The benefit of this would be that you could retrofit config editors on top of existing DEFVAR's without having to change the code that uses them.
5:10:24
loke
Yes, and I always struggle with them. Sometimes to the point where I need medication. :-)
5:11:11
loke
It's not too bad. But I can end up it a situation where the fear of maging a bad choice precludes me from making a choice at all.
5:13:35
loke
Wait a second... I realise a problem with the idea of purely using the symbols and pacakges... Maybe...
5:13:52
loke
What if I need to manpulate configuration values for a package which has not been loaded?