version 0.3.1
[expresskeys.git] / ChangeLog.2
1
2 _Version 0.2.4 23 Aug 2005_
3
4 * Began code transfer/reuse from src-expresskeys to src-expresskeysconf
5 as a scaffold for some kind of graphical utility. Long way to go...
6
7 * Explained the X "xev" program and keycodes a little better in
8 the USAGE file.
9
10 * Put a warning regarding the X program "xmodmap" in the BUGS and
11 in the USAGE file.
12
13 * Cleaned up gcc warnings on a x86_64 system.
14
15 _Data Type Sizes (for my own reference)_
16
17 Type            x86     x86_64
18
19 char            8       8
20 short           16      16
21 int             32      32
22 long            32      64
23 long long       64      64
24 float           32      32
25 double          64      64
26 long double     96      128
27 void*           32      64
28
29 In short, a programmer should NOT assume that:
30 sizeof(int) == sizeof(long) == sizeof(void*)
31
32
33 _Version 0.2.3 13 May 2005_
34
35 * The project now uses the GNU Autotools to:
36 "./configure", "make" and "make install".
37
38 * Print out a version number with the "Usage" info if the program is
39 run with an empty command line.
40
41 * Corrected the Blender entry (undo/redo in both edit and object mode).
42 Yes, that's a cryptic line ;-) Try Blender for yourself. Next version,
43 (2.37) due this month or so, will be something extra.
44
45
46 _Version 0.2.2 5 May 2005_
47
48 * Included an example of how to use an external program through
49 the simple "system" command (see exec_shell.c). The sample
50 "xsetwacom" utilization (pen pressure sensitivity) is not particularly
51 exciting as a new feature, but nevertheless an opening for future
52 implementations.
53
54 It's hard to imagine someone wasting three full expresskeys to get
55 a comfortable workflow, but here you are:
56
57 Keycode field value (regular button only, not touch strips or Plus)
58 1001 <-- Pen sensitivity gets lower with each press, until roll over.
59 1002 <-- Pen sensitivity is set to wacom default, a middle curve.
60 1003 <-- Pen sensitivity gets higher with each press, until roll over.
61
62 A pen name must be specified on the command line, of course.
63
64 Since both the 1001 and 1003 flip over in a carousel fashion at the
65 top and bottom values, you could manage the operation with only one
66 button. But if you go too far, there are 6 presses to be made until
67 next rendezvous in the 7 state circle. Not good.
68
69 The curve values are picked from how the "wacomcpl" program sets them
70 (the tcl utility) in Feel -> Sensitivity [1 to 7].
71
72 I've refrained from documenting the 1001 - 1003 in the USAGE file, and
73 a new configuration file won't have them listed in the header. The real
74 world usability is too limited, I feel. Better things will hopefully
75 come in the future.
76
77 The old pen mode toggle code could be rewritten so it was handled by
78 this external xsetwacom functionality, in good *nix tradition of reuse.
79 But what if the user environment doesn't have the xsetwacom program
80 installed? Better leave the code as is, I think.
81
82 -------------------------------------------------------------------------
83 Speaking of the future, this 0.2.2 version will be the last one (from me
84 at least) for quite some time. When I began the project, more than 1 1/2
85 months ago, it was out of pure necessity. I had a brand new (expensive)
86 Wacom tablet with semi functional hardware. Extensive web searches didn't
87 reveal any program to unlock the enticing ExpressKeys and Touch Strips,
88 so I reluctantly opened a C language book and set to work.
89
90 I never planned to enter the "programmer" domain in earnest. Neither
91 did I anticipate a perpetual development. When the job was done, it
92 would be done...
93
94 And now it's done, from my point of view. Core functions are rather
95 complete, and the program runs without hiccups. Ideas have dried up
96 and I am frankly getting bored with code hacking. Now I want to USE
97 the tablet, finally.
98
99 The code is free as in beer and freedom. If anyone feels like expanding
100 or even forking it, just do so (according to the GPL). There's the whole
101 bag of internationalization, installation and graphical configuration
102 left to a fresh mind. I'm too tired right now.
103
104 Though, I'll dive in again if a pressing issue turns up ;-)
105
106 Bye for now,
107 Mats
108 -------------------------------------------------------------------------
109
110
111 _Version 0.2.1 2 May 2005_
112
113 * Added support for faking mouse button events. Denis DerSarkisian
114 sent a function called "fake_event" (top of event_loop.c) which
115 in essence acts like a traffic cop, steering true keycodes to
116 XTestFakeKeyEvent and a set of false ones to XTestFakeButtonEvent.
117 The fake codes can be entered as 991 to 997 in the configuration
118 file, simulating mouse buttons 1 to 7.
119
120 Only existing mouse buttons, defined through the driver of the
121 active core pointer, can be simulated. I added discovery code to
122 prevent a crash if someone tries to use a nonexistent mouse button
123 in the range 1 to 7.
124
125 The code author wanted his touch strips to act like a mouse's scroll
126 wheel through the use of mouse buttons 4 - 5 (Up/Down) and 6 - 7
127 (Left/Right). I only have a three button mouse, the Wacom puck is
128 not a core pointer, but can make good use of the new functionality
129 in eg the web browser Opera:
130
131 [...]
132 20 Right Pad - Button 14:       993             # Button 14
133 21 Right Pad - Button 14 Plus:  991             # Extra key
134 [...]
135 24 Right Pad - Button 16:       991             # Button 16
136 25 Right Pad - Button 16 Plus:  993             # Extra key
137 [...]
138
139 With those definitions I step backwards (14) and forwards (16) in
140 the visited page history. Opera's "forward" can also take me to
141 the "Next" linked page, so it's very convenient when having a long
142 reading session.
143
144 * Expanded the "-v" (verbose mode) printing to cover more execution
145 points and be a lot more detailed.
146
147 * Racked my brain and added some more knowledge to the BUGS file.
148
149
150 _Version 0.2.0 29 April 2005_
151
152 (NOTE: A version of this archive was pulled from the website after a
153 few hours of exposure on April 28, based on the suspicion that it
154 contained a corrupt file due to some file system issues on my machine.
155 Both fears were unfounded. I've spent this interim on further
156 restructuring of the text files outside of the code directories)
157
158 * New configuration file format. Incompatible with the old one, hence
159 the version bump from 0.1 to 0.2
160
161 Move/rename the old file and run the program to get a new. Then edit...
162
163 The old format was basically just a transcript of how a C structure
164 is initialized. It had nothing in common with how a configuration
165 file in *nix should be construed.
166
167 Rules for the new configuration file is: Blank lines and everything
168 after a "#" is discarded. Full program records begin and end with
169 a double percentage sign "%%". A program field begins after a colon ":".
170 The program names must be within two double quotes "". Like so:
171
172 "A ProgramName" <-- OK
173 " A ProgramName" or "A ProgramName " <-- NOT-OK
174
175 This is in accordance with the old rule about how to deal with spaces
176 in that field.
177
178 I can only vouch for parsing sanity if each line in the file is kept
179 below 160 bytes in length (see the BUGS file). That's the equiv of
180 two old style terminal lines. If you want more, change the MAXBUFFER
181 value in globals.h
182
183 * Another command line option: "-v". Will turn on the be_verbose flag
184 which prints info to the screen from plenty of program execution points.
185 An aid for debugging, or just checking out the runtime state.
186
187 * Got rid of the ugly switch routines in event_loop.c and config_read.c.
188 I've done extensive benchmarking and see no difference in code speed.
189 Advantage, apart from code simplicity, is that the compiled program
190 size was reduced by ca 4000 bytes - before the 0.2.0 additions.
191
192
193 _Version 0.1.4 24 April 2005_
194
195 * Memory bugfix. Running the program under Valgrind to catch memory
196 leaks and other errors I finally saw the reason for me needing
197 heap_protect kludges. Doing XFreeDeviceList on a structure and then
198 reading data from the freed memory only works through luck...
199
200 * Took the opportunity to free lingering memory allocations at program
201 exit. It's not strictly necessary since the OS should reclaim it all,
202 but looks nice in the Valgrind summary. There's still one left that
203 I can't find the souce of. It belongs to XextCreateExtension apparently.
204
205 * Bugfix: Had forgotten to close the error.log after writing to it in
206 the exit_on_error function. Also, that function shouldn't do a final
207 exit(EXIT_KO) but instead jump to clean_up_exit(SIGTERM). However,
208 doing that it won't return the EXIT_KO to any parent. I'd have to
209 change the signal handling to achieve this.
210
211 * Bugfix: The config file version tag was meant to look like:
212
213 Version: 1
214
215 and nothing else, for now... The confusion and uncertainty stems from
216 doing this before a final format has been chosen. There are many factors
217 to consider, so bear with me.
218
219 * Reverted to the "expresskeys" base name on compile output and shell
220 files. When writing code it's more convenient with a short name, but
221 any final product should have a consistent naming.
222
223
224 _Version 0.1.3 21 April 2005_
225
226 * Just internal code cleanup/restructuring after having begun reading
227 "The Art of Unix Programming" by Eric Steven Raymond:
228 http://www.catb.org/~esr/writings/taoup/html/
229
230 * Now tags a new configuration file with a version number according to
231 his advice: "Always, _always_ either include a version number, or ...".
232 Expect more internal changes when I'm done reading. In an already
233 existing configuration file you'll have to add it manually. Put a:
234
235 Config File Version 1:
236
237 on a line by itself at the very top.
238
239
240 _Version 0.1.2 20 April 2005_
241
242 * Signal handling in place. Not much in itself, but:
243
244 * Re-reads the configuration file upon receipt of the signal SIGUSR1.
245 Do a "kill -USR1 <pid-of-ekeys>" after a config file edit. That's USR
246 and the digit 1. I've also modified USR2 to do the same thing, for
247 now at least.
248
249 Included is a shell script called ekeys-reread.sh which does it for you
250 if ekeys is running in daemon mode. Also included is ekeys-terminate.sh
251 which replaces the former ekeys-kill.sh (a bit smarter).
252
253 * The program will now refuse to start if it detects another instance
254 running. Only works if there is a pid-file to examine of course.
255 A pid-file left by a crash (will never happen...) and not connected
256 with any process by that number is ignored, and the program continues.
257
258 * A properly terminated program deletes the pid-file upon exit. Proper
259 means a normal "kill <pid>", "killall ekeys", "kill -TERM <pid>" etc.
260 Doing a brutal "kill -9 <pid>" or if the program crashes (cough, cough)
261 will leave the pid-file undeleted.
262
263 * Any error, encountered by the code, which terminates the program is
264 written to the file "error.log" as well as to the screen. A restart
265 truncates the file (it becomes size 0). This means that there always
266 will be an error.log present, but empty in normal cases.
267
268
269 _Version 0.1.1 17 April 2005_
270
271 * Now reads an external configuration file at program launch. It
272 searches in the user home directory under the hidden "/.expresskeys"
273 directory. File is called "expresskeys.conf". If none is found, or
274 the directory doesn't exist yet, it makes the dir, then creates and
275 populates a minimal file from an internal list. The original "default",
276 "Gimp", "Blender" and "XTerm" entries. It then goes on and reads in
277 that file immediately. A limit of 64 different program definitions
278 has been set (easily altered in the code). It's way more than most
279 would need, since the "default" is fine for a huge group of programs.
280
281 Rules for the configuration file is: Don't use { or } in comments,
282 and preferably keep comments outside of program definitions. The
283 comma (,) inside a definition is still used to separate all the
284 fields. Program names don't need the embracing quotes "" but I
285 kept the default list using them. Since spaces are accepted as part
286 of a class name, make sure there are no space _before or after_ the
287 name, prior to the terminating field comma:
288
289 {"A ProgramName", or {A ProgramName,    <-- OK
290 {"A ProgramName" , or { A ProgramName,  <-- NOT-OK
291
292 The extra space/s would become part of the class name. Not what you want.
293 If you absolutely must put some space before the comma, use TAB instead.
294 Those are discarded while parsing the string.
295
296 * Pen handling is now specified on the command line, eg:
297
298 ekeys pad stylus
299
300 The value for pen mode switch in the configuration file is still 999.
301
302 Yes, "ekeys" :-) I changed the compile output to that name. The code
303 tarball will still be named expresskeys though. Doing a web search
304 revealed it to be rather unique to the Intuos3, while ekeys turned
305 up music hardware and relatives. But, naturally, feel free to name it
306 badzilla or VincentVanGogh instead. Program behaviour is not dependent
307 on the file name.
308
309 * Another command line change, to make it run in the background:
310
311 ekeys pad stylus -d
312
313 It then runs in "daemon" mode. The difference between pushing it
314 with a terminating & or letting internal code "fork" it is beyond
315 most peoples interest. I can already hear the snores building up...
316 But in terms of how I've coded stuff it still matters.
317
318 If the program is launched into daemon mode, it writes out another
319 file in the configuration directory: "expresskeys.pid". A
320 process identification (PID) is a unique number, separating the
321 program from all the other stuff you have running. The number can
322 be used, for example, to do an easy kill.
323
324 I've included a simple shell script (called ekeys-kill.sh) which reads the
325 expresskeys.pid and tries to kill whatever process that has the pid,
326 so do a "ps aux | grep ekeys" beforehand to be sure it's running
327 (and don't confuse your "grep ekeys" with an actual "ekeys" instance).
328 Add a line to start ekeys directly after a kill and you have an easy
329 path when doing config file changes. The pid file is not automatically
330 deleted by internal code on exit (yet).
331
332 * For any programmer out there, or curious user, I've now filled the
333 code with comments. It had to be done at some point...
334
335
336 _Version 0.1.0 5 April 2005_
337
338 Just internal changes. A massive rewrite to get rid of cruft, and
339 put my own stink on the whole code structure. Ah yes, I then GPL-d
340 the result...
341