2010-06-02 01:02:06 +0100 / mad / revision 3227

post-commit: Spurious change to see if the previous one worked.


2010-06-02 00:57:52 +0100 / mad / revision 3226

post-commit: It seems unlikely to me that "raghdam" will ever pull this change but at least this might prevent anyone else spamming us like he is. I don't know why we were ever qualifying the addresses rather than letting the MTA do it. Perhaps we'll find out.

Really, I'd prefer the check-in mails sent to terminator-users, evergreen-users or, in the case of salma-hayek, to... well, yes. So that idea ran into the sand.


2010-05-26 05:56:49 +0100 / enh / revision 3225

src/e/util/GuiUtilities.java: add code to enable/disable text anti-aliasing using the system configuration (so you get anti-aliasing appropriate to your display device).

src/e/ptextarea/PLineNumberPanel.java:
src/e/ptextarea/PTextAreaRenderer.java: switch existing code over. There's a slight behavior change here: callers now definitely get anti-aliasing whereas before they get anti-aliasing only if the user hadn't disabled it system-wide. If that turns out to be a problem, these components will need to grow a property, and applications embedding them will need to set it. (Or, if the application in question just wants "whatever native applications would default to", we should add a new GuiUtilities.syncTextAntiAliasingWithOS method.)


2010-05-26 05:52:59 +0100 / enh / revision 3224

src/e/gui/HeapView.java: stop wasting time configuring text anti-aliasing in code that renders no text.


2010-05-21 18:30:53 +0100 / mad / revision 3223

src/e/ptextarea/PKeyHandler.java: I haven't tried a Mac but this is more in keeping with the surrounding code.


2010-05-21 18:00:13 +0100 / mad / revision 3222

src/e/ptextarea/PKeyHandler.java: Look, Nigel, how easy it is to hack in the features you want.


2010-04-19 01:03:08 +0100 / enh / revision 3221

src/e/gui/EPopupMenu.java: the original reporter has confirmed that ignoring button 0 fixes the problem where a horizontal scroll wheel would cause the popup menu to appear, so modify the comment to remove the implication of doubt.


2010-04-16 23:07:02 +0100 / mad / revision 3220

lib/data/spelling-exceptions: In which [ai]spell amuses me by suggesting "pro-grammatically".


2010-04-12 05:01:42 +0100 / enh / revision 3219

src/e/gui/EPopupMenu.java: Daniel Martin reports problems using Terminator with his ThinkPad's nipple that may well be our fault. I don't have the hardware to test this, but I have checked that it doesn't break right-click for normal mice.


2010-04-11 23:13:32 +0100 / mad / revision 3218

bin/show-alert.rb: Susi noted that we don't say what email address we want the error mailed to on Linux. I think that message was originally Windows-specific because it's highly non-obvious how to copy the message on that platform. Susi didn't have any trouble working it out with Zenity. I worry, there though, that the email address will be off the bottom of the screen. Oh well, small steps.


2010-04-07 18:23:45 +0100 / mad / revision 3217

lib/data/spelling-exceptions: How can the plural of "index" not be in the dictionary, with 35 million google hits?


2010-04-05 04:11:19 +0100 / enh / revision 3216

src/e/util/ProcessUtilities.java: be more consistent about allowing null listeners, for callers who don't care.


2010-04-02 18:24:03 +0100 / mad / revision 3215

lib/build/mdorey.sh: After a reboot of my Windows box, I was getting:

cat: cannot open file /dev/fs/C/home/martind/software.jessies.org/work/salma-hayek/lib/build/mdorey.sh : No such file or directory

Something in cron's environment can't be right. A change to /home/martind wasn't enough. This is the idiom I use on proper unix anyway.

Downgrading cygserver from 1.7 to 1.5 didn't help but took me long enough to work out that I'll record the instructions for when we abandon 1.5 support.


2010-03-27 20:18:08 +0000 / enh / revision 3214

src/e/forms/FormPanel.java: the recent tightening of dialog spacing has made it more obvious that the FormPanel was inset relative to the button panel. This seems to have stemmed from confusion about whose responsibility such padding should be. I can't think of a reasonable argument that it should be the responsibility of FormPanel rather than its container. I also appear to have been confused about the order of Inset's constructor parameters; they go anti-clockwise from 'top', not clockwise.


2010-03-24 15:27:56 +0000 / enh / revision 3213

lib/build/universal.make: no-one is using Ubuntu 6.06 ("Dapper Drake") any more, let alone anything earlier.


2010-03-24 07:04:22 +0000 / mad / revision 3212

www/index.html: We could just recommend a version of Xcode that we know works, like 3.2.1, but there might well have been many versions between that and 2.2.1 which include make 3.81.


2010-03-24 06:58:26 +0000 / mad / revision 3211

lib/build/universal.make: Cope with find-jdk-root.rb returning the location of an Apple-style JRE, which includes all the JDK stuff, just not with the standard layout. Doing this arguably improves the code here, especially by encouraging us to defer the test for jni_md.h until we can implement it more elegantly.

lib/build/package-for-distribution.rb: Only use #{find_jdk_root()}/bin/jar where jar isn't on the path, which will only be Windows, thus avoiding it on Mac, where bin/ no longer exists...

bin/find-jdk-root.rb: ... after abandoning the special-casing here which caused trouble in the previous couple of revisions. I'm not really convinced that this is a good idea, but I'd made the universal.make change before I realized that the problem could more easily be fixed in the way I committed just now. Even if we were to decide to revert the change to this file, most of the universal.make change seemed worth keeping.


2010-03-24 06:36:27 +0000 / mad / revision 3210

bin/find-jdk-root.rb: The heuristic here doesn't work for me, on an up-to-date Mac OS X 10.6, where /usr/bin/java's realpath() is, as suggested by the comment above the heuristic, /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java. We were only being saved by falling back to Java 5, the option for which was deleted in r3206. I suspect this explains why we have no Mac uploads since 2010-03-20.


2010-03-24 05:16:57 +0000 / mad / revision 3209

lib/build/universal.make: While I'm there, even Etch has 3.81.


2010-03-24 05:15:33 +0000 / mad / revision 3208

lib/build/universal.make: Typo in warning.


2010-03-23 22:58:37 +0000 / mad / revision 3207

bin/invoke-java.rb: We don't get as far as looking for Java 6 if we think the Java 5 at the head of the path is new enough.


2010-03-21 18:10:17 +0000 / enh / revision 3206

bin/find-jdk-root.rb:
bin/invoke-java.rb:
lib/build/universal.make:
native/all/java-launcher/java-launcher.cpp:
src/e/ptextarea/PAnchor.java:
www/index.html: r3204 broke the build for Java 5 users (http://groups.google.com/group/terminator-users/browse_thread/thread/9f84bb68ea9db5b6). We'd already switched to building on Java 6, but we were still targeting Java 5, and we were still allowing the use of JDK5. We also hadn't made any incompatible change. This patch presses forwards, so we can at least see whether a full switch is going to be a serious inconvenience to many people. (I personally still use Java 5 on Ubuntu 8.04 at work.)


2010-03-20 05:51:03 +0000 / enh / revision 3205

src/e/forms/FormPanel.java:
src/e/util/Preferences.java: the support for adding a wide row was broken, but not visibly so because the only caller didn't have any other rows (which made the unwanted label column zero-width). Let's add an intention-revealing name while we're here.


2010-03-20 05:37:01 +0000 / enh / revision 3204

src/e/ptextarea/PHighlightManager.java: I added code to PMouseHandler that called getHighlightsOverlapping(getOffsetAtMouse(), getOffsetAtMouse()), and found this bug. The PMouseHandler change was supposed to be a step towards allowing tool tips on arbitrary PHighlights, but I've not touched it in months. Still worth committing this fix, whether I return to the tool tip work or not.


2010-03-20 05:31:13 +0000 / enh / revision 3203

src/e/util/NumberDecoder.java: treat bases 2, 8, and 16 as unsigned. Showing "-0x7" and the like wasn't terribly useful.


2010-02-24 08:37:05 +0000 / mad / revision 3202

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: If we're run without specifying the path to us, then assume we can run ruby-launcher the same way. I can't see how this could be less useful than throwing an exception and it might let Aaron Oman start Terminator from Perforce.


2010-02-01 17:48:37 +0000 / enp / revision 3201

src/e/util/GuiUtilities.java: Starting with Mac OS 10.6 Menlo is the default monospaced font in Terminal.app and Xcode, so if it is available make it our default font too, overriding the traditional choice of Monaco.

http://groups.google.com/group/terminator-users/browse_thread/thread/2cc6787cb9a9650?hl=en


2010-01-30 19:05:01 +0000 / mad / revision 3200

bin/invoke-java.rb: If we get as far as starting Java, then the contents of the application log (as opposed to the terminal log) are likely to be interesting. Elliott also suggests asking Cheryl Long what she was doing, though I worry that users will spend ages writing up that, when what was actually important was something else entirely. Let's see how we get on with Cygwin paths. I'm mindful of introducing cygpath problems into the exception handling, though I can't really see that happening, once we've got this far. Testing this on Gnome, I see that the monolog box has become far too long for zenity (or whatever it is) to present sanely.


2010-01-24 21:01:59 +0000 / enh / revision 3199

src/e/util/CollectionUtilities.java: since the natural order comparator is thread-safe and immutable, we only need one instance of it.


2010-01-24 20:55:59 +0000 / enh / revision 3198

src/e/ptextarea/PAnchorSet.java:
src/e/util/CollectionUtilities.java: pull out PAnchorSet's inlined "lower_bound" and make it generally available.


2010-01-24 05:07:55 +0000 / enh / revision 3197

src/org/jessies/test/Assert.java: new assertions needed for the tests in the previous revision.


2010-01-24 05:07:20 +0000 / enh / revision 3196

src/e/util/CollectionUtilities.java:
src/e/util/SmartStringComparator.java: two new classes required to fix Evergreen's sorting of tags.


2010-01-20 06:38:46 +0000 / enh / revision 3195

lib/data/spelling-exceptions: a couple more bits of jargon.


2010-01-19 20:22:25 +0000 / enp / revision 3194

lib/build/universal.make: We no longer have a Mac OS X 10.4 machine to build on. OS X 10.6 includes the older developer SDK libraries, but using them gives compile warnings like

Linking java-launcher...
mkdir -p /Users/ed/Projects/WorkingCopies/salma-hayek/.generated/universal_Darwin/bin && \
g++ -V4.0.1 /Users/ed/Projects/WorkingCopies/salma-hayek/.generated/native/all/java-launcher/universal_Darwin/java-launcher.o /Users/ed/Projects/WorkingCopies/salma-hayek/.generated/native/all/java-launcher/universal_Darwin/synchronizeWindowsEnvironment.o /Users/ed/Projects/WorkingCopies/salma-hayek/.generated/native/all/java-launcher/universal_Darwin/WindowsDirectoryChange.o -o /Users/ed/Projects/WorkingCopies/salma-hayek/.generated/universal_Darwin/bin/java-launcher -mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -lobjc -lstdc++ -framework Cocoa
ld: warning: object file compiled with -mlong-branch which is no longer needed. To remove this warning, recompile without -mlong-branch: /Developer/SDKs/MacOSX10.4u.sdk/usr/lib/crt1.o

We continue to specify Mac OS X 10.4 as the minimum supported version, at least until somebody reports that it no longer works. Doing so means we cannot also target -arch x86_64 or the build will fail with an error like:

g++ -V4.0.1 -Wno-long-long -fno-omit-frame-pointer -fno-strict-aliasing -fPIC -g -W -Wall -Wshadow -Werror -mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.6.sdk -arch ppc -arch i386 -arch x86_64 -pedantic -x objective-c++ -I/Users/ed/Projects/WorkingCopies/salma-hayek/native/Headers -I/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home//include -c -o /Users/ed/Projects/WorkingCopies/salma-hayek/.generated/native/all/java-launcher/universal_Darwin/java-launcher.o /Users/ed/Projects/WorkingCopies/salma-hayek/.generated/native/all/java-launcher/universal_Darwin/java-launcher.cpp
cc1objplus: warnings being treated as errors
<built-in>:0: warning: Mac OS X version 10.5 or later is needed for use of the new objc abi
lipo: can't figure out the architecture type of: /var/folders/Gr/Gr0gU-YPErW6u5ZbcDyzZ++++TI/-Tmp-//ccIPLCer.out


2010-01-19 18:39:31 +0000 / mad / revision 3193

lib/data/spelling-exceptions: I'm coming at this, again, from a C++ perspective, but these terms aren't C++ keywords or identifiers and, indeed, aren't really specific to C++. I'm more likely to use them in comments, including check-in comments, than in code.


2010-01-11 01:23:08 +0000 / enh / revision 3192

lib/build/universal.make: add support for building with ecj.


2010-01-11 01:21:38 +0000 / enh / revision 3191

src/e/ptextarea/PTextArea.java: remove an unused constant found by ecj.


2010-01-11 01:14:38 +0000 / enh / revision 3190

src/e/demo/PTextAreaDemo.java:
src/e/gui/CrossIcon.java:
src/e/gui/DocumentAdapter.java:
src/e/gui/EMenuBar.java:
src/e/gui/FilenameChooserField.java:
src/e/ptextarea/PAssemblerTextStyler.java:
src/e/ptextarea/PBashTextStyler.java:
src/e/ptextarea/PCPPTextStyler.java:
src/e/ptextarea/PCSharpTextStyler.java:
src/e/ptextarea/PCTextStyler.java:
src/e/ptextarea/PJavaScriptTextStyler.java:
src/e/ptextarea/PJavaTextStyler.java:
src/e/ptextarea/PLineNumberPanel.java:
src/e/ptextarea/PPBasicTextStyler.java:
src/e/ptextarea/PPerlTextStyler.java:
src/e/ptextarea/PPhpTextStyler.java:
src/e/ptextarea/PProtoTextStyler.java:
src/e/ptextarea/PPythonTextStyler.java:
src/e/ptextarea/PRubyTextStyler.java:
src/e/ptextarea/PTalcTextStyler.java:
src/e/ptextarea/PTextStyler.java:
src/e/ptextarea/PVhdlTextStyler.java:
src/e/ptextarea/PXmlTextStyler.java:
src/e/ptextarea/UnprintableCharacterTextSegment.java:
src/e/tools/BuildUi.java:
src/e/util/Log.java:
src/e/util/PatternUtilities.java: fix unused imports found by ecj.


2010-01-11 01:06:45 +0000 / enh / revision 3189

src/e/util/ProcessUtilities.java: remove unnecessary semicolon, found by ecj.


2010-01-10 23:42:05 +0000 / enh / revision 3188

src/e/util/Preferences.java: support font styles ("plain", "bold", "italic", and "bold italic") in our simple font chooser. Previously, although you could manually configure non-plain fonts, you couldn't choose a non-plain font in the UI (and using the UI would mangle your choice to the plain equivalent). Requested for Terminator by Joseph Prasad (http://groups.google.com/group/terminator-users/t/b71bf5011e197af2).


2010-01-07 23:37:32 +0000 / mad / revision 3187

lib/data/spelling-exceptions: The singular, linefeed, is already in whatever dictionary I'm using but the plural isn't. It seems a reasonable extension.


2010-01-07 23:36:36 +0000 / mad / revision 3186

lib/data/spelling-exceptions: I use "destructor" even when writing check-in comments, which aren't C++.


2010-01-05 23:17:24 +0000 / mad / revision 3185

bin/invoke-java.rb: Be more specific about the arguments to cygpath, in case it fails when stderr is hidden, like it is, initially, during the build. In that case, I don't think we have any useful png icon to give JavaHpp.


2010-01-05 22:48:01 +0000 / mad / revision 3184

bin/invoke-java.rb: I'm getting nowhere fast with this cygpath-producing-empty-output problem. Perhaps it's time to resort to printf debugging. Making this edit on my Linux box but trying to test the Windows-only code path via Samba, I saw one failing invocation of cygpath with an empty path. It turned out to be because my Linux work area has no Windows support binaries. Perhaps we should fail here, where we can inform the user of the path we looked under, rather than blarting out the previous, rather obtuse error in a terminal about out inability to load libpty.so. Or perhaps people were relying on this succeeding in order to be able to use pure Java tools even without support binaries. If the latter, then it would probably be a good idea to have a code-comment explaining why we're returning nil in that case. Perhaps the calling code should then handle nil explicitly.

I doubt anyone will notice the printfs, as I think stderr is discarded when double-clicking on the desktop shortcut. Our guinea pig will thus have to run Terminator from a Cygwin bash prompt.


2009-12-13 22:42:48 +0000 / enh / revision 3183

src/e/util/FileUtilities.java: I'm sure I keep writing code to extract extensions, but I couldn't find an example.


2009-12-13 22:41:30 +0000 / enh / revision 3182

src/e/ptextarea/PHighlightManager.java: we only want to iterate over the map values, so it's a waste to go via the keys.


2009-11-29 22:00:00 +0000 / mad / revision 3181

lib/build/dist.make: The parts of universal.make that know about the directory structure on jessies.org and particularities of the uploaded filenames.

lib/build/universal.make: This is then delegated to via a variable, DIST_MAKEFILE, which can be set by the calling code in order to provide a different implementation of "make native-dist", for uploading elsewhere than jessies.org. While DIST_MAKEFILE is required to be a makefile fragment, its implementation need not be more than a couple of lines, to delegate to a script, passing on the values of any variables that the script might find useful.


2009-11-17 01:37:44 +0000 / mad / revision 3180

lib/build/mdorey.sh: Clarifications and previously forgotten details based on reverting to Cygwin 1.5 on the build machine.


2009-11-16 19:56:23 +0000 / mad / revision 3179

www/cygwin-setup.html: 1.5's setup supports -q for updates but not -P. Now I know this, I can clarify what I'd previously left here. There's a significant economy to traversing 1.5's package browser in alphabetical order, so sort the full list of recommended packages.


2009-11-15 20:25:21 +0000 / mad / revision 3178

www/cygwin-problems.html: I suggested retitling this FAQ entry in response to the reported problem with groovysh and no-one objected but we can't be trying to maintain a list of every console subsystem application.

Really, I'm only doing this now so the nightly build script will update the Terminator installation now I've downgraded to Cygwin 1.7.0-62 using the excellent Cygwin Time Machine with setup.exe's --no-verify switch, to work around the bug reported by Al Hagopian and forwarded by me as http://cygwin.com/ml/cygwin/2009-11/msg00500.html.


2009-11-11 19:14:02 +0000 / mad / revision 3177

bin/invoke-java.rb: The whole rest of the function, which is ~50 lines, was indented, so clearly a candidate for an early return.


2009-11-11 17:36:15 +0000 / mad / revision 3176

www/downloads.html: With the smallest of hints, our new friend was able to diagnose and work-around his Cygwin problem (cygpath requiring the stdc++ DLL, which seemingly isn't installed by default). He does remind me that we do require a 32 bit Java to match the Cygwin Jni, which we should probably say upfront. He also notes that Windows 7 is only supported by Cygwin 1.7, but Cygwin's web page already says that and we already recommend 1.7 elsewhere.


2009-11-11 01:42:29 +0000 / mad / revision 3175

www/downloads.html: "Roberts, Brandon" and "constantine" both seem to be reporting problems on Windows 7 x64 (which I think is Microsoft orthography for what we, elsewhere, call x86_64). We know Amit's using Terminator successfully on Windows 7 x86, so x64 seems to be the active ingredient. This is, for me, the most diagnostic symptom:

-Djava.class.path=;;;;

That means that cygpath has returned an empty result, several times.


2009-10-29 05:33:46 +0000 / mad / revision 3174

www/cygwin-problems.html: A correspondent glorying only in the name "Randy" makes us aware that Microsoft's ftp has a similar disinclination to work within rxvt and Terminator as their telnet effort.


2009-10-25 00:13:22 +0100 / enh / revision 3173

src/org/jessies/test/Assert.java: stack overflow was not the failure I intended here.


2009-10-25 00:06:37 +0100 / enh / revision 3172

src/org/jessies/test/Assert.java: in the absence of a clever way to assert that something throws a particular exception, allow the user to write

  try {
    whatever
    fail("should have thrown WhateverException");
  } catch (WhateverException ex) {
    // Expected.
  }

This also reduces internal duplication slightly.


2009-10-18 08:37:17 +0100 / enp / revision 3171

src/e/gui/AboutBox.java: Remove redundant method, unused since SCM r551.


2009-10-17 01:23:29 +0100 / mad / revision 3170

www/downloads.html: The ever-increasing list of Windows versions has been distressing me for a while. We've tried it on Windows 2000 (though perhaps no-one has for a while) and Windows 7 and we've no reason to believe that it wouldn't work on anything in between. Elliott suggests similar for the Mac OS version. I do think it's worth recording that we expect it to work on 10.6. That will encourage better bug reports - the reporter won't waste their time thinking it's not meant to work there.


2009-10-16 23:42:43 +0100 / mad / revision 3169

www/downloads.html: Courtesy of Amit, we know that at least Terminator worked at least once on at least one Windows 7 installation. I see the value of recording that. But this list of all Microsoft's marketing names for their desktop and server OS releases for the last decade is obscuring the "x86" bit. We have had questions about amd64 on Windows a couple of times. (The show-stopper there is Cygwin. gcc support for amd64 Windows seems to have matured significantly in the last year or so. A production quality gcc would obviously help them.)


2009-10-14 05:15:09 +0100 / enh / revision 3168

lib/build/googlecode_upload.py: apply epg's patch from http://code.google.com/p/support/issues/detail?id=558 to fix this script, since the maintainers don't seem interested.


2009-10-14 04:55:05 +0100 / enh / revision 3167

lib/build/googlecode_upload.py: revision 190 of http://code.google.com/p/support/source/browse/trunk/scripts/googlecode_upload.py .


2009-10-14 00:39:00 +0100 / mad / revision 3166

bin/show-alert.rb: Amit Brahmbhatt demonstrates that Terminator does work fine on Windows 7, with no spurious console windows, once he'd read the section on cygwin.com's front page about Windows 7 only being supported on Cygwin 1.7. The one evident problem so far was that starting Terminator before starting a "Cygwin" window threw this horrible error:

Exception NameError: undefined local variable or method `app_name' for #<ExceptionReporter:0x10423244>
                at C:/Program Files/software.jessies.org/terminator/Resources/salma-hayek/bin/show-alert.rb:97:in `run_in_home_directory'
                at C:/Program Files/software.jessies.org/terminator/Resources/salma-hayek/bin/show-alert.rb:120:in `initialize'
                at C:/Program Files/software.jessies.org/terminator/Resources/salma-hayek/bin/show-alert.rb:134:in `new'
                at C:/Program Files/software.jessies.org/terminator/Resources/salma-hayek/bin/show-alert.rb:134:in `report_exceptions'
                at C:/Program Files/software.jessies.org/terminator/Resources/terminator/bin/terminator:21:in `launch'
                at C:/Program Files/software.jessies.org/terminator/Resources/terminator/bin/terminator:214

When it should have told him exactly what to do.

Only the first change here is functionally necessary. I just don't like the implicit parentheses on the second line I've changed.


2009-10-11 21:10:13 +0100 / pcn / revision 3165

Use our own file (jessies-wide) storing those spellings the user has
explicitly accepted. This fixes the spelling acceptance on MacOS.



2009-10-08 04:27:07 +0100 / enh / revision 3164

src/e/util/SpellingChecker.java: refactor so that the FileType-specific sets of exceptions delegate to a shared set of FileType-independent exceptions. The code supports arbitrary levels of delegation.


2009-10-07 04:25:11 +0100 / enh / revision 3163

src/e/util/SpellingChecker.java: revert r3162.


2009-10-06 22:37:25 +0100 / pcn / revision 3162

Don't rely on ispell to remember our accepted spellings, but
do it ourselves instead. This also cleans up the global spellings
treatment so we don't end up with one copy of them per file type,
which is a bit nice. Note: for this to actually take effect in
Evergreen we need a separate patch to that. Following shortly...


2009-10-06 04:12:43 +0100 / enh / revision 3161

www/downloads.html: looks like the new Mac .zip files built okay, so let's link to them.


2009-10-04 19:43:09 +0100 / enh / revision 3160

native/Darwin/MacSlideshow:
native/Darwin/NSPerformService: remove dead code.



2009-10-04 19:33:10 +0100 / enh / revision 3159

lib/build/universal.make: fix a comment written after testing.


2009-10-04 19:31:07 +0100 / enh / revision 3158

lib/build/universal.make: give up on .dmg as our Mac packaging format and switch to .zip instead. We can't update the HTML until after our first Mac build with these changes (but then we *must* update the HTML to prevent dangling links). Tested by manually uploading to and downloading from www.jessies.org/~enh/, using Mac OS 10.5.


2009-09-30 18:15:25 +0100 / mad / revision 3157

src/e/ptextarea/BugDatabaseHighlighter.java: I was disappointed not to see my echo-local-bug-database-patterns change take effect without a restart. I tried modifying the workspace properties before I looked at the source to see why that didn't help. I've changed that file three times in the three years since its inception, so this is no big deal.


2009-09-24 16:25:37 +0100 / enh / revision 3156

src/e/util/NumberDecoder.java: pad binary and hex numbers out to 32 or 64 bits. This makes it easier to tell the difference between 0x7ffffff and 0x7fffffff (the former being 0x07ffffff). It's less obviously useful for binary; that was just added by analogy. It might be that just rounding up to the next group of four would be better there.


2009-09-08 04:35:17 +0100 / mad / revision 3155

www/downloads.html: My existing Terminator and Evergreen worked fine after upgrading to Mac OS 10.6. A downloaded Terminator also worked, modulo the allegedly damaged image file.

lib/build/universal.make: Building on 10.6 required two changes, one to work around what looks like a minor regression in the PowerPC support and the other to work around the default compiler being changed to a less prehistoric version of gcc. Teh interwebs lead me to think that 4.0.1 was the gcc version on previous Mac OSs, so I don't *think* these changes will break Ed's nightly build on 10.whatever. Unexpectedly, then, it looks like we can, if we choose, support 10.4, 10.5 and 10.6, building on any of them.


2009-09-07 18:31:25 +0100 / enh / revision 3154

src/e/util/FileUtilities.java: introduce a new variant of FileUtilities.createTemporaryFile that offers control over everything. This should replace both of the existing variants. (The motivation for adding control over the extension is writing temporary HTML files; unlike Firefox, Chrome won't sniff the content of a .tmp file and realize it's HTML that should be rendered. I believe content sniffing to be a religious issue in the browser world, so this isn't necessarily a bug or missing feature. And giving temporary files an accurate extension doesn't seem like a bad idea anyway. Callers can always supply ".tmp" if they have nothing more interesting to say.)

src/e/util/StringUtilities.java: switch to the new variant.


2009-08-31 23:51:44 +0100 / mad / revision 3153

lib/data/spelling-exceptions: The only other wildcard-related spelling non-mistake in BlueArc's main code-base is one occurrence of "wildcardedness". With only three google matches, only one of which looks sane, we're probably better off listening to what allah's trying to tell us. (The others all have thousands or millions of matches.)


2009-08-31 05:01:37 +0100 / enh / revision 3152

lib/data/spelling-exceptions: add the other valid forms of "recurse", plus a handful of other words whose absence has been annoying me lately.


2009-08-28 23:03:00 +0100 / mad / revision 3151

lib/data/spelling-exceptions: John Holtom points a false-positive spelling error that's long annoyed me (how does it know "recursive" and not "recurse"?). Now there's a good place to fix it.


2009-08-17 21:09:32 +0100 / mad / revision 3150

lib/build/filter-build-output.rb: Removing a read-only file was iirc the motivating case for this line but $stdin.close() doesn't prevent Gnu rm from asking. Perhaps it opens /dev/console or some such. Worse, having universal.make opened as fd 0 means that make's children inherit the makefile as their input. This causes all manner of weirdness to make if the children do anything to the file, like read from it.

The right way to deny a Unix process any input is to give it /dev/null as fd 0. That stifles Gnu rm and fixes the intermittent apparent makefile truncation that prevented i386 Linux builds for a week or two.


2009-08-17 21:04:51 +0100 / mad / revision 3149

bin/invoke-java.rb: Revert accidentally committed junk from my main work area.


2009-08-17 19:58:46 +0100 / mad / revision 3148

bin/invoke-java.rb:
bin/show-alert.rb: Ruby 1.9 produces an error, when we try to delete from a Hash by assigning nil, telling us to use the delete method instead. OK then. (I searched for ENV.* = nil.)


2009-08-15 00:07:31 +0100 / mad / revision 3147

lib/build/simple.make: If someone's not followed the instructions in two years...

simple.make: ... then they're unlikely to miss the symlink in the legacy location.


2009-08-14 23:59:02 +0100 / mad / revision 3146

lib/build/package-for-distribution.rb: A lot of effort clearly went into the Build-Depends field but I'm not sure if it was ever useful. Commenting it out doesn't feel very constructive, even though it is now causing me a problem. I have tried to investigate how we'd be able to resurrect it and recorded what little progress I made.


2009-08-14 17:38:15 +0100 / mad / revision 3145

lib/build/mdorey.sh: Don't leave the reader with the misleading impression that Cygwin exim doesn't work. It does work. It's just not trivial to configure.

Really, this is just a spurious check-in to increment the version number, so the Cygwin nightly build will upload again, now I'm building with 1.7.0-58, which looks like it fixes the running-on-1.5 crashes.


2009-08-10 00:18:37 +0100 / enh / revision 3144

lib/data/spelling-exceptions: more spelling exceptions.


2009-08-09 23:32:43 +0100 / enh / revision 3143

src/e/ptextarea/PTextAreaSpellingChecker.java: push responsibility for spelling exceptions down into SpellingChecker.

src/e/util/SpellingChecker.java: support spelling exceptions, using a variation on the code that used to be divided between Evergreen and PTextAreaSpellingChecker.


2009-08-09 23:27:57 +0100 / enh / revision 3142

src/e/ptextarea/FileType.java: provide direct access to a file type's keywords without requiring the caller to know about PTextStyler. The notion of FileType seems appropriate leakage (and doesn't require a PTextArea); PTextStyler goes too far.

src/e/ptextarea/PAbstractLanguageStyler.java:
src/e/ptextarea/PAssemblerTextStyler.java:
src/e/ptextarea/PBashTextStyler.java:
src/e/ptextarea/PCPPTextStyler.java:
src/e/ptextarea/PCSharpTextStyler.java:
src/e/ptextarea/PCTextStyler.java:
src/e/ptextarea/PEmailTextStyler.java:
src/e/ptextarea/PJavaScriptTextStyler.java:
src/e/ptextarea/PJavaTextStyler.java:
src/e/ptextarea/PMakefileTextStyler.java:
src/e/ptextarea/PPatchTextStyler.java:
src/e/ptextarea/PPBasicTextStyler.java:
src/e/ptextarea/PPerlTextStyler.java:
src/e/ptextarea/PPhpTextStyler.java:
src/e/ptextarea/PPlainTextStyler.java:
src/e/ptextarea/PProtoTextStyler.java:
src/e/ptextarea/PPythonTextStyler.java:
src/e/ptextarea/PRubyTextStyler.java:
src/e/ptextarea/PTalcTextStyler.java:
src/e/ptextarea/PTextStyler.java:
src/e/ptextarea/PVhdlTextStyler.java:
src/e/ptextarea/PXmlTextStyler.java: track API change.


2009-08-09 21:21:09 +0100 / enh / revision 3141

lib/data/spelling-exceptions:
lib/data/spelling-exceptions-C++:
lib/data/spelling-exceptions-Java:
lib/data/spelling-exceptions-Perl:
lib/data/spelling-exceptions-Python: gain the lists of spelling exceptions that were previously only available to Evergreen.

bin/invoke-java.rb: and make it possible for Java code to find these files.


2009-08-09 21:10:19 +0100 / enh / revision 3140

lib/data: new directory.


2009-08-06 03:21:55 +0100 / mad / revision 3139

lib/build/universal.make: Probably only because of other errors, I'm seeing:

tail: Warning: "+number" syntax is deprecated, please use "-n +number"

Indeed, I see that this invocation of tail has changed behavior, at least on my Debian Lenny box (as opposed to jessies.org, which is where the warning came from):

martind@whitewater:~$ ls | tail +1
tail: cannot open `+1' for reading: No such file or directory
martind@whitewater:~$


2009-08-05 16:33:39 +0100 / mad / revision 3138

lib/build/filter-build-output.rb: Don't wait for the user to confirm that they want to overwrite a read-only file owned by someone else in a writable directory. They can't see the question that's being asked.

lib/build/universal.make: Use uniform code to move $@.tmp onto $@. rm -f $@ first, like some of the previous code was doing, to avoid the question entirely.

This stems from my recent Etch to Lenny upgrade, when I did a "sudo make install" to get an up-to-date Terminator on the machine I was doing the upgrade from. I've been running with the patch for a few days with no problems noticed.


2009-07-29 04:22:33 +0100 / enh / revision 3137

src/e/ptextarea/PTextAreaSpellingChecker.java: skip decimal and (C-style) hexadecimal literals.


2009-07-26 19:39:51 +0100 / enh / revision 3136

src/org/jessies/test/Assert.java: add another useful test assertion.


2009-07-22 16:40:23 +0100 / mad / revision 3135

native/all/setsid/setsid.cpp: I think I looked at the Cygwin source without finding a way but signpost one definitely closed avenue.


2009-07-21 03:15:44 +0100 / enh / revision 3134

src/e/tools/BuildUi.java: I've been seeing old BuildUi processes hanging around long after their window's been closed. Since BuildUi is explicitly intended to be run stand-alone, let's go the easy route and EXIT_ON_CLOSE.


2009-07-21 00:36:04 +0100 / mad / revision 3133

www/downloads.html: Nick Tolomiczenko is only the latest in a line of victims who didn't ignore the warning nor throw away the .dmg as obviously not being built by golfers.


2009-07-20 01:51:33 +0100 / enh / revision 3132

bin/org.jessies.TestRunner:
src/org/jessies/test/TestRunner.java:
src/org/jessies/tools/TestRunner.java: move TestRunner out of the org.jessies.test package so that code that runs both on the JVM and on Android can include tests, even if those tests can only be run on the JVM.


2009-07-20 01:47:46 +0100 / enh / revision 3131

src/org/jessies/tools: new directory.


2009-07-16 19:08:53 +0100 / mad / revision 3130

lib/build/make-version-file.rb: In a directory not under Subversion control, svnversion(1) might well say "exported", but a cursory examination of the calling code reveals that we wouldn't run it there. No-one uses Bazaar and the source tarball doesn't include the .svn directory. Move the only remaining correct line of the comment to the calling code, where it may be pointless (though we do still offer source tarballs) but is at least harmless.

If we do run svnversion, then, insist that it fails, killing the caller with an informative message and a stack trace otherwise. This would have prevented the nightly i386 builds from rusting, as they have for the last two or three weeks, due to building a package whose filename includes the version "0.0.0". After the first day, that filename was always on the server already and hence wasn't overwritten.


2009-07-16 18:54:25 +0100 / mad / revision 3129

lib/build/ithaki.sh: Lose the comment saying where some other script is executed...

lib/build/publish-changelog-and-source-dist.rb: ... to the script in question.


2009-07-16 18:52:32 +0100 / mad / revision 3128

lib/build/ithaki.sh: Andy Royal would have worked out that he needed a fix, for the benefit of "runmercury", that had been committed but not built if we'd have updated the change log between my commit yesterday evening and this morning. I've moved the responsibility for generated the change log from this daily job to an hourly one, on software@jessies.org itself. Now we will run 24 times the previous risk of someone committing, and so changing the checked-out copy of the repositories, while the script is running. If that ever proves to be a problem, we could give the script its own checked-out copy of each repository.


2009-07-16 18:20:51 +0100 / mad / revision 3127

lib/build/make-www-and-source-dist.rb:
lib/build/publish-changelog-and-source-dist.rb: Rename, so the tin matches the contents.

lib/build/ithaki.sh: Change the caller to match.


2009-07-16 17:52:39 +0100 / mad / revision 3126

The i386 Linux nightly builds have been broken since I once used Lenny (on duezer.us.dev.bluear.com) to access ~/software.jessies.org/work/ and was compelled to upgrade svn on whitewater.us.dev.bluearc.com to match. I knew I had trouble but thought I'd fixed it all by not calling svn update on ithaki.us.dev.bluearc.com as of "2009-06-26 09:46:22 -0700 mad (3100)".

Since that date, make-version-file.rb has been generating a version number of 0.0.0. This was mentioned in the cron mails but I hadn't noticed. The script deliberately doesn't fail (which I would have noticed) in this situation, noting:

  # In a directory not under Subversion control, svnversion(1) says "exported".
  # This happens if you're using Bazaar, say, or nothing, or if you're building from a source tarball.
  # Returning 0 as the version number lets us build without warnings.
  
lib/build/make-version-file.rb: Repurpose some long-obsolete code for parsing "net use" on Cygwin to parse "df" on ithaki and, as in the Cygwin code, run the svnversion command on the file server.


2009-07-15 01:32:55 +0100 / mad / revision 3125

src/e/util/GuiUtilities.java: I can't conscience duplicating this code in Terminator, containing, as it does, a FIXME. The Evergreen version used EWindow. Its replacement here, java.awt.Component, is the greatest common ancestor of that and TerminatorFrame, which is what the equivalent code in Terminator can conveniently provide. Rather than write an InterruptedException down the InAppServer's PrintWriter, I'm making the assumption here that it'll never happen and that the log is therefore good enough. It was that or declare that we throw InterruptedException, which we do nowhere else, or pass in a PrintWriter, which seemed antithetical to the whole idea of exception handling, or turn the InterruptedException into an unchecked exception, which seemed like overkill.


2009-07-08 22:13:46 +0100 / mad / revision 3124

native/Headers/toString.h: This code was being too clever. It's tripped me up before (Terminator r940, where it tripped on "newShell /home/martind") and again today, where it's giving me a bad lexical cast for toString("Cygnus Solutions"). Today, I got to the bottom of it. Note the space in both examples. http://www.boost.org/doc/libs/1_39_0/libs/conversion/lexical_cast.htm defines lexical_cast as:

"Returns the result of streaming arg into a standard library string-based stream and then out as a Target object. Where Target is either std::string or std::wstring, stream extraction takes the whole content of the string, including spaces, rather than relying on the default operator>> behavior."

Here, our target is std::string, so we can take the whole content, obviating the need to check for error.


2009-07-06 07:10:44 +0100 / enh / revision 3123

src/e/tools/BuildUi.java: grab all javac output, not just the lines starting with addresses.


2009-07-05 20:29:18 +0100 / enh / revision 3122

src/e/tools/BuildUi.java: only "exit on success" if the build was actually successful.


2009-07-05 19:59:22 +0100 / enh / revision 3121

src/e/ptextarea/PBracketUtilities.java: add UTF-8 quotes (used by GCC) and make two helper functions private.


2009-07-05 19:42:02 +0100 / enh / revision 3120

src/e/tools/BuildUi.java: tests for the make "entering directory" pattern, and more notes.


2009-07-02 05:42:08 +0100 / enh / revision 3119

src/e/tools/BuildUi.java: more work, mainly support for --source-path.


2009-07-01 18:58:07 +0100 / mad / revision 3118

www/cygwin-setup.html: Suggestions arising out of my recent reinstallation. I may end up removing the suggestion about using "C:\Documents and Settings\martind" as a home directory but it's not too crazy to suggest what I'm using.


2009-06-30 07:41:03 +0100 / enh / revision 3117

src/e/tools/BuildUi.java: add the command-line options I've wanted so far, and make a start on implementing them.


2009-06-30 03:28:41 +0100 / mad / revision 3116

src/e/util/FileUtilities.java: Provide the long-suggested cygpath --unix translation, as it proves beyond me to make eg this command line work as you might hope:

setsid bash -c 'C:\Documents and Settings\martind\software.jessies.org\work\salma-hayek\src\e\util\FileUtiitilies.java':1

I speculate as to why in a code-comment. I'm fairly confident, from a combination of printf debugging and background knowledge about Cygwin, so I worded the speculation as a statement.

A change to call the new method from Evergreen will be arriving shortly. I've long had a change for Unix slash sex in the project whose name we cannot speak which I've now replaced with a call to translateFilenameForShellUse. That wasn't strictly necessary. What was necessary was a couple of applications of the long-ago s/new File/FileUtilities.fileFromString/ translation.


2009-06-30 01:15:46 +0100 / mad / revision 3115

bin/ithaki.sh:
bin/mdorey.sh: Bury these scripts...

lib/build/ithaki.sh:
lib/build/mdorey.sh: ... out of the way. They're not executed via PATH, even if salma-hayek/bin were on my PATH, which it isn't.


2009-06-29 07:10:07 +0100 / enh / revision 3114

src/e/tools/BuildUi.java: get to the point where we're just about usable, though there's still plenty to do.


2009-06-29 05:47:15 +0100 / enh / revision 3113

src/e/gui/GnomeStockIcon.java: add "gtk-stop".


2009-06-29 04:49:51 +0100 / enh / revision 3112

src/e/tools/BuildUi.java: avoid anonymous threads with inherited priorities.


2009-06-29 04:35:47 +0100 / enh / revision 3111

src/e/util/DefaultLogSink.java:
src/e/util/DefaultLogWriter.java:
src/e/util/Log.java:
src/e/util/LogSink.java:
src/e/util/LogWriter.java: rename "sink" to "writer" in the logging implementation; "writer" is standard Java vocabulary, but "sink" isn't. (Though we're not actually a java.io.Writer, but neither are we a PrintWriter – though we're closer to one – and Logger is already taken too.)


2009-06-29 02:36:32 +0100 / enh / revision 3110

src/e/util/DefaultLogSink.java:
src/e/util/Log.java:
src/e/util/LogSink.java: patch from Matt Hillsdon to make it possible to override our default logging implementation (for the benefit of his Eclipse-embedded Terminator).


2009-06-28 19:33:10 +0100 / mad / revision 3109

lib/build/universal.make: Make quoting of the output of convertToNativeFilenames consistent across platforms by moving it, and the loop that adds it, to portable code. This reactivates the addition of the path separators in makeNativePath that was unintentionally disabled for all platforms except Cygwin by the previous revision.

Remove a harmless but spurious looping over the filenames in makeNativePath that was added in the previous revision. I imagine that was a remnant of an earlier attempt to sort out the quoting.


2009-06-28 18:56:28 +0100 / mad / revision 3108

bin/mdorey.sh: Rebuilding the Win32 installation after a disk crash on the nightly build machine, I had to reinvent the exim4 configuration partly from memory (cribbing heavily, as before, from very differently laid-out Debian configurations in the same domain). Record the incantation here for next time.

This time, I'm trying to build under my home directory...

lib/build/universal.make: ... and, rashly, I thought I'd try to mount my Windows home directory on /home/martind, thus, I hoped, getting round the spaces in "C:\Documents and Settings\martind". It's fine within the Cygwin world, but we run a couple of native Windows tools, notably javac, candle, light and msiexec. If this patch is the limit of how much support we'd need for file names containing spaces, then I think we can live with it. It's when make itself needs to deal with such filenames, in prerequisites and the like, that things really get out of control.


2009-06-28 07:03:52 +0100 / enh / revision 3107

src/e/debug/HungAwtExit.java:
src/e/debug/HungAwtExitMBean.java: turn HungAwtExit into an MBean (leaving the old code around for now).

src/e/util/GuiUtilities.java: automatically enable it for all our applications.


2009-06-28 01:39:03 +0100 / enh / revision 3106

src/e/tools/BuildUi.java: fix the address Pattern to allow '/' in paths, and add a test.


2009-06-28 01:38:10 +0100 / enh / revision 3105

src/e/util/PatternUtilities.java:
src/org/jessies/test/Assert.java: move the Pattern-testing code into Assert for reuse. Ditch the single-argument variant because it encourages to not test the case where the pattern doesn't match the entire input, a common mistake.


2009-06-28 00:45:49 +0100 / enh / revision 3104

bin/build-ui:
src/e/tools/BuildUi.java: add a convenient script to start BuildUi until we have a better home and name for it.


2009-06-28 00:43:13 +0100 / enh / revision 3103

src/e/util/ProcessUtilities.java: hand the Process out to any ProcessListener, and support ProcessListeners with backQuote as well as spawn.

src/e/tools/BuildUi.java: add a "Stop" button to interrupt builds.


2009-06-27 06:39:25 +0100 / enh / revision 3102

src/e/tools/BuildUi.java: a simple build UI. Not finished, but enough that you can get the basic idea.


2009-06-27 05:49:09 +0100 / enh / revision 3101

lib/build/per-directory.make:
lib/build/universal.make: be more consistent about using quotes with @echo, and prefix all our progress output with "-- " so it's trivially recognizable by tools. (I chose this particular prefix only because it's what ctags' Makefile uses. If there's any weightier precedent, we should follow that instead.)

lib/build/filter-build-output.rb: use the more general heuristic here.


2009-06-26 17:46:22 +0100 / mad / revision 3100

bin/nightly-build.rb: Support a new switch to prevent updating. Subversion has a not unreasonable, yet unfortunate, habit of stopping older clients from using a work area once it's been used on a newer client. My "work" area is now shared by Etch and Lenny machines, so needs a Lenny-era svn. My "nightlies" area is shared by two Etch machines, one of which I don't want to hack with a Lenny svn and one that shares my "work" area with the Lenny box.

bin/ithaki.sh: I need to avoid running update on the old machine, which hasn't the pleasant side-effect of removing two spurious updates from the nightly builds here. Interestingly, the build still works, even though that looks at the svn version. Perhaps we cache that in .generated and make can tell that it's up-to-date.


2009-06-25 04:34:45 +0100 / enh / revision 3099

src/e/gui/DebugMenu.java: mad points out that we don't have a suitable pid for calling jmap(1) on Windows, so we should disable the heap histogram button there.


2009-06-25 04:22:29 +0100 / enh / revision 3098

www/navigation.html: Keith A. Carangelo pointed out that we were redirecting all projects to a generic bug-report page. Now I've added more specific per-project pages, make sure we use them...


2009-06-25 04:17:44 +0100 / enh / revision 3097

www/bug-report.html:
www/bug-report-template.html: turn the bug report page into a template so we can insert the appropriate address.


2009-06-24 02:58:08 +0100 / enh / revision 3096

src/e/ptextarea/PTextArea.java: the missing part of r3095. Too many unfinished changes in this working copy.


2009-06-24 02:57:39 +0100 / enh / revision 3095

src/e/ptextarea/PMatchingBracketHighlighter.java: "before a close bracket" and "after an open bracket" are not mutually exclusive conditions (consider "()", for example). It's not necessary to avoid finding the matching bracket in such a case – that works just fine – but doing so is pointless when you already have the pair, and it's hard not to look at the code without wondering whether it'll work in that case, so easier to just avoid it.


2009-06-24 02:38:01 +0100 / enh / revision 3094

lib/build/package-for-distribution.rb: this line in dpkg-gencontrol(1) convinces me that debian-policy is misleading, and various programs that report installed size as "kB" are wrong:

        exec("du","-k","-s",".") or &syserr(_g("exec du"));


2009-06-23 18:57:32 +0100 / mad / revision 3093

.classpath:
.project: A project description that Matt Hillsdon uses with Eclipse.


2009-06-22 04:59:07 +0100 / enh / revision 3092

src/org/jessies/test/TestRunner.java: run tests in parallel, and make it an error to find no tests (on the assumption that we won't be asked to run tests unless there are some).


2009-06-19 03:33:35 +0100 / enh / revision 3091

src/e/gui/Buttons.java: choose a darker gray to avoid clashing with Windows 2000's default control gray. (We might want to make that a special case, but I don't know what versions of Windows are most popular with our Windows users.)


2009-06-19 03:09:59 +0100 / enh / revision 3090

src/e/gui/Buttons.java: make it easier to guess how buttons will look on the different varieties of Windows.


2009-06-16 08:15:18 +0100 / enh / revision 3089

src/e/gui/CrossIcon.java:
src/e/gui/StopIcon.java: generalize StopIcon so the code can be used both for a stop button and a "close tab" button.

src/e/gui/Buttons.java: a convenience class providing ready-made buttons.


2009-06-15 22:50:13 +0100 / mad / revision 3088

lib/build/universal.make: Don't compile all C++ as Objective C++ on Mac OS...

lib/build/per-directory.make: ... just compile the non-JNI C++ as Objective C++. We don't use Objective C++ in our JNI, so this is no hardship. It's necessary because 10.5 is aware that it can't build x86_64 Objective C++ that's compatible with 10.4. Our JNI has to be 10.4 compatible until Apple release an upgrade to 10.4 that's worth paying for. We'd like it to support x86_64 to work with 10.5's Java 6, which is x86_64 only, so this change also resurrects the part of the support for that from r2617 which was dropped in r2889.

Compiling org_jessies_os_PosixJNI.cpp...
g++ -Wno-long-long -fno-omit-frame-pointer -fno-strict-aliasing -fPIC -g -W -Wall -Wshadow -Werror -mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -x objective-c++ -pedantic -arch x86_64 -I/private/tmp/martind/software.jessies.org/salma-hayek/native/Headers -I/System/Library/Frameworks/JavaVM.framework/Versions/1.5/Home//include -c -o /private/tmp/martind/software.jessies.org/salma-hayek/.generated/native/all/posix/universal_Darwin/org_jessies_os_PosixJNI.o /private/tmp/martind/software.jessies.org/salma-hayek/.generated/native/all/posix/universal_Darwin/org_jessies_os_PosixJNI.cpp
cc1objplus: warnings being treated as errors
<built-in>:0: warning: Mac OS X version 10.5 or later is needed for use of the new objc abi
lipo: can't figure out the architecture type of: /var/tmp//ccuaBz26.out
make[1]: *** [/private/tmp/martind/software.jessies.org/salma-hayek/.generated/native/all/posix/universal_Darwin/org_jessies_os_PosixJNI.o] Error 1
make: *** [recurse] Error 1
patrick-rowans-mac-pro:salma-hayek patrickrowan$


2009-06-13 06:45:42 +0100 / enh / revision 3087

lib/build/universal.make: fix Mac OS build.


2009-06-12 22:17:14 +0100 / mad / revision 3086

bin/find-jdk-root.rb: We use find-jdk-root.rb in invoke-java.rb, where we append "/lib/tools.jar". That was garnering me the following warning in Cygwin-1.7, on the first run of our applications from the command line per Cygwin "boot". (Cygwin effectively shuts down when the last using application quits.)

cygwin warning:
  MS-DOS style path detected: C:\Program Files\Java\jdk1.6.0_13/lib/tools.jar
  Preferred POSIX equivalent is: /cygdrive/c/Program Files/Java/jdk1.6.0_13/lib/tools.jar
  CYGWIN environment variable option "nodosfilewarning" turns off this warning.
  Consult the user's guide for more details about POSIX paths:
    http://cygwin.com/cygwin-ug-net/using.html#using-pathnames

It wasn't ever our intention to rely on Cygwin working with filenames that are half-Windows, half-Posix style. This code is used on all platforms, so it's least likely to break if it returns consistently styled results on all platforms.

universal.make translates the returned path to cope with what we were previously returning. I'd hoped to be able to remove that code in this commit but the space in "Program Files" stymied me. I had a go at making the makefiles support compilation with a JDK include path containing a space but it was just too hard and already looked too fragile, despite not yet working.

bin/invoke-java.rb: If we can use `cygpath` there, and I think we can, then we can abandon our direct calls into cygwin1.dll here. That would be a good idea, as they've been deprecated in 1.7, apparently due to containing buffer overflows when used with large paths. Yes, I know we were being good about asking for the necessary path size but, even so, I think those calls would overflow and they're certainly deprecated and now undocumented.

It seems a shame to see this example code disappear, as it's served us well. There is a new alternative, but that isn't supported on Cygwin 1.5. Backquoting cygpath seems to be performing OK even now Evergreen's doing it automatically.

bin/target-os.rb: A Find in Files happened to turn up a related comment which could was due an update. I could easily be persuaded to always call uname here.


2009-06-12 19:39:59 +0100 / mad / revision 3085

lib/build/filter-build-output.rb: When C++ compilation fails, the intention here was to display the compiler flags. If it had worked, then I might have worked out the cause of Costantino's compilation woes much earlier.

lib/build/universal.make: His symptoms roughly matched what I see when JDK_ROOT ends up pointing at /usr, which could easily happen if /usr/bin/javac were a regular file, rather than the usual symlink. (That wasn't the case for Costantino but perhaps a chain of symlinks led to the same result.) If that happens, then impenetrable compilation errors occur, due to /usr/include/linux being ahead of /usr/include in the search order. I imagine that jni_md.h won't be in the expected location in this case. If so, we can use that to catch the problem earlier and report it more clearly.


2009-06-12 04:32:22 +0100 / mad / revision 3084

lib/build/universal.make: Revert work-around for a bug in Cygwin 1.7.0-46. 1.7.0-49 is the current beta version.


2009-06-12 04:27:30 +0100 / enh / revision 3083

src/e/util/ComponentUtilities.java: remove typo.


2009-06-11 20:27:38 +0100 / mad / revision 3082

www/index.html: Duplicate the checkout instructions from the other projects. That's going to be a maintenance headache but svn's a much better idea than using a source tarball. (I wanted these instructions myself, to try to reproduce Costantino's glibc-2.9 compilation problem.)


2009-06-11 18:01:05 +0100 / mad / revision 3081

lib/build/universal.make: Costantino's having trouble compiling on a Fedora 10 box. Generating the preprocessed file and comparing it with mine (from Debian Lenny) might give me a better search term.


2009-06-11 06:13:12 +0100 / enh / revision 3080

bin/svn-patch: a script to do what "svn diff" ought to do.


2009-06-11 04:32:01 +0100 / enh / revision 3079

src/e/util/GuiUtilities.java: Costantino Cerbo sent us this patch to support the same "swing.defaultlaf" property UIManager understands, so determined users can opt out of our choice of the system LAF.


2009-06-10 07:34:47 +0100 / enh / revision 3078

src/e/ptextarea/PLineNumberPanel.java: explicitly match the PTextArea's font, share the PTextArea's cached FontMetrics, and remove a bogus "- 1" (that isn't in the equivalent code in PTextAreaRenderer).


2009-06-10 06:02:27 +0100 / enh / revision 3077

src/e/ptextarea/PLineNumberPanel.java: Ed points out that if we can't afford to measure the length of one line number, we can't afford to repaint all the visible line numbers. So don't bother trying to be clever.


2009-06-08 04:27:18 +0100 / enh / revision 3076

src/e/util/FileUtilities.java: remove dead code.


2009-06-08 01:04:24 +0100 / enh / revision 3075

src/e/ptextarea/PKeyHandler.java: explain why the mouse cursor doesn't always reflect the current modifier state.


2009-06-08 00:47:59 +0100 / enh / revision 3074

src/e/ptextarea/HyperlinkStyleApplicator.java:
src/e/ptextarea/PMouseHandler.java: decide whether or not the control key needs to be down to follow a link based on whether or not the text area is editable. The immediate need comes from Evergreen's errors window which (though currently editable) needs some way to make link-following the default.


2009-06-07 21:32:37 +0100 / enh / revision 3073

src/e/debug/EventDispatchThreadHangMonitor.java:
src/e/gui/AbstractFindDialog.java:
src/e/gui/DebugMenu.java:
src/e/tools/FatBits.java: use ELabel where it makes sense.


2009-06-07 21:27:15 +0100 / enh / revision 3072

src/e/gui/ELabel.java: be more of a drop-in replacement for JLabel.


2009-06-07 21:13:07 +0100 / enh / revision 3071

src/e/gui/ELabel.java:
src/e/gui/EStatusBar.java: split EStatusBar in two; more places could use "a JLabel that works right" than want a "status bar".


2009-06-07 18:21:55 +0100 / enh / revision 3070

src/e/gui/EStatusBar.java: remove (now-)unused functionality that was hardly ever used and not very valuable. This class' setText does the right thing with the empty string anyway.


2009-06-05 05:26:18 +0100 / mad / revision 3069

src/e/util/ProcessUtilities.java: And to think I fretted about whether it was worth the extra code.


2009-06-04 07:00:35 +0100 / mad / revision 3068

www/cygwin-setup.html: For legacy reasons, Cygwin-1.7 doesn't generate pure UTF-8 by default, but it will, if you ask it in the normal way.


2009-06-04 06:26:22 +0100 / mad / revision 3067

www/cygwin-setup.html: Cygwin does have an "unattended" setup mode after all, at least in 1.7 (and it won't be long before we care about nothing older), though it's not widely known. It has lots of options, but all I'm interested in is the one option to avoid having to interact with the GUI and the option to specify a list of additional packages. I hardly ever used cyg-apt and haven't used it at all for years. The Setup GUI is intimidating at first but, once you cross those hurdles, being able to update everything is a killer benefit. Cygwin-1.7's Setup GUI is significantly improved through one small addition, which I also mention here.


2009-06-04 04:28:42 +0100 / enh / revision 3066

src/e/ptextarea/PLineNumberPanel.java: a JScrollPane row header to show line numbers.

src/e/demo/PTextAreaDemo.java: exercise it.


2009-06-04 04:25:08 +0100 / enh / revision 3065

src/e/ptextarea/SplitLine.java: override toString.


2009-06-04 01:46:08 +0100 / mad / revision 3064

src/e/util/ProcessUtilities.java: If I do sudo vim, then New Shell Tab Here, my new tab ends up empty - no shell and the error is buried in the log. That gives me a handy excuse to canonicalize the candidate directory and check that we can read it. This means that we're more likely to fall through, on Linux, to the Mac OS code path. In that situation, lsof on Linux gives me back /proc/<pid>/cwd, which then needs the same protection. Chris confirms that /proc/<pid>/path/cwd is readable, so try that first, for the benefit of Solaris 10.

Now, when I repeat the same test, I end up in my home directory. An error monologue box would be better. Maybe I can work out how to do that next.


2009-06-03 05:43:16 +0100 / enh / revision 3063

src/e/ptextarea/PMouseHandler.java: avoid embarrassment when given a PTabSegment, which isn't a PTextSegment.


2009-06-03 04:43:16 +0100 / enh / revision 3062

src/e/ptextarea/HyperlinkStyleApplicator.java: mad reports the tool tip used by Outlook on Windows.

src/e/ptextarea/PMouseHandler.java: make sure that we update the tool tip whether or not the control key is down.


2009-06-02 07:50:43 +0100 / enh / revision 3061

src/e/ptextarea/HyperlinkStyleApplicator.java:
src/e/ptextarea/PMouseHandler.java: bring PTextArea in line with Terminator in terms of what clicks and control-clicks on hyperlinks mean.


2009-05-31 21:03:08 +0100 / mad / revision 3060

bin/show-alert.rb: All the email address to be customized. A grep for the callers suggests that most of the call sites don't warrant emails. Unhandled exceptions do, and not all of our callers have specific user groups to mail, so we still need the old default there.

(This patch best reviewed with white space ignored.)

bin/invoke-java.rb: Allow invoke() to be bypassed in favor of launch(). At the present, Terminator and Evergreen are handling exceptions that occur within their launch0() methods but, once they call invoke(), a nested exception handler is installed which then reports errors from that point forwards. That nested handler is an unnecessary complexity which tripped me up and which is about to become unfortunate because invoke() doesn't have the email address.


2009-05-31 20:57:00 +0100 / mad / revision 3059

native/Headers/reportFatalErrorViaGui.h: Allow the mailing list address to be customized but support the old address by default in such a way that...

native/all/java-launcher/java-launcher.cpp: ... if we don't find the requisite property in the command line arguments, we'll take that default value without needing to duplicate it here.


2009-05-31 20:54:14 +0100 / mad / revision 3058

lib/build/universal.make: Cygwin 1.7 introduces a different compromise about inheritable file security. This one's unfortunate effect is on Windows programs which create files in directories that were created by Cygwin. I'm surprised this isn't a bigger problem for me. javac, for example, is creating files under .generated. The .class files seem to have been made explicitly readable, as does the .wixobj file, though the Java package directories, under classes/, have not. My work area was populated by svn under an older Cygwin, so the source tree has inheritable security. Oh well, msiexec is the only "setuid" tool that I can think that we run, so perhaps this will do for the moment.


2009-05-30 12:34:40 +0100 / mad / revision 3057

native/all/java-launcher/java-launcher.cpp: Loading jvm.dll via a path starting with \\?\ leads to it aborting when it can't find rt.jar. Cygwin doesn't need to use \\?\ on what will typically be a short path but I can't bring myself to suggest that they add some hack to make it less likely that people will trip over bugs elsewhere, particularly when "elsewhere" is a non-Cygwin dll that I only sort-of have the source to and can't really build or debug. Why should everyone suffer an extra wcslen for such a minority interest? ("Wot no string class", you say?) I failed to find any problem in the parts of openjdk that I looked at but I didn't attempt to dry run every line between the call to GetModuleFileName (which I found) and wherever it tries to read rt.jar (which I didn't find). There's a basically painless workaround for us...

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: ... which then lets me reinstate 1.7 as our preferred major version of Cygwin.


2009-05-27 04:22:16 +0100 / enh / revision 3056

src/e/util/Preferences.java: use our own better-looking dialog instead of JColorChooser.showDialog, and wire up live preview as the user experiments with different colors. This makes color preferences realistically usable for the first time.


2009-05-27 04:17:36 +0100 / enh / revision 3055

src/e/forms/FormPanel.java: an expedient hack to allow components without labels, so we can effectively reuse FormDialog to provide our own JColorChooser dialog (by embedding a JColorChooser rather than calling JColorChooser.showDialog).


2009-05-26 16:40:14 +0100 / enh / revision 3054

src/e/util/FileUtilities.java: Matt Hillsdon points out I missed out a space in ther UnsatisfiedLinkError message.


2009-05-26 03:24:39 +0100 / mad / revision 3053

lib/build/universal.make: Cygwin 1.7 has a g++-4. We built fine with that but the resulting executables, with the exception of setsid, crashed on startup. A extra linker flag was suggested and fixed it. That g++-4 can't generate mingw executables. I couldn't get a clear reading on the state of things from Google but using the old compiler for mingw seems the only current sane and available choice. These changes seem to be harmless on one particular Cygwin 1.5 installation.

lib/build/filter-build-output.rb: I wouldn't have seen the message that suggested the solution to the crashing on startup problem but for javahpp hitting the JVM abort problem. Unhide such "Info: " messages. Treat "g++-3" like we treat "g++". Treat i686-pc-mingw32-g++ the same in a premature attempt to avoid being back here when that cross-compiler arrives.


2009-05-25 18:51:06 +0100 / mad / revision 3052

bin/invoke-java.rb: Prefer support binaries for the kernel's architecture but, when they're not present, take anything we can get for the right OS. There's a chance that we'll have i386 binaries on an amd64 kernel, which will work fine. Some people are still using 32 bit JVMs on 64 bit kernels on Linux.


2009-05-25 18:38:53 +0100 / mad / revision 3051

bin/invoke-java.rb: Collapse duplicated specifications of the support binary directory, in order, in the next check-in, to change the way it's chosen. The commented-out part of subvertPath wasn't what caused Chris's problem and we seem to have survived without it for more than a week, so out it comes, per the comment. subvertPath still apparently has a purpose, which I can well believe, though it isn't well documented here.


2009-05-24 22:52:05 +0100 / enh / revision 3050

src/e/util/Preferences.java: replace the old heuristics for pulling stuff out onto another preferences tab with an explicit mechanism for applications to ask for multiple tabs and choose what goes where.


2009-05-24 22:51:03 +0100 / enh / revision 3049

src/e/util/ComponentUtilities.java: allow List<JButton> as well as "JButton...".


2009-05-24 22:50:21 +0100 / enh / revision 3048

src/e/forms/FormBuilder.java:
src/e/forms/FormDialog.java: use List<String> instead of String[].


2009-05-24 18:41:37 +0100 / enh / revision 3047

src/e/util/FileUtilities.java: a slight variant of Matt Hillsdon's patch to fall back to System.loadLibrary if the org.jessies.libraryDirectories system property isn't set. Fix a long-standing (but not important, because the information is unlikely to be useful) to-do about including all failure details if we fail to load a library.


2009-05-24 17:14:21 +0100 / enh / revision 3046

src/e/util/StringUtilities.java: switch to Iterable instead of List for writeFile and join, since it's also reasonable to work on ordered collections that aren't lists (but there's no way to say "ordered collection", so we have to accept possibly accidental uses of unordered collections such as HashSet). Also allow writeFile's Iterable to return any object, since all objects have a string representation (join already worked like this).


2009-05-23 21:05:29 +0100 / enh / revision 3045

native/all/posix/org_jessies_os_PosixJNI.cpp:
src/org/jessies/os/Posix.java:
src/org/jessies/os/PosixJNI.java: implement POSIX read(2) and pread(2).


2009-05-23 18:57:45 +0100 / mad / revision 3044

native/all/posix/org_jessies_os_PosixJNI.cpp: More hacks to get the Cygwin build building again after last night's changes. Given the lack of support in the imminent 1.7 release, it might be more satisfactory to chuck an exception when these are used, except that WCONTINUED is called from a static initializer. Bah, they never find out.


2009-05-23 06:56:50 +0100 / enh / revision 3043

src/org/jessies/os/Posix.java: check for negative offsets as well as negative byte counts.


2009-05-23 06:53:45 +0100 / enh / revision 3042

src/org/jessies/os/Posix.java: we should throw NullPointerException from write if given a null 'buffer', and pwrite should have all the same argument checking as write, too.


2009-05-23 06:45:35 +0100 / enh / revision 3041

native/all/posix/org_jessies_os_PosixJNI.cpp:
src/org/jessies/os/Posix.java:
src/org/jessies/os/PosixJNI.java: implement POSIX pwrite(2) and write(2).


2009-05-23 05:29:51 +0100 / enh / revision 3040

native/all/posix/org_jessies_os_PosixJNI.cpp:
src/org/jessies/os/Posix.java:
src/org/jessies/os/PosixJNI.java:
src/org/jessies/os/WaitStatus.java: implement POSIX's waitpid(2).


2009-05-23 05:21:19 +0100 / enh / revision 3039

src/org/jessies/test/TestRunner.java: avoid a name clash after erasure.


2009-05-21 04:37:04 +0100 / enh / revision 3038

bin/show-alert.rb: zenity(1) expects HTML input, but kdialog(1) expects plain text.


2009-05-18 19:53:58 +0100 / mad / revision 3037

bin/invoke-java.rb: Some Cygwin users have been having problems starting Terminator. Without fail, they mention the expected "connection refused" message. It's concerned them and I fear may have wasted time. (Certainly mine, in explaining that it's irrelevant.) I can see a use to this error reporting in the case of an authentication failure or some other weirdness, but it's a pointless distraction when Terminator isn't running. Rather than attempt to detect the weird cases, I'm just going to bury the error in all cases.

For Evergreen, the situation is different. We'll only open files via the InAppServer. There, then, we should report errors. To that end, I've added sendCommand which I will shortly patch Evergreen to use.


2009-05-18 02:12:46 +0100 / mad / revision 3036

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: We can no longer successfully invoke Java on Cygwin 1.7, specifically in versions 1.7.0-47 and 1.7.0-48, whereas we could in 1.7.0-46. As I now have 1.7.0-48 installed and no sensible way to revert to, say, 1.7.0-46, the easiest way to resurrect the nightly builds is to prefer my parallel 1.5 installation. Goodbye, UTF-8 filename support, it was nice knowing you. Hope to see you again sometime soon, although I have no idea how to investigate this further, nor how to report it.


2009-05-18 00:58:32 +0100 / mad / revision 3035

lib/build/universal.make: The bracketed part of a Cygwin version number refers to the versions of the API and the stored information. This is relatively stable. The build date is what determines that this was -46. I didn't record the build date but my check-in comment does suggest that I tried to update on the day of check-in and didn't get the fix. -47 was released two days later.


2009-05-16 05:45:20 +0100 / enh / revision 3034

src/org/jessies/test/TestRunner.java: use EXIT_SUCCESS and EXIT_FAILURE from the Posix class.


2009-05-16 05:43:40 +0100 / enh / revision 3033

native/all/posix/org_jessies_os_PosixJNI.cpp:
src/org/jessies/os/Posix.java:
src/org/jessies/os/PosixJNI.java: add EXIT_SUCCESS and EXIT_FAILURE from <stdlib.h>.


2009-05-16 05:39:16 +0100 / enh / revision 3032

src/org/jessies/test/TestRunner.java: turn two hard-coded boolean fields into command-line options. Most of the changes are to cope with the remaining 'args' being a List<String> instead of the traditional String[].


2009-05-16 05:37:27 +0100 / enh / revision 3031

src/org/jessies/cli/Option.java:
src/org/jessies/cli/OptionParser.java: simple and convenient POSIX/GNU option parsing.


2009-05-16 05:36:34 +0100 / enh / revision 3030

src/org/jessies/test/Assert.java: add the ability to compare lists for equality.


2009-05-16 05:36:16 +0100 / enh / revision 3029

src/org/jessies/test/TestHelper.java: allow classes as test helpers.


2009-05-16 05:34:56 +0100 / enh / revision 3028

src/org/jessies/cli: new directory.


2009-05-12 22:27:12 +0100 / mad / revision 3027

native/all/java-launcher/java-launcher.cpp: Eli Hamburger points out a doubled slash. No-one would assume that a directory name includes a trailing slash. And indeed no-one did.


2009-05-12 18:55:53 +0100 / mad / revision 3026

native/all/java-launcher/java-launcher.cpp: My original annoyance with the JVM abort that Eli Hamburger reported was that we didn't have an opportunity to report the JVM we'd selected. Now we have an opportunity, I should take advantage of it. The abort hook isn't passed a context, so we need a global (to hold the shared library filename). We already have one (ARGV0) that's just used for error reporting. We need a third (launcherArguments) if we're to call the same error reporting function as we use for returned errors, which I'd like to do. I collected all this state into one class, so the dirty hacks for setting the global error reporting state are self-documenting.


2009-05-12 02:55:26 +0100 / mad / revision 3025

native/all/java-launcher/java-launcher.cpp: I doubt it matters that we weren't initializing extraInfo for the existing JVM options but it seems like a good idea to null that out. uintptr_t is a more intention-revealing choice than long when casting pointers.


2009-05-12 02:43:20 +0100 / mad / revision 3024

native/all/java-launcher/java-launcher.cpp: Replace the previous comment, which was in the wrong place, with code using the JVM's abort hook to tell Cygwin that we're about to exit with failure. This stops us trying to compile an error message when we can't start JavaHpp and ensures that subsequent builds regenerate the file.


2009-05-12 00:20:26 +0100 / mad / revision 3023

native/all/java-launcher/java-launcher.cpp: Comment an infelicity of JNI_CreateJavaVM, that has an especially nasty aspect when called from Cygwin. How can we output which JVM we're trying to initialize when we don't get control back?


2009-05-11 23:35:09 +0100 / mad / revision 3022

native/all/posix/org_jessies_os_PosixJNI.cpp: Elliott, not unreasonably, would prefer Cygwin hackery to be signposted as such to the compiler as well as the reader.


2009-05-11 03:22:16 +0100 / enh / revision 3021

src/e/ptextarea/HyperlinkStyleApplicator.java:
src/e/util/PatternUtilities.java: move our One True Pattern for hyperlinks into PatternUtilities (for want of a better home).


2009-05-11 02:45:54 +0100 / enh / revision 3020

lib/build/filter-build-output.rb: we want to see if the unit tests ran, not just if they failed. (This is especially true when adding new unit tests.)


2009-05-11 02:19:42 +0100 / enh / revision 3019

src/e/ptextarea/HyperlinkStyleApplicator.java:
src/org/jessies/test/TestHelper.java: add a marker annotation so that methods only intended as helpers for @Test methods can be clearly marked as such.


2009-05-11 02:16:34 +0100 / enh / revision 3018

src/e/ptextarea/HyperlinkStyleApplicator.java: apply a patch from Matt Hillsdon to turn our big comment full of examples into a unit test.


2009-05-11 00:08:04 +0100 / enh / revision 3017

src/e/ptextarea/PFindListener.java:
src/e/ptextarea/PTextArea.java: provide API for the last bit of functionality Evergreen was overriding to get at.


2009-05-10 23:05:38 +0100 / enh / revision 3016

src/e/ptextarea/PTextArea.java:
src/e/ptextarea/UnaryFunctor.java: replace the protected reformatPastedText method with a mechanism that doesn't require overloading.


2009-05-10 17:11:59 +0100 / enh / revision 3015

www/downloads.html: we're no longer building Solaris packages.


2009-05-10 07:46:31 +0100 / enh / revision 3014

src/e/util/ProcessUtilities.java: use the more idiomatic Integer.toString instead of String.valueOf.


2009-05-10 07:44:33 +0100 / enh / revision 3013

src/org/jessies/os/Signal.java: provide a Signal.toString.


2009-05-10 07:40:46 +0100 / mad / revision 3012

native/all/posix/org_jessies_os_PosixJNI.cpp: ECANCELED isn't defined by the production version of Cygwin. It is in the beta version, which has only added to /usr/include/sys/errno.h, rather than renumbering everything.


2009-05-10 07:28:41 +0100 / enh / revision 3011

src/org/jessies/os/Errno.java: comments.


2009-05-10 06:27:12 +0100 / mad / revision 3010

src/e/util/ProcessUtilities.java: Extract the current directory for a process from /proc, using a code path that I haven't yet tested or, if that doesn't work, via Matt Hillsdon's lsof incantation. There are a couple of tentative comments about Solaris that it would be nice to firm up at Chris's leisure.


2009-05-10 03:52:08 +0100 / enh / revision 3009

native/all/posix/org_jessies_os_PosixJNI.cpp:
src/org/jessies/os/Passwd.java:
src/org/jessies/os/PosixJNI.java: add a Java API to the POSIX user database.

src/e/util/FileUtilities.java: use it in FileUtilities.parseUserFriendlyName to cope with arbitrary ~user/... paths.


2009-05-10 03:04:23 +0100 / enh / revision 3008

src/e/util/ProcessUtilities.java: use Posix.kill in ProcessUtilities.terminateProcess.


2009-05-10 02:58:46 +0100 / enh / revision 3007

native/Headers/unix_exception.h: expose our safe and portable "strerror" wrapper to implement PosixJNI.strerror (which in turn implements Errno.toString).

src/org/jessies/os/Errno.java: a Java API for strerror(3) and constants for those errno values mandated by POSIX.

src/org/jessies/os/Posix.java: Java API for most of the easy/relevant stuff in <unistd.h>, <fcntl.h>, and <signal.h>.

src/org/jessies/os/PosixJNI.java: more native method declarations (and an explanation of the design, which is perhaps non-obvious).

native/all/posix/org_jessies_os_PosixJNI.cpp: more native method implementations.


2009-05-10 01:08:06 +0100 / enh / revision 3006

src/e/util/GuiUtilities.java: don't spam the log just because the system doesn't support transparency, which even in 2009 is not an unusual situation.


2009-05-09 06:27:51 +0100 / enh / revision 3005

native/all/posix/org_jessies_os_PosixJNI.cpp:
src/org/jessies/os/Posix.java:
src/org/jessies/os/PosixJNI.java: add close, dup, and dup2.


2009-05-09 06:17:12 +0100 / enh / revision 3004

native/all/posix/org_jessies_os_PosixJNI.cpp:
src/org/jessies/os/PosixJNI.java:
src/org/jessies/os/Signal.java: add POSIX signal numbers.

src/e/util/ProcessUtilities.java: kill dead code and use the new API.


2009-05-08 07:31:44 +0100 / enh / revision 3003

src/org/jessies/os/Posix.java: keep up the good habit of linking to the POSIX specification.


2009-05-08 07:30:05 +0100 / enh / revision 3002

native/all/posix/org_jessies_os_PosixJNI.cpp:
src/org/jessies/os/Posix.java:
src/org/jessies/os/PosixJNI.java: add the other common constants from <unistd.h> plus getpid(2) and getppid(2).

src/e/util/ProcessUtilities.java: use getpid(2).


2009-05-08 07:15:47 +0100 / enh / revision 3001

src/e/util/ProcessUtilities.java: remove dead code.


2009-05-05 07:34:07 +0100 / mad / revision 3000

www/cygwin-setup.html: I was having a right time typing regitsry or some such earlier, without a spell checker. While I had some printf debugging enabled, trying to work out why the file finder wasn't working on Cygwin, it became clear that we do quite a lot of path searching for ctags, especially when it isn't installed and your path is gargantuan, as Windows paths often are. Installing it myself is perhaps the selfish solution, but then caching always has its own drawback.


2009-05-05 02:07:45 +0100 / mad / revision 2999

www/cygwin-setup.html: The list of Cygwin 1.7 packages that I had to install to be able to build will probably be useful to me again.

www/cygwin-problems.html: The Cygwin 1.7 beta looks like a promising avenue for Utf-8 support.


2009-05-05 01:59:34 +0100 / mad / revision 2998

lib/build/universal.make: Work-around an already-fixed (but unreleased) Cygwin 1.7 bug that otherwise stops me building on that release.

native/all/java-launcher/synchronizeWindowsEnvironment.cpp: Cygwin 1.5.20 was released nearly three years ago, 2006-07-02. Perhaps we can insist that anyone who hasn't upgraded since before then upgrades. If it turns out that this is too painful, then I'll have to find some other way around these Werrors:

/cygdrive/c/cygwin/software.jessies.org/work/salma-hayek/.generated/native/all/java-launcher/i386_Cygwin/synchronizeWindowsEnvironment.cpp: In function `void setup_win_environ()':
/cygdrive/c/cygwin/software.jessies.org/work/salma-hayek/.generated/native/all/java-launcher/i386_Cygwin/synchronizeWindowsEnvironment.cpp:37: warning: `cygwin_posix_to_win32_path_list_buf_size' is deprecated (declared at /usr/include/sys/cygwin.h:48)
/cygdrive/c/cygwin/software.jessies.org/work/salma-hayek/.generated/native/all/java-launcher/i386_Cygwin/synchronizeWindowsEnvironment.cpp:37: warning: `cygwin_posix_to_win32_path_list_buf_size' is deprecated (declared at /usr/include/sys/cygwin.h:48)
/cygdrive/c/cygwin/software.jessies.org/work/salma-hayek/.generated/native/all/java-launcher/i386_Cygwin/synchronizeWindowsEnvironment.cpp:39: warning: `cygwin_posix_to_win32_path_list' is deprecated (declared at /usr/include/sys/cygwin.h:46)
/cygdrive/c/cygwin/software.jessies.org/work/salma-hayek/.generated/native/all/java-launcher/i386_Cygwin/synchronizeWindowsEnvironment.cpp:39: warning: `cygwin_posix_to_win32_path_list' is deprecated (declared at /usr/include/sys/cygwin.h:46)
/cygdrive/c/cygwin/software.jessies.org/work/salma-hayek/.generated/native/all/java-launcher/i386_Cygwin/synchronizeWindowsEnvironment.cpp:47: warning: `cygwin_conv_to_win32_path' is deprecated (declared at /usr/include/sys/cygwin.h:50)
/cygdrive/c/cygwin/software.jessies.org/work/salma-hayek/.generated/native/all/java-launcher/i386_Cygwin/synchronizeWindowsEnvironment.cpp:47: warning: `cygwin_conv_to_win32_path' is deprecated (declared at /usr/include/sys/cygwin.h:50)
make[1]: *** [/cygdrive/c/cygwin/software.jessies.org/work/salma-hayek/.generated/native/all/java-launcher/i386_Cygwin/synchronizeWindowsEnvironment.o] Error 1

native/all/ruby-launcher/ruby-launcher.cpp:
native/Headers/DirectoryIterator.h:
native/Mingw/cygwin-launcher/cygwin-launcher.cpp: Follow the " failed" convention used elsewhere. These discepancies came to light when I was researching whether I could depart from that convention in synchronizeWindowsEnvironment, where I have something else to add.

I haven't tested any of these failure cases.


2009-05-04 21:43:47 +0100 / mad / revision 2997

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: Prefer Cygwin 1.7 beta's registry key, if it's there. Both Evergreen and Terminator seem to work OK with that version without any other changes and 1.7's Utf-8 support means that we might want to recommend it soon.

(Hiding white space changes is the better choice for this patch.)


2009-05-04 20:22:32 +0100 / mad / revision 2996

native/all/posix/org_jessies_os_PosixJNI.cpp: CallVoidMethod is an ellipsis/varargs/stdarg method. It has no type checking on its arguments. If they're not of the expected size, then the callee will pull values of the wrong size out of the stack. This will cause the result to be misinterpreted.

Cygwin's stat header file has at least three different definitions of the width of mode_t, choosing one based on various macros. I don't want to go there. Any modern integer is wide enough.

What we really want here is a program that looks at Stat.class and generates us a properly typed C++ shim Stat::set, which does the GetMethodID for us, then we can let the compiler handle the coercion implicitly.


2009-05-02 22:49:59 +0100 / enh / revision 2995

src/e/util/FileUtilities.java:
src/e/util/GuiUtilities.java:
src/e/util/ProcessUtilities.java:
src/org/jessies/os/OS.java: I had a bad feeling about calling GuiUtilities.isWindows from FileUtilities.cygpathIfNecessary, but it was only following my bad example and I couldn't offhand think of a concrete case where it would cause trouble. That case turns out to be trying to run code that uses FileUtilities but needs to run headless. The static initializers for GuiUtilities cause HeadlessException to be thrown when they (not unreasonably) do things that require AWT initialization. So, add a safe alternative to both isWindows (which caused trouble here) and isMacOs. Change non-GUI code to exclusively use OS.isWindows and OS.isMacOs, but leave the old methods in GuiUtilities forwarding to the new ones. We can't sensibly move isGtk out because GTK+ isn't an OS, and there's an argument combining "consistency" and "being intention-revealing" that suggests it makes as much sense for some code to ask "what UI is this?" as "what OS is this?".


2009-04-30 04:53:42 +0100 / enh / revision 2994

src/e/ptextarea/PKeyHandler.java: extend control-backspace to remove whitespace if it starts in whitespace (as before) or non-whitespace if it starts in non-whitespace.


2009-04-29 02:39:19 +0100 / enh / revision 2993

src/e/ptextarea/PTextAreaRenderer.java: if we want to use highlighters to change the background color of lines (without giving the highlighters alpha less than 1) we need to be able to paint some highlights beneath the selection. Before splitting them into two classes, let's try just painting the selection second. It's not obvious why that isn't adequate for all existing uses as well as allowing new uses (like the Trac-style patch rendering I'm working on).


2009-04-28 18:04:26 +0100 / mad / revision 2992

native/all/posix/org_jessies_os_PosixJNI.cpp: Fix conversion from (spit) NULL to int by admitting that copying fields from one structure to another should only fail in exceptional circumstances:

Compiling org_jessies_os_PosixJNI.cpp...
cc1plus: warnings being treated as errors
/home/martind/software.jessies.org/work/salma-hayek/.generated/native/all/posix/amd64_Linux/org_jessies_os_PosixJNI.cpp: In function ‘jint translateStat(JNIEnv*, _jobject*, const stat&)’:
/home/martind/software.jessies.org/work/salma-hayek/.generated/native/all/posix/amd64_Linux/org_jessies_os_PosixJNI.cpp:49: warning: converting to non-pointer type ‘jint’ from NULL
/home/martind/software.jessies.org/work/salma-hayek/.generated/native/all/posix/amd64_Linux/org_jessies_os_PosixJNI.cpp:53: warning: converting to non-pointer type ‘jint’ from NULL
make[2]: *** [/home/martind/software.jessies.org/work/salma-hayek/.generated/native/all/posix/amd64_Linux/org_jessies_os_PosixJNI.o] Error 1


2009-04-28 02:58:48 +0100 / enh / revision 2991

src/e/util/FileFinder.java: use the new API to provide a Stat as well as a filename to the Filter.


2009-04-28 02:57:53 +0100 / enh / revision 2990

native/all/salma-hayek:
native/all/salma-hayek/e_util_FileUtilities.cpp: replace the old JNI providing a wrapper around lstat(2) and S_ISLNK for FileUtilities.isSymbolicLink...

native/all/posix:
native/all/posix/org_jessies_os_PosixJNI.cpp:
src/org/jessies/os:
src/org/jessies/os/Posix.java:
src/org/jessies/os/PosixJNI.java:
src/org/jessies/os/Stat.java: ...with more general JNI supporting (so far) a tiny subset of POSIX.

src/e/util/FileUtilities.java: track API change.


2009-04-26 05:08:10 +0100 / mad / revision 2989

lib/build/universal.make: Always using cp rather than ln -s is needlessly painful for Cygwin development. When you click on a file name in Evergreen's errors window, we've previously taken you to the copy under .generated, rather than the one you want to edit. Fortunately, we made it read-only, to stop accidental edits, but it's still annoying. It's been more than a year since I added the cygpath code originally and that, it seems, is all we needed to follow Cygwin symlinks in Evergreen. Thankfully Elliott made me think about what comment the cygpath translation method deserved.

lib/build/per-directory.make: COPY_RULE had two variants, one for use with Windows compilers. I think this usage is only used with Unix compilers like Cygwin g++. The other usage is for running WiX, which is a Windows compiler and so sadly still needs the cp variant, at least if we keep the same directory structure (and, in particular, .generated), which I like, not least because it avoids faffing with the version control system to tell it to ignore eg the WiX intermediate files.


2009-04-26 04:41:33 +0100 / mad / revision 2988

src/e/util/FileUtilities.java: Empirically document some of the vagaries of cygpath. The behavior with symbolic links will be useful to us. I may be able to use that to simplify the build process, without sacrificing throwback of errors to Evergreen. (Presumably I could have done that when the method was still in Evergreen.)


2009-04-26 04:23:51 +0100 / mad / revision 2987

src/e/util/FileUtilities.java: We open a lot of files when searching. I almost doubt I'd notice on Linux but Cygwin ain't quite in the same league. The times in the code-comment were hot-cache on an idle machine, believe it or not (I couldn't).


2009-04-26 04:16:12 +0100 / mad / revision 2986

src/e/util/FileUtilities.java: Now that Evergreen no longer calls it directly, cygpathIfNecessary can become private. The comment about the required ordering between calls to parseUserFriendlyName and cygpathIfNecessary needs to move. I've moved it so that again it's next to the call from one to the other. I've also edited it and restyled it, making it more clearly one comment, so our eyes don't again read the simple part then skip over the more important prolixity.

Even if you don't like (some of) this, please hold off for a few minutes, as I'll be back here again momentarily, regarding today's horrid performance regression on Windows.


2009-04-26 02:37:09 +0100 / enh / revision 2985

src/e/util/FileUtilities.java: I don't know why I made the library-loading code so complicated, and neither does the history. Simplify it and use the usual JDK idiom (with a slight modification to still allow for fallback to the non-native implementation).


2009-04-26 00:25:56 +0100 / enh / revision 2984

src/e/util/FileUtilities.java: make parseUserFriendlyName a private implementation detail and ensure it always calls cygpath if necessary. Calling code should now only need to deal with FileUtilities.fileFromString (which was already recommended) to work on Cygwin.

src/e/util/ProcessUtilities.java: track API change.


2009-04-25 17:46:10 +0100 / enh / revision 2983

src/e/gui/FilenameChooserField.java: treating one match as a special case only saves us a slight complication in the condition for adding a trailing '/', which isn't worth the duplication.


2009-04-25 17:39:44 +0100 / enh / revision 2982

src/e/gui/FilenameChooserField.java: add the missing return that meant we used to fall through into the multiple-possibilities code, undoing the work we'd done to add the trailing '/' when the only match is a directory.


2009-04-25 17:34:14 +0100 / enh / revision 2981

src/e/gui/FilenameChooserField.java: that the native GTK+ equivalent hijacks the usual GUI behavior of the tab key is precedent enough for us to do the same.


2009-04-22 17:44:42 +0100 / mad / revision 2980

lib/build/make-www-and-source-dist.rb: I have an abiding confusion brought on by the difference between our website's apparent directory structure and the structure under ~software/. We have been generating change logs and source tarballs for projects with no www/ directory, but I don't think those download directories are visible on the website. I *think*, then, that I can restrict the change log and source tarball generation rules to those projects with a www/ directory, so saving myself from the daily spam of:

Failed in /unsafe/software/checked-out/debugger:
At revision 44.
make[1]: Entering directory `/unsafe/software/checked-out/debugger'
make[1]: *** No rule to make target `www', needed by `www-dist'. Stop.
make[1]: Leaving directory `/unsafe/software/checked-out/debugger'
make: *** [recurse] Error 1
Failed in /unsafe/software/checked-out/lwm:
At revision 9.
make: *** No rule to make target `www-dist'. Stop.
Failed in /unsafe/software/checked-out/website:
At revision 32.
make[1]: Entering directory `/unsafe/software/checked-out/website'
make[1]: *** No rule to make target `www', needed by `www-dist'. Stop.
make[1]: Leaving directory `/unsafe/software/checked-out/website'
make: *** [recurse] Error 1


2009-04-22 05:00:48 +0100 / enh / revision 2979

src/e/util/FileFinder.java: some callers might want the directories as well as the files.


2009-04-21 04:39:58 +0100 / enh / revision 2978

www/downloads.html:
www/index.html: make it clearer that you can stay up to date with our Debian repository.


2009-04-20 18:19:10 +0100 / mad / revision 2977

src/e/util/FileAlterationMonitor.java: When dispose()ing, reset the collections to their initial values rather than nulling them out. My hope here is to fix this:

martind@whitewater:~/.e.edit.Edit$ mv tools tools.aside
martind@whitewater:~/.e.edit.Edit$ Exception in thread "FileAlterationMonitor for external tools" java.lang.NullPointerException
at e.util.FileAlterationMonitor.fireFileTouched(FileAlterationMonitor.java:73)
at e.util.FileAlterationMonitor.checkFileTimes(FileAlterationMonitor.java:67)
at e.util.FileAlterationMonitor.access$000(FileAlterationMonitor.java:11)
at e.util.FileAlterationMonitor$1.run(FileAlterationMonitor.java:25)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
martind@whitewater:~/.e.edit.Edit$

The fingered line, 73, is the one on which I've made the cosmetic change away from a lower-case ell.

I'd hoped to use the nicely readable Collections.emptyList() but, as would doubtless be unsurprising to any Java programmer, the abstract list acquired from that doesn't like being add()ed to.


2009-04-16 23:42:16 +0100 / mad / revision 2976

post-commit: Use spaces round assignment in the Ruby, like we do in other scripts. It's a proper language, well, much more so than Bash.


2009-04-16 23:40:19 +0100 / mad / revision 2975

post-commit: When he made the opposite change, it looks to me like Chris was just going around tidying up relics of no longer necessary overrides of Reply-To. This one remains mildly desirable, in that it stops people from replying to just the author by mistake, without incurring the penalty of the Reply-To override that we used to have on the mailing list. That Reply-To override meant that anyone replying to a list posting made by someone who wasn't a subscriber had to remember to manually re-add their name.


2009-04-16 23:36:48 +0100 / mad / revision 2974

src/e/util/NumberDecoder.java: -137 shouldn't be represented with a comma, as "decimal: -,137". Having the sign before the radix prefix makes more sense to me and at least some of teh pooters too:

martind@whitewater:~$ ruby -e 'puts(0x-89)'
-e:1: numeric literal without digits
puts(0x-89)
       ^
martind@whitewater:~$ ruby -e 'puts(-0x89)'
-137
martind@whitewater:~$


2009-04-16 07:11:45 +0100 / mad / revision 2973

lib/build/simple.make: Publicize the new top-level target, more as a test of commit speed than because anyone will ever read this.


2009-04-16 07:10:56 +0100 / mad / revision 2972

lib/build/universal.make: www-dist's only prerequisite now has no extension. Hopefully fixes the post-commit failure following the previous check-in, which included:

/unsafe/software/checked-out/salma-hayek/lib/build/universal.make:729: *** sub-directory not specified for extension "". Stop.


2009-04-16 07:00:08 +0100 / mad / revision 2971

lib/build/universal.make: Split the www-dist target in two, so the seemingly expensive part can be deferred...

lib/build/make-www-and-source-dist.rb: ... to the once-per-day script (which might suggest a better name, if that's what it's going to be).


2009-04-16 03:33:23 +0100 / mad / revision 2970

post-commit: Even with mv, the ChangeLog needs to be group writable. I thought we were invoked from a context where umask 0002 had been set. (/usr/local/bin/svn suggests so.)


2009-04-16 03:21:24 +0100 / mad / revision 2969

lib/build/universal.make: It is an error to redirect into $@ directly in a makefile. When you run out of disk space or are killed, then such a makefile relies on make(1) deleting $@. If make(1) can't, perhaps because it's been killed, then the next attempt to run make(1) is likely to assume that the target is up-to-date.


2009-04-16 03:06:55 +0100 / mad / revision 2968

lib/build/make-www-and-source-dist.rb: The files we create here need to be group writable if they're ever to be run from post-commit, which runs as the committing user.


2009-04-16 02:53:38 +0100 / mad / revision 2967

bin/ithaki.sh: Making the source dist every day, at the time when we make the binary distributions, sounds eminently sane. I can live with some spam from the failing www-dist rule, indefinitely really, but certainly until we work out what we're going to do to speed up commits.


2009-04-16 02:44:38 +0100 / mad / revision 2966

lib/build/universal.make: If we don't have a www/ directory, then we shouldn't be running the www-dist rule's commands. This turns make-www-and-source-dist.rb's failures for debugger and website projects into the sane "No rule to make target" failures that the script garners for lwm. Without that, we get the monster below. This isn't really a useful change (though it's the right thing to do), as any output will provoke spam from cron, but it'll let me see whether the previous post-commit change had any benefit.

Failed in /unsafe/software/checked-out/debugger:
At revision 44.
make[1]: Entering directory `/unsafe/software/checked-out/debugger'
mkdir -p .generated && \
touch .generated/recompilation-trigger.make
mkdir -p .generated && \
ruby -w -ne '($_.match(/^ *(\S+)\s*[:+]?=/) || $_.match(/^\s*define\s*(\S+)/)) && puts("LOCAL_VARIABLES += #{$1}")' /unsafe/software/checked-out/salma-hayek/lib/build/per-directory.make | sort -u > .generated/local-variables.make
make[1]: Leaving directory `/unsafe/software/checked-out/debugger'
make[1]: Entering directory `/unsafe/software/checked-out/debugger'
rm -f ChangeLog && \
svn log > ChangeLog
rm -f ChangeLog.html && \
ruby /unsafe/software/checked-out/salma-hayek/lib/build/svn-log-to-html.rb < ChangeLog > ChangeLog.html
mkdir -p /home/software/downloads/debugger && \
mv ChangeLog.html /home/software/downloads/debugger/ && \
rsync -v -r www/* /home/software/downloads/debugger/
building file list ... rsync: link_stat "/unsafe/software/checked-out/debugger/www/*" failed: No such file or directory (2)
done

sent 21 bytes received 20 bytes 82.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files could not be transferred (code 23) at main.c(977) [sender=2.6.9]
make[1]: *** [www-dist] Error 23


2009-04-16 02:37:21 +0100 / mad / revision 2965

post-commit: Having www-dist run synchronously means that the committer knows when they can see if their changes worked. Perhaps we can afford this. Let's see what it costs.


2009-04-16 02:08:29 +0100 / mad / revision 2964

bin/invoke-java.rb: I haven't noticed any problems in a few days.


2009-04-16 01:52:35 +0100 / mad / revision 2963

lib/build/make-www-and-source-dist.rb: A proposal for replacing the part of the post-commit script that does svn update && make www-dist source-dist, then mails any failure to the list. This process seems likely to be adding a significant overhead to our commit times. It also seems likely that svn is giving us some contention protection. I expect we would get bitten if we were to just run something like this in the background off each commit, so I suggest we run it from cron. Every hour sounds like it won't cause too much spam when it comes off the rails.


2009-04-15 06:31:45 +0100 / enh / revision 2962

src/e/util/ProcessUtilities.java: I've deleted the code since, but I did have occasion to want to waitFor a spawned process recently. Since the changes are smaller than the (out of date) comment suggesting something along these lines, I may as well keep the changes.


2009-04-15 06:24:31 +0100 / enh / revision 2961

src/e/gui/EMenuBar.java: now we're actually thinking about what we're doing rather than just letting code build up over the years, we can implement performActionForKeyStroke much more simply.


2009-04-15 06:07:16 +0100 / enh / revision 2960

src/e/util/FileFinder.java: how many times have I written a simple serial file tree walk with a comment saying "parallelize"? Too many. This one's good enough to replace the ones in Evergreen and mp3 and be used elsewhere.


2009-04-14 03:30:59 +0100 / enh / revision 2959

src/e/util/GuiUtilities.java:
src/e/gui/GnomeStockIcon.java: add the ability to say whether or not you want mnemonics enabled, for the benefit of Terminator (which, by default, does not want mnemonics).


2009-04-14 03:27:40 +0100 / enh / revision 2958

src/e/gui/DebugMenu.java: use actions instead of messing around with button properties.


2009-04-14 03:06:25 +0100 / enh / revision 2957

src/e/gui/EMenuBar.java: rename traverse menu to make the reason for its menu traversal clear, and add a comment.


2009-04-13 08:00:18 +0100 / mad / revision 2956

src/e/gui/EMenuBar.java: Refresh every menu item's enabled state before deferring to JMenuBar's processKeyBinding, which searches the menu hierarchy for the first enabled item whose mnemonic matches the keystroke. This means that Terminator's Find Previous menu item gets enabled without needing the Edit menu to be displayed. This then activates the Alt-D shortcut, which has been inactive for most Linux (and I think Windows) users since Help, Show Debugging Messages gained a D mnemonic, some months ago.

Alt-D only invokes Find Previous because the Edit menu is searched before the Help menu. We could nail that loophole shut in GuiUtilities, by having makeMenu always create a sub-class of JMenu that overrides processKeyBinding to return false. Elliott suggests that, instead, when Terminator is using Alt for shortcuts, we shouldn't apply mnemonics to menus, as this leads to clashes, as with F for File and Find, and bugs, like this. That sounds good to me.

In making this change, I've hoisted traverseMenu out of our MenuListener, generalized it to collapse some duplication (the reason for which I don't understand) and removed an always-true condition. I've thrown away our customized versions of JMenuBar.processKeyBinding's recursion and JComponent.processKeyBinding. The latter had a setEnabled(true) matched by no setEnabled(false), which may warrant revisiting if it turns out to need resurrection.


2009-04-12 18:42:56 +0100 / enh / revision 2955

src/e/gui/EMenu.java: remove an unused class.


2009-04-11 20:26:21 +0100 / mad / revision 2954

src/e/gui/EMenuBar.java: A couple of small clarifications as I try to understand when this class's code is invoked, on the trail of "the Terminator Alt-D bug".


2009-04-10 07:00:13 +0100 / mad / revision 2953

src/e/util/ProcessUtilities.java: Cygwin is the only platform on which we haven't had hash-bang support, until now. This lets us execute scripts without going via bash, which doesn't understand Windows paths. Other alternatives are:

(1) Go via bash everywhere. Then we can return Cygwin paths from eg Evergreen.getScriptFilename. We'd want to institute a new process builder, so that we quote properly, rather than the rather optimistic way we're doing it at the moment.

(2) Use Cygwin rather than Java to exec the child by stealing PtyProcess from Terminator. Then we could use either path form and take advantage of its hash-bang interpreter. That would also let us solve the problem verbosely documented by setsid.exe's own output. It increases our lock-in on Cygwin. I haven't noticed any progress there on the Utf-8 or 64 bit fronts.

Both a new process builder and PtyProcess seem like steps we'd like to take, but both are a fair amount of work, distributed around the source. This is localized and easy and provides a de facto standard facility that's otherwise missing and hurting us on one platform.


2009-04-10 02:43:24 +0100 / mad / revision 2952

bin/invoke-java.rb: I've now searched the source for invocations of support binaries that weren't specifying the path and I don't see any. Time to let everything else find out what I missed. (I've been running like this for a couple of days.)


2009-04-10 02:38:44 +0100 / mad / revision 2951

bin/show-alert.rb: I don't think this really required changing the path. We're probably about to quit anyway, so it's unlikely to matter but it's nice if the code's in the same form as it is elsewhere. Well, that would be nice, but we don't have a findSupportBinary here.


2009-04-08 04:40:36 +0100 / mad / revision 2950

src/e/util/GuiUtilities.java: We were relying on the path before to find gnome-startup.

bin/invoke-java.rb: Here too. I could use some more testing time before I get rid of the line that adds the support binaries to the path.


2009-04-07 23:32:27 +0100 / mad / revision 2949

bin/invoke-java.rb: Tell the Java where to find our support binaries.

src/e/util/FileUtilities.java: Provide a way of using that property rather than a path search to find our own support binaries. Use this for LSFindApplicationForInfo...

src/e/util/ProcessUtilities.java: ... and setsid...

src/e/util/SpellingChecker.java: ... and, more clunkily, for NSSpell.

Aside from the soon-to-be-replaced call of findOnPath in EditServer.java, that renders half of our subvertPath superfluous. I haven't tested on a Mac, though I did do some printf debugging.


2009-04-07 22:46:39 +0100 / mad / revision 2948

src/e/util/GuiUtilities.java: Fixes Terminator's File, Show Info, Show in Explorer on Windows.


2009-04-07 22:03:29 +0100 / mad / revision 2947

src/e/util/FileUtilities.java: Gain processCygwinRewrites, renamed now it's not next to processPathRewrites, from Evergreen, so ProcessUtilities will eventually be able to hide one more of Windows's differences.


2009-04-05 01:28:55 +0100 / enh / revision 2946

src/e/util/FileAlterationMonitor.java: use a thread name more in keeping with our other thread names.


2009-04-05 00:33:09 +0100 / enh / revision 2945

src/e/util/Preferences.java: make it possible to add an extra button to a preferences dialog.


2009-04-04 20:04:41 +0100 / enh / revision 2944

src/e/ptextarea/FileType.java: Evergreen no longer pollutes the system properties, so this needs to move back into Evergreen.


2009-04-04 01:46:36 +0100 / mad / revision 2943

src/e/gui/DebugMenu.java:
src/e/gui/HelpMenu.java:
src/e/tools/FatBits.java: Obey our own injunction to avoid new JMenu\b, except in comments and GuiUtilities.


2009-04-04 01:38:28 +0100 / mad / revision 2942

src/e/util/GuiUtilities.java: A public static copy of the code from EvergreenMenuBar, so we can use it in Terminator too.


2009-04-03 17:43:24 +0100 / enh / revision 2941

lib/build/universal.make: several people (on several occasions going back some time) have complained of an inability to open our .dmg files without being told by Mac OS 10.5 that they're corrupt. I've never been able to reproduce the problem on 10.4 or 10.5, and the reporters report the correct MD5 digest for the file they downloaded. Since we build on 10.4 (while most users are on 10.5), let's experiment with not using the UDBZ .dmg format that was new in 10.4 and go back to the default UDZO.


2009-04-02 02:38:10 +0100 / mad / revision 2940

native/all/setsid/setsid.cpp: This case is very annoying on Windows even when another setsid is first on Evergreen's PATH. In fact, it's more annoying then, because you don't get warned to beware of it.


2009-03-29 06:23:21 +0100 / enh / revision 2939

src/e/gui/BirdView.java: comment an assumption that doesn't match Evergreen's usual assumption.


2009-03-29 06:06:07 +0100 / enh / revision 2938

bin/invoke-java.rb: rewrite some code that was presumably written obtusely for compatibility with old InAppServers that didn't support authentication (which would explain why it would count no mention of authentication in the server's response as success), and ensure that if we detect a failure we report it. (If we succeed in sending the command, that counts as success, and it's the server's responsibility to report any errors that occur as it tries to perform the command.)


2009-03-28 05:25:39 +0000 / enh / revision 2937

src/e/gui/BirdView.java: let clients tell us what range of lines is selected, so we can make that visible. As well as being potentially useful in its own right, this lets us highlight all matches in the selection and move all responsibility for repainting back inside this class (though clients have to call setSelectedLines).


2009-03-28 04:51:01 +0000 / enh / revision 2936

src/e/gui/BirdView.java: add a way to find out if we're showing anything.


2009-03-28 04:40:55 +0000 / enh / revision 2935

src/e/gui/BirdView.java: BitSet.nextSetBit is a more direct way to iterate through the set bits.


2009-03-28 03:15:52 +0000 / enh / revision 2934

src/e/gui/EStatusBar.java: every time I move the cursor left and then right again in Evergreen to get the status bar to redisplay my current location, I think "I should fix that". Some status messages are only worth passing mention, but the main user of this code (Evergreen) would be better served by status messages that remained visible until they were replaced with a more up-to-date message. Removing this behavior also makes EStatusBar more widely applicable.


2009-03-27 22:43:21 +0000 / mad / revision 2933

src/e/gui/AboutBox.java: It's useful to be able to tell from the subject line which subject the email's about. Filling the subject line with text, especially text that looks like it's intended to be machine-readable, discourages anyone from editing it. Suggest that they do edit it. The chevrons are to draw attention. The remainder of the boilerplate is one word, so it can be selected (for replacement) with a double click. Separating the words with hyphens, Elliott's original suggestion, doesn't have that property in Evolution, Outlook or even PTextArea. Ideally, I think we'd move the details about the version they're running to the body of the message but I imagine it's harder to get various platforms' mailers to accept a default body on the command line.


2009-03-22 21:03:58 +0000 / enh / revision 2932

src/e/util/ProcessUtilities.java: make ProcessUtilities.spawn's convenience form slightly more convenient.

src/e/util/GuiUtilities.java: although that change is binary compatible, we may as well take advantage of it.


2009-03-22 21:01:23 +0000 / enh / revision 2931

src/e/util/FileUtilities.java: fix a comment typo.


2009-03-21 23:35:53 +0000 / enh / revision 2930

bin/find-jdk-root.rb:
bin/target-os.rb: add the equivalent of #include guards to these two "libraries" to avoid the equivalent of multiple inclusion. Ruby is stupid enough that Kernel.require uses whatever path you supply in its set of already-loaded files. So require "a.rb" and require "./a.rb" don't count as duplicates.


2009-03-18 23:44:22 +0000 / mad / revision 2929

bin/ithaki.sh: Don't let apt-ftparchive spend all day walking my home directory if the automounter's broken on the build machine.


2009-03-13 06:49:15 +0000 / enh / revision 2928

src/e/util/PatternUtilities.java: this code is made less readable by using fully-qualified names, there's little advantage to pretending that this class doesn't have dependencies on GUI classes, and it's not obvious that there's ever likely to be a better home unless we write a RegularExpressionTextField, which might be useful, but which isn't likely to happen any time soon.


2009-03-13 06:42:28 +0000 / enh / revision 2927

src/e/gui/JHyperlinkButton.java: visually, a hyperlink doesn't look like it should be able to be focused. Nor does its appearance change when it is focused. So let's just make it non-focusable.


2009-03-07 20:34:30 +0000 / enh / revision 2926

src/e/util/GuiUtilities.java: who needs Windows when you can see pictures of it on Wikipedia?


2009-03-07 05:54:17 +0000 / enh / revision 2925

src/e/gui/FilenameChooserField.java: basic auto-completion on control-space.


2009-03-07 04:13:33 +0000 / enh / revision 2924

src/e/util/GuiUtilities.java: add a method to translate a KeyStroke into the string that would be used in the UI to describe the keystroke.


2009-03-07 03:37:16 +0000 / enh / revision 2923

src/e/gui/DialogFocusRedirector.java: comment the only semi-plausible case I can think of where the selectAll heuristic wouldn't be sufficient.


2009-03-06 07:36:41 +0000 / enh / revision 2922

src/e/gui/FilenameChooserField.java: provide access to the JTextField containing the pathname.

src/e/gui/DialogFocusRedirector.java: assume that a non-empty selection means "I am a clever application doing something clever; please stay out of my way".


2009-03-05 05:52:02 +0000 / enh / revision 2921

src/e/gui/SortedComboBoxModel.java: remove another dead class.


2009-03-05 05:49:33 +0000 / enh / revision 2920

src/e/gui/ChronologicalComboBoxModel.java:
src/e/gui/EHistoryComboBoxModel.java: remove two more dead classes.


2009-03-05 05:46:47 +0000 / enh / revision 2919

src/e/gui/DialogFocusRedirector.java:
src/e/gui/FilenameChooserField.java:
src/e/gui/UneditableTextField.java:
src/e/util/Preferences.java: switch to JTextField and DocumentAdapter.

src/e/gui/EHistoryTextField.java:
src/e/gui/EHistoryTextFieldEditor.java:
src/e/gui/ETextField.java: remove these unused classes.


2009-03-05 05:32:16 +0000 / enh / revision 2918

src/e/forms/FormDialog.java: use DocumentAdapter.


2009-03-05 05:32:00 +0000 / enh / revision 2917

src/e/gui/DocumentAdapter.java: a Swing "Adapter" for DocumentListener.


2009-03-05 05:14:12 +0000 / enh / revision 2916

src/e/gui/FilenameChooserField.java: fix '/' on Windows and '\' on Unix as they're typed.


2009-03-04 05:46:00 +0000 / mad / revision 2915

bin/invoke-java.rb: By claiming not to have seen a problem with throwing files to an existing Evergreen for a while, I was asking to see one the very next day. I doubt anyone else's problems are caused by similar VPN woe but who knows.


2009-03-03 06:30:30 +0000 / enh / revision 2914

src/e/gui/ETextField.java: this is also the wrong place to be closing text fields from the keyboard. I think this is only causing harm these days (if one dialog opens another, hitting escape to close the inner dialog would also close the outer dialog if the latter contains an ETextField). Any innocent code broken by this change should be fixed to call JFrameUtilities.closeOnEsc (which is overloaded for JDialog as well as JFrame), or migrated to using FormBuilder (which takes care of such things automatically).


2009-03-03 06:23:54 +0000 / enh / revision 2913

src/e/gui/ETextField.java: trying to make ETextField's caret color match PTextArea's (and my own personal caret color preference) is a mistake as long as we can't guarantee that there are no plain old JTextFields in use. Likewise the blink rate.


2009-03-03 06:13:36 +0000 / enh / revision 2912

src/e/gui/FilenameChooserField.java: record some other possible improvements.


2009-03-03 05:48:06 +0000 / enh / revision 2911

src/e/gui/FilenameChooserField.java: move the Windows-user-protection out of one of the callers so both callers can benefit.


2009-03-03 04:56:11 +0000 / enh / revision 2910

src/e/gui/FilenameChooserField.java: remove a FIXME that I can only assume I meant the other way round, and which was done in r2905.


2009-03-03 04:51:55 +0000 / enh / revision 2909

src/e/util/GuiUtilities.java: move the notion of appropriate component spacing here from FormDialog, and add a convenience method like BorderFactory.createEmptyBorder, but which only takes a single width (since it's very common that you want the same width all round).

src/e/demo/PTextAreaDemo.java:
src/e/forms/FormDialog.java:
src/e/forms/FormPanel.java:
src/e/tools/DualTimeClock.java:
src/e/tools/FatBits.java:
src/e/tools/JavaWidgetFactory.java: use the new utilities.

src/e/gui/FilenameChooserField.java: use them here too, and stop using the unusual BoxLayout in favor of the usual BorderLayout. Use an Action to implement the "Browse..." button, and have that action offer a mnemonic on the button.


2009-03-02 04:27:18 +0000 / enh / revision 2908

src/e/util/FileAlterationMonitor.java: File.lastModified returns 0 if the file doesn't exist, so this code didn't used to notice if the file disappeared (or indeed if its modified time genuinely went backwards).


2009-03-02 00:57:09 +0000 / enh / revision 2907

bin/invoke-java.rb: minor simplification.


2009-03-02 00:14:07 +0000 / enh / revision 2906

src/e/gui/FilenameChooserField.java: it's always annoyed me that hitting tab in Evergreen's "Add Workspace" dialog took me to the "Browse..." button rather than the next field. I know that's how things are supposed to behave, but it's always struck me as illogical; surely that button's for mouse users who'll click on it anyway, while keyboard users will type a path and tab into the next field they want to type into? (Most useful would be an auto-completing text field.)


2009-03-01 23:58:31 +0000 / enh / revision 2905

src/e/gui/FilenameChooserField.java: Evergreen r1480 has been annoying me because it's optimizing for a case I never use. In theory, it's not a problem because you can simply start typing to overwrite the always-wrong guess, but in practice, that breaks down at the second field in the "Add Workspace" dialog, the companion field of a FilenameChooserField. Change FilenameChooserField to automatically update the companion field as you edit the filename field; apart from the initial pause while I look at the default values only to find they're no use, this seems to make things no worse than they used to be.


2009-02-26 06:56:05 +0000 / enh / revision 2904

src/e/ptextarea/PStyle.java: give each style font flags, so it can be plain, bold, or italic. Add two new styles, NORMAL_BOLD and NORMAL_ITALIC that are like NORMAL except they're bold or italic rather than plain.

src/e/ptextarea/PTextSegment.java: use the font flags when rendering text.

src/e/ptextarea/PAbstractSegment.java:
src/e/ptextarea/PColoredHighlight.java:
src/e/ptextarea/PLineSegment.java:
src/e/ptextarea/PNewlineSegment.java:
src/e/ptextarea/PTabSegment.java:
src/e/ptextarea/PTextAreaRenderer.java:
src/e/ptextarea/UnprintableCharacterTextSegment.java: stop passing a single FontMetrics around, and ask PTextArea for the appropriate one for the font flags of the PStyle in question.

src/e/ptextarea/PTextArea.java: stop caching character widths for a single font, but cache the FontMetrics for the plain, bold, and italic variants of the current font.


2009-02-23 04:41:45 +0000 / enh / revision 2903

www/footer.html: the evergreen-users and terminator-users lists are working out fine, and are the preferred points of contact for users.


2009-02-23 04:33:02 +0000 / enh / revision 2902

src/e/gui/HelpMenu.java: if we weren't explicitly given a support email address, don't assume that we know what it is.


2009-02-22 18:50:02 +0000 / enh / revision 2901

lib/build/package-for-distribution.rb: make sure we don't package stuff up so that it isn't accessible to the users who'll be trying to access it. (The motivating example was third-party JAR files that are rw------- in the repository.) I'm also trying to say "go" rather than "og" when talking to chmod, because "ugo" is the traditional order.


2009-02-22 18:28:32 +0000 / enh / revision 2900

src/org/jessies/test/Assert.java: add a new kind of assertion.


2009-02-22 17:06:00 +0000 / enh / revision 2899

bin/invoke-java.rb:
lib/build/universal.make: make it possible to run unit tests in projects that have supporting JAR files in their lib/jars/ directory (such as http://code.google.com/p/blog-baboon/).


2009-02-21 23:28:16 +0000 / enh / revision 2898

src/e/util/StringUtilities.java: add HTML escaping and unescaping.


2009-02-21 20:32:27 +0000 / enh / revision 2897

src/e/gui/AboutBox.java: add support for the Apache Public License 2.0, though no way of saying "this application's source is APL2, but the library it's built on is LGPL", which is going to be true of all callers. I don't believe that's important, though.


2009-02-21 20:14:19 +0000 / enh / revision 2896

src/e/gui/AboutBox.java: make it easy to add support for other licenses.


2009-02-21 19:49:37 +0000 / enh / revision 2895

src/e/tools/FatBits.java: declare FatBits as GPL 2 or later.


2009-02-21 19:47:28 +0000 / enh / revision 2894

src/e/gui/AboutBox.java: don't assume we know what license something has unless it's explicitly told us.


2009-02-21 19:28:20 +0000 / enh / revision 2893

src/e/ptextarea/PTextAction.java: fix a typo in a comment.


2009-02-21 19:27:29 +0000 / enh / revision 2892

lib/build/package-for-distribution.rb: be lenient about ".txt" for files that Unix has traditionally spelled without the extension but which are often more convenient when they do have the extension. It's not worth taking sides when we can easily make things "just work".


2009-02-21 02:50:55 +0000 / enh / revision 2891

bin/invoke-java.rb:
bin/show-alert.rb:
post-commit: "rescue" doesn't catch all Exception subclasses unless you tell it to. To hammer home the One True Style, include the "=> ex" even where we don't need it. 'lonetwin' reported a problem starting Terminator on Windows caused by the incorrect "rescue" in InAppClient::trySendCommand in "invoke-java.rb":

  Exception Timeout::Error: timed out while opening a connection to the host
    at /usr/lib/ruby/1.8/net/telnet.rb:356:in `initialize'
    at C:/Program Files/software.jessies.org/terminator/Resources/salma-hayek/bin/invoke-java.rb:68:in `new'
    at C:/Program Files/software.jessies.org/terminator/Resources/salma-hayek/bin/invoke-java.rb:68:in `trySendCommand'
  


2009-02-21 02:39:03 +0000 / enh / revision 2890

incoming: we're not going to be using hg anytime soon, and can always pull this back out of cold storage if anything changes.


2009-01-31 02:11:07 +0000 / enh / revision 2889

lib/build/per-directory.make: there's no point breaking the build on Mac OS 10.5 for something that no-one can use anyway. I don't think we need to worry about x86_64 until 10.6, and at that time we'll have to decide between adding support for that or retaining support for 10.4 (since Apple doesn't offer compatibility across more than one release).


2009-01-29 05:11:06 +0000 / enh / revision 2888

src/e/gui/UneditableTextField.java: add a convenience constructor, and keep the border's size by making an EmptyBorder with the same insets as the LAF's border, which looks slightly less awful on Linux (I've not tried Mac OS and Windows). I'd forgotten how bad this looks with the GTK+ LAF. Bloody Sun, wasting engineering effort on their stupid Nimbus theme that no-one will ever deliberately use anyway.


2009-01-29 04:24:49 +0000 / enh / revision 2887

src/e/ptextarea/PTextAction.java: it's not obvious why a PTextAction shouldn't require a PTextArea to work on (and those subclasses that weren't overriding isEnabled were incorrectly enabled in that case).

src/e/ptextarea/PActionFactory.java: manually go through the actions checking everything's now as it should be (no deliberate functional changes).


2009-01-29 03:51:41 +0000 / enh / revision 2886

src/e/gui/UneditableTextField.java: gain this class (a motley collection of workarounds) from Terminator, now we want it in Evergreen too.


2009-01-28 21:50:18 +0000 / mad / revision 2885

src/e/util/StringUtilities.java: We have three calls to Pattern.quote and rather more to regularExpressionFromLiteral, whose difference from Pattern.quote is oddly not documented. We don't seem to have any code to quote replacement strings, yet, as the JavaDoc for Matcher says [

Note that backslashes (\) and dollar signs ($) in the replacement string may cause the results to be different than if it were being treated as a literal replacement string. Dollar signs may be treated as references to captured subsequences as described above, and backslashes are used to escape literal characters in the replacement string.

]. Perhaps this new replacementStringFromLiteral, and regularExpressionFromLiteral, should move to PatternUtilities. That was the first place I looked, though there was no way I was giving up until I'd looked here too.

The motivating call-site for replacementStringFromLiteral is in Evergreen and so in a different check-in.


2009-01-26 02:24:34 +0000 / enh / revision 2884

src/e/util/StringUtilities.java: support URL decoding as well as encoding, and add trivial tests for both. (java.net.URI contains its own URL-decoding code, and it doesn't turn '+' back into ' '.)


2009-01-24 21:08:49 +0000 / mad / revision 2883

native/all/java-launcher/java-launcher.cpp: Elliott suggests specifying the bit width of the DLL we've failed to load, so it's clear to anyone who knows that they have 64 bit Java installed that we require 32 bit Java (less obviously because of Cygwin).


2009-01-24 20:21:27 +0000 / mad / revision 2882

www/cygwin-problems.html: We've had at least two 64 bit Windows inquiries recently. It's only going to get more frequent.


2009-01-24 19:08:18 +0000 / enh / revision 2881

src/e/ptextarea/PCFamilyIndenter.java: try harder to cope with line-wrapped code. This isn't perfect, but it's noticeably better, and it's no worse for non-wrapped code.


2009-01-24 06:04:40 +0000 / mad / revision 2880

native/all/java-launcher/java-launcher.cpp: A 32 bit Cygwin launcher executable isn't going to be able to load a 64 bit JVM.DLL but provide an environment variable so Simon Sadedin and Ken Harris could try, in case it turns out that they do have a 32 bit JVM installed that we just can't find via the registry. This might help to prototype future changes too and there's at least one FIXME that suggests that we might sometimes want a different JVM than the default on other platforms too.


2009-01-22 05:54:09 +0000 / enh / revision 2879

src/e/tools/JarExplorer.java: track API change.


2009-01-22 05:53:23 +0000 / enh / revision 2878

src/e/util/ComponentUtilities.java: generalize setJListAction (which can apply to any component, even if it's most useful for JList) and improve its name.


2009-01-22 04:25:54 +0000 / enh / revision 2877

src/e/util/ComponentUtilities.java: a new convenience method to call a given ActionListener when the user either double-clicks or hits enter in the given JList.

src/e/tools/JarExplorer.java: here's an example caller that previously only handled double-click.


2009-01-17 23:04:16 +0000 / mad / revision 2876

lib/build/universal.make: Given what it turns out to do, it seemed only debatable whether it's worth the extra code to use --keep-version, so I settled for recording why it wouldn't let us remove the code for dealing with "-2".


2009-01-17 02:44:46 +0000 / enh / revision 2875

src/e/util/FileUtilities.java: Thomas Richards worked out that he had the wrong .rpm himself, but being more explicit in the error message might be helpful. (Better still would be to fix our .rpms so that you can't install the wrong one, assuming rpm(1) understands such things!)


2009-01-17 02:34:09 +0000 / enh / revision 2874

src/e/util/GuiUtilities.java: fix an incorrect assumption.


2009-01-17 02:33:30 +0000 / enh / revision 2873

src/e/gui/ETable.java: sometimes you want to provide a model right away.


2009-01-17 01:47:01 +0000 / enh / revision 2872

src/e/gui/WindowMenu.java:
src/e/tools/FatBits.java:
src/e/util/Preferences.java: use JMenu.addSeparator more consistently.


2009-01-16 06:16:35 +0000 / enh / revision 2871

src/e/util/ComponentUtilities.java: factor out a bit of duplication.


2009-01-14 22:41:21 +0000 / mad / revision 2870

lib/build/universal.make: Speculative fix for "make install" being broken on Windows since the advent of the .tgz "installer".


2009-01-14 22:30:13 +0000 / mad / revision 2869

native/Headers/HKEY.h: I thought we had to include windows.h before any other header but seemingly not in cygwin-launcher.cpp. The missing "inline", though, was an accidental omission.


2009-01-14 22:25:00 +0000 / mad / revision 2868

native/Headers/HKEY.h: Ah yes, sometimes we compile for mingw32. And it looks like we haven't found a better way of detecting Windows than this.


2009-01-14 22:14:37 +0000 / mad / revision 2867

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: An HKEY_CURRENT_USER installation is more specific than an HKEY_LOCAL_MACHINE one so, thinking about this for what the history suggests is the first time, I think we should prefer per-user installations. Our error message here would be improved by saying "HKEY_LOCAL_MACHINE" instead of its pointer value...

native/Headers/HKEY.h: ... which wasn't previously sufficient reason for me to both with this but...

native/all/java-launcher/java-launcher.cpp: ... now I want to convert the value to a Cygwin /proc/registry path. I supposed I could have used strings but I wanted to copy the hive iteration from cygwin-launcher.cpp verbatim. I became a little fed up of the duplication of the exception handling, so I collapsed one copy at the same time as adding another. (It was that or nest loops.) The "Jesse Kriss" comment seemed to have drifted away from the code it referred to, so I fixed that too.

This may fix Ken Harris's problem, as he seems to have a per-user installation of Java. I wonder why we haven't seen that before.

I haven't even compiled this on Windows yet.


2009-01-12 04:27:01 +0000 / enh / revision 2866

src/e/ptextarea/PActionFactory.java: implement isEnabled for PTextArea's copy, cut, and paste actions.


2009-01-04 20:22:57 +0000 / mad / revision 2865

src/e/ptextarea/PBracketUtilities.java: Revert my change of yesterday. If the offset given is more than one past the last element in the sequence, then a good case could be made that we're not (immediately) after an open bracket. But I have a suspicion that we're trying to keep the offset within bounds, rather than trying to cope when it's out of bounds. In the particular case that I'm interested in, uncheckedRevertToSaved is setting the caret position beyond the end of the buffer. That's the cause of the exceptions here and preventing it prevents the exceptions here.


2009-01-04 02:01:17 +0000 / mad / revision 2864

src/e/ptextarea/PBracketUtilities.java: Fix out-of-bounds exception when reverting to saved where the on-disk version of the file is smaller:

2009-01-03T17:30:45.909-0800 Evergreen: Exception occurred during event dispatching.
Associated exception:
java.lang.IndexOutOfBoundsException: index 513 not in half-open range [0..0)
at e.ptextarea.PTextBuffer.throwIOOBE(PTextBuffer.java:408)
at e.ptextarea.PTextBuffer.charAt(PTextBuffer.java:402)
at e.ptextarea.PBracketUtilities.afterOpenBracket(PBracketUtilities.java:137)
at e.ptextarea.PMatchingBracketHighlighter.caretMoved(PMatchingBracketHighlighter.java:32)
at e.ptextarea.PTextArea.fireCaretChangedEvent(PTextArea.java:153)
at e.ptextarea.PTextArea.setSelectionWithoutScrolling(PTextArea.java:266)
at e.ptextarea.PTextArea.setSelection(PTextArea.java:233)
at e.ptextarea.PTextArea.select(PTextArea.java:227)
at e.ptextarea.PTextArea.setCaretPosition(PTextArea.java:211)
at e.edit.ETextWindow.uncheckedRevertToSaved(ETextWindow.java:369)
at e.edit.ETextWindow.revertToSaved(ETextWindow.java:421)
at e.edit.RevertToSavedAction.actionPerformed(RevertToSavedAction.java:25)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1220)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1261)
at java.awt.Component.processMouseEvent(Component.java:6041)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5806)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4413)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2440)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at e.debug.EventDispatchThreadHangMonitor.dispatchEvent(EventDispatchThreadHangMonitor.java:191)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)


2009-01-02 22:59:07 +0000 / enh / revision 2863

src/e/gui/DebugMenu.java: make the window titles, where available, more prominent. Ugly, but you can't put a price on decent debugging output.


2009-01-02 22:47:01 +0000 / enh / revision 2862

src/e/gui/DebugMenu.java: make this output slightly easier to read by giving each Window a number. (I'd pull the titles out to make them more prominent too, but Window doesn't have a title.)


2009-01-02 20:17:50 +0000 / enh / revision 2861

src/e/util/StringUtilities.java: remove useless boilerplate.


2008-12-31 23:38:00 +0000 / enh / revision 2860

src/e/gui/TabbedPane.java: most of the pop-up menu code is also trivial to share between Evergreen and Terminator.


2008-12-31 23:15:25 +0000 / enh / revision 2859

src/e/gui/TabbedPane.java: the code in Evergreen to only select the new tab location if the old tab location was selected seems like the right idea, though I'm not sure you'd be able to tell the difference (because all our tab operations in all our applications, reasonably enough, operate on the selected tab).


2008-12-31 23:01:44 +0000 / enh / revision 2858

src/e/gui/TabbedPane.java: try harder to paper over JTabbedPane tool tip text confusion.


2008-12-31 22:17:01 +0000 / enh / revision 2857

src/e/gui/TabbedPane.java: Evergreen on Mac OS uses a tabbed pane whose tabs are on the left.


2008-12-31 22:07:29 +0000 / enh / revision 2856

src/e/gui/TabbedPane.java: the line of code may have been the same in Evergreen and Terminator, but Evergreen's comment was better.


2008-12-31 22:04:09 +0000 / enh / revision 2855

src/e/gui/TabbedPane.java: both Evergreen and Terminator have code to improve JTabbedPane, with Terminator's being more sophisticated than Evergreen's. Let's pull out the most easily-shared stuff so Evergreen can take advantage and we can stop repeating ourselves.


2008-12-31 21:28:03 +0000 / enh / revision 2854

src/e/util/StringUtilities.java: write tests that would have caught the bug I introduced in revision 2852 and mad fixed in revision 2853.

src/e/util/FileUtilities.java: despite my assumption that writing tests that touch the file system would be painful, it only took a small refactoring here to do a minimal but sufficient job.


2008-12-29 23:19:55 +0000 / mad / revision 2853

src/e/util/StringUtilities.java: Perhaps an "anonymous inner class" (if that's the right term for Java's current implementation of closures), implementing a method that takes "out", would have been a better choice.


2008-12-28 04:43:25 +0000 / enh / revision 2852

src/e/util/StringHistory.java: fix a bug equivalent to that fixed by mad in Evergreen revision 1461...

src/e/util/StringUtilities.java: ...by moving the responsibility here. It's only incidental that we no longer need to create the big intermediate String (though that may be handy someday), but it is deliberate that we still hard-code the use of "\n" rather than switching to the more obvious PrintWriter.println; we could switch, but I'm not sure we want to, and even if we do, we should make sure that readFile copes with non-Unix line endings first.


2008-12-28 04:34:11 +0000 / enh / revision 2851

src/e/util/StringUtilities.java: the only user of the "append" functionality of writeFile was removed as a mistake. Really needing to append is rare enough I'm willing to bet we won't deliberately re-introduce it.


2008-12-22 02:08:29 +0000 / mad / revision 2850

lib/build/package-for-distribution.rb: Ilkka Laukkanen asks for a Conflicts between org.jessies.terminator and terminator. Elliott suggests Replaces instead but I don't like abusing the Debian guidelines unless someone's definitely going to benefit and I'm not convinced that it would be a net benefit. Maybe but I'm not convinced.

I imagine that any package called evergreen would cause us a conflict too, which gives me an excuse not to add any per-project complexity.


2008-12-22 01:52:20 +0000 / mad / revision 2849

lib/jars/AppleJavaExtensions-LICENSE.txt: lintian rightly complains that this file is, probably accidentally, executable.


2008-12-21 18:03:00 +0000 / enh / revision 2848

native/Headers/JniField.h:
src/e/tools/JavaHpp.java: cope with "static native" methods.


2008-11-08 18:24:56 +0000 / enh / revision 2847

src/e/gui/BirdView.java:
src/e/gui/DebugMenu.java:
src/e/gui/ETable.java:
src/e/gui/HorizontalScrollWheelListener.java:
src/e/util/GuiUtilities.java:
src/org/jessies/test/TestRunner.java: silence Java 7's raw-type warnings.

src/e/util/BrowserLauncher.java: we can probably jettison a large amount of this code (support for Mac OS 9 and Windows 98?), but it just doesn't seem worth the effort.

src/e/util/InstanceTracker.java: this code is dynamic enough that it never really benefits from generics; I don't think Java's type system can express the map's actual type.

src/e/util/SpellingChecker.java: this is the only bit of code I've come across that this new warning convincingly improves (and even here, since we don't actually *use* 'eldest', it's a small win).

src/e/util/TimerUtilities.java: we could theoretically be more specific than DelayQueue<?> here, but we don't have access to the element type's name.


2008-10-18 07:27:54 +0100 / enh / revision 2846

src/e/demo/PTextAreaDemo.java: the chosen FileType is the other thing I always want to know.


2008-10-18 06:51:40 +0100 / enh / revision 2845

src/e/demo/PTextAreaDemo.java: make it (relatively) easy to choose between fixed/proportional fonts, ensure the window is centered on the display (because GNOME's default positioning heuristic is a pathetic joke), and include the indentation string in the debugging output.


2008-10-18 05:44:09 +0100 / enh / revision 2844

src/e/ptextarea/PKeyHandler.java: comment an apparent bug.


2008-10-18 05:39:56 +0100 / enh / revision 2843

src/e/ptextarea/PKeyHandler.java: add a comment explaining something I have to work out every time I look at this code.


2008-10-18 05:38:11 +0100 / enh / revision 2842

src/e/ptextarea/PKeyHandler.java: while I'm here, add support for Emacs' control-d and control-h (delete and backspace), since they're trivial. Mac OS also supports control-l (center selection in visible area), control-o (insert newline without moving caret), control-t (transpose letters), and control-v (page down).


2008-10-18 05:19:17 +0100 / enh / revision 2841

src/e/ptextarea/PKeyHandler.java: remove code that's never worked, and is never likely to work.


2008-10-18 05:16:21 +0100 / enh / revision 2840

src/e/ptextarea/PKeyHandler.java: apply Stephen Parker's patch supporting some Emacs keys on Mac OS. I've used the usual constant orthography, factored out the isMacOs tests, moved the translation from Emacs keystrokes to standard ones into its own method, added a few comments (in particular noting that control-k and control-y don't have quite the right behavior), removed superfluous parentheses, and added missing braces. (It's closer to the original patch than that list makes it sound!)


2008-10-18 04:42:51 +0100 / enh / revision 2839

src/e/ptextarea/PLineList.java: clarify a comment.


2008-10-16 02:37:59 +0100 / mad / revision 2838

native/all/setsid/setsid.cpp: I don't think there is a portable way out of this dilemma. Fortunate, then, that it only afflicts us on Windows. I still don't know how to fix it, but not continuing on regardless is helping me to use Evergreen, to investigate a different issue.


2008-10-15 05:21:34 +0100 / enh / revision 2837

www/index.html:
www/navigation.html: move the start and end of the navigation bar out, so we can add a link to Evergreen's "Manual" without forcing broken links on the other projects, at the cost of some duplication.


2008-10-15 03:48:30 +0100 / enh / revision 2836

lib/build/package-for-distribution.rb: Jacobo García had MacPorts' Ruby and the RUBYOPT=rubygems abomination (why don't the people who recommend this make it clear that it's a mistake unless you know theirs is the *only* Ruby on the system?), so to get Terminator to work on his Mac, we need to unset RUBYOPT. Interestingly, it was our *second* call to ruby that failed:

  /Applications/Terminator.app/Contents/MacOS/Terminator: line 11: /salma-hayek/bin/ensure-suitable-mac-os-version.rb: No such file or directory
  
The first call was taking the first "ruby" on the PATH, which understood RUBYOPT. It's not obvious that it matters, but it doesn't seem right to be running multiple *different* versions of Ruby during start-up, so let's avoid that by giving the explicit path which is already hard-coded into the #! lines of our Ruby scripts.


2008-10-04 19:19:20 +0100 / mad / revision 2835

lib/build/universal.make: No-one seems to care about my suggestion of calling the source distribution terminator-source.tar.gz, to disambiguate it from the currently Windows-only .tar.gz OS-specific distribution. So I'll just do it...

www/index.html: ... changing the documentation links to match...

www/downloads.html: ... and fixing a space that I left out yesterday. If there is a good way of previewing these changes, I'm too lazy to dig it out of my email archive.


2008-10-03 23:16:24 +0100 / mad / revision 2834

www/downloads.html: Now I'm uploading an OS-specific terminator-<version>.tar.gz, we'd better be a bit more explicit where were referring to "the .tar.gz".


2008-10-03 23:08:09 +0100 / mad / revision 2833

lib/build/universal.make: Switch from .tgz to .tar.gz in anticipation of the problems we had previously with Apache and web browsers. Now we have two "dists" with an extension of .gz, which belong in different directories on the server, so we need cleverer logic to distinguish them.

Remove a comment about the SOURCE_DIST containing binary files (what, .png?). I guess it's long passed its sell-by date.


2008-10-03 22:56:21 +0100 / mad / revision 2832

lib/build/universal.make: Move the DIST-related variables to an arguably more logical location and one from where, in the next revision, I'll be able to evaluate $(INSTALLER.gz). There should be no changes other than moving lines around in this revision, in order that the changes I make in the next revision don't get drowned out in the noise of moving stuff around.


2008-10-03 20:07:25 +0100 / mad / revision 2831

lib/build/universal.make: Fix the .tgz Windows dist upload, in the simplest way possible, leaving comments as to why this needs more work.


2008-10-03 18:52:08 +0100 / mad / revision 2830

lib/build/universal.make: I wonder if a .tgz distribution for Windows might be useful to those few users who can't install in the normal location. It would deny them Open Terminator Here and the automated PATH update and the Desktop shortcut but none of those are huge losses. It looks like it isn't much code, at all, to implement this. I've only tested this on Linux so far.


2008-10-03 18:00:19 +0100 / mad / revision 2829

lib/build/parent.make: Add "native" to the list of targets we do simple recursion for and make it simpler and more idiomatic to add such targets in future. (This is to help me build on duezer out of my usual work area on whitewater to try out openjdk-6.)


2008-09-28 00:42:38 +0100 / mad / revision 2828

lib/build/per-directory.make: If we were to have more than one piece of JNI in a project, which would work with no formality here, our progress reporting would be poorer than it is for Java and C++. That's easily fixed.


2008-09-28 00:25:05 +0100 / mad / revision 2827

lib/build/universal.make: Always use absolute filenames with the build-finished target...

lib/build/per-directory.make: ... so we have a rule for building $(SALMA_HAYEK)/.generated/java.build-finished when building salma-hayek from clean, so that make -j builds from clean.

This was what the change backed out in my previous check-in was intended to fix, not plain old building from clean, as I tested and claimed in my check-in comment, but parallel building from clean.


2008-09-28 00:10:58 +0100 / mad / revision 2826

lib/build/filter-build-output.rb: I correctly matched the circular dependency warnings that had been lurking but mistakenly also matched the recursive make progress indications. That become obvious...

lib/build/universal.make: ... when I threw away the "clever" rule for lying to make about how to build .class files from the build-finished sentinel, which introduced the circular dependency...

lib/build/per-directory.make: ... and abandoned the use of JavaHpp.class's name here, in favor of the salma-hayek build-finished sentinel. That's arguably more correct anyhow, as JavaHpp.class might depend on other .class files, but my motivation was that I've given myself several days and failed to come up with any other solution that fixes the circular dependency and still builds from clean and doesn't have missing dependencies.


2008-09-27 23:24:52 +0100 / enh / revision 2825

src/e/util/ByteBufferDecoder.java: I created a constants class years ago to avoid exactly this kind of confusing code, and Java guarantees that using such a constant costs no more than using a literal, so let's use the constants.


2008-09-27 23:21:20 +0100 / enh / revision 2824

src/e/util/TimingLogger.java: I wanted to check that ByteBuffer.wrap is essentially free (it is) and found our "human-readable" output confusing. For this application, it's clearer if everything's measured in fractional seconds.


2008-09-27 23:03:20 +0100 / enh / revision 2823

src/e/util/ByteBufferDecoder.java: we're comparing char rather than byte now, so it's incorrect to talk about "the" top bit. And >= 0x7f seems more intention-revealing than > 126.


2008-09-27 23:00:56 +0100 / enh / revision 2822

src/e/util/ByteBufferDecoder.java:
src/e/util/ByteBufferUtilities.java: the two-pass check for ASCII doesn't really cost anything, but it looks odd, and it leaves a method (ByteBufferUtilities.isAsciiByteBuffer) lying around that people really shouldn't be using.


2008-09-27 22:35:07 +0100 / enh / revision 2821

src/e/ptextarea/PTextBuffer.java:
src/e/util/ByteBufferDecoder.java: this patch was originally intended to fix a FIXME that claimed that there might be a performance advantage to checking for '\r' as we decode the bytes to characters. This turns out to make no measurable difference, but the associated rewrite did make the code simpler and clearer (mainly by removing non-useful laziness from the API). So let's keep the change because it improves the code rather than because it improves performance (which it doesn't).


2008-09-24 18:10:57 +0100 / mad / revision 2820

src/org/jessies/test/TestRunner.java: We could just ignore unexpected files, but crashing seems a bit poor:

martind@whitewater:~/software.jessies.org/work/salma-hayek$ ./bin/org.jessies.TestRunner .generated/native/
Exception in thread "main" java.lang.NullPointerException
at org.jessies.test.TestRunner.findClassNames(TestRunner.java:96)
at org.jessies.test.TestRunner.findClassNames(TestRunner.java:103)
at org.jessies.test.TestRunner.findClassNames(TestRunner.java:103)
at org.jessies.test.TestRunner.findClassNames(TestRunner.java:103)
at org.jessies.test.TestRunner.findClassNames(TestRunner.java:103)
at org.jessies.test.TestRunner.findClassNames(TestRunner.java:85)
at org.jessies.test.TestRunner.findTests(TestRunner.java:65)
at org.jessies.test.TestRunner.runTests(TestRunner.java:60)
at org.jessies.test.TestRunner.main(TestRunner.java:55)
martind@whitewater:~/software.jessies.org/work/salma-hayek$

Failing gracefully, indicating the reason, seems a better choice:

martind@whitewater:~/software.jessies.org/work/salma-hayek$ ./bin/org.jessies.TestRunner .generated/native/
ERROR: '.generated/native/all/setsid/amd64_Linux/setsid.cpp' is not a directory or a .class file
martind@whitewater:~/software.jessies.org/work/salma-hayek$


2008-09-24 15:58:37 +0100 / enh / revision 2819

www/cygwin-problems.html:
www/cygwin-setup.html:
www/cygwin-subfaq.html: make it easier to find both the Cygwin pages.


2008-09-24 05:23:43 +0100 / mad / revision 2818

lib/build/universal.make: Windows Update seems determined to be the one thing running on this laptop, making it take minutes just to start CheckInTool, so I can't fix the circular dependency problem tonight.


2008-09-24 04:26:48 +0100 / enh / revision 2817

src/org/jessies/test/TestRunner.java: complain if we're given a non-directory argument.


2008-09-24 04:20:04 +0100 / mad / revision 2816

lib/build/universal.make: The alternative is to call convertToNativeFilenames but why add cruft when you can remove it? Avoids TestRunner's exquisitely informative NPE when running make test on Cygwin:

$ ./bin/org.jessies.TestRunner badger
java.lang.NullPointerException
        at org.jessies.test.TestRunner.findClassNames(TestRunner.java:91)
        at org.jessies.test.TestRunner.findClassNames(TestRunner.java:83)
        at org.jessies.test.TestRunner.findTests(TestRunner.java:65)
        at org.jessies.test.TestRunner.runTests(TestRunner.java:60)
        at org.jessies.test.TestRunner.main(TestRunner.java:55)
$


2008-09-24 02:53:06 +0100 / mad / revision 2815

lib/build/filter-build-output.rb: Unhide a makefile bug.


2008-09-24 01:25:13 +0100 / mad / revision 2814

lib/build/filter-build-output.rb: Use a more maintainable style. There should be no functional change in this check-in. The functional change follows...


2008-09-24 00:41:16 +0100 / mad / revision 2813

lib/build/parent.make: Support recursing for the "test" target, to see how much it adds to "build" - about 10% on Cygwin.


2008-09-23 06:40:08 +0100 / enh / revision 2812

src/e/tools/WeatherWindow.java: fix a regular expression to cope with place names containing spaces, such as "San Jose", and make esc exit.


2008-09-23 04:19:40 +0100 / enh / revision 2811

bin/invoke-java.rb: don't bring up a dialog box if a command-line program exits with a non-zero exit status.


2008-09-23 04:00:50 +0100 / enh / revision 2810

bin/invoke-java.rb: improve a name by inlining the one-line function that had stolen the better name.


2008-09-23 03:56:54 +0100 / enh / revision 2809

lib/build/universal.make: fix "make test" to run our unit tests, and make sure that "make test" (and "make findbugs") both build the code before poking about at it.


2008-09-23 03:40:23 +0100 / enh / revision 2808

www/bug-report.html: mention, albeit obliquely and on a page no-one reads, the discussion groups.


2008-09-23 03:37:19 +0100 / enh / revision 2807

src/e/gui/WindowMenu.java: why weren't we removing these listeners?


2008-09-23 03:34:07 +0100 / enh / revision 2806

src/e/gui/WindowMenu.java: expand a comment, fix a weird anti-idiom, and rewrite a comment that made no sense whatsoever.


2008-09-23 03:01:26 +0100 / enh / revision 2805

src/e/util/GuiUtilities.java: remove cruft from Terminator that should never have been here.


2008-09-21 05:59:34 +0100 / enh / revision 2804

src/e/ptextarea/PAssemblerTextStyler.java: improve the comment-detection heuristic.


2008-09-21 04:25:12 +0100 / enh / revision 2803

src/org/jessies/test/TestRunner.java: I don't intend doing any real work on performance until we've got enough tests that it seems like it would make sense; this change was intended to remove the ugly "pass around the prefix length" code, and just happens to be faster.


2008-09-21 03:10:14 +0100 / enh / revision 2802

src/org/jessies/test/TestRunner.java: record some of the reasoning behind writing org.jessies.test before it's forgotten.


2008-09-20 03:39:39 +0100 / enh / revision 2801

src/e/gui/HelpMenu.java: support for overriding software@jessies.org for "Report a Problem", and a new "Get Help Online..." feature.


2008-09-20 03:13:54 +0100 / enh / revision 2800

src/e/util/GuiUtilities.java: default to trying com.sun.awt.AWTUtilities.setWindowOpacity first, and offer a fake "feature test" that at least lets you know when you've no hope of setFrameAlpha working.


2008-09-19 07:17:31 +0100 / enh / revision 2799

src/e/util/GuiUtilities.java: make it clearer that com.sun.awt.AWTUtilities, if available, should be our preference on any platform.


2008-09-19 07:14:17 +0100 / enh / revision 2798

src/e/util/GuiUtilities.java: try to implement setFrameAlpha on MS Windows too.


2008-09-19 03:45:06 +0100 / enh / revision 2797

src/org/jessies/test/Assert.java: allow reasonable comparison of real numbers.

src/e/util/TimeUtilities.java:
test/e/util/TimeUtilitiesTest.java: move a test to where it's actually built and run.


2008-09-18 06:08:34 +0100 / enh / revision 2796

src/e/util/Rewriter.java:
test/e/util/RewriterTest.java: convert the Rewriter tests.


2008-09-18 05:55:45 +0100 / enh / revision 2795

src/org/jessies/test/Assert.java:
src/org/jessies/test/Test.java:
src/org/jessies/test/TestRunner.java: the simplest Java unit test framework that could possibly work.

bin/org.jessies.TestRunner: a deliberately awkwardly-named (since our packaging will make this excessively widely available) script to run the tests. When "make test" becomes the One True Way to run this, I guess we could move this in with the other scripts meant to be run by make rules.

src/e/util/StringUtilities.java: a few example tests.


2008-09-18 05:32:12 +0100 / enh / revision 2794

src/org/jessies/test: new directory.


2008-09-18 05:31:00 +0100 / enh / revision 2793

src/org/jessies: new directory.


2008-09-18 05:29:06 +0100 / enh / revision 2792

src/org: new directory.


2008-09-15 23:57:35 +0100 / mad / revision 2791

lib/build/universal.make: Out with unnecessary complexity. Who would run a www-dist rule with no www/ directory? All of the projects I have checked-out have such a directory. The conditional can move to the post-commit script, which is written in a closer approximation to a proper language, if and when it's of any use.


2008-09-15 23:40:56 +0100 / mad / revision 2790

lib/build/universal.make: /usr/man/cat1/test.1 on the only Solaris box available to me (a Solaris 8 box, polluted with all sorts of GNU tools, including test(1)) suggests that Chris might have better luck with test -r than test -e.

Should fix:

test -e /export/home/reecec/NightlyBuilds/salma-hayek/.generated/classes/e/tools/JavaHpp.class || { echo Failed to build /export/home/reecec/NightlyBuilds/salma-hayek/.generated/classes/e/tools/JavaHpp.class; exit 1; }
/bin/sh: test: argument expected
make[1]: *** [/export/home/reecec/NightlyBuilds/salma-hayek/.generated/classes/e/tools/JavaHpp.class] Error 1
make[1]: Leaving directory `/export/home/reecec/NightlyBuilds/salma-hayek'
make: *** [recurse] Error 1


2008-09-15 19:43:35 +0100 / enp / revision 2789

src/e/util/Preferences.java: Calling Component.getLocationOnScreen fails if the component is offscreen (!), so check it's showing before finding out where it is, avoiding throwing an exception and allowing the Preferences dialog to be shown while the About box is on screen. The About box is a JDialog so there's no visible Frame focus owner, and eventually we find the hacky hidden Frame.

2008-09-15T20:08:44.980+0200 Terminator: Exception occurred during event dispatching.
Associated exception:
java.awt.IllegalComponentStateException: component must be showing on the screen to determine its location
at java.awt.Component.getLocationOnScreen_NoTreeLock(Component.java:1680)
at java.awt.Component.getLocationOnScreen(Component.java:1654)
at e.util.Preferences.showPreferencesDialog(Preferences.java:175)
at e.util.Preferences.access$000(Preferences.java:28)
at e.util.Preferences$1.handlePreferences(Preferences.java:140)
at com.apple.eawt.Application$5.run(Application.java:374)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
at e.debug.EventDispatchThreadHangMonitor.dispatchEvent(EventDispatchThreadHangMonitor.java:191)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)


2008-09-14 03:32:02 +0100 / enh / revision 2788

src/e/util/StringUtilities.java: I keep reinventing StringUtilities.urlEncode as StringUtilities.escapeForUrl or StringUtilities.encodeUrl, so at least mention those names in the comment to increase my chances of finding the copy that's already there.


2008-09-14 02:57:16 +0100 / mad / revision 2787

lib/build/universal.make: Fix parallel build from clean by telling make that it can build any class file by waiting until the Java compile is finished, then checking whether the requested class file exists and barfing if it isn't. If we do nothing in the rule body then make just assumes the file is there, which would probably lead to a more confusing error later, especially in the case where the class name has been misspelled in the makefiles.

rat2:~/software.jessies.org/work/salma-hayek mad$ make clean
rat2:~/software.jessies.org/work/salma-hayek mad$ make -j
make[1]: Entering directory `/Users/mad/software.jessies.org/work/salma-hayek'
mkdir -p .generated && \
touch .generated/recompilation-trigger.make
mkdir -p .generated && \
ruby -w -ne '($_.match(/^ *(\S+)\s*[:+]?=/) || $_.match(/^\s*define\s*(\S+)/)) && puts("LOCAL_VARIABLES += #{$1}")' /Users/mad/software.jessies.org/work/salma-hayek/lib/build/per-directory.make | sort -u > .generated/local-variables.make
make[1]: Leaving directory `/Users/mad/software.jessies.org/work/salma-hayek'
make[1]: Entering directory `/Users/mad/software.jessies.org/work/salma-hayek'
mkdir -p .generated && \
touch .generated/java.build-started
make[1]: *** No rule to make target `/Users/mad/software.jessies.org/work/salma-hayek/.generated/classes/e/tools/JavaHpp.class', needed by `/Users/mad/software.jessies.org/work/salma-hayek/.generated/native/all/salma-hayek/universal_Darwin/new/e_util_FileUtilities.h'. Stop.
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory `/Users/mad/software.jessies.org/work/salma-hayek'
make: *** [recurse] Error 1
rat2:~/software.jessies.org/work/salma-hayek mad$


2008-09-14 02:14:13 +0100 / enh / revision 2786

src/e/util/NumberDecoder.java: support the modern "0b" and "0o" prefixes, even though they're not very widely used yet. This patch doesn't remove support for "0" implying octal, but it does at least stop us outputting octal numbers in that style.


2008-09-14 00:18:40 +0100 / enh / revision 2785

src/e/util/Preferences.java: remove dead locals, add missing finals.


2008-09-14 00:15:13 +0100 / enh / revision 2784

src/e/ptextarea/PEmailTextStyler.java: remove dead code.


2008-09-14 00:14:24 +0100 / enh / revision 2783

src/e/ptextarea/PAbstractLanguageStyler.java: remove unread variable.


2008-09-14 00:12:28 +0100 / enh / revision 2782

src/e/tools/FatBits.java: remove unused import, sort remaining imports.


2008-09-14 00:11:41 +0100 / enh / revision 2781

src/e/ptextarea/FileType.java: remove unused import.


2008-09-14 00:10:34 +0100 / enh / revision 2780

src/e/ptextarea/PPythonIndenter.java: remove unused import.


2008-09-14 00:08:02 +0100 / enh / revision 2779

src/e/ptextarea/PFind.java: remove unused import.


2008-09-14 00:07:46 +0100 / enh / revision 2778

src/e/ptextarea/PCFamilyIndenter.java: remove unused import.


2008-09-14 00:06:35 +0100 / enh / revision 2777

src/e/ptextarea/PNewCppIndenter.java: remove unused import.


2008-09-14 00:05:19 +0100 / enh / revision 2776

src/e/util/TimingLogger.java: remove unused import.


2008-09-14 00:04:27 +0100 / enh / revision 2775

src/e/util/ByteBufferUtilities.java: remove unused import.


2008-09-14 00:02:57 +0100 / enh / revision 2774

src/e/util/Log.java: remove unused import.


2008-09-12 23:45:11 +0100 / mad / revision 2773

bin/invoke-java.rb: Although I couldn't get Ruby to die with SIGTERM, I can easily get Java to die with it. Indeed, that's what happened to a RevisionTool that I'd forgotten I was running from within the same Errors window as the build I actually wanted to kill.

So +1, again, to Elliott's suggestion of an Errors window per tool invocation, and -1 to my unchecked-in patch for at least not hiding the existing Errors window prematurely.


2008-09-10 06:17:54 +0100 / enh / revision 2772

src/e/util/TimingLogger.java: treat an explicit single split specially, to get more reasonable output in that case (one line instead of three, two of which add no information).


2008-09-10 06:02:02 +0100 / enh / revision 2771

src/e/util/TimingLogger.java: comment a few of the more obvious possible improvements.


2008-09-10 05:52:47 +0100 / enh / revision 2770

src/e/util/TimingLogger.java: a plug-in replacement for the handy android.util.TimingLogger class (http://code.google.com/android/reference/android/util/TimingLogger.html).


2008-09-10 05:51:36 +0100 / enh / revision 2769

src/e/gui/HeapView.java: remove unused import.


2008-09-10 03:18:00 +0100 / enh / revision 2768

src/e/gui/DebugMenu.java:
src/e/gui/HorizontalScrollWheelListener.java:
src/e/util/GuiUtilities.java: recently, Sun has started using "java.vm.version" to really mean what it says on the tin. One usage (in Log) remains correct, but these others should have been using "java.specification.version" all along (as evidenced by the fact that they were using startsWith rather than equals).

src/e/util/Log.java: in addition to the correct usage of "java.vm.version" in Log, there's an incorrect one, where we really wanted "java.runtime.version". This is what drew attention to this minor problem: mail from users running new enough Java releases had weird Java version information in the subject lines.


2008-09-09 17:36:17 +0100 / mad / revision 2767

bin/show-alert.rb: Don't open another terminal in the wrong directory after quitting the one opened in the right directory. This was caused by my changing my mind, and the code, several times while writing the check-in comment and clearly not testing the changed version properly.


2008-09-09 17:28:18 +0100 / mad / revision 2766

post-commit: Subversion's empty environment behavior might be odd but Elliott demonstrates that it is at least documented. Leave ourselves a more detailed code-comment, so we don't have to partially rediscover this the hard way every time we migrate to a new server.


2008-09-09 02:02:48 +0100 / mad / revision 2765

lib/build/patch-to-html-email.rb: The final pair of missing parentheses, just to be sure.


2008-09-09 02:00:47 +0100 / mad / revision 2764

post-commit: printf debugging:

fd.puts("ENV[\"PATH\"] == \"#{ENV["PATH"]}\"")
fd.puts(ENV.to_a())

said:

ENV["PATH"] == ""
LC_CTYPE
en_US.UTF-8


2008-09-09 01:53:04 +0100 / mad / revision 2763

bin/scm-diff.rb: Another pair of missing parentheses.


2008-09-09 01:45:11 +0100 / mad / revision 2762

bin/find-jdk-root.rb: Some missing parentheses, which aren't the problem du jour but are fodder for spurious check-ins.


2008-09-09 01:23:22 +0100 / mad / revision 2761

post-commit: A spurious check-in to test whether the previous one worked. I bet Elliott hasn't used this test code for years. I know I haven't.


2008-09-09 01:20:52 +0100 / mad / revision 2760

post-commit: Well that PATH certainly doesn't work on northern.jessies.org, failing to find uname and rm from /bin. Hopefully we won't need any such hackery, now that Ruby etc will be installed somewhere on the default PATH.


2008-09-09 01:15:41 +0100 / mad / revision 2759

bin/show-alert.rb: Amritha Shetty is in good company, being confused by an ENOENT for $HOME on startup. The last person I remember being confused by that was me. Fortunately, I did have a vague recollection of our words on the subject and it didn't take me *too* long to find where we'd hidden them. I don't know what Cygwin does to create the home directory and I'd rather not make assumptions that it'll stay the same.


2008-09-05 01:30:10 +0100 / mad / revision 2758

bin/show-alert.rb: Remove the "while starting" lie and, hopefully, prevent the GUI alert box that confused Ron Pagani. I can't get Ruby to die on Linux when I send it SIGTERM and various other signals I tried (like ILL, ABRT, FPE) kill it immediately without invoking Ruby exception handlers. I can see SIGINT but that needs special handling.

bin/invoke-java.rb: While repeatedly starting fatbits and killing it almost immediately, I found that it's quite easy, even with a manual keypress, to kill Java before it's installed its SIGINT handler. Handle that the same way that I recently added handling for the exit status produced by said SIGINT handler.


2008-09-03 05:54:03 +0100 / enh / revision 2757

lib/build/package-for-distribution.rb: report Installed-Size in the expected (crazy) units.


2008-09-03 05:05:24 +0100 / enh / revision 2756

src/e/ptextarea/BugDatabaseHighlighter.java: I was going to look at getting this off Evergreen's EDT critical path during start-up, but nothing tasteful springs to mind right now, so I'll make do with a bit of spring cleaning.


2008-09-02 23:13:06 +0100 / mad / revision 2755

native/all/java-launcher/java-launcher.cpp: http://java.sun.com/javase/downloads/ has become even less intelligible over time and now it's reached the point where the first link apparently links to some pre-release code that doesn't work well on Windows with Intel integrated graphics. I've always cringed at the size of the JDK download. Given that the user will probably have to manually retype the URL here, choosing something short and simple would be a good idea.


2008-09-02 23:06:49 +0100 / mad / revision 2754

native/all/java-launcher/java-launcher.cpp: Elliott's still keen on hiding the usage unless we've got a UsageError. I'm agnostic but it doesn't cost much to try it.


2008-09-02 22:41:03 +0100 / mad / revision 2753

native/all/java-launcher/java-launcher.cpp: I'd happily drop the usage except in case of UsageError but every problem reported by this code has required seeing the command line so we can't do without that, no matter how bloated and unreadable it is.


2008-09-02 18:36:06 +0100 / mad / revision 2752

bin/invoke-java.rb: Java alleges to mimic "Unix shells" but I've only tested bash. Killing Java with other signals tends to cause it to die with SIGABRT. (Well, I say that, though Ruby reports the killing signal as SIGIOT. Both signals have the same number, which perhaps is part of the reason that Ruby's Signal.list() hash is name-to-number rather than the reverse.)


2008-09-02 18:22:39 +0100 / mad / revision 2751

bin/invoke-java.rb: Explain why what you'd first try wouldn't work here. Think of the Google results you know you'd get for "exited 139" to remember when we were last here. Some more supporting evidence:

martind@whitewater:~$ bash -c 'kill -SEGV $$' || echo $?
Segmentation fault
139
martind@whitewater:~$

The value returned from waitpid here in the SIGINT case is 0x8200. Perhaps we could construct a Process::Status with the exitstatus() and then call termsig() on that but Process::Status has no documented constructor and my first two guesses as to how to call any undocumented constructor fell on stony ground.


2008-09-02 17:50:51 +0100 / mad / revision 2750

bin/invoke-java.rb: Elliott points out that the log filename, when present, is passed to Java via a property on the command line. It's even on-screen with zenity, for me, on the very last line of the screen.


2008-09-02 17:48:18 +0100 / mad / revision 2749

bin/invoke-java.rb: Avoid spamming the user who's hit Ctrl-C to kill us.


2008-09-02 16:51:37 +0100 / mad / revision 2748

bin/invoke-java.rb: An archaeological expedition reveals that the catting of the log file here had its genesis in the very first revision of Terminator which had an application log file (as distinct from a terminal log file), back in the day when java's stdout and stderr were simply pointed at the log file using bash redirection. The one line check-in comment suggests that we hadn't given a great deal of thought as to why we'd want to see the log in this situation. A number of the later check-in comments opine, in the light of experience that was only then available, that catting the log is pointless because we never see, for example, Java quitting with an unhandled exception. Perhaps that happens in toy applications. Since a recent change to make sure that Java crashes are reported with an alert box, the log file contents is ending up in the alert box too and zenity, our alert box provider on Linux, isn't very graceful with such large messages. Elliott reports that he's seen it crash. I haven't seen that but it certainly puts the OK button off-screen. Windows' MessageBox, despite its plain appearance, again shows more maturity here. Displaying the log's filename seems a reasonable precaution, in case the log's contents do ever turn out to be useful in a startup problem. I'll display that filename before the bloated Java command line, otherwise zenity again hides it off-screen.


2008-09-02 06:30:21 +0100 / enh / revision 2747

src/e/ptextarea/PTextAreaBirdsEye.java: add missing "final".


2008-09-02 06:20:49 +0100 / enh / revision 2746

src/e/ptextarea/PTextAreaSpellingChecker.java: if we remove a large amount of text, we only need to check a word that was formed from the old prefix and suffix, and shouldn't pay attention to the number of characters removed.


2008-09-02 06:09:14 +0100 / enh / revision 2745

bin/invoke-java.rb: don't double all the newlines in the log. Comment on the likely counter-productiveness of trying to show the entire log in a dialog box.


2008-09-02 06:01:00 +0100 / enh / revision 2744

bin/show-alert.rb: we don't want to output HTML to the console.


2008-09-02 04:45:04 +0100 / enh / revision 2743

src/e/ptextarea/RegularExpressionStyleApplicator.java: keep the original constructor for convenience, but let frequent callers pass in a pre-compiled Pattern (since they're immutable and reusable).

src/e/ptextarea/HyperlinkStyleApplicator.java:
src/e/ptextarea/PreprocessorStyleApplicator.java:
src/e/ptextarea/TabStyleApplicator.java:
src/e/ptextarea/UnprintableCharacterStyleApplicator.java: make use of the new constructor for some of the more common/complicated regular expressions.


2008-09-02 04:04:46 +0100 / enh / revision 2742

src/e/util/GraphicsUtilities.java: remove dead class.


2008-09-02 01:47:36 +0100 / enh / revision 2741

src/e/util/Preferences.java: document possible improvements to our simple "font chooser" preference.


2008-09-02 01:43:29 +0100 / enh / revision 2740

src/e/util/GuiUtilities.java: document known problems with GuiUtilities.findMonospacedFontName.


2008-09-01 23:54:50 +0100 / enh / revision 2739

src/e/ptextarea/SplitLine.java: document an interesting observation.


2008-09-01 23:53:46 +0100 / enh / revision 2738

native/all/java-launcher/java-launcher.cpp: mention a possible improvement. There seems to be a hard trade-off in this code between "getting all the information we need" and "overwhelming users so they skip to the bottom and just mail us". Maybe we could improve things by making an effort to distinguish different kinds of failure?


2008-09-01 22:33:38 +0100 / enh / revision 2737

native/all/java-launcher/java-launcher.cpp: "Mary" sent us an error message that made it clear we no longer make much sense since the recent re-ordering of information.


2008-09-01 06:25:25 +0100 / enh / revision 2736

src/e/util/CharArrayCharSequence.java: add missing "final"s.


2008-09-01 05:34:45 +0100 / enh / revision 2735

src/e/util/StringUtilities.java: make the usual String/File overloads available for readLinesFromFile.

src/e/gui/AboutBox.java:
src/e/gui/JFrameUtilities.java: use the File overload.


2008-09-01 03:08:37 +0100 / enh / revision 2734

src/e/ptextarea/PTextBuffer.java:
src/e/util/ByteBufferDecoder.java:
src/e/util/ByteBufferUtilities.java:
src/e/util/FileSearcher.java:
src/e/util/StringUtilities.java: push the optimization for ASCII files down into the most widely-shared code, and update callers.


2008-09-01 02:58:36 +0100 / mad / revision 2733

native/all/ruby-launcher/ruby-launcher.cpp: Raymond Martin points out that setenv and unsetenv are declared in stdlib.h, which we were only including by luck, not judgment.


2008-09-01 02:51:37 +0100 / enh / revision 2732

src/e/util/CharArrayCharSequence.java: fix the implementation of subSequence.


2008-09-01 01:36:13 +0100 / enh / revision 2731

src/e/ptextarea/PLineList.java:
src/e/ptextarea/PTextArea.java: move a little more code out of PLineList.Line and into PLineList.


2008-09-01 01:34:49 +0100 / enh / revision 2730

src/e/ptextarea/PTextBuffer.java:
src/e/util/ByteBufferUtilities.java: we don't need two copies of the "read a whole file into a byte[]-backed ByteBuffer" code.


2008-08-31 23:36:08 +0100 / enh / revision 2729

src/e/ptextarea/PLineList.java:
src/e/ptextarea/SplitLine.java: slight comment clarifications, plus two extra "final"s.


2008-08-31 22:53:42 +0100 / enh / revision 2728

src/e/ptextarea/SplitLine.java: remove unused mutability. (setLineIndex is used, though, so this change doesn't buy us much yet.)


2008-08-31 22:38:08 +0100 / enh / revision 2727

src/e/ptextarea/PAbstractLanguageStyler.java:
src/e/ptextarea/PColoredHighlight.java:
src/e/ptextarea/PLineList.java:
src/e/ptextarea/PTextArea.java:
src/e/ptextarea/PTextAreaRenderer.java:
src/e/ptextarea/PWrappedSegmentIterator.java:
src/e/ptextarea/SplitLine.java: remove the references to the corresponding PLineList/PTextArea from the PLineList.Line and SplitLine classes respectively. This reduces the per-instance size of each. For my 100,000 line 40MiB test file, this reduces the memory usage of each from 38MiB to 29MiB (each; i.e. we're using twice the size of the file just to store line offset information, plus we're storing each original ASCII byte as a 16-byte char, for a 160MiB total before we start counting the other stuff, but char[], SplitLine, and PLineList.Line are the top three). More importantly, this change puts us in a good position to consider alternative representations, where we don't necessarily keep all these objects around.


2008-08-31 22:05:27 +0100 / enh / revision 2726

src/e/ptextarea/PTextBuffer.java: most files we read are going to be ASCII. So add a special case. This only saves 400ms on my 40MiB test (ASCII) file, but that's time we can happily waste elsewhere while opening a large file. If we knew in *advance* that a file was ASCII-only, we could avoid allocating the byte[] and char[] concurrently (and just work on, say, 8KiB at a time), reducing temporary memory demands. We could just assume, and fall back to the more general code if/when we hit the first non-ASCII character. But there are only 90ms left to shave off this code, out of 1.7s, so this isn't worth worrying about until the day we're dealing with significantly larger files than "just" 40MiB.


2008-08-25 05:39:24 +0100 / enh / revision 2725

src/e/gui/HeapView.java: always scale to the maximum heap size and remove the animation.


2008-08-25 04:17:00 +0100 / enh / revision 2724

src/e/gui/DebugMenu.java: add mnemonics to the "Debugging Tools" submenu.


2008-08-25 03:58:53 +0100 / enh / revision 2723

src/e/tools/FatBits.java: add mnemonics to FatBits' actions.


2008-08-25 03:56:16 +0100 / enh / revision 2722

src/e/gui/HelpMenu.java: automatically give the "Help" menu a mnemonic.


2008-08-25 03:52:42 +0100 / enh / revision 2721

src/e/gui/GnomeStockIcon.java: having a mnemonic is orthogonal to having a stock icon.


2008-08-25 03:39:33 +0100 / enh / revision 2720

src/e/gui/HeapView.java: fix the DOS line endings that date from when this file was first committed.


2008-08-25 03:35:05 +0100 / enh / revision 2719

src/e/util/IndentationGuesser.java: fix off-by-one errors. This time I've tested the change *before* committing it.


2008-08-25 03:24:11 +0100 / enh / revision 2718

src/e/gui/HeapView.java: show the "max" heap size.


2008-08-25 03:17:55 +0100 / enh / revision 2717

src/e/util/Bag.java:
src/e/util/IndentationGuesser.java: CharSequence isn't necessarily Comparable, so we should make sure we use a custom comparator. More importantly, the difference in indentation is the *last* few characters, not the first few.


2008-08-25 01:07:30 +0100 / enh / revision 2716

src/e/ptextarea/PHighlight.java: make PHighlight comparable and trivially instantiable so we can...

src/e/ptextarea/PHighlightManager.java: ...remove Wrapper and reimplement ProbeWrapper as a subclass of PHighlight. This saves us a 24-byte object per spelling mistake, which saves about 10MiB in my test case. I've also switched to using bulk insert in getHighlightsOverlapping, though the existing code was probably no less efficient.


2008-08-25 00:37:28 +0100 / enh / revision 2715

src/e/ptextarea/PTextArea.java: comment some bogus-looking code.


2008-08-25 00:37:05 +0100 / enh / revision 2714

src/e/ptextarea/PHighlight.java: make private what can be private, and add a missing @Override.


2008-08-25 00:25:02 +0100 / enh / revision 2713

src/e/ptextarea/PTextArea.java: there's no reason I can fathom for repeating the first few lines of addSplitLines before one of its call sites (and this is called heavily enough to add up on a large file).


2008-08-25 00:20:50 +0100 / enh / revision 2712

src/e/ptextarea/PTextArea.java: actually, we already had another implementation of "insert", with a perfectly good name.


2008-08-25 00:14:31 +0100 / enh / revision 2711

src/e/ptextarea/PTextArea.java: deprecate "insert", offering it with the better name "insertOrReplaceSelection", and add "insertPreservingSelection" (needed by my experimental p9term).


2008-08-25 00:08:07 +0100 / enh / revision 2710

src/e/util/IndentationGuesser.java: bound the cost of IndentationGuesser on large files.


2008-08-25 00:07:09 +0100 / enh / revision 2709

src/e/util/SpellingChecker.java: if we want to cope with large files, we need to bound the size of the spelling checker's cache. There's no science behind my choice of cache size (or choice of a unified cache to replace the two separate caches we used to have).


2008-08-24 23:57:46 +0100 / enh / revision 2708

src/e/ptextarea/PLineList.java: mark API that's only used internally "private", so it's clearer what we need to provide to the outside world.


2008-08-24 23:26:39 +0100 / enh / revision 2707

src/e/ptextarea/PTextBuffer.java: add PTextBuffer.indexOf(char, int).

src/e/ptextarea/PLineList.java: push the char[]-scanning down into PTextBuffer for a slight saving, at which point it becomes obvious that the real problem here is that we're creating a huge number of long-lived small objects. Maybe three int[]s per PLineList would be a good step forward.


2008-08-24 22:20:12 +0100 / enh / revision 2706

src/e/ptextarea/FileType.java: this isn't an important optimization, but it's easy, and I'm sick of seeing the stack trace.


2008-08-24 21:41:48 +0100 / enh / revision 2705

src/e/util/IndentationGuesser.java: switching from String to CharSequence saves 0.5s when processing a 40MiB on my fastest machine. Also log if we spend more than half a second guessing indentation (we still do, on my test file, which isn't even source).

src/e/util/Stopwatch.java: make it easy to get at the time taken.


2008-08-24 21:02:33 +0100 / enh / revision 2704

src/e/ptextarea/FileType.java: remove accidentally-committed debugging output, and add a FIXME comment rather than worry about the last 100ms. The normal case (for the whole of guessFileType) is less than 200us.


2008-08-24 20:56:53 +0100 / enh / revision 2703

src/e/ptextarea/FileType.java: on my system, guessFileType on the Project Gutenberg dictionary was taking 1.6 s before this patch; with this patch, it takes 106 ms.


2008-08-19 06:22:25 +0100 / enh / revision 2702

src/e/util/FileUtilities.java: don't allocate a byte array the size of the file we want to digest, but do make sure we actually read the whole file, and make more of an effort to close the FileInputStream on failure. Factor out the conversion of the resulting byte[] digest into an ASCII hex string, even though it probably belongs in a different class.


2008-08-18 18:36:19 +0100 / mad / revision 2701

src/e/util/FileUtilities.java: /home/martindo startsWith /home/martind but isn't under my home directory. Fixes:

2008-08-18T10:31:57.498-0700 Evergreen: in ContentLoader exception handler
Associated exception:
java.lang.RuntimeException: java.io.FileNotFoundException: ~o/badger (No such file or directory)
at e.ptextarea.PTextBuffer.readFromFile(PTextBuffer.java:165)
at e.edit.ETextWindow.fillWithContent(ETextWindow.java:325)
at e.edit.ETextWindow.<init>(ETextWindow.java:95)
at e.edit.Workspace.addViewerForFile(Workspace.java:181)
at e.edit.Evergreen.openFileNonInteractively(Evergreen.java:340)
at e.edit.Evergreen.openFileNonInteractively(Evergreen.java:236)
at e.edit.EditServer$Opener.run(EditServer.java:55)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at e.debug.EventDispatchThreadHangMonitor.dispatchEvent(EventDispatchThreadHangMonitor.java:191)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Caused by: java.io.FileNotFoundException: ~o/badger (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at e.ptextarea.PTextBuffer.readFromFile(PTextBuffer.java:152)
... 15 more


2008-08-17 22:06:38 +0100 / enh / revision 2700

lib/jars/AppleJavaExtensions-LICENSE.txt: add the license covering Apple's AppleJavaExtensions.jar.

lib/jars/swing-worker-1.2.jar:
lib/jars/swing-worker.jar: replace the old (1.0?) swing-worker.jar with the latest, Java 6-compatible, swing-worker-1.2.jar, to make life easier for us when we eventually switch to using Java 6's version.

lib/jars/swing-worker-1.2-LICENSE.txt: add the license details for swing-worker-1.2.jar.


2008-08-17 21:45:35 +0100 / mad / revision 2699

native/all/setsid/setsid.cpp: Out of time now but I'll be back.


2008-08-17 21:27:22 +0100 / enh / revision 2698

test/e/util/RewriterTest.java:
test/e/util/TimeUtilitiesTest.java: these aren't great tests, but they're something to get started with.

src/e/util/Rewriter.java: lose the ad hoc tests.


2008-08-17 21:19:25 +0100 / enh / revision 2697

src/e/util/NumberAwareComparator.java: remove dead code.


2008-08-17 21:17:47 +0100 / enh / revision 2696

src/e/util/StringSplitter.java: remove dead code.


2008-08-17 21:15:31 +0100 / enh / revision 2695

src/e/util/Log.java: remove dead code.


2008-08-17 21:14:03 +0100 / enh / revision 2694

test/e/util: new directory.


2008-08-17 21:12:50 +0100 / enh / revision 2693

test/e: new directory.


2008-08-17 21:12:12 +0100 / enh / revision 2692

test: new directory for JUnit tests.


2008-08-17 19:04:47 +0100 / mad / revision 2691

src/e/util/FileUtilities.java: This code isn't quite dead, though I'm not convinced that it's much use. Indeed, I suspect it's mildly dangerous in the light of what I wrote in my code-comment in processCygwinRewrites, given that getUserFriendlyFilename shows no signs of doing the opposite transformation. The comment on getUserFriendlyFilename says that there's no pure Java way of implementing that opposite transformation, although there clearly is if we're prepared to settle for the bogus assumption that all home directories are mounted under a common prefix, like /home/, as we settle for here. If we're going to keep it, then we should use File.separator instead of hard-coding /, so that's what I've done, or at least intended to do, here. The ~\dir\file thing is esoteric, as mentioned in processCygwinRewrites, but switching to ~/dir/file would probably introduce more bugs than it fixes, and make them harder to find by removing the possibility of simply searching the source for places where we use / instead of File.separator to find code sites that are likely to be broken on Windows.


2008-08-16 08:19:46 +0100 / mad / revision 2690

src/e/util/FileUtilities.java: Fix getUserFriendlyName in the face of whatever set my workspace drive letter's to c: when HOME starts with C:. I don't think I had a hand in either of those settings. This then lets me reproduce Al Hagopian's problem with Open Quickly, where clicking on the matches produces a file does not exist error message containing a path where all the separators have been lost.


2008-08-16 05:42:06 +0100 / enh / revision 2689

www/generated_toc.js: explain why the existing FIXME is more of a problem than I realized.


2008-08-16 03:36:56 +0100 / enh / revision 2688

src/e/toys:
src/e/toys/world:
src/e/toys/world/Gazetteer.java:
src/e/toys/world/GreenwichMapView.java:
src/e/toys/world/LocationListener.java:
src/e/toys/world/Place.java:
src/e/toys/world/SolarProjector.java:
src/e/toys/world/WorldClock.java: remove code it's no longer worth maintaining. (GNOME's panel clock is good enough now.)

2008-08-16 03:29:44 +0100 / enh / revision 2687

src/e/debug/EventDispatchThreadHangMonitor.java: switch to System.nanoTime, and be more consistent reporting times via TimeUtilities.nsToString.


2008-08-16 03:24:26 +0100 / enh / revision 2686

src/e/ptextarea/PLock.java: switch to System.nanoTime.


2008-08-16 03:16:47 +0100 / enh / revision 2685

src/e/gui/HeapView.java: move to System.nanoTime.


2008-08-16 03:06:14 +0100 / enh / revision 2684

src/e/util/TimeUtilities.java: make the conversion from nanoseconds to seconds publicly available.


2008-08-10 04:20:32 +0100 / enh / revision 2683

bin/find-jdk-root.rb: mad implies he may have used the non-block overload of File.open where he wanted IO.read; a quick search turns up just this.


2008-08-07 05:09:15 +0100 / enh / revision 2682

www/index.html: being a member of the supporting cast, this repository needs its own near-duplicate. Improve the nearness of duplication while I'm here by canonicalizing the capitalization.


2008-08-07 05:03:48 +0100 / enh / revision 2681

www/downloads.html: I think everyone else thought we should have added these links long ago, but didn't because I was against the idea. It's been long enough now for me to slowly come to the conclusion that there's no good reason not to have these links.


2008-08-07 04:55:02 +0100 / enh / revision 2680

src/e/gui/ETable.java: Rob Ross explains how to remove the unwanted focus ring border on Mac OS. The original post was http://elliotth.blogspot.com/2006/05/making-jtable-look-more-at-home-on-mac.html and the new one is http://elliotth.blogspot.com/2008/08/making-jtable-look-more-at-home-on-mac.html.


2008-08-06 06:37:06 +0100 / enh / revision 2679

src/e/gui/HelpMenu.java: who are we helping by repeating the application name in every item in the "Help" menu? Anyone who doesn't know what application they're perusing the menu of needs more help than we can ever give them.


2008-08-06 06:23:29 +0100 / enh / revision 2678

src/e/gui/HelpMenu.java: add support for a "Help" menu link to the manual.


2008-08-06 05:59:39 +0100 / enh / revision 2677

src/e/gui/HelpMenu.java: add mnemonics to the WebLinkActions in the standard "Help" menu.


2008-08-06 05:54:18 +0100 / enh / revision 2676

src/e/gui/HelpMenu.java: actually, GNOME applications just say "Help" > "About"; only Windows applications (plus Firefox, which misled me) append the application name.


2008-08-06 05:47:50 +0100 / enh / revision 2675

src/e/gui/WebLinkAction.java: add mnemonic support.


2008-08-05 19:58:09 +0100 / mad / revision 2674

src/e/util/Log.java: I wasn't happy with the Pattern being so far away from the code that uses it and nor was Elliott, who also suggests Matcher.find as being what I thought I was calling. I also remembered that I'd forgotten to include the test case, which I can conveniently write in a form that lets me test this on Linux.


2008-08-05 07:00:39 +0100 / enh / revision 2673

src/e/util/Preferences.java: add a mnemonic for the "Preferences..." menu item.


2008-08-05 06:12:50 +0100 / mad / revision 2672

src/e/util/Log.java: The old missing .*?


2008-08-05 06:06:49 +0100 / mad / revision 2671

Today it would have been useful had we had the Cygwin version in an old problem report. It's not the first time, indeed I've been meaning to do something about that for years. The Java doesn't realize it's running on Cygwin, never mind which version. Although we use Cygwin Ruby at the moment, we don't believe that we have much of a dependency on it, versus native Windows Ruby.

native/all/java-launcher/java-launcher.cpp: So this is the only part of the code that will always be Cygwin. How does one get the version on Cygwin? Well, /proc would be convenient... and indeed /proc/version contains what we want, add some more, including a trailing newline...

native/Headers/chomp.h: ... which perhaps it's worth getting rid of here, more in order to provide chomp() for the next potential caller than because C++ is uniquely good at, er, chomping.

src/e/util/Log.java: Dump any launcherOsVersion verbatim into the log and parse out the Cygwin version number for inclusion wherever we use the OS version.

bin/invoke-java.rb: I've been meaning to check-in a way of using the java-launcher on other platforms for ages. Testing on this Shuttle toaster is a dream, a dream I tell you, compared to using Windows. I suppose I can no longer postpone checking that Cygwin version parser on Windows.


2008-08-04 23:45:34 +0100 / mad / revision 2670

lib/build/universal.make: Hoist the definition of SPACE up where it would be more useful in checking whether we're being run under a directory with a space in the name... if we could get this far when being run under a directory with a space in the name. If we take a couple of other one liners with it, then the remaining code in that section is clearly to do with Windows peculiarities.

lib/build/simple.make: Copy the SPACE definition to somewhere early enough and add a check that would have saved Ed from needing to ask to confirm his suspicion.


2008-08-04 23:04:09 +0100 / mad / revision 2669

lib/build/simple.make: Export the two variables used by, but not defined in, universal.make and use a manually inlined version of $(lastword) here...

lib/build/universal.make: ... and here too, so we can get far enough with Mac OS 10.4's stock make to tell the user where to download a new enough version.


2008-08-04 18:54:49 +0100 / enp / revision 2668

src/e/util/GuiUtilities.java: Even after all this time, Apple haven't released a version of Java 6 for PPC, or for OS X < 10.5. Work around an API change introduced in Java 6, while we still wish to support Java 5.

http://weblogs.java.net/blog/zixle/archive/2005/11/changes_to_acti.html


2008-08-04 07:08:39 +0100 / enh / revision 2667

src/e/util/GuiUtilities.java: Swing's support for mnemonics is typically retarded, so let's hide it away in GuiUtilities so calling code can use a more reasonable interface. (This also helps with some of our existing boilerplate.)

src/e/gui/HelpMenu.java: use the new method.

src/e/ptextarea/PTextAction.java: use the new method in the superclass of all our PTextArea actions.

src/e/ptextarea/PActionFactory.java:
src/e/ptextarea/PFind.java: track the API change in all the subclasses, adding mnemonics as we go.


2008-08-04 03:49:31 +0100 / enh / revision 2666

src/e/gui/SimpleDialog.java: when the first message you see from our software reads "Welcome to Evergreen!." it makes us look stupid.


2008-08-04 02:36:14 +0100 / enh / revision 2665

src/e/gui/GnomeStockIcon.java: use a better link and better terminology.


2008-08-04 00:52:43 +0100 / enh / revision 2664

www/downloads.html: be explicit about our support for Mac OS 10.5, though it's probably obvious that "10.4" meant "10.4 or later".


2008-08-03 00:53:08 +0100 / mad / revision 2663

bin/invoke-java.rb: Elliott probably correctly guessed my reason for reversing the sense of this comment and keeping it but, as he says, there's no sense in being overly concise in a comment that I hope to be deleting in a week or two.


2008-08-03 00:45:32 +0100 / mad / revision 2662

lib/build/per-directory.make: Fix the atomicity of the cp of NEW_JNI_HEADER to JNI_HEADER. It seems possible to write this javahpp rule in a much more conventional way, as two rules, with liberal (but atomic!) use of $@. The reason it was written in such an unusual way was that the value of JNI_CLASS_NAME won't be the same by the time the rule is run. It seems that we can cache that in a target-specific variable in an intention-revealing way.

I've done a few test builds from clean and from already compiled, in both Salma Hayek and Terminator, paying particular attention to the case where I've touched the Java. There, I checked that we're still regenerating the JNI header when the Java changes but that we're not recompiling the corresponding C++ unless there's been any content change in the JNI header. It all seems to work. Bon, it certainly looks easier to maintain.


2008-08-03 00:26:58 +0100 / mad / revision 2661

bin/show-alert.rb: When Ruby throws a Windows MessageBox, the same hint about Ctrl-C applies as when the C++ throws one. Let's display the same message. When we report an unhandled exception, all of our callers seem to assume that we'll exit with failure, so let's do that. It's important in, for example, the case that Java crashed under javahpp, so make knows to stop...

lib/build/per-directory.make: ... although make not knowing the right place to start again pointed out a bug here. Never write "> $@" in a rule, even when you have to write it in a strange way to accommodate the local JNI_CLASS_NAME variable. Hmm... and that cp's not atomic either. Tsk tsk. I'll be back here.

bin/invoke-java.rb: Throw an exception, and hence a MessageBox (on similar) if the Java program we run fails, for example because Java or the JNI crashes. I've seen two crashes in as many weeks. Ron Pagani's was particularly nasty in that it looked like a Terminator installation problem. He double-clicked the desktop shortcut and "nothing happened".


2008-08-02 21:25:53 +0100 / enh / revision 2660

bin/blogger-backup.rb: this is also now one of the Talc demos, and serves no particular purpose here.


2008-08-02 21:10:55 +0100 / enh / revision 2659

bin/apt-suggest: I thought I removed this when it became one of the demo scripts for http://code.google.com/p/talc/ but it would appear not.


2008-08-02 18:57:29 +0100 / mad / revision 2658

native/Headers/reportArgValuesViaGui.h: That experiment successfully told us more about what's happened to Ken Wolcott's installation so let's make it permanent, renaming this file appropriately, ...

native/Headers/reportArgValues.h: ... removing the GUI reporting code that's already used by our caller...

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: ... and our new caller, which I see will display argv[0], so, for consistency, ...

native/all/ruby-launcher/ruby-launcher.cpp: ... we should do that here too.


2008-08-02 08:07:03 +0100 / mad / revision 2657

native/Headers/reportArgValuesViaGui.h: Split this in two, so we aren't constrained to report as a fatal error, but don't split the file in two as it's too painful to fight Subversion for an experiment...

native/all/ruby-launcher/ruby-launcher.cpp: ... in which I'd like to include the program's arguments in the error message, to try to diagnose what looks like a quoting problem that Ken Wolcott is reporting.


2008-07-31 05:43:50 +0100 / enh / revision 2656

src/e/util/StringHistory.java: thanks to NFS and this code, it can be quite painful to control-f search in Evergreen; every time the find field is dismissed, the editor locks up as the history is written to disk on the EDT:

2008-07-30T16:55:50.852-0700 Evergreen: (hang #81) event dispatch thread
stuck processing event for 1100 ms so far:
    java.io.FileOutputStream.open(Native Method)
    java.io.FileOutputStream.<init>(FileOutputStream.java:179)
    e.util.StringUtilities.writeFile(StringUtilities.java:52)
    e.util.StringUtilities.writeFile(StringUtilities.java:41)
    e.util.StringHistory.writeHistoryFile(StringHistory.java:100)
    e.util.StringHistory.add(StringHistory.java:51)
    e.edit.Minibuffer.addToHistory(Minibuffer.java:155)
    e.edit.Minibuffer.access$400(Minibuffer.java:9)
    e.edit.Minibuffer$3.keyPressed(Minibuffer.java:114)
    java.awt.Component.processKeyEvent(Component.java:5996)
    javax.swing.JComponent.processKeyEvent(JComponent.java:2794)
    java.awt.Component.processEvent(Component.java:5815)
    java.awt.Container.processEvent(Container.java:2058)
    java.awt.Component.dispatchEventImpl(Component.java:4410)
    java.awt.Container.dispatchEventImpl(Container.java:2116)
    java.awt.Component.dispatchEvent(Component.java:4240)
    java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848)
    java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:693)
    java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:958)
    java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:830)
    java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:657)
    java.awt.Component.dispatchEventImpl(Component.java:4282)
    java.awt.Container.dispatchEventImpl(Container.java:2116)
    java.awt.Window.dispatchEventImpl(Window.java:2429)
    java.awt.Component.dispatchEvent(Component.java:4240)
    java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    e.debug.EventDispatchThreadHangMonitor.dispatchEvent(EventDispatchThreadHangMonitor.java:191)
    java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    java.awt.EventDispatchThread.run(EventDispatchThread.java:121)


2008-07-30 22:41:44 +0100 / mad / revision 2655

Ramesh Tellamsetty's ssh keys got messed up and eventually his source code control license expired. The source code control program tried to revalidate his license by ssh()ing to the license server. ssh tried to ask for a password and caused the whole CheckInTool process group to be suspended. ssh tried to ask for the password by opening /dev/tty. We'd rather such attempts failed with:

martind@whitewater:~$ setsid cat /dev/tty
cat: /dev/tty: No such device or address
martind@whitewater:~$

bin/invoke-java.rb: Our setsid will be ahead of Linux's on the PATH within Terminator and Evergreen but it shouldn't matter to us if it isn't. Hmm... so, in Terminator windows, Linux's setsid will be hidden by ours, which doesn't behave the same way when run from eg the bash prompt (where the setsid program will be the process group leader)...

native/all/setsid/setsid.cpp: ... let's tell the baffled user where to come if that happens. Perhaps I should have used a different name. Argh!

This program used to be called setsid, though it has never previously called setsid. In the original discussions about this feature, we jibbed at the fork() in Rick Sladkey's setsid.c, and I wrote:

setsid creates a new "session" (whatever that is), a new process group (of

> which the calling process is the leader) and removes any controlling tty.  
> All we know we want is a new process group.  So I suggest this would better 
> reveal our intention:
...
> setpgid...

Now we know we'd like to remove the controlling tty too.

src/e/util/ProcessUtilities.java: Adapt to the renaming of setpgid and half-heartedly clarify a comment that baffled me.


2008-07-30 22:13:54 +0100 / mad / revision 2654

native/all/setsid/setpgid.cpp:
native/all/setsid/setsid.cpp: The third, non-atomic stage of a simple rename operation.


2008-07-30 22:09:27 +0100 / mad / revision 2653

And now remove the directory, non-recursively, so I'm having to do this via the command line.


2008-07-30 22:06:47 +0100 / mad / revision 2652

native/all/setpgid/setpgid.cpp:
native/all/setsid: Subversion won't let me make this change atomically, so you'll have to make do with a broken repository and no decent check-in comment for a few minutes. I hate you, Subversion.


2008-07-30 05:33:59 +0100 / enh / revision 2651

src/e/ptextarea/ExternalSearchItemProvider.java: no-one spoke up in favor of this functionality when it was disabled, versus two [including me] who were glad to see it go, so out it goes.


2008-07-30 02:07:17 +0100 / mad / revision 2650

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: Simplify the error message. We didn't used to get so many reports when we use to have the the Windows installer simply say "this program needs Cygwin and Cygwin Ruby".

native/Headers/reportFatalErrorViaGui.h: Move the instructions on how to report the error to the end, on the assumption that people were just reading the first line and obeying it without reading even to the third line.


2008-07-30 01:06:21 +0100 / mad / revision 2649

bin/ithaki.sh: Pay for the download only when we're making the Packages file that cares about the md5sums. It took some fighting with various rsync syntaxes but it turns out not to take much code, or time, or bandwidth.

lib/build/universal.make: That should be enough as long as we don't overwrite the build on the server when the version number hasn't changed. I've perhaps shortened the message too much. I hope that won't lead to anyone contriving to upload a .deb with the same version number as one that's already in a Packages file.

If you want to change the message, note that filter-build-output.rb requires these progress messages to be of the form "Verbing blah...", so you can't just stick in a "Not ", at least not without complicating that script too.

As ever, with nightly build changes, this is only partly tested.


2008-07-29 22:14:58 +0100 / mad / revision 2648

lib/build/universal.make: Anyone who tries to use any of the rules related to installers on a RedHat box is quickly going to realize that they don't have the Debian packaging tools that we depend on. You can't even use "make install" to install a .rpm file that you made on Debian because of the bogus .app target. Perhaps a code-comment is a more appropriate place to record the difficulties that anyone wanting to do that would have to surmount, rather than expecting anyone to read beyond the third word of the previous output.

Be more consistent about "Running" messages.


2008-07-29 21:52:40 +0100 / mad / revision 2647

lib/build/universal.make: In rules where we cd, we sometimes have to make absolute paths from $< and $@. Cope with the situation we're they're already absolute. Fixes the failure below and another probable instance for Windows:

martind@whitewater:~/software.jessies.org/work/terminator$ make installer
Building Debian file system tree for Terminator...
Creating GNU/Linux .deb package...
Creating GNU/Linux .rpm package...
mkdir -p /home/martind/software.jessies.org/work/terminator/.generated/amd64_Linux/bin && \
rm -f /home/martind/software.jessies.org/work/terminator/.generated/amd64_Linux/bin/org.jessies.terminator-5.158.2645-2.x86_64.rpm && \
cd /home/martind/software.jessies.org/work/terminator/.generated/amd64_Linux/bin && \
fakeroot alien --to-rpm /home/martind/software.jessies.org/work/terminator//home/martind/software.jessies.org/work/terminator/.generated/amd64_Linux/bin/org.jessies.terminator_5.158.2645_amd64.deb
File "/home/martind/software.jessies.org/work/terminator//home/martind/software.jessies.org/work/terminator/.generated/amd64_Linux/bin/org.jessies.terminator_5.158.2645_amd64.deb" not found.
make[1]: *** [/home/martind/software.jessies.org/work/terminator/.generated/amd64_Linux/bin/org.jessies.terminator-5.158.2645-2.x86_64.rpm] Error 2
make[1]: Leaving directory `/home/martind/software.jessies.org/work/terminator'
make: *** [recurse] Error 1
martind@whitewater:~/software.jessies.org/work/terminator$


2008-07-29 21:43:34 +0100 / mad / revision 2646

lib/build/universal.make: package-for-distribution.rb expects relative filenames in the installer-file-list. The makefile knows the prefix it used to make them absolute, so the makefiles is perhaps the right place to remove said prefix. Fixes just the first problem with making the installer - another change to follow:

martind@whitewater:~/software.jessies.org/work/terminator$ make installer
Building Debian file system tree for Terminator...
about to copy /home/martind/software.jessies.org/work/terminator/.generated/amd64_Linux/lib/libpty.so to /home/martind/software.jessies.org/work/terminator/.generated/amd64_Linux/lib/libpty.so
/usr/lib/ruby/1.8/fileutils.rb:1378:in `fu_each_src_dest': same file: /home/martind/software.jessies.org/work/terminator/.generated/amd64_Linux/lib/libpty.so and /home/martind/software.jessies.org/work/terminator/.generated/amd64_Linux/lib/libpty.so (ArgumentError)
from /usr/lib/ruby/1.8/fileutils.rb:1395:in `fu_each_src_dest0'
from /usr/lib/ruby/1.8/fileutils.rb:1377:in `fu_each_src_dest'
from /usr/lib/ruby/1.8/fileutils.rb:382:in `cp'
from /home/martind/software.jessies.org/work/salma-hayek/lib/build/package-for-distribution.rb:192:in `copy_files_for_installation'
from /home/martind/software.jessies.org/work/salma-hayek/lib/build/package-for-distribution.rb:177:in `each_line'
from /home/martind/software.jessies.org/work/salma-hayek/lib/build/package-for-distribution.rb:177:in `copy_files_for_installation'
from /home/martind/software.jessies.org/work/salma-hayek/lib/build/package-for-distribution.rb:221
make[1]: *** [terminator.app] Error 1
make[1]: Leaving directory `/home/martind/software.jessies.org/work/terminator'
make: *** [recurse] Error 1
martind@whitewater:~/software.jessies.org/work/terminator$


2008-07-29 19:46:57 +0100 / mad / revision 2645

lib/build/universal.make: The absolute-to-relative cleverness isn't working for me today on Windows. I change cygwin-launcher.cpp, to try to improve the failure message, and nothing recompiles. I don't know why not and the grindingly slow fork performance on my Windows box today makes me think that perhaps it's just due for a reboot. But changing BIN_DIRECTORY and LIB_DIRECTORY to be absolute paths is perhaps a cheaper solution to the same problem and that does work, today, for me, on Windows.


2008-07-28 18:52:58 +0100 / mad / revision 2644

lib/build/per-directory.make: Reapply r2637, minus the FIXME...

lib/build/universal.make: ... for which a simple solution occurs today. This should also let Elliott build salma-hayek from clean. I can see how that might have been broken previously, though it was working for me by (bad) luck.

My goal with the per-directory.make change was to tell make to compile java-launcher.cpp, if it's been changed, before using it via javahpp. That missing dependency became apparent with the addition of JNI to salma-hayek, when I was investigating our behavior on Windows when Java crashes, as it was doing repeatedly for Ron Pagani the other day.


2008-07-28 07:07:14 +0100 / enh / revision 2643

lib/build/per-directory.make: reverting r2637; I think mad underestimated the extent to which the missing dependency "doesn't work" — it doesn't just fail to do anything useful, it actually breaks the build for any project that uses JNI:

make[1]: *** No rule to make target `/home/elliotth/Projects/salma-hayek/.generated/amd64_Linux/bin/java-launcher', needed by `/home/elliotth/Projects/salma-hayek/.generated/native/all/salma-hayek/amd64_Linux/new/e_util_FileUtilities.h'. Stop.


2008-07-28 06:46:42 +0100 / enh / revision 2642

src/e/util/NumberDecoder.java: while I'm still thinking about this code, fix things so I hopefully waste less time manually counting out digits, and note some other improvements that might be nice.


2008-07-28 00:36:49 +0100 / enh / revision 2641

www/footer.html:
www/styles.css: remove the least useful part of the footer, and move stuff about to make better use of the newly-freed space.


2008-07-28 00:20:26 +0100 / enh / revision 2640

www/footer.html: car suggests removing the mention of SparseZone in the footer.


2008-07-27 01:01:24 +0100 / enh / revision 2639

src/e/ptextarea/PTextArea.java: although base conversion on the pop-up menu has been a reasonably successful experiment, I think the "search items" have been a failure. Let's remove them from the UI, and if there's no backlash, we can remove the implementation shortly.


2008-07-27 00:47:01 +0100 / enh / revision 2638

src/e/gui/EPopupMenu.java: move the code implementing Terminator's decoding of numeric selections into EPopupMenu, so it can be used elsewhere.


2008-07-25 22:29:22 +0100 / mad / revision 2637

lib/build/per-directory.make: Add a missing dependency... which doesn't work. I don't have time today to fix the reason, so leave myself a comment.


2008-07-25 21:27:09 +0100 / enh / revision 2636

src/e/forms/FormDialog.java: it may look like it, but this isn't a reversion of the last change to this code. The last change was correct and in the style of the rest of the code, but it missed another (less important) instance of the same mistake, and I think the existing style is a historical mistake. Once upon a time, we'd create a new JDialog each time we needed to show the form. Now we re-use one for performance, but the lack of a proper split between one-off dialog configuration and every-time configuration has led to these kind of too-many-listener mistakes. This patch introduces the split, and changes some names to make the split more visible: "init" methods are now just for one-off configuration.


2008-07-25 04:52:07 +0100 / mad / revision 2635

src/e/forms/FormDialog.java: Remove the ComponentListener that we added before re-adding what's probably the same listener. Every time Gaurav brought up the Open Quickly box, a couple of screenfuls of log messages went passed, telling us that it taken a few seconds to search the filenames. Each time he did it, one more would appear than on the previous occasion. His Evergreen had been started a couple of weeks ago. He'd been happy enough assuming that he was just running low on memory (he wasn't) but the performance was bad enough to send the Holtocoaster into a paroxysm of swearing when he went over to review a patch.

Even with this fix, I think there's still something wrong with Open Quickly. I think I had Open Quickly refuse to show me any matches once this afternoon but I got distracted before I could investigate.


2008-07-25 00:55:04 +0100 / mad / revision 2634

www/cygwin-setup.html: Try to draw the eye to the resolution for the problem that Ron and I were getting. We thought we knew better than to re-read the instructions carefully.


2008-07-25 00:46:23 +0100 / mad / revision 2633

www/cygwin-setup.html: The list you have to navigate down to install these packages is, if you follow our instructions in the paragraph above, in alphabetical order. It would help if our list were similarly ordered.


2008-07-24 05:09:20 +0100 / enh / revision 2632

src/e/ptextarea/PTextArea.java: stop trying to store two things (whether we're using a fixed font, and what column position the margin should be at) in one field...

src/e/ptextarea/FileType.java: ...so we can give users full control over what margins, if any, they see in different kinds of file.


2008-07-24 04:19:01 +0100 / enh / revision 2631

src/e/ptextarea/FileType.java:
src/e/ptextarea/PProtoTextStyler.java: now Google's protocol buffers are open-source (http://code.google.com/p/protobuf), we don't need to keep holding our breath for support for user-defined file types, and can just add a code-based version of the only I'd personally have a use for.


2008-07-24 03:55:32 +0100 / enh / revision 2630

src/e/ptextarea/FileType.java: alphabetical order, practiced since cuneiform, still causes difficulties.


2008-07-22 16:33:28 +0100 / mad / revision 2629

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: Having seen how the error message looks, this would be an improvement. Perhaps I took the wrong choice with the previous check-in, using the same message for not being able to find Cygwin Ruby as for Cygwin - it's long and partly irrelevant if we found Cygwin. But then the link to the setup hints could be useful and it was less code than the alternative. Let's see how it goes.


2008-07-22 16:24:15 +0100 / mad / revision 2628

LC Spencer demonstrates that the error we throw when Ruby isn't found needs to be as easily understood as it once was and as our error when we can't find Cygwin again seems to be.

native/all/ruby-launcher/ruby-launcher.cpp: We only invoke this program in one place, where we give it the full path to rubyw, so there's no point in causing the C runtime the overhead of execvp over execv, and no point in muddying the waters of the error message with the suggestion that we might need to do a path search.

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: Add a couple of .exe extensions, just in case execv without the p doesn't and so that we can use checkReadableFile to throw an error if Cygwin Ruby is missing. Move the verbiage that details our Cygwin and Cygwin Ruby requirements higher up, so that it will be output for any exception, not just ones encountered trying to find Cygwin's bin directory.

I haven't tried to compile this, let alone run it or test it in any way.


2008-07-17 20:21:16 +0100 / mad / revision 2627

bin/invoke-java.rb: The BlueArc QA users have quite often bitched about running out of memory on their Linux boxes and how performance is horrible when they have many Terminator windows with lots of scrollback. I experimentally set @heap_size to 100m on one of them. Results from this unscientific experiment aren't yet in but I'm wondering how we can do anything with them when they do come in.


2008-07-17 17:31:36 +0100 / mad / revision 2626

lib/build/per-directory.make: The appending of the --subsystem windows flag broke with my change the other day to LOCAL_LDFLAGS. I haven't rigorously understood why but it will be related to the target-specificity of this variable. We don't actually need that. It's been a long time since we built any Windows executable files that were for the console (default) subsystem.

lib/build/universal.make: So we can just specify the flag for all Cygwin executable files. Hmm, I imagine this will now apply to pty.dll too, but it seems to have no bad effect (and perhaps no effect at all).

This removes the two spurious console windows that Theo Hopman reported spewing forth when he double clicked on a newly installed Terminator desktop shortcut.


2008-07-16 05:51:28 +0100 / enh / revision 2625

src/e/util/FileUtilities.java: make fileFromParentAndString behave more like fileFromString, as intended. Duplicate the comment (rather than just omitting the usual blank line between methods) to make the intention clearer.


2008-07-14 05:13:43 +0100 / enh / revision 2624

bin/ssi.rb: a quick hack to fix local previews now I've removed the hack from "header.html", where it was causing incorrectness on the live site.


2008-07-14 04:28:45 +0100 / enh / revision 2623

www/generated_toc.js: add a to-do. I've been back and forth several times about whether or not to go with this script, especially given this limitation, but it still seems like the way forward, even if we're not there yet. The table of contents it adds to the Terminator FAQ is fairly convincing, and none of us wants to maintain such a thing by hand.


2008-07-14 04:20:06 +0100 / enh / revision 2622

www/header.html: remove the hack added for the benefit of local testing that's actually been breaking the on-the-web content. The hack will probably have to go in ssi.rb (since living without the ability to preview changes, even if it's a somewhat flawed preview, would be too harsh).


2008-07-14 04:15:00 +0100 / enh / revision 2621

www/header.html: make the new script available on all pages.

www/cygwin-problems.html:
www/cygwin-setup.html:
www/ubuntu-setup.html: and use it on those pages that would benefit.


2008-07-14 04:09:23 +0100 / enh / revision 2620

www/generated_toc.js: remove the bits we don't want.


2008-07-14 04:02:12 +0100 / enh / revision 2619

www/generated_toc.js: add details of this file's license and where to get the original.


2008-07-14 04:00:03 +0100 / enh / revision 2618

www/generated_toc.js: import Stuart Langridges's JavaScript table-of-contents generator, available under an X11 license from http://www.kryogenix.org/code/browser/generated-toc/. (I'll add that to this file in the next revision, but wanted an unadulterated copy first.)


2008-07-13 23:49:05 +0100 / mad / revision 2617

lib/build/universal.make: Reorder the shared library flag section a little, losing the JNI_LIBRARY_LDFLAGS assignments to more general purpose variables...

lib/build/per-directory.make: ... where we know what sort of target we're building. Add -arch x86_64 when linking JNI. Do the same when compiling JNI, adding the necessary infrastructure by analogy with the just-revamped LOCAL_LDFLAGS infrastructure.

This might let Terminator load its JNI library when running under Mac OS X 10.5 with the Java 6 option enabled. It didn't before, John Russell reports, and teh intarnets lead me to think that 10.5's Java 6 option might involve a 64 bit JVM.


2008-07-13 22:44:49 +0100 / mad / revision 2616

lib/build/per-directory.make: Avoid evaluating LDFLAGS before running the linker rule. It's always been distressing that we previously couldn't use automatic variables (like $@) in LDFLAGS because we make use of that capability in a couple of places for C_AND_CXX_FLAGS. One of those places (relating to PURE (ie non-Objective) C and C++ flags) has passed the test of time.


2008-07-13 21:59:02 +0100 / mad / revision 2615

lib/build/per-directory.make: We're using Cocoa from C++ as well as Objective-C++ source, so we're already linking with the Cocoa framework even when not BUILDING_COCOA (which perhaps should be renamed... but, looking at the rules, perhaps not).

Move the clearing of the BUILDING_SHARED_LIBRARY variable up to where the comment says it belongs. I'm still not sure these local variables are working out... but that's not stopping me from considering adding to them.


2008-07-13 21:28:50 +0100 / mad / revision 2614

lib/build/universal.make: Move the definition of PREVIOUS_BASE_NAME closer to its usage. It's mind-bending enough even when it's on one screen.

lib/build/per-directory.make: Define BASE_NAME before using LDFLAGS, so we can report a reasonable error message in case that anyone is rash enough to try, for example, to reference $(SOURCES) from $(universal_binary_flags).


2008-07-12 04:25:31 +0100 / enh / revision 2613

src/e/ptextarea/PMouseHandler.java: mention the possibility of inverting the default behavior with embedded links, and some of the issues, even if it's too much work for too little benefit to get done in the near future.


2008-07-09 18:50:01 +0100 / mad / revision 2612

src/e/ptextarea/PLineList.java: Deleting the first half, which amounted to 16 MB and half a million lines, of a large log file took 20 minutes and, during that time, locked up so thoroughly (with 100% CPU utilization) that jstack and jstack -F wouldn't work. Performing the same edit on the same file with this change completed in no more than a handful or seconds.


2008-07-09 05:27:32 +0100 / enh / revision 2611

src/e/ptextarea/PActionFactory.java: the plumbing for a "Find Matching Bracket" menu item.


2008-07-08 07:14:06 +0100 / enh / revision 2610

src/e/ptextarea/PMouseHandler.java: the recent changes were broken in that we could end up calling updateCursorAndToolTip before the mouse had ever entered the text area, causing a NullPointerException...

src/e/ptextarea/PKeyHandler.java: ...and we were calling updateCursorAndToolTip in far too many cases, causing the mouse cursor to flash on and off as the user types. We're only interested in notification when the control key is pressed or released.


2008-07-07 01:09:51 +0100 / enh / revision 2609

src/e/ptextarea/PKeyHandler.java:
src/e/ptextarea/PMouseHandler.java:
src/e/ptextarea/PTextArea.java: make it possible to position the caret in a hyperlink without following the link by holding down the control key. I was sure I'd done this long ago, and was surprised to find it didn't work during the week. There's no sign of any attempt to solve the problem in the code, so presumably it was Terminator, when that had links? Anyway, this implementation even ensures that the mouse cursor isn't the "hyperlink hand" when control's down, to give added reassurance that the right thing is about to happen.


2008-07-06 20:35:13 +0100 / enh / revision 2608

src/e/ptextarea/PKeyHandler.java: I'm not sure only counting keystrokes that insert characters for pointer-hiding is the right thing to do, but it's what, say, gedit(1) does, and it does fix the unintentional behavior where just pressing a modifier key (which may have been intended to modify a mouse event rather than a key event) hides the pointer. I could trivially be persuaded that removing characters should also count, though. (But what about C-X? Or C-Z?) I'm less sure about moving the caret/changing the selection.


2008-07-05 22:40:49 +0100 / enh / revision 2607

src/e/ptextarea/PKeyHandler.java: as a recovering vi(1) user, I still sometimes find myself annoyed that while Evergreen will show me a matching bracket, it won't let me jump to or select to that matching bracket without switching to the mouse. Add a vi(1)-inspired control-(shift-)5 function.


2008-07-03 22:21:34 +0100 / mad / revision 2606

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: Lee Hope Mcc confirms my previous suspicion that we need this error message to more constructively cover the case where Cygwin isn't installed.


2008-06-25 17:24:08 +0100 / mad / revision 2605

lib/build/package-for-distribution.rb: In what way did I think I'd fixed the bug introduced by my replacing of a (non-atomic) cp with mv in the terminfo generation rule? Before the change here, we installed /usr/share/terminfo/terminator - with no /t/. My prior comment about "not running into the 74 issue" was wrong too - "?/*" wouldn't ever match "74/terminator" - although I was (probably) right that this isn't run on Mac OS anyway.

Don Satow ran into this.


2008-06-24 00:40:04 +0100 / mad / revision 2604

bin/invoke-java.rb: The code to act on RUBY_LAUNCHER_INVOKING can never have worked. The only reason it can have given the impression of working is that in the in-app client hasn't been working for Windows for ages.

bin/show-alert.rb: If I put it here, then it does work, although this code isn't anything to do with reporting exceptions. "launch" was a better name for its home. "launch" and "launch0" give the impression that the intention was for eg Terminator to sub-class invoke-java.rb's Java class. Perhaps that would be the cleaner solution, though I'm not a fan of derivation except for interface implementation.


2008-06-23 22:05:53 +0100 / mad / revision 2603

src/e/util/InAppServer.java: On Linux, Ruby seems able to connect(2) to 0.0.0.0, which was what we were writing into edit-server-port. On Windows, it throws EADDRNOTAVAIL, perhaps not unreasonably. The intention of this code, in the case where we're binding to INADDR_ANY, was to write the host name into the file, so you could run bin/evergreen from another machine and have it throw the file into the Evergreen running on your primary desktop. That obviously hasn't been working on any platform for quite some time.

This code has two callers and only one passes in null. We could move this code into that caller. I don't want to do that because INADDR_ANY would be a better address to listen on for a multi-homed host, even if we don't choose to write all of its addresses into the server-port file.


2008-06-23 20:15:22 +0100 / mad / revision 2602

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: Expand a comment that caused some discussion.


2008-06-23 20:13:09 +0100 / mad / revision 2601

lib/build/file-list-to-wxi.rb: Here's the working code to create an advertised shortcut... but effectively commented-out because...

lib/build/installer.wxs: ... the thread at the URL here suggests that an advertised shortcut can't be made optional. That plus the desire to let end users tinker with the shortcuts is sufficient to make me lean towards keeping the gruesome HKCU hack which, as well as being the code we've used for a long time, is also the suggestion at the end of that thread.


2008-06-23 20:08:29 +0100 / mad / revision 2600

TODO: Elliott made me think about "Edit with Evergreen" and realize that perhaps there is a practical way. I'm sure, though, that it won't be a straightforward extension of what's there for "Open Terminator Here".


2008-06-23 20:03:06 +0100 / mad / revision 2599

lib/build/universal.make: It's mildly irksome to claim to still be "Creating Windows installer" when we're actually running it.


2008-06-23 19:10:22 +0100 / mad / revision 2598

lib/build/installer.wxs: Don't install any "Open Evergreen Here" context menu hooks.


2008-06-23 18:38:28 +0100 / mad / revision 2597

lib/build/installer.wxs: Removing the conditions requires removing one of the copies of the shortcut code, so I may as well go the whole hog in this check-in and remove all that hard-won, duplicated, registry and directory searching code. Finally, paydirt - the code for doing this, which has caused so many problems, is now under our control, not to mention comprehension. It's more complicated now, but I'm not actually sure it's any longer and it sure as hell was easier to write and debug.

lib/build/universal.make: Now we only need to take one GUID into the shower for the shortcut.


2008-06-23 18:23:13 +0100 / mad / revision 2596

lib/build/installer.wxs: We haven't needed the desktop shortcuts to start in the Cygwin bin directory since we started using a Mingw launcher. It looks like Orca is happy without any value in the registry entries that we have to create to stop it from whining about non-advertised shortcuts.

This change removes the last users of these properties apart from the installation conditions.


2008-06-23 18:11:34 +0100 / mad / revision 2595

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: Teach this program to find Cygwin by itself. I output a much more detailed error message than the installer used to. I'm not sure whether that's a feature but it certainly seems a good idea until this beds in.

native/Headers/WindowsError.h: The registry functions are unusual in that they return an error code rather than using the GetLastError idiom.

native/all/java-launcher/java-launcher.cpp: Fix a comment that pointed a misleading finger at Cygwin. I suspected it was Windows all along.

lib/build/installer.wxs: cygwin-launcher no longer takes the Cygwin bin as its first argument, fixing open-here for per-user installations and removing some comment-worthy confusion that tripped me up twice.


2008-06-23 17:50:15 +0100 / mad / revision 2594

lib/build/universal.make: Actually, while I'm there, cp isn't atomic and is therefore not ever fit for use in writing to $@. Rename-over-existing isn't atomic on Windows but the only possible non-atomic failure mode leaves the target file missing, which make will cope with just fine. This also removes a window of opportunity where we could be killed while the target file was writeable.


2008-06-23 17:45:27 +0100 / mad / revision 2593

lib/build/universal.make: I can't think of a sane way of getting throwback to work on Windows but I can at least make it much harder for me to edit the generated copy of the file, thus inevitably losing my changes.


2008-06-23 07:13:04 +0100 / enh / revision 2592

lib/build/patch-to-html-email.rb: set executable bit in Subversion, which is too "clever" to pay attention to chmod(1).


2008-06-23 07:02:02 +0100 / enh / revision 2591

lib/build/escaping.rb: this script isn't executable, so shouldn't start with a #! line.


2008-06-23 06:54:14 +0100 / enh / revision 2590

lib/build/package-for-distribution.rb: add the new "Homepage" field.


2008-06-23 06:52:28 +0100 / enh / revision 2589

lib/build/package-for-distribution.rb: change the "Maintainer" field slightly to keep lintian(1) happy.


2008-06-22 22:54:09 +0100 / mad / revision 2588

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: This function's getting too large and extra white space isn't a good solution.


2008-06-22 22:42:38 +0100 / mad / revision 2587

lib/build/installer.wxs: There's more detail on this in the Terminator TODO file but this will definitely seem like a bug to my future self, so it definitely deserves a code comment.


2008-06-22 22:02:02 +0100 / mad / revision 2586

lib/build/installer.wxs: I have to switch to another computer in a minute, so in this goes, only half-baked. There are three things wrong with this - the HKLM-specificity noted in the code comment, that we don't want this for Evergreen, and that it generates Orca warnings as noted in the TODO file. The HKLM issue could be worked around with duplication, as everywhere else in installer.wxs, but I'm hoping this will be the final straw in pushing me to write the registry searching code to find cygwin1.dll from cygwin-launcher. The Evergreen thing will want some more code, which should probably take into account that we might like to use something similar for CheckInTool but not for RevisionTool, which could conceivably make use of something not entirely unrelated but significantly different. The Orca warnings I think I will "address" by moving that part of the TODO note into a code comment here.


2008-06-19 09:32:13 +0100 / mad / revision 2585

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: No, it *does* include a trailing backslash...

lib/build/installer.wxs: ... and because this is all just macro substitution, the backslash gets to escape the quote after it. What a nightmare. At least I know how to write XML comments now.


2008-06-19 09:23:58 +0100 / mad / revision 2584

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: Ah, that wasn't an incorrectly escaped quote, it was a backslash. Still, it did look like a mistake and the code here that it was pandering to could easily play safer.


2008-06-19 09:01:56 +0100 / mad / revision 2583

lib/build/file-list-to-wxi.rb: Shortcuts and shell extensions are seemingly typically created immediately after the File to which they refer and must, in some cases, be inside the same Component. I used this hook several times this evening in various experiments and I expect I'll use it again.

lib/build/installer.wxs: Skeletal support for an open-here feature. I tried a couple of ways of filling in this Component this evening. I suspect I'll be back.

lib/build/universal.make: Open-here requires another random number.

You know, all this, and the non-maintainability of the HKLM and HKCU variants of the code in that .wxs file make me think that I should have one Ruby script that generates the whole thing. I suspect it'd be more readable and it'd certainly be better commented.

I'm also about to check-in the Terminator TODO file with some related .wxs snippets for revisiting on another evening...


2008-06-18 04:20:40 +0100 / mad / revision 2582

www/cygwin-problems.html: While looking at my previous changes, I see we were claiming that NT 3.5x and NT 4 used UTF-16, when they actually used UCS-2. UTF-16 came in with Windows 2000. Yes, UTF-16 and UCS-2 are closely related but we shouldn't give out misinformation.


2008-06-18 04:15:48 +0100 / mad / revision 2581

www/cygwin-problems.html: Adam Jones and Ron Pagani recently reminded us of the reason we note in our Cygwin Setup page that inetutils is the package containing telnet. I don't know why Microsoft telnet doesn't like being started from a Cygwin terminal, but it's not a Terminator-specific issue. It can be started (in a new window) via at least one Cygwin program - cygstart - but that looks to have special support in the Cygwin DLL for starting children in some kind of detached mode.


2008-06-18 00:59:12 +0100 / mad / revision 2580

native/all/salma-hayek/e_util_FileUtilities.cpp: The usual stanza, this time with a code-comment, so I don't have to trawl the glacially slow svn history to find out, and this time for sure, that the only reason for it is (at least arguably) a bug in one of Sun's JNI headers.


2008-06-17 16:46:14 +0100 / mad / revision 2579

native/all/salma-hayek/e_util_FileUtilities.cpp: The intention was clearly to stat the link itself, not the target. As well as actually working now(!), this is faster and doesn't produce a torrent of spurious errors when it sees dangling links (which was what first alerted me to the bug).


2008-06-17 05:15:46 +0100 / enh / revision 2578

bin/invoke-java.rb: add any salma-hayek native library directories to the library search path.

native/all/salma-hayek/e_util_FileUtilities.cpp: a new library implementing FileUtilities.nativeIsSymbolicLink until Java 7 gives us something with equivalent performance (as part of JSR-203).

src/e/util/FileUtilities.java: keep the slow heuristic code in case we can't load the JNI library, but prefer the JNI library.


2008-06-17 04:23:56 +0100 / enh / revision 2577

native/all/salma-hayek: add a directory.


2008-06-15 06:26:45 +0100 / enh / revision 2576

bin/download-latest-jdk.rb: this script no longer works; I'm still maintaining the Talc version, a fix for which I've just committed to the Talc repository, but hereby give up on the Ruby version.


2008-06-15 02:38:28 +0100 / enh / revision 2575

src/e/util/FileSearcher.java: add an intention-revealing "final" (unrelated to performance).


2008-06-15 02:31:49 +0100 / enh / revision 2574

src/e/util/FileSearcher.java: document a failed attempt at optimization.


2008-06-09 08:35:30 +0100 / mad / revision 2573

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: SetDllDirectory was a nice idea but it only exists on recent versions of Windows. Then I ran into a piffling limit on the size of a shortcut target, the most expedient solution for which, distressingly, means that cygwin-launcher has to gain some knowledge about what it's launching. Given it needs to know something about ruby-launcher, I think it may as well know about rubyw too. As if that weren't enough, I then (re)discovered that the arguments containing spaces in the argument vector passed to execv and friends must, on Windows, be quoted by the application passing them.

native/all/ruby-launcher/ruby-launcher.cpp: Tracking that down required ruby-launcher to report which arguments it had been passed, which of course it can't do except via the GUI.

native/Headers/reportArgValuesViaGui.h: I used the same code in cygwin-launcher while debugging it, so a header file seems the right place.

native/Headers/checkReadableFile.h: Commented-out debugging code that we might need again is dubious at best, so let's try checking that ruby-launcher been passed a readable file as its argument. One day, perhaps we'll want more flexibility but we seem to see more problems where the Windows shortcut "doesn't do anything" than almost any other sort of problem, so perhaps some extra effort is due.

lib/build/installer.wxs: Tidy up some superfluous backslashes, some forward slashes that should (for consistency at least) be backslashes and an oddly indented XML tag that's irked me before. Quote the first argument we pass to the shortcut target as well as the second, as quoting seems to be our responsibility and there's no reason I know of why you couldn't install Cygwin under, say, "Program Files" - a directory whose name contains a space. Confusingly, this requires we add an extra backslash to avoid the quoting the closing quote.


2008-06-09 05:32:57 +0100 / enh / revision 2572

src/e/forms/FormDialog.java: move a possible FIXME here from Evergreen's to-do list.


2008-06-08 05:34:38 +0100 / enh / revision 2571

src/e/util/TimeUtilities.java: FindBugs complains of potential concurrent calls to a non-thread safe DateFormat. Add synchronization.


2008-06-08 02:34:04 +0100 / mad / revision 2570

lib/build/universal.make: Write quite a bit of extra code so we can do without the comment about the harmlessness of the duplication when we run findbugs in salma-hayek. Remove the $(addprefix) complexity in the findbugs rule, and where it was copied from. I presume the original reason was that the argument might be empty. It's not now and doesn't seem likely to be again.

The extra colon on the end of auxclasspath happens when EXTRA_JARS ends in a space, because the last wildcard to be appended evaluates empty. makeNativePath can strip trailing spaces and solve that more widely. Evaluate the wildcard immediately, as usual, so we minimize the file system chatter.

lib/build/filter-build-output.rb: I was going to ask what findbugs's output looks like, thinking that if it doesn't generate any warnings, we wouldn't want to see it. Well, there doesn't seem much danger of it not generating any warnings. They look easy enough to spot, especially the warning counter at the end. There are several other approaches we could use to solve this sort of problem but, while we're just generating things that really do look like compiler warnings, I think I'll stick to the existing mechanism. exit 1 was, though, a good (clean, simple) hack. I'm tempted to change the echo.% rule to work that way too.


2008-06-08 00:27:35 +0100 / enh / revision 2569

lib/build/universal.make: add FindBugs' -auxclasspath switch.


2008-06-07 07:13:14 +0100 / enh / revision 2568

lib/build/universal.make: add a half-baked rule for running findbugs, in the hope that the Make pixies will bake the more complicated half.


2008-06-07 06:53:00 +0100 / enh / revision 2567

lib/build/universal.make: minor changes to the GCJ hack I use for building a stand-alone Talc binary.


2008-06-07 05:19:15 +0100 / enh / revision 2566

src/e/util/SpellingChecker.java: FindBugs points out we're not checking readLine doesn't return null.


2008-06-07 04:58:34 +0100 / enh / revision 2565

src/e/gui/HelpMenu.java:
src/e/ptextarea/PTextAreaSpellingChecker.java:
src/e/ptextarea/PWrappedSegmentIterator.java:
src/e/toys/world/SolarProjector.java: FindBugs complains about inner classes that could be static but aren't.


2008-06-07 04:51:33 +0100 / enh / revision 2564

src/e/util/InAppServer.java: FindBugs complains about use of "new Long", suggesting Long.valueOf instead, but since we're actually just trying to convert a long into a String, it's really Long.toString we want.


2008-06-07 04:46:31 +0100 / enh / revision 2563

src/e/util/LazyStringSelection.java: FindBugs spots incorrect synchronization.


2008-06-07 04:44:37 +0100 / enh / revision 2562

src/e/forms/FormDialog.java: FindBugs dislikes the comparison with Boolean.TRUE (because Boolean, stupidly, has a public constructor). Our code is correct, but relying on auto-unboxing instead is correct in the presence of code using the Boolean constructor, and shorter.


2008-06-06 06:29:43 +0100 / enh / revision 2561

src/e/ptextarea/FileType.java: improve a method name and some documentation.


2008-06-06 06:23:03 +0100 / enh / revision 2560

src/e/ptextarea/FileType.java: another bit of tuning to the file-type heuristics so that (amongst other things) a Ruby script containing "#ifdef" won't be assumed to be C++.


2008-06-02 03:08:30 +0100 / mad / revision 2559

lib/build/package-for-distribution.rb: Fix the build breakage I introduced yesterday, which only affected builds of the Terminator installer from clean. I suppose looking for files to include in the installer can use a glob without picking up obsolete files, as the installer should be built from clean, although I didn't make clean before checking that make install still worked yesterday. But I think I only tried that on Cygwin anyway, where this code isn't run. We were installing the copy of terminator's terminfo from the "t" subdirectory. Everywhere else, we use the copy we make of it in the parent directory, to avoid having to know whether we should use "t" or, on Mac OS, "74". The code here only gets executed on Linux and Solaris, which is why we haven't run into the "74" issue. Let's use the copy from the parent directory here too. If we do the same as everyone else, then we won't be the only victim when someone changes what he thinks are just internal implementation details of that make rule. I can't be making this change twice (and then perhaps fixing it twice), so I'll have to collapse that part of the Solaris-induced duplication.

Fixes:

/usr/lib/ruby/1.8/fileutils.rb:1039:in `read': Is a directory - .generated/terminfo/t (Errno::EISDIR)
from /usr/lib/ruby/1.8/fileutils.rb:1039:in `fu_copy_stream0'
from /usr/lib/ruby/1.8/fileutils.rb:1247:in `copy_file'
from /usr/lib/ruby/1.8/fileutils.rb:1246:in `open'
from /usr/lib/ruby/1.8/fileutils.rb:1246:in `copy_file'
from /usr/lib/ruby/1.8/fileutils.rb:1245:in `open'
from /usr/lib/ruby/1.8/fileutils.rb:1245:in `copy_file'
from /usr/lib/ruby/1.8/fileutils.rb:459:in `copy_file'
from /usr/lib/ruby/1.8/fileutils.rb:383:in `cp'
from /usr/lib/ruby/1.8/fileutils.rb:1379:in `fu_each_src_dest'
from /usr/lib/ruby/1.8/fileutils.rb:1395:in `fu_each_src_dest0'
from /usr/lib/ruby/1.8/fileutils.rb:1377:in `fu_each_src_dest'
from /usr/lib/ruby/1.8/fileutils.rb:382:in `cp'
from /u1/home/mad/software.jessies.org/work/salma-hayek/lib/build/package-for-distribution.rb:215:in `copyTerminfoTo'
from /u1/home/mad/software.jessies.org/work/salma-hayek/lib/build/package-for-distribution.rb:208:in `each'
from /u1/home/mad/software.jessies.org/work/salma-hayek/lib/build/package-for-distribution.rb:208:in `copyTerminfoTo'
from /u1/home/mad/software.jessies.org/work/salma-hayek/lib/build/package-for-distribution.rb:306
make[1]: *** [terminator.app] Error 1


2008-06-01 22:27:44 +0100 / mad / revision 2558

native/Headers/WindowsError.h: Make the, as yet not fully implemented, Windows equivalent of unix_exception available to other programs, specifically cygwin-launcher with an eye to its need for calling SetDllDirectory. Providing a class with the same name in the case that we're not on Windows keeps the using code simpler and keeps the included headers as similar as possibly across platforms.

native/all/java-launcher/WindowsDirectoryChange.cpp: I've changed the macro guards in WindowsError's original location to refer to __MINGW32__ too, because I don't see any reason why it wouldn't compile for that target.


2008-06-01 22:02:17 +0100 / mad / revision 2557

native/Headers/reportFatalErrorViaGui.h: cygwin-launcher wasn't going down the MessageBox route because __CYGWIN__ isn't defined for Mingw builds.

native/Headers/WindowsDllErrorModeChange.h: This will also affecting cygwin-launcher (though I haven't tested it).

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: A lengthy investigation of the history of this now obviously incomplete stanza for including windows.h leads me to conclude that if and when we really do need to include it first, we'll see a compilation error. I'll treat it as a normal #include here. I need no OS guard because this directory is for Windows-specific source. I will eventually need windows.h for the SetDllDirectory call.


2008-06-01 21:23:43 +0100 / mad / revision 2556

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: A (blech) copy-and-paste of the parts of ruby-launcher.cpp that we want here, namely the WindowsDllErrorModeChange and the message box error handling for the case where we can't start the Cygwin program. The only changes are in boilerplate text, a removal of #include directives that we don't need here and the addition of a TODO for the one extra, motivating, thing that we want to do here.

When the previous check-in's change started running the compiler with the right flag, it became clear that the Microsoft runtime doesn't provide strerror_r. For the purposes of cygwin-launcher...

native/Headers/strerror_r.h: ... we can provide a trivial implementation in terms of strerror...

native/Headers/unix_exception.h: ... that does enough to satisfy the caller here.


2008-06-01 20:59:40 +0100 / mad / revision 2555

lib/build/universal.make: C_AND_CXX_FLAGS is only evaluated during the execution of the compilation rule. At that point, it's an error to refer to $(SOURCE_DIRECTORY). SOURCE_DIRECTORY should be treated just like a per-directory local variable. Think of it as the parameter to that scope - parameters are clearly local. Add SOURCE_DIRECTORY to the list of LOCAL_VARIABLES, so we get the benefit of a early failure with a half-decent error message.

That simple change caused a knock-on problem with BASE_NAME. We had a special hack allowing that local variable to be used outside the local scope for the benefit of the scoping violation error message. But BASE_NAME is, it seems, defined in terms of SOURCE_DIRECTORY, which is now a local variable. For those error messages, I think we only need to know the name of the immediately preceding scope. We know where we want the name of the immediately preceding scope and so there we can ask for it with a special name. That removes the possibility that someone will use BASE_NAME somewhere else and get misleading results with no protection. I clarified the error message while I was there, using more consistent quoting.

Now, elsewhere, we add components to C_AND_CXX_FLAGS which depend on $<. So I can follow that pattern and make the -mno-cygwin compilation flag dependent on that instead of SOURCE_DIRECTORY. That's fine, as far as it goes, but I can't use that for LDFLAGS because per-directory.make treats that variable quite differently. It's evaluated at the start of per-directory.make and then added to according to whether we find Cocoa source and so on. That seems to have lasted OK under maintenance too but, to fit in with it for Mingw, I'm going to have to move the LDFLAGS setting...

lib/build/per-directory.make: ... here. This smacks of distributed duplication and I'm not very happy about it but I don't want to bite off some large-scale reorganization while I'm in the middle of the cygwin-launcher feature.

Before this change, cygwin-launcher was linked with -mno-cygwin but compiled without that flag, despite there being (non-functioning) code to enable that flag for the compilation.


2008-05-31 17:24:10 +0100 / mad / revision 2554

lib/build/universal.make: Teach make to copy mingwm10.dll to the same directory it puts cygwin-launcher.exe in. Only do that when building for Cygwin and in a project with Mingw source. Do the copy atomically (with copy-then-rename), in case someone hits Ctrl-C while it's being copied. Make another copy similarly atomic. While in paranoid mode, more robustly test for when we need -mno-cygwin, in case someone were to try to build under a directory called "Mingw" on some other platform, presumably just to poke fun at the build system.


2008-05-28 00:15:27 +0100 / mad / revision 2553

native/Mingw/cygwin-launcher/cygwin-launcher.cpp: Yes, yes it is. This is (clearly) just a stub, but it's enough for me to objdump -p and show that my -mno-cygwin infrastructure is working.


2008-05-28 00:14:31 +0100 / mad / revision 2552

native/Mingw/cygwin-launcher: Tedious Subversion is going to make me add this tree one level at a time, isn't it?


2008-05-28 00:13:23 +0100 / mad / revision 2551

It's looking like Jim Lowe might be about to supply us with a second reason for wanting cygwin-launcher - in case ruby-launcher's dependencies on cygwin1.dll aren't satisfied.

lib/build/universal.make: So I've finally got round to the infrastructure for building with -mno-cygwin...

native/Mingw: ... when the source is in this directory and (at least currently) when the TARGET_OS is Cygwin.


2008-05-27 22:14:44 +0100 / mad / revision 2550

native/all/java-launcher/java-launcher.cpp: Pasting the comment into an email, I see a squiggly green underline.


2008-05-27 18:19:27 +0100 / mad / revision 2549

lib/build/universal.make: scp appears to copy directly to the target filename it's given, so that a network outage will leave you with a truncated file. That build will fail, noisily, but perhaps our Mac builder isn't checking his build mails religiously or perhaps he was (reasonably) hoping for the next day's build to put it right. I'm sure he doesn't use Outlook / Exchange which, despite its many faults, makes it trivial (if not indeed the default) to keep a couple of weeks' worth of deleted mails, so I doubt we can find out for sure what happened to cause the Mac build of terminator-5.147.2545.dmg to be zero-sized, as reported by Stefan Janecek. Oh well, let's see if we can stop it from recurring.


2008-05-27 04:54:41 +0100 / mad / revision 2548

native/Headers/reportFatalErrorViaGui.h: Well, that wasn't the platform I expected to have a problem on, but I suppose that's meta-expected. Interestingly, Linux did report the ex.what() before terminate()ing. (Which baffled me because I hadn't spotted that the old version hadn't been overwritten.)


2008-05-27 04:25:04 +0100 / mad / revision 2547

native/all/ruby-launcher/ruby-launcher.cpp: James Lowe reports that his desktop shortcut doesn't work and was kind enough to prove that it was ruby-launcher that was silently failing. We can't tell why, but at least we might be able to after this change. Clearly, I've been spoiled by Ruby, as even linking the previous code with the console subsystem produces nothing more informative than a coredump. We need to handle the exception and, more particularly, we need to inform the user of its message via a MessageBox. Hmm... don't we have code for that somewhere?

native/all/java-launcher/java-launcher.cpp: Yes we do, including an Apple variant, whose output I haven't ever had the misfortune to see. I'll have to provoke that shortly, as ...

native/Headers/reportFatalErrorViaGui.h: ... even three lines of Objective-C++ is enough to baffle me. The message we report on Windows for Terminator failures takes a turn for what will presumably be regarded as "the worse" under this change (the part about installing a decent Java now comes after the Ctrl-C hint). No biggie, methinks.

Outputting to std::cerr doesn't seem to cause us problems when started from a Windows shortcut, even when reporting a failure before ensuring that file descriptor 2 is open but, still, I'll do that after the MessageBox, just in case.

I don't exit(1) here, though I was tempted, because the java-launcher code didn't.


2008-05-27 01:20:07 +0100 / enh / revision 2546

src/e/ptextarea/PTalcTextStyler.java: catch up with recent language developments.


2008-05-20 06:42:31 +0100 / enh / revision 2545

src/e/ptextarea/PCppIndenter.java:
src/e/ptextarea/PJavaIndenter.java:
src/e/ptextarea/PPerlIndenter.java: no (deliberate) functional change here, just moving configuration from the subclasses...

src/e/ptextarea/PCFamilyIndenter.java: ...to the parent. My real interest is in moving the other stuff up (especially the misleadingly-named and vaguely-intentioned isLabel), but this is the easy bit, and all I have time for right now.


2008-05-19 06:00:30 +0100 / enh / revision 2544

src/e/ptextarea/PNewCppIndenter.java: I already fixed the "case" bug in PCppIndenter.


2008-05-19 04:35:55 +0100 / enh / revision 2543

src/e/ptextarea/PTalcTextStyler.java: add the "assert" keyword and, since we currently treat the other built-in types as keywords, "list" and "map" too.


2008-05-19 02:59:50 +0100 / enh / revision 2542

src/e/ptextarea/PCFamilyIndenter.java:
src/e/ptextarea/PCppIndenter.java:
src/e/ptextarea/PJavaIndenter.java:
src/e/ptextarea/PPerlIndenter.java: support more intelligent indenting of wrapped sequences of operator<<.


2008-05-18 20:54:23 +0100 / mad / revision 2541

bin/ithaki.sh: Some comments, which would help anyone trying to set up their own local jessies Debian repository, or us, if we had a disaster to recover from.


2008-05-05 00:10:59 +0100 / mad / revision 2540

lib/build/universal.make: Sounds like Ubuntu's gcc 4.3 configuration tells it to link stdc++ by default but Debian's prerelease version wasn't the first gcc platform for which I've had to do this manually (though it might be for the software.jessies.org stuff). In particular, I've seen it configured to not link stdc++ when invoked via gcc but to link it when invoked via g++. This seems unlikely to hurt, at least on Linux and possibly everywhere.


2008-05-04 19:43:41 +0100 / enh / revision 2539

src/e/gui/DebugMenu.java: add a "Mouse Event Tester" alongside the "Key Event Tester", sharing much of the code (and adding some improvements).


2008-05-02 07:16:55 +0100 / enh / revision 2538

native/Linux/gnome-startup/gnome-startup.cpp: a patch from Colin Walters, fixing GCC 4.3 builds by adding missing #includes.


2008-04-18 04:04:34 +0100 / enh / revision 2537

src/e/util/HtmlToPlainTextConverter.java: add a new class I've been using for some time elsewhere.

src/e/gui/HtmlPane.java: ...and a related DTD fix I've also been using for a while.


2008-04-15 05:24:25 +0100 / enh / revision 2536

src/e/ptextarea/PCFamilyIndenter.java: differentiating "case A: return foo;" from "case A:" followed by "return foo;" on the next line was definitely my intentional, and seems to have been caused by my usual confusion of "matches" and "find".


2008-04-14 03:17:03 +0100 / enh / revision 2535

bin/annotate-patch.rb: another day, another diff format.


2008-04-14 01:04:41 +0100 / enh / revision 2534

src/e/ptextarea/FileType.java: make it easy and non-invasive to use an arbitrary indenter or styler for a given FileType.


2008-04-08 16:38:01 +0100 / pcn / revision 2533

src/e/ptextarea/PCFamilyIndenter.java: Detect left- and right-shifts in the c-family indentation code. These are usually shifts and not brackets, and so we shouldn't treat them as indenting entities. One small step on the road to nice indentation.


2008-04-02 07:27:30 +0100 / enh / revision 2532

src/e/ptextarea/PNewCppIndenter.java: a first rough draft of a new C++ indenter. Not ready for general use, but everyone's welcome to try it out.


2008-04-02 06:28:18 +0100 / enh / revision 2531

src/e/ptextarea/PTalcTextStyler.java: track not-very-recent Talc language changes. I've had these changes for ages, but want to commit them now before I accidentally mix them up with other PTextArea changes.


2008-04-02 06:25:27 +0100 / enh / revision 2530

src/e/ptextarea/PCFamilyIndenter.java:
src/e/ptextarea/PSimpleIndenter.java: move the block comment/ASCII art handling up into the superclass because it's the best bit of code in PCFamilyIndenter, and useful in indenters that don't subclass PCFamilyIndenter.


2008-03-11 06:12:25 +0000 / mad / revision 2529

bin/invoke-java.rb: Chris correctly diagnoses that my leaving of this pollution in the environment means that checkintool doesn't work from Terminator or Evergreen on Windows. Oops.


2008-02-28 04:16:47 +0000 / mad / revision 2528

lib/build/universal.make: Chris's Sparc Solaris scp produces this output when we should upload a new pkg file:

scp: warning: stat: SJOevergreen_5.1.2527_sun4u.pkg (src): no such file (server msg: 'No such file')

The unfortunate use of "warning: " in that *error* message matches a regular expression in filter-build-output.rb, causing it to reason "looks like a Java warning - better output that and the preceding commands". We're already paying for an ssh connection to do a mkdir -p, so it's not much hassle to avoid the error. Or warning.


2008-02-27 04:45:50 +0000 / enh / revision 2527

src/e/gui/AboutBox.java:
src/e/gui/JFrameUtilities.java:
src/e/gui/MainFrame.java: mad points out that an old change of mine re-introduced a "VM doesn't exit" bug. Fix JFrameUtilities.makeSimpleWindow to use our major idiom for windows where we don't want to do anything clever (we just want them to go away when closed, however they're closed) and don't want to make assumptions about how they'll be used (which you're doing when you use DISPOSE_ON_CLOSE or EXIT_ON_CLOSE) because we hand the resulting JFrame out to arbitrary application code to do with as it sees fit. Also document in MainFrame why this is the best idiom for making windows dispose themselves (assuming you don't have anything more complicated to do).


2008-02-27 04:40:43 +0000 / enh / revision 2526

src/e/gui/AboutBox.java: some old changes I had lying around; defer to Log's idea of the application name rather than keeping a separate copy.


2008-02-26 00:25:12 +0000 / car / revision 2525

www/downloads.html: Make available Solaris sun4u packages rolled on Solaris 10.


2008-02-25 10:20:45 +0000 / mad / revision 2524

lib/build/installer.wxs: Braden Anderson has a repeatable problem with Terminator trying to install itself into C:\CFusionMX7\bin. A dump of his registry revealed that he had stub entries for the Cygwin registry keys under HKCU. A look in my registry revealed that so did I - a vestige of a per-user installation. A look at msiexec /l* install.log /i terminator.msi showed that the CYGWIN_HKCU_BIN property was being set even though CYGWIN_HKCU wasn't. It seems like it was just searching for the first "bin" directory that came to hand. Looking at the same log generated on my system showed that mine was setting CYGWIN_HKCU_BIN too, fortunately (or otherwise) to C:\cygwin\bin.

Fix that by not using "[property]" in Path attributes. Instead we'll have to duplicate the parent searches. I tried again to use DirectorySearchRef but you know you're on a hiding to nothing when the most useful of the top ten Google results you turn up is one of your own check-in comments berating the lack of examples and impenetrability of this feature.

We're now using the CYGWIN_HKLM_BIN property in only two places. One is in a Condition element, where it was added under r1705 with this check-in comment [

The difficult part was finding that this perturbed evaluation order of the CYGWIN and RUBYW properties such that, even though the RUBYW property uses the CYGWIN property, it was now evaluated first - and thus didn't work. What a half-baked little language.

]. As well as exhibiting even less understanding of the Windows installer structure than I now have, I can't see how that can still be true after the change I'm making here.

The other usage is in setting the working directory for the shortcut. That's something we could avoid the need for if I write the cygwin-launcher.exe I was mulling the other day (under the auspices of the "Terminator Here" RFE). Ah, but then I'd want to pass the Cygwin bin directory to the cygwin-launcher, so I won't be able to get rid of this duplication even then. Oh well.

This installs OK and passes Orca validation - and doesn't assign properties that it shouldn't. Whether it will work for Braden is another matter. I'm not sure it will because his installer log says it bound C:\CFusionMX7\bin to both CYGWIN_HKCU_BIN *and* CYGWIN_HKLM_BIN, though it bound CYGWIN_HKLM and RUBYW_HKLM correctly. Previously it was alleging a successful installation but starting the shortcut in the wrong directory.


2008-02-24 00:07:45 +0000 / enh / revision 2523

src/e/util/IndentationGuesser.java: comment a deficiency of the current implementation.


2008-02-23 23:53:42 +0000 / enh / revision 2522

src/e/ptextarea/PTextAreaSpellingChecker.java: convert this function to the usual early-return style to avoid an extra level of indentation for the majority of the method. Stop assuming that code-specific fixes (such as camelCase or underscored_identifiers) make sense in plain text. Work around a bug whereby we sometimes accidentally suggest "correcting" a word via the identity transformation, which doesn't get us anywhere. Add an upper bound of five items to the number of suggestions we'll show, because aspell(1) will happily provide 20-odd really unlikely suggestions in many cases. (We didn't have as much trouble with ispell(1), and this is one thing that's made this code significantly less useful since we switched.) Additionally, if we've offered camelCase and underscored_identifier corrections, give up. They're almost certainly what the user wants, and if they're not, the chances of any of our later guesses being right are pretty slim. Finally, move the "Accept" action back to the bottom where it belongs (on the assumption that you typically accept a bunch of new vocabulary at the beginning of a project but will be conservative thereafter).


2008-02-23 16:41:13 +0000 / mad / revision 2521

native/all/ruby-launcher/ruby-launcher.cpp: Leave an analog of CHERE_INVOKING in the environment when the user double clicks on one of our Windows shortcuts...

bin/invoke-java.rb: ... so we can reinstate the desired working directory - the user's home directory, like it would be on any other platform - before running any application-specific code, like Terminator's code for deciding which working directory to open a shell in.

ruby-launcher was motivated by our problems with Windows desktop shortcuts and only seems to be used there currently.

Other parts of bin/evergreen and bin/terminator depend on ENV["HOME"]. I'm not sure where Ruby's getting that variable from. Cygwin's /etc/profile has some complicated code for setting it but that won't have been invoked by the time we're implicitly sampling it here (by passing no argument to chdir).


2008-02-23 01:00:17 +0000 / mad / revision 2520

bin/invoke-java.rb: Gain the code from Evergreen to stop Cygwin's /etc/profile from scuppering the effect of Terminator's --working-directory parameter. We should set this variable here so that it takes effect when the user starts Terminator from the command line as well as when it's started from the desktop shortcut.

There's another piece to this puzzle - changing to the user's home directory when starting applications from the desktop shortcut. I'm not sure what's the best way to do that. While I prevaricate, double-clicking on Terminator in Windows will leave you in /usr/bin. At least that's obvious from the prompt. I've gotta dash, but checking in is a convenient way of getting the code from my MacBook to my Windows box - and will force me to finish this off rather than letting it slide.


2008-02-23 00:42:44 +0000 / mad / revision 2519

bin/invoke-java.rb: Avoid using single quotes when there's no reason to, to avoid the appearance that there might be something magic going on, particularly when using features as obscure as an argument hash (to Net::Telnet.new) and the Win32API interface. I've recently seen someone's first Ruby script and they're falling into all the bad old Perl practices that make the code write-only.


2008-02-22 07:11:27 +0000 / mad / revision 2518

www/cygwin-setup.html: This looks like quite a selective list, so perhaps I shouldn't be adding something of such minority interest to it, but it might make our Terminator support job easier if everyone who's religiously followed our suggestions has already installed infocmp.


2008-02-22 05:57:02 +0000 / enh / revision 2517

native/Headers/JniString.h: the fact that this was a class has never been useful, and it's made calling code unnecessarily verbose. Life is easier if it's just a function. (I also wonder whether segfaulting is the most useful behavior we can manage for a null Java string, but I'll leave that as it is for now.)


2008-02-19 17:45:09 +0000 / mad / revision 2516

src/e/ptextarea/PTextAreaSpellingChecker.java: Stephen Parker suggests a coping strategy for the spelling checker returning too many suggestions to fit on the screen. Elliott blessed the idea and having the pre-determined items at the top sounds like a good UI decision to me.


2008-02-17 04:46:25 +0000 / enh / revision 2515

src/e/ptextarea/PKeyHandler.java:
src/e/ptextarea/PTextArea.java: add support for Terminator-like hiding of the mouse when the user is typing.


2008-02-17 02:21:19 +0000 / enh / revision 2514

src/e/ptextarea/PTextArea.java: every time I see "getCoordinates", I'm sure it's the source of a bug or two, and disappointed that it doesn't appear to be what it sounds like, or what I'm looking for. Add a warning, if nothing else, and add getLogicalCoordinates, which is the method I'm usually looking for.


2008-02-16 20:56:08 +0000 / enh / revision 2513

src/e/gui/GnomeStockIcon.java: fix a broken link in the documentation.


2008-02-16 20:44:35 +0000 / enh / revision 2512

src/e/ptextarea/FileType.java: if we're to support user-defined FileTypes without requiring that users edit and rebuild this class, FileType can't be an enum. Rewrite it as an enum-like class.


2008-02-13 04:42:49 +0000 / enh / revision 2511

src/e/ptextarea/PPythonTextStyler.java: Python 2.5 adds the keywords "as" and "with".


2008-02-12 04:23:59 +0000 / enh / revision 2510

src/e/ptextarea/FileType.java: the new Python indenter has been working well for me so far, so let's make it the default.


2008-02-12 00:39:17 +0000 / mad / revision 2509

src/e/gui/AboutBox.java: It was probably the subject line than stuck in Stephen's eye but I've advocated "problem report" so I may as well use it in the source too.

src/e/gui/HelpMenu.java:
src/e/util/Log.java: And in the caller and callee.


2008-02-12 00:31:35 +0000 / mad / revision 2508

lib/DEBIAN-control-Build-Depends.txt:
lib/build/DEBIAN-control-Build-Depends.txt: Tidy away the other file that lives in salma-hayek/lib/.

lib/build/package-for-distribution.rb: And the one reference to it.

Mainly, though, I just want the change log regenerated after I added an executable copy of the pre-revprop-change.tmpl hook as pre-revprop-change and editing an earlier comment to remove email addresses.


2008-02-12 00:17:48 +0000 / mad / revision 2507

src/e/gui/HelpMenu.java:
www/bug-report.html:
www/navigation.html: That's twice in one day that I've heard mild-mannered criticism of pejorative terms for what gcc calls "problem reports" or PRs. "Bug" still seems like the right term to use in "Bug database", as it does in the advice on writing a good bug report. Many of the mails we get wouldn't end up in our hypothetical bug database, yet it would be incorrect to say that the reporting user doesn't have a problem, even if a substantial part of the problem is, as it often is, that they haven't thought to look at the FAQ.


2008-02-12 00:07:41 +0000 / mad / revision 2506

src/e/ptextarea/PCFamilyIndenter.java: I was mildly surprised that this commenting style didn't also trip up the newline inserter, but it doesn't seem to. Looks harmless and is clearly useful to some.

-----Original Message-----
From: Stephen Parker
Sent: Monday, February 11, 2008 15:56
Subject: Evergreen bug (1265/2505/1.6.0_03-b05/Windows Vista 6.0/x86 x2)

Not really a bug, but our coding standard requires boxed comments, like this:

/*
*****************************************************************************
* Function:
* Purpose:
* Returns: Nothing.
* Pre-condition: None.
* Post-condition: None.
* Notes:
*****************************************************************************
*/

which the current indentation rules make a nightmare to work with
(spaces get added after "/^ *" to give "^ * ***"etc. when cutting and
pasting).

This seems to fix it.

stephen parker (at home).


2008-02-11 19:56:58 +0000 / mad / revision 2505

lib/build/installer.wxs: When we move away from Subversion, I expect I'll find some nice things to say about it. I suppose that it did, at least, leave me with a file that shouldn't have been there, warning me that it hadn't bothered to merge yesterday's change with today's rename.


2008-02-11 19:46:14 +0000 / mad / revision 2504

lib/installer.wxs:
lib/build/installer.wxs: This clearly belongs in the build/ sub-directory.

lib/build/universal.make: From where we'll copy it under .generated/.


2008-02-11 06:31:22 +0000 / enh / revision 2503

src/e/ptextarea/PIndenter.java: extract another sliver of functionality so subclasses can get the indentation part of an arbitrary string.

src/e/ptextarea/PNewlineInserter.java: Vim's indentation code is written as if Vim itself has already copied the previous line's indentation. This does seem to make for a fairly comfortable style, shouldn't affect our existing PIndenter subclasses, and makes it easier to translate a Vim "indent file".

src/e/ptextarea/PPythonIndenter.java: rewrite the Python indenter in the style of Vim's Python indenter. There's some ugly duplication here, but that gives strong clues as to the kind of facilities we might want to provide. The main functionality not mentioned here would be the searchpair function.


2008-02-11 05:05:48 +0000 / mad / revision 2502

www/index.html: We don't compile with WiX v3. It's hard to know whether it would be a moving target while it's still in beta. The documentation doesn't seem to be there.

One problem that I encountered while trying WiX 3 was that my .NET framework wasn't up-to-date enough. That would have been no biggie except for the way Cygwin causes exec(2) to fail with silent "success" when an executable which requires an absent DLL is run. Perhaps we should run candle.exe via ruby-launcher, which already makes the necessary SetErrorMode invocation. It would be a perversion of the name but it might just do the trick. Sadly, of course, I can no longer easily test this. Perhaps I should try installing WiX 3 at work (but not over my WiX 2 installation) and see if it fails the same way there.

I would guess that we don't need MergeMod.dll since we stopped building salma-hayek as a WiX module. Maybe I should find out for sure but this machine is slow and Windows remains distressingly opaque, so it's probably easier to wait until someone needs to install WiX on a Windows box where it isn't already installed.


2008-02-11 04:50:47 +0000 / mad / revision 2501

lib/installer.wxs: WiX v3 won't even sniff at this file without a schema change. It doesn't compile it even then but WiX v2 doesn't seem to mind the changed schema, so this looks like a safe step in the right direction.


2008-02-10 22:08:02 +0000 / enh / revision 2500

src/e/ptextarea/PNewlineInserter.java: we need to test canOnlyAutoIndent before looking at fixIndentation if it's to have any effect.


2008-02-10 21:59:49 +0000 / enh / revision 2499

src/e/ptextarea/PNewlineInserter.java: note a deficiency.


2008-02-10 21:57:26 +0000 / enh / revision 2498

src/e/ptextarea/PNewlineInserter.java: further promotion of the hack; the previous revision implicitly assumed that PCopyingIndenter is the only indenter whose canOnlyAutoIndent returns true.


2008-02-10 21:42:52 +0000 / enh / revision 2497

src/e/ptextarea/PCopyingIndenter.java:
src/e/ptextarea/PIndenter.java:
src/e/ptextarea/PNewlineInserter.java: promote the midweek emergency hack to more permanent status, even though I'm not really sure where we ought to be going with all this. I don't know whether the fundamental design is broken, or the individual indenters are just too stupid.


2008-02-10 21:21:47 +0000 / enh / revision 2496

src/e/ptextarea/PIndenter.java: clarify a comment that still misses out the interesting part (which I don't know the answer to, and the lack of unit tests for the indentation code makes it hard to determine experimentally).


2008-02-10 20:44:27 +0000 / enh / revision 2495

lib/build/package-for-distribution.rb: avoid a likely dpkg-deb(1) failure when run with a umask different to the usual 0022, and attempt to protect the other platforms too.


2008-02-10 20:20:13 +0000 / mad / revision 2494

lib/build/parent.make: May as well support the "install" target here as it was useful to me just now.


2008-02-10 20:09:31 +0000 / mad / revision 2493

lib/build/universal.make: Now I've articulated my bad feeling about having one .PHONY target depend on another, in the email thread about my previous check-in, the principle is clearer in my mind. In particular, it's clear that the very line I checked-in contains another instance of the mistake that I avoided by not making "install" depend on "installer".

Replace "build" on the right-hand side of rule colons with $(BUILD_TARGETS). Instead of having "build" depend on "native", have it depend on the same targets which, perhaps disingenuously, aren't called $(NATIVE_TARGETS) but $(ALL_PER_DIRECTORY_TARGETS).

Move the variable assignments that depend on ALL_PER_DIRECTORY_TARGETS before the variables/rules separator. We can't correctly evaluate ALL_PER_DIRECTORY_TARGETS until we've included per-directory.make (multiple times), so add a protection mechanism to fail if we try (rather than taking make's default of incorrectly evaluating it).

Move the per-directory code up almost to the start of the rules section. We weren't obeying the comment where I said "let's keep this last". I think I either meant or should have meant that we should just keep it after the variables section. Indeed, it makes most sense to keep it at the variables/rules boundary. That minimizes the amount of code which needs to cope with variables defined after rules.

component-definitions.wxi depended on $(ALL_PER_DIRECTORY_TARGETS). At some point, it also came to depend on $(MACHINE_PROJECT_NAME).app, which had also come to depend on $(ALL_PER_DIRECTORY_TARGETS). So the first dependency was superfluous. Moreover, $(MACHINE_PROJECT_NAME).app had come to depend on "build" and "build" depended on "native" which depended on $(ALL_PER_DIRECTORY_TARGETS). So the second dependency had become obsolete too. Well, that's my belief, though I haven't even given this a once-over on Windows yet.


2008-02-10 19:08:46 +0000 / mad / revision 2492

lib/build/universal.make: One might reasonably use the nightly-build.rb script with the "install" or "installer" targets instead of native-dist. Extend the convenience hack that says "yeah, we know you can't upload a binary distribution for salma-hayek but, if you're asking for that, you'd probably like it built". On the one hand, this would be better in the nightly-build.rb script but, on the other, it is convenient to be able to build without remembering a special case for salma-hayek.

Given that, these days, we know when the Java definitely doesn't need building (and we've always known when the C++ doesn't need building), we could have the other projects build salma-hayek. We've got code for building multiple, independent C++ projects from one invocation of make, so how hard could extending that to Java be? It looks significantly simpler, mind, to get simple.make to recurse into salma-hayek first. But then we'd still want this hack, or something functionally equivalent.


2008-02-09 05:22:27 +0000 / enh / revision 2491

src/e/ptextarea/PKeyHandler.java: disable some old debugging code (but keep it compiling, to avoid bit-rot).


2008-02-09 04:42:49 +0000 / enh / revision 2490

src/e/ptextarea/PAbstractLanguageStyler.java: don't assume that multi-line comments are terminated with two-character sequence.


2008-02-08 07:04:09 +0000 / enh / revision 2489

src/e/ptextarea/PNewlineInserter.java: this hack makes PCopyingIndenter work as intended...

src/e/ptextarea/FileType.java: ...so Python can at least have some minimal auto-indentation. This is no longer unusable, but it's still pretty weak.


2008-02-08 06:52:12 +0000 / enh / revision 2488

src/e/ptextarea/FileType.java: PPythonIndenter is bad enough that no auto-indent is possibly less annoying for now. (PCopyingIndenter doesn't work, either, because it messes up the indentation of the line you're leaving when you hit return, rather than only affecting the indentation of the new line. Which given the simplicity of PCopyingIndenter suggests that the brokenness is quite fundamental.)


2008-02-07 23:05:53 +0000 / mad / revision 2487

src/e/ptextarea/PCFamilyIndenter.java: Stephen Parker supplies a patch to remedy an inconsistency between the treatment of /* and /** block comments. He'd like them to behave the same way but what really motivates me to fix it (aside from getting a patch - a rare treat!) is the inconsistency between this code and that in PNewlineInserter. Type /* and hit Enter - you'd get a " * " indent on the next line. Type colon or paste or Ctrl-I or hit Enter again and the asterisk would be whipped away. Inconsistency isn't sensible, even though either approach would be.


2008-02-06 18:50:30 +0000 / mad / revision 2486

src/e/util/GuiUtilities.java: Reverse the accidental reversal made yesterday evening, so that unshifted Alt-N gets you a new window in Terminator and unshifted Ctrl-S saves in Evergreen. Done on one line, against my leaning, to indicate that the method's just a convenience and not very interesting. I'll do new nightlies presently...


2008-02-06 05:57:23 +0000 / enh / revision 2485

src/e/util/GuiUtilities.java: expose the underlying implementation of makeKeyStroke for callers that actually need the more general form. Note especially that the hack to or-in InputEvent.SHIFT_MASK has moved up into the convenience method, so the underlying method lets its callers do anything they please.


2008-01-25 16:27:55 +0000 / mad / revision 2484

www/cygwin-problems.html: "But Ruby 1.9 was released at Christmas"... not for Windows, not in its "recommended" one-click-installer form. Write up my reasons for not doing anything (apart from helping via email) with Nikos Tzanos's troubles caused by multiple cygwin1.dll copies installed by other applications.


2008-01-18 18:10:36 +0000 / enh / revision 2483

src/e/tools/FatBits.java: FatBits has changed in 2008, so update the copyright date. Also give ourselves some minimal credit.


2008-01-18 00:54:01 +0000 / enh / revision 2482

src/e/util/Preferences.java: bring the code for "Preferences..." menu items into this class. It's slightly more complicated, as usual for library code, but it lets us remove near duplicates from the applications.

src/e/tools/FatBits.java: convert FatBits to use the new code.


2008-01-17 22:11:00 +0000 / enh / revision 2481

src/e/gui/EStatusBar.java: make our Mac OS status bars look more like native Mac OS status bars by using the right font.


2007-12-22 22:30:54 +0000 / enh / revision 2480

src/e/gui/DebugMenu.java:
src/e/gui/JFrameUtilities.java: MainFrame, as its name partially implies, is only really suitable for uses where it's the application's main frame, and its lifetime is tied to the application's lifetime. These two callers don't want MainFrame's dirty tricks.


2007-12-22 18:22:23 +0000 / enh / revision 2479

src/e/ptextarea/PTextAreaRenderer.java: I introduced a mistake a long time ago (the original, correct, code was from Ed) that I didn't notice until after Phil's watermark changes and seeing Martin with a workspace full of read-only files. This change just moves the "if opaque" down so that instead of guarding all the background-painting code (gray bits and white bits) it just guards the white bits. This looks less like a bug, in that having a watermark doesn't cause other decoration to disappear, but the effect still isn't particularly pleasing. My temptation is to pull the watermark code out of Evergreen, change it to use an ARGB image, and have PTextArea render it on top of everything else, rather than beneath everything else. My concerns are: (a) Phil's whole reason for his recent changes was performance with a particular back-end, and I don't know how it performs rendering ARGB images, and (b) PTextArea's API would get even bigger (though only by a method or two; the implementation could still live elsewhere, and be called from PTextAreaRenderer, whose size and complexity matters less).


2007-12-19 05:18:01 +0000 / enh / revision 2478

src/e/util/Preferences.java: it would be more convenient for all three current users of this class (and in keeping with the intended usage) if the subclass were responsible for knowing where its on-disk representation lives.

src/e/tools/FatBits.java: track API change.


2007-12-19 05:03:34 +0000 / enh / revision 2477

src/e/util/Preferences.java: testing with a LAF that actually draws combo boxes correctly (unlike the GTK+ LAF), it's obvious that I need to manually separate the two combo boxes.


2007-12-19 04:56:17 +0000 / enh / revision 2476

src/e/util/Preferences.java: fix FontHelper to provide a UI that lets you choose a font's size as well as its family.


2007-12-17 03:18:51 +0000 / enh / revision 2475

src/e/util/Preferences.java: for now, let's not worry about fully built-in support for color schemes; a couple of hooks so Terminator can continue to do what it currently does will suffice.


2007-12-17 02:35:58 +0000 / enh / revision 2474

src/e/util/Preferences.java: support for arbitrary preference types. Use "get" to get the value, and "setHelperForClass" to supply your own PreferencesHelper subclass for the given type. "PreferencesHelper.addRow" gains a parameter so that no external access to our descriptions is needed (and some duplication can be removed from the standard implementations too). Unrelatedly (other than that these changes are also necessary to switch Terminator over to using this class) "showPreferencesDialog" now takes a Frame rather than unnecessarily insisting on a JFrame, and we're now more robust in face of unexpected keys when reading preferences.


2007-12-03 06:35:37 +0000 / enh / revision 2473

src/e/util/Preferences.java: we're stuck with Terminator's existing preferences being saved as X11-like resources, but want to move to XML. So let's ensure that the new code can read X11 resources or XML, but only ever writes XML. (This isn't just the old XML code put back; this is brand new code that uses a much more sensible structure.)

src/e/util/XmlUtilities.java: make it possible to read XML from a String, so we don't have to read the file in twice (once to check whether it's XML or not, and again to parse the XML).


2007-12-03 00:30:55 +0000 / enh / revision 2472

src/e/ptextarea/FileType.java: better support for Emacs-like modelines. This still only looks for a clue as to the major mode (as is right and proper for the FileType class; fuller parsing of modelines would belong elsewhere).


2007-11-27 21:23:27 +0000 / mad / revision 2471

src/e/ptextarea/FileType.java: Clarify the situation regarding emacs mode strings by removing a reference to a no-longer extant set of methods and other cosmetic improvements. Really, though, I'm just doing this to point Chris in the right direction, should he want to generalize this to cover the case he's currently interested in.


2007-11-27 05:10:33 +0000 / enh / revision 2470

src/e/gui/HelpMenu.java: talking to simonj made me realize it's rather mad that the link to the main page is buried away and not right next to the change log and FAQ links.


2007-11-26 06:38:47 +0000 / enh / revision 2469

src/e/util/Preferences.java: switch to using X11-style "resources" files instead of XML for persistent storage.

src/e/tools/FatBits.java: fix the filename accordingly.


2007-11-26 05:07:36 +0000 / enh / revision 2468

src/e/util/Preferences.java: a general-purpose extended subset of Terminator's preferences mechanism, intended for use in all projects (including replacing the current implementation in Terminator). Note that this code uses a trivial XML format where Terminator currently uses something more like X11 resources. I think X11 resources are better. They're more easily read and edited by humans, and they're what we're already using in one of our applications. I can't really see anything we gain by using XML here, even if we used a fancier schema, such as something more like Mac OS' plists. The only obvious advantage of XML is that it's better for supporting sequences and maps, but I don't think this is the preferences mechanism for either of those things anyway. Something like the Mailer "accounts manager" can and should (and does) use XML, but the general preferences? Probably not.

src/e/tools/FatBits.java: as a demonstration, here's FatBits modified to have persistent preferences.


2007-11-24 20:51:24 +0000 / enh / revision 2467

src/e/gui/GnomeStockIcon.java: support a wider range of GTK+ mnemonics for buttons.

src/e/gui/AboutBox.java: remove a couple of special cases now handled more generally.


2007-11-24 00:15:20 +0000 / enh / revision 2466

src/e/ptextarea/PStyle.java:
src/e/ptextarea/PTextArea.java: use UIManager properties more widely (specifically, for the background color), and consistently use the EditorPane defaults rather than the TextArea ones. There doesn't appear to be anything to choose between EditorPane and TextPane, but TextArea – judging by the default gray background on Linux – may be intended as something else (or that may just be another Sun LAF bug).


2007-11-23 05:19:35 +0000 / enh / revision 2465

src/e/ptextarea/PKeyHandler.java: move "hungry delete" (delete back to first non-whitespace) onto control-backspace, and add delete back to beginning of line on alt-backspace. This makes all the functionality available in all PTextAreas and improves the out-of-box experience for Python programmers especially, at the cost of "hungry delete" no longer being the default, which has made editing seem slow and cumbersome in the time I've been building up to this. Hopefully when all my PTextAreas offer it, I'll be able to get used to using control-backspace.

src/e/util/Parameters.java: this class is no longer needed outside Evergreen.


2007-11-23 05:07:27 +0000 / enh / revision 2464

bin/nightly-build.rb: improve support for building Mercurial projects, and add support for Bazaar projects (rare though they may be).


2007-11-23 04:59:59 +0000 / enh / revision 2463

src/e/demo/PTextAreaDemo.java: my previous change to this code broke it (by commenting out the loop's variant); it had been done in the name of appeasing GCJ rather than utility, and I hadn't tested that the result worked, just that it compiled. So fix it by removing all the cruft.


2007-11-23 02:44:44 +0000 / enh / revision 2462

src/e/util/IndentationGuesser.java: we shouldn't be retrieving the fallback indentation from a deprecated source. Pass it in explicitly instead.

src/e/demo/PTextAreaDemo.java:
src/e/testing/PIndenterTester.java: fix callers, one of which also has unrelated tidying.


2007-11-23 01:16:17 +0000 / enh / revision 2461

src/e/gui/GnomeStockIcon.java: add a couple more stock icons.


2007-11-21 23:47:26 +0000 / enh / revision 2460

src/e/util/XmlUtilities.java: collect some of the magic required for almost-convenient XML handling in Java.


2007-11-21 22:51:56 +0000 / enh / revision 2459

src/e/util/StringUtilities.java: gain a handy utility from Evergreen.


2007-11-21 22:36:33 +0000 / enh / revision 2458

src/e/ptextarea/PKeyHandler.java: I'm not sure I've ever used this functionality, and it stands in the way of letting shift-tab in Mailer move focus back to the subject line, which I do find myself trying to use on a regular basis.


2007-11-19 05:54:36 +0000 / enh / revision 2457

src/e/ptextarea/PPythonIndenter.java:
src/e/ptextarea/FileType.java: a new Python auto-indenter.


2007-11-19 05:46:14 +0000 / enh / revision 2456

src/e/ptextarea/PGenericIndenter.java: if the indent pattern can be missing, there's no reason why the unindent pattern can't be missing too. I have no present use for this, but thought I might.


2007-11-18 20:33:16 +0000 / mad / revision 2455

bin/ithaki.sh: Actually, that whole comment section was overtaken by Debian shipping etch a long time ago. It's a long time since we upgraded ithaki.


2007-11-18 20:31:10 +0000 / mad / revision 2454

bin/ithaki.sh: wide's unreachable today, reminding me that, now I have a 64 bit build server at work, there's no reason to continue inflicting this build on Eric, although I don't remember him ever noticing.


2007-11-16 06:50:12 +0000 / enh / revision 2453

src/e/gui/HtmlPane.java: JTextPane doesn't store the actual HTML it was given, and attempts to reconstruct the HTML from its internal model. Given that my most likely use of this is to investigate Swing HTML parsing bugs, I'd much rather see the actual HTML that's upset it. (It's possible I might want to see both, but experience so far suggests that the problem's usually pretty obvious and the original HTML is more useful.)


2007-11-16 05:17:39 +0000 / enh / revision 2452

src/e/gui/HtmlPane.java: any HTML view should have a "View Source" pop-up menu item.


2007-11-14 04:12:32 +0000 / enh / revision 2451

src/e/gui/DialogFocusRedirector.java:
src/e/gui/EMenuBar.java:
src/e/gui/ETable.java:
src/e/ptextarea/PMouseHandler.java: don't use Class.cast unless it's actually necessary.


2007-11-14 03:21:10 +0000 / enh / revision 2450

src/e/gui/ETable.java:
src/e/gui/JHyperlinkButton.java:
src/e/gui/SearchField.java:
src/e/util/GuiUtilities.java: Ed points out that the current Mac OS 10.4 "os.version" is "10.4.10".


2007-11-13 18:44:43 +0000 / enh / revision 2449

src/e/gui/ETable.java: don't bother with a work-around on Mac OS 10.5, where the bug is fixed; prepare editors as we prepare renderers, for more consistent appearance; make use of Mac OS 10.5's ability to render smaller checkboxes.


2007-11-13 17:58:57 +0000 / enh / revision 2448

src/e/gui/SearchField.java: on Mac OS 10.5, Apple does all the work of making a convincingly native search field for us, so defer to them for a better experience.


2007-11-13 17:55:22 +0000 / enh / revision 2447

src/e/gui/JHyperlinkButton.java: on Mac OS 10.5, we need to setBorderPainted(false) to turn off the default button border; just setting the border to null is insufficient. Also add a special case for Mac OS' standard "help" buttons, which are now available in Java.


2007-11-13 17:50:15 +0000 / enh / revision 2446

src/e/util/GuiUtilities.java: on Mac OS 10.5, there's a new simpler way to set a window's alpha, and the old hack no longer works.


2007-11-13 05:33:47 +0000 / enh / revision 2445

lib/build/universal.make: to build on Mac OS 10.5 with the 10.4 SDK, we need an extra switch. When we drop support for 10.4, we can either remove this or update it to 10.5; the latter might save similar head-scratching come 10.6.


2007-11-12 19:02:54 +0000 / mad / revision 2444

lib/build/simple.make:
lib/build/universal.make: The clarity's worth more than compatible with make versions that don't support $(lastword). I see we depend on $(firstword) in the version checking code, which is more dubious.


2007-11-12 06:23:23 +0000 / mad / revision 2443

simple.make: The more I use it, the more I agree with Linus about Subversion.


2007-11-12 06:21:26 +0000 / mad / revision 2442

simple.make: Nope, it's going to make me do it in three stages.


2007-11-12 06:20:12 +0000 / mad / revision 2441

simple.make: Move simple.make to lib/build/ too and replace it with a symlink to the new location. I could replace it with a regular make file but then that would have to temporarily gain the make version check and a third copy of the salma-hayek locator code. That's too much pain for a temporary crutch.

lib/build/simple.make: The disadvantage of a symlink is that we need a temporary hack in the salma-hayek locator to cope with being included through a different path. Update the instructions too.

www/index.html: And the example error messages.

lib/build/make-new-project.sh: New projects should use the new location.

Makefile: Set a good example by using the new location ourselves.

Subversion appears unwilling to let me replace a regular file with a symlink in one check-in. Let's see if it will let me do it in two.


2007-11-12 05:44:35 +0000 / mad / revision 2440

simple.make: Refresh this slightly different copy of the salma-hayek locator code from universal.make.


2007-11-12 05:41:09 +0000 / mad / revision 2439

lib/build/universal.make: Lose the make version check to where it stands a chance of being executed by older makes. Lose a small piece of the make manual - I don't know why that particular wrinkle got a mention.

simple.make: Gain the make version check. Modernize the adjacent comments (whose rust I noticed while deciding where to paste).


2007-11-12 05:20:43 +0000 / mad / revision 2438

lib/build/universal.make: I was half-expecting to break Mercurial-based builds or Mac builds or builds of a project that I don't have checked-out but there was no excuse for checking in before testing that salma-hayek still built.

Try to say fewer things per line. We do need one := - put it in the right place and give it a comment.


2007-11-12 04:48:43 +0000 / mad / revision 2437

More root directory clean-ups.

java.make: This looks like a remnant from before the days when universal.make did a good job with Java.

parent.make:
lib/build/parent.make: I don't think anyone but me uses this makefile, so no-one will mind it moving.

per-directory.make:
lib/build/per-directory.make: This makefile has always been internal-use-only.

universal.make:
lib/build/universal.make: This makefile used to be used externally. I don't think it is any longer though it does still work when used like that. It's very verbose about what it's doing, so any users who haven't switched to simple.make probably want to.

lib/build/make-new-project.sh: Hmm, follow that advice here, rather than tracking universal.make's move.

lib/build/package-for-distribution.rb: But this invocation is used internally for the build and wants the verbosity.

simple.make: Leave this makefile where it is for the moment, for the sake of all the other projects that are using it.


2007-11-12 04:31:03 +0000 / mad / revision 2436

escaping.rb:
patch-to-html-email.rb: Move two scripts that aren't really intended for stand-alone use to...

lib/build/escaping.rb:
lib/build/patch-to-html-email.rb: ... somewhere hidden away. They aren't used in building but in post-commit and other patch mailing but at least lib/build/ isn't as in your face.

bin/mailpatch.rb: Adapt and modernize the one user-facing script that uses these directly, although I've nothing against putting lib/build/ on the path for the "require". (Shame that it's called something as obtuse as $:.)

incoming:
post-commit: Do a similar job on both versions of the post-commit script. This removes the subtle repetition of the assumption that the hook script is in the root directory of salma-hayek.

lib/build/svn-log-to-html.rb: This post-build script was already more modern.


2007-11-10 19:05:02 +0000 / enh / revision 2435

src/e/ptextarea/PEmailTextStyler.java: document one other problem I found mentioned in my mails on the subject.


2007-11-10 18:56:32 +0000 / enh / revision 2434

src/e/ptextarea/PEmailTextStyler.java: fix parochialisms (and then find that almost none of the comment was true any longer), remove a dead field, order fields into the traditional order, stop considering ":" and "|" to be quoting characters because I haven't seen anyone use those since 1997 and they do cause quoted Ruby source to be rather too colorful, remove STRING and KEYWORD as suitable quoting styles (COMMENT is okay for now), disable the signature detection until it's improved, and comment various other problems.


2007-11-07 17:05:56 +0000 / mad / revision 2433

bin/invoke-java.rb: Missed one, due to having other, long-standing but dubious unchecked-in changes.


2007-11-07 17:05:17 +0000 / mad / revision 2432

native/all/setpgid/setpgid.cpp:
native/all/setpgid/setsid.cpp: Fix my renaming omission. It's probably better to do this in a separate check-in because this one has no changes, despite looking like it's changing the whole file. And Subversion, of course, doesn't let me do this whole process atomically anyway.


2007-11-07 17:03:33 +0000 / mad / revision 2431

native/all/setpgid/setsid.cpp: Adapt the hard-coded argv[0] in the usage. I've forgotten to rename the source file, haven't I?

src/e/util/ProcessUtilities.java: Adapt to the new name for "setsid". Spelling "mistakes" are probably preferable to hiding grep matches with dubious use of CamelCase like "setSid".

universal.make: Fix an obsolete example. I wonder what version of make is shipped with Mac OS 10.5.


2007-11-07 16:54:07 +0000 / mad / revision 2430

native/all/setsid: Subversion won't let scm non-recursively commit a directory deletion.

This check-in brought to you by EDITOR=vim svn commit native/all/setsid.


2007-11-07 16:47:57 +0000 / mad / revision 2429

native/all/setsid: Not for the first time, this program confuses me. It doesn't call setsid and, according to the history, it never has.

native/all/setpgid: It calls setpgid instead. setsid is not a useless function - we use it in Terminator. The util-linux setsid that we're hiding actually does call setsid. We shouldn't pretend to be what we're not.

native/all/setsid/setsid.cpp: This needs replacing too, but Subversion won't let me do that until I've committed this. Sorry.


2007-11-04 21:32:21 +0000 / mad / revision 2428

bin/find-jdk-root.rb: Fix my previous change to package-for-distribution.rb to work for Linux. I like the idea of having a Pathname class that has a convenient way of constructing directory components without bothering about File.SEPARATOR but using operator+ for it was a crippling mistake that's led to Elliott removing calls to it elsewhere. The use of operator<< with arrays was grim but still a better choice.


2007-11-04 21:15:44 +0000 / mad / revision 2427

lib/build/package-for-distribution.rb: I can build happily on this Windows laptop but trying to make an installer failed with a rather cryptic error (generated by us) because Kernel.system failed to find jar. We use a script to select the JDK elsewhere during the build process, so it makes sense to use the consistent version of jar here too.


2007-11-04 16:54:27 +0000 / enh / revision 2426

TODO: notes from Apple's java-dev mailing list on something to try when one of us has 10.5 to test on.


2007-11-01 02:43:14 +0000 / enh / revision 2425

src/e/gui/GnomeStockIcon.java: the absence of the "OK" mnemonic is quite glaring whenever it appears next to "Cancel".


2007-11-01 02:05:50 +0000 / enh / revision 2424

src/e/gui/HtmlPane.java: delegate addKeyListener and removeKeyListener to the underlying JTextPane.


2007-11-01 01:04:00 +0000 / mad / revision 2423

universal.make: GuiUtilities changed in a way that was source-compatible with Terminator's usage but not runtime compatible. We must recompile our Java if salma-hayek's been recompiled. Darn, I thought we had those Java dependencies nailed, but it was clear what the problem was and it was easy to fix.


2007-10-31 21:47:43 +0000 / enh / revision 2422

src/e/util/GuiUtilities.java: make it possible to cancel keepMaximumShowing's auto-scrolling.


2007-10-31 20:15:51 +0000 / pcn / revision 2421

src/e/ptextarea/PEmailTextStyler.java: A new text styler for dealing with emails. This recognises various levels of commenting, and also (correctly-separated) signatures.

src/e/ptextarea/FileType.java: Include the new text styler in our styler enumeration.


2007-10-29 05:31:07 +0000 / enh / revision 2420

src/e/gui/JFrameUtilities.java: fix this test now the filename is likely to be null, but should never be non-null but empty.


2007-10-29 05:29:12 +0000 / enh / revision 2419

bin/invoke-java.rb: don't set the org.jessies.frameIcon property to a useless value.


2007-10-27 21:16:46 +0100 / enh / revision 2418

src/e/gui/GnomeStockIcon.java: add another useful GNOME stock icon.


2007-10-26 19:51:34 +0100 / mad / revision 2417

post-commit: Modernize style - we use double quotes unless we're deliberately preventing interpolation and we always use parentheses on method invocations (except for the like of "raise" which is a keyword in other languages)...

incoming: ... before the superstitions spread any further. Superstitions, like inconsistencies, make it harder to learn a language. "Oh, shift is special".


2007-10-26 19:18:53 +0100 / enh / revision 2416

src/e/gui/HtmlPane.java: work around Sun bug 4233012, and hack the style sheet to make HTML text look more like normal TextArea text.


2007-10-26 10:40:40 +0100 / car / revision 2415

src/e/ptextarea/PTextAreaSpellingChecker.java: Undo accidental commit of local optimisation.

2007-10-26 10:33:03 +0100 / car / revision 2414

incoming: Added. A rough and ready first attempt at a post-commit-like script for Mercurial, initially to be executed by Mercurial's incoming hook.

2007-10-26 05:02:12 +0100 / enh / revision 2413

src/e/gui/AboutBox.java: make the full identification details available to the program itself, not just as a subject line for bug reports.


2007-10-25 22:26:58 +0100 / enh / revision 2412

src/e/forms/FormPanel.java: there's no reason why outsiders shouldn't be able to use FormPanel directly; it's perfectly usable and useful on its own.


2007-10-25 22:16:48 +0100 / enh / revision 2411

www/downloads.html: show in the copy & paste instructions how to actually build the source when you've checked it out. If you don't know what's in salma-hayek, as Colin Walters didn't, it's not necessarily obvious what the errors from GNU Make are telling you if you try building a project without having built salma-hayek first.


2007-10-24 04:23:02 +0100 / enh / revision 2410

src/e/util/ComponentUtilities.java: as I redirected home/end last night, I wondered why I hadn't done so earlier. mad pointed out today that these keys are generally cursor movement keys, and useful in text fields. So only redirect them if the component we're redirecting key strokes from isn't a text field. (I'm ignoring more general text components because they're unlikely to have this method invoked on them, because they're unlikely to have any other component associated with them.)


2007-10-23 07:10:32 +0100 / enh / revision 2409

src/e/util/ComponentUtilities.java: viewing patches, I haven't found much use for being able to jump to the top or bottom with the keyboard. Viewing mail, I find this keyboard functionality invaluable. (I've never understood why Outlook, though one of Windows' would-be redeeming features is its tendency to have good support for keyboard-only use, misses this where Apple, who wouldn't know a keyboard if it acted as a crutch for their one-button mouse, get it right. We have NeXT to thank, probably.)


2007-10-23 06:55:41 +0100 / enh / revision 2408

src/e/gui/HtmlPane.java: hiding the complicated JTextPane API by presenting ourselves as a JPanel is all well and good, but we need to implement Scrollable if we're to behave sensibly in a JScrollPane. So mainly pass through to the JTextPane, but avoid asking for a horizontal scroll bar. Also pull out some of the most deeply-indented code into its own method; it was offending me every time I saw it.


2007-10-23 06:17:15 +0100 / enh / revision 2407

src/e/util/GuiUtilities.java: Chris Reece reports a problem on the two-hit JDK5/Solaris retro combo. It looks like Sun ships the X11 classes but not the JNI library, or maybe that they've already loaded the Motif JNI library by this point, and the two would conflict:

  java.lang.UnsatisfiedLinkError: initIDs
        at sun.awt.X11.XWindow.initIDs(Native Method)
        at sun.awt.X11.XWindow.<clinit>(XWindow.java:82)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:164)
        at e.util.GuiUtilities.setFrameAlpha(GuiUtilities.java:313)

Anyway, to cope with breakage like this, catch Throwable and use Log.warn, as the WM_CLASS code already correctly did.


2007-10-22 06:56:33 +0100 / enh / revision 2406

src/e/gui/HtmlPane.java:
src/e/tools/HtmlViewer.java: pull the HTML stuff out into its own class, for easier embedding.


2007-10-22 03:29:53 +0100 / enh / revision 2405

src/e/tools/HtmlViewer.java: as long as HtmlViewer serves as the copy-and-paste source for using Swing's HTML functionality, it should aim to be as useful as possible.


2007-10-22 02:50:33 +0100 / enh / revision 2404

src/e/gui/GnomeStockIcon.java: I'm not sure how I missed "OK"; perhaps I've been too successful at finding a more specific label for my buttons. Anyway, sometimes "OK" is as good as it gets, so let's have the appropriate appearance for that button too.


2007-10-17 06:36:42 +0100 / enh / revision 2403

src/e/ptextarea/FileType.java: I only meant to claim ".talc" as an extension. As mad says, FAT16 users can have the other three.


2007-10-17 06:07:21 +0100 / enh / revision 2402

src/e/ptextarea/PTextAreaSpellingChecker.java: fix another two raw type warnings and an unused local variable warning.


2007-10-17 06:06:45 +0100 / enh / revision 2401

src/e/gui/ChronologicalComboBoxModel.java:
src/e/gui/ETree.java:
src/e/util/StringUtilities.java: fix a few more raw type warnings.


2007-10-17 06:05:27 +0100 / enh / revision 2400

src/e/ptextarea/FileType.java:
src/e/ptextarea/PTalcTextStyler.java: add support for editing Talc scripts.


2007-10-17 05:52:16 +0100 / enh / revision 2399

www/cygwin-subfaq.html:
www/faq.html: factor out the "I'm having problems with Cygwin!" entry, so we can easily include it in other projects' FAQs.


2007-10-14 01:46:48 +0100 / mad / revision 2398

lib/build/filter-build-output.rb: Forwarding the zero-ness of the exit status turns out to be easier than I expected. I think the child will always have exited by this point, so I presume its exit status will be collected no later than when I ask for it.


2007-10-14 01:24:44 +0100 / mad / revision 2397

lib/build/filter-build-output.rb: You might think the IO.popen() documentation would tell you the incantation for piping stderr as well as stdout, or that reopen's documentation would mention dup or dup2. I've used it once before but I'd not have found that instance without already having the answer. Google thankfully remains excellent.


2007-10-14 01:10:30 +0100 / mad / revision 2396

lib/build/filter-build-output.rb: I don't understand when Ruby choose default objects on which to invoke eg gets(). Still, I'm glad it (eventually) told me that I'd messed up in my parameterization check-in earlier.

/Users/mad/software.jessies.org/work/salma-hayek/lib/build/filter-build-output.rb:19:in `gets': No such file or directory - make (Errno::ENOENT)
from /Users/mad/software.jessies.org/work/salma-hayek/lib/build/filter-build-output.rb:19:in `filterBuildOutput'
from /Users/mad/software.jessies.org/work/salma-hayek/lib/build/filter-build-output.rb:48
from /Users/mad/software.jessies.org/work/salma-hayek/lib/build/filter-build-output.rb:43:in `popen'
from /Users/mad/software.jessies.org/work/salma-hayek/lib/build/filter-build-output.rb:43


2007-10-14 01:02:07 +0100 / mad / revision 2395

simple.make: Move the "filter" invocation onto the front of the command line, passing the universal.make command line as arguments.

lib/build/filter-build-output.rb: Run ARGV down a pipe and filter its output.

This was my first thought. It doesn't solve the original problem - the exit status of the child command is still ignored. I'm not sure we're filtering the command's stderr. I think this is the right direction, so I'll check-in (as it's still basically functional) and then work on fixing those.


2007-10-14 00:42:10 +0100 / mad / revision 2394

lib/build/filter-build-output.rb: A large cosmetic-only change to parameterize the input stream for filtering, so I can change it to be a pipe in the next check-in without appearing to have changed the whole file.


2007-10-14 00:33:29 +0100 / mad / revision 2393

simple.make: The make convention, as decreed by $(if), is that an empty string means false whereas a non-empty one means true. Really, I want to be attacking the pipefail problem with the "recurse" rule but, before I rewrite it, I need to understand it. Having the "then" and "else" clauses contradict the condition variable's name wasn't helping. All I've done here is rename the variable to match its contents.


2007-10-14 00:30:00 +0100 / mad / revision 2392

simple.make: $(filter) wasn't what I wanted here. MAKEFLAGS = pn is what you get when you pass -n -p.


2007-10-13 22:53:32 +0100 / enh / revision 2391

src/e/gui/StopIcon.java: improve the appearance of the stop icon, and keep it from disappearing when disabled.


2007-10-12 18:48:13 +0100 / enh / revision 2390

src/e/util/Parameters.java: actually, for now, dump this functionality in (the deprecated class) Parameters, where it best belongs.


2007-10-12 18:40:33 +0100 / enh / revision 2389

src/e/util/FileUtilities.java: remove a few error- and inefficiency-prone methods that are only used in Evergreen (where I'm about to reimplement them).


2007-10-05 07:11:38 +0100 / enh / revision 2388

src/e/gui/ArrayListTableModel.java: remove unused (and not particularly useful) class.

src/e/gui/DebugMenu.java:
src/e/gui/HeapView.java:
src/e/gui/HorizontalScrollWheelListener.java:
src/e/ptextarea/PTextAreaRenderer.java:
src/e/tools/JarExplorer.java:
src/e/tools/JavaHpp.java:
src/e/tools/ShowUiDefaults.java:
src/e/util/InAppServer.java:
src/e/util/Launcher.java:
src/e/util/Log.java:
src/e/util/Stopwatch.java: fix raw type, unused local/field/method, and unnecessary cast warnings.


2007-10-04 06:59:31 +0100 / enh / revision 2387

src/e/gui/EMenuBar.java:
src/e/util/ProcessUtilities.java: remove unused locals.

src/e/gui/HelpMenu.java: remove unused field.


2007-10-04 06:54:25 +0100 / enh / revision 2386

universal.make: disable a silly warning that makes bad suggestions.


2007-10-04 06:17:43 +0100 / enh / revision 2385

src/e/debug/EventDispatchThreadHangMonitor.java:
src/e/debug/HungAwtExit.java:
src/e/forms/FormPanel.java:
src/e/gui/DialogFocusRedirector.java:
src/e/gui/HeapView.java:
src/e/gui/HelpMenu.java:
src/e/gui/JAsynchronousProgressIndicator.java:
src/e/gui/SimpleDialog.java:
src/e/ptextarea/BugDatabaseHighlighter.java:
src/e/ptextarea/HyperlinkStyleApplicator.java:
src/e/ptextarea/PAbstractLanguageStyler.java:
src/e/ptextarea/PAbstractTextStyler.java:
src/e/ptextarea/PActionFactory.java:
src/e/ptextarea/PAnchorSet.java:
src/e/ptextarea/PBashIndenter.java:
src/e/ptextarea/PFind.java:
src/e/ptextarea/PIndenter.java:
src/e/ptextarea/PPlainTextStyler.java:
src/e/ptextarea/PRubyIndenter.java:
src/e/ptextarea/PTextStyler.java:
src/e/ptextarea/RegularExpressionStyleApplicator.java:
src/e/ptextarea/TabStyleApplicator.java:
src/e/ptextarea/UnprintableCharacterStyleApplicator.java:
src/e/ptextarea/UnprintableCharacterTextSegment.java:
src/e/tools/FatBits.java:
src/e/toys/world/WorldClock.java:
src/e/util/BrowserLauncher.java:
src/e/util/GuiUtilities.java:
src/e/util/StringHistory.java: remove unused imports.

src/e/ptextarea/PNewlineInserter.java: remove an unused import and an unused local.

src/e/util/NumberDecoder.java: remove an unused field.


2007-10-03 21:42:35 +0100 / mad / revision 2384

lib/build/file-list-to-wxi.rb: Fix Cygwin installer build, which was failing with:

/software.jessies.org/work/salma-hayek/lib/build/file-list-to-wxi.rb:7:in `require': no such file to load – /software.jessies.org/work/salma-hayek/lib/lib/build/uuid.rb (LoadError)
from /software.jessies.org/work/salma-hayek/lib/build/file-list-to-wxi.rb:7

lib/build/ensure-repository-orthography.rb:
lib/build/svn-log-to-html.rb: Adapt other scripts that were recently moved to this directory in a similar way, so they still find salma-hayek's root correctly. I haven't tested either of them - just fixing it while I think of it.


2007-10-03 20:53:36 +0100 / mad / revision 2383

HACKING: The history doesn't say where this superstition came from. I've failed to find anything in my saved email (which isn't surprising given how little there is to search on). I say "superstition" because it's not really ringing any bells in my mind. All the problems I remember were with Ruby, though I might have assumed it was a Windows thing. I do have a vague feeling that we got a Ruby exception when writing to (unopened) $stderr and then tried to dump a stack trace... to $stderr. Perhaps the exception handler reentered itself (though that sounds like it would be a Ruby bug). Perhaps it was Ruby's default exception handler. Even if it had applied to Java as well as Ruby, ruby-launcher fixed this issue, by opening "/dev/null" as file descriptors 1 and 2 if they're not already open. If it happens again, I'm sure we'll record it more convincingly.


2007-10-03 06:22:07 +0100 / enh / revision 2382

bin/ensure-repository-orthography.rb:
bin/make-new-project:
lib/build/ensure-repository-orthography.rb:
lib/build/make-new-project.sh: move a couple of scripts that are only ever run by hand (if that; especially since future repositories are likely to be Mercurial rather than Subversion).


2007-10-03 06:17:30 +0100 / enh / revision 2381

bin/find-jdk-root.rb:
bin/which.rb: inline "which.rb" into its only caller. There's also a Talc replacement for this.


2007-10-03 06:14:54 +0100 / enh / revision 2380

bin/filter-build-output.rb:
lib/build/filter-build-output.rb:
simple.make: move another bit of the build system.


2007-10-03 06:13:29 +0100 / enh / revision 2379

bin/escape-for-html.rb:
bin/make-img-tag.rb: I'm already using the Talc replacements for these scripts.


2007-10-03 06:10:13 +0100 / enh / revision 2378

bin/javahpp:
bin/javahpp.rb:
universal.make: "javahpp" is (potentially) an end-user tool, so it shouldn't have a script extension.


2007-10-03 06:08:11 +0100 / enh / revision 2377

dist-exclude:
lib/build/dist-exclude:
universal.make: move another part of the build system out of the way.


2007-10-03 06:05:27 +0100 / enh / revision 2376

bin/file-list-to-wxi.rb:
bin/make-version-file.rb:
bin/package-for-distribution.rb:
bin/svn-log-to-html.rb:
bin/uuid.rb: move these files...

lib/build/file-list-to-wxi.rb:
lib/build/make-version-file.rb:
lib/build/package-for-distribution.rb:
lib/build/svn-log-to-html.rb:
lib/build/uuid.rb: ...into the new directory for build scripts.

universal.make: update the makefile.


2007-10-03 05:57:31 +0100 / enh / revision 2375

universal.make: make it possible to set JAVA_COMPILER from the environment, and make it possible to choose GCJ as your Java compiler. Also an independent but related hack to add a "make gcj" target to install a GCJ-compiled native binary in /usr/bin/. (Note that GCJ use requires GCJ_MAIN_CLASS to be set to the class whose main method you want the generated binary to run.)


2007-10-03 05:48:14 +0100 / enh / revision 2374

lib/build: new directory for build scripts and the like.


2007-10-03 05:37:41 +0100 / enh / revision 2373

bin/send-meeting-requests-to-ical.rb: I haven't used this in forever, and this repository isn't the right place for it anyway. It's on my blog if I need it again, which I won't.


2007-10-03 05:33:41 +0100 / enh / revision 2372

bin/xv:
src/e/tools/Xv.java: I now have a machine so fast even GIMP loads in an acceptable time, and my only real complaint with "Eye of GNOME" is its ridiculous name. I've been threatening to get rid of Xv for ages, and no-one's spoken up in its defense, so out it goes...


2007-10-02 18:32:21 +0100 / mad / revision 2371

bin/install-everything.sh: A copy of this was added to BlueArc's misc repository on 2006-06-09, where it's been improved. I've copied the FIXME to Terminator's TODO although, on reflection, I should have copied the code too.


2007-10-02 16:07:36 +0100 / enh / revision 2370

src/e/util/FileUtilities.java: Chris Reece had trouble with us translating /home/car/Projects/terminator to ~Projects/terminator instead of ~/Projects/terminator, because his HOME was /home/car/ instead of /home/car. Make life simpler for callers (and fix his problem) by guaranteeing that getUserHomeDirectory returns a string with no trailing File.separators.


2007-09-27 21:12:46 +0100 / enh / revision 2369

universal.make: make it possible to build source .tar.gz files for Mercurial-based projects.


2007-09-25 22:20:33 +0100 / mad / revision 2368

TODO: WiX makes everything difficult but I haven't even looked into how to implement these RFEs, so remove the misleading impression that I have. My "objection" to opening a monolog box to say "Hey dude! Success!!1 We've done the right thing!" isn't that it's difficult - it's just depressing. The most compelling argument for having such a box is to say "look on the desktop - we haven't sprayed shortcuts into some random sub-directory of your start menu that you'll never find".


2007-09-22 01:10:42 +0100 / enh / revision 2367

TODO: move the (Windows) installer-related to-do items that were hiding in Terminator's to-do list here.


2007-09-22 01:06:09 +0100 / enh / revision 2366

src/e/debug/EventDispatchThreadHangMonitor.java:
src/e/gui/JFrameUtilities.java:
src/e/ptextarea/PTextAreaSpellingChecker.java:
src/e/tools/JavaHpp.java:
src/e/tools/Xv.java:
src/e/util/FileUtilities.java:
src/e/util/GuiUtilities.java:
src/e/util/InAppServer.java:
src/e/util/Parameters.java:
src/e/util/SpellingChecker.java: it might be easier to quote like 'this' than like "this" in source, but the former looks weird.


2007-09-21 23:46:28 +0100 / enh / revision 2365

bin/package-for-distribution.rb: support installation of section 1 manual pages.


2007-09-21 21:02:06 +0100 / enh / revision 2364

src/e/forms/FormDialog.java:
src/e/gui/JFrameUtilities.java: move the Window-geometry preservation code to JFrameUtilities (which should probably be called WindowUtilities).


2007-09-21 18:05:15 +0100 / enh / revision 2363

bin/install-build-prerequisites.sh: replace our build-dependencies shell script...

bin/package-for-distribution.rb:
lib/DEBIAN-control-Build-Depends.txt: with proper Debian build dependencies. Use "sudo apt-get build-dep org.jessies.terminator" (or whatever) to get those packages you don't already have.


2007-09-21 18:02:04 +0100 / enh / revision 2362

bin/install-build-prerequisites.sh: our non-build dependencies are now expressed elsewhere.


2007-09-20 02:25:49 +0100 / mad / revision 2361

www/cygwin-setup.html: Now the message no longer says "you can safely ignore this", we'd better stop advising the reader to ignore it. I wonder how I installed. I've overwritten my /etc/passwd and /etc/group by following the suggestions, with the -d options. That stopped Terminator from running until I jumped through another hoop. I wonder if my nightly build will break.


2007-09-20 02:13:35 +0100 / mad / revision 2360

www/cygwin-setup.html: Mark Connell points out that our quote of the Cygwin "mkgroup" message is out-of-date. In particular, the "message is only displayed once" part has gone... and the message is displayed in every new terminal, as Mark says.


2007-09-19 01:04:54 +0100 / enh / revision 2359

src/e/ptextarea/FileType.java:
src/e/ptextarea/PCSharpTextStyler.java: basic coloring for C#. As far as I know, we can share the Java indenter.


2007-09-08 05:42:00 +0100 / enh / revision 2358

bin/package-for-distribution.rb: remove some duplication and use relative symbolic links to make it possible for users to install our packages somewhere other than /.


2007-09-08 05:25:59 +0100 / enh / revision 2357

bin/show-alert.rb: fix this lintian(1) complaint:

  W: org.jessies.evergreen: script-not-executable ./usr/share/software.jessies.org/evergreen/Resources/salma-hayek/bin/show-alert.rb


2007-09-06 16:23:01 +0100 / enh / revision 2356

src/e/util/GuiUtilities.java: don't try to run the X11 code on Windows. That's silly.


2007-09-06 16:19:01 +0100 / enh / revision 2355

www/index.html: work around the same problem in the other file I touched. If anyone knows how to fix the CSS, I'm happy enough with our appearance, but I'd rather not have all the minor irritations!


2007-09-06 16:16:03 +0100 / enh / revision 2354

www/downloads.html: work around what's probably a problem with my CSS.


2007-09-06 16:14:32 +0100 / enh / revision 2353

www/downloads.html:
www/index.html: make the instructions clearer for anyone who ignores our advice to use Subversion and tries to use a .tar.gz instead. Include the specific error message they're likely to see.


2007-09-05 21:39:30 +0100 / mad / revision 2352

bin/find-jdk-root.rb:
universal.make: Adapt to the new java-launcher name in comments...

bin/invoke-java.rb: ... and in the code that specifies the executable's path. I considered changing @launcher and friends to @java_launcher. That might still be a good idea but it obscured the necessary change so it would be better in a separate, cosmetic-only check-in. Plain "@launcher" is probably fine in a local variable anyway - which launcher we mean is clear from context unless you're grepping and even then it's clear if you know the code.


2007-09-05 21:30:32 +0100 / mad / revision 2351

native/all/launcher:
native/all/java-launcher: Rename the directory.

native/all/java-launcher/launcher.cpp:
native/all/launcher/java-launcher.cpp:
native/all/launcher/synchronizeWindowsEnvironment.cpp:
native/all/launcher/synchronizeWindowsEnvironment.h:
native/all/launcher/WindowsDirectoryChange.cpp:
native/all/launcher/WindowsDirectoryChange.h: Disturbingly, Subversion is telling me that all of the directory's contents, current and historical, are deleted. Yet they're still in my work area.

Now trying to commit with svn commit. checkintool failed with "cannot commit a directory deletion non-recursively" or words to that effect.

Now trying a second time with svn commit. The first attempt failed with:

svn: Commit failed (details follow):
svn: Out of date: '/trunk/native/all/launcher' in transaction '2350-1'



2007-09-05 20:18:59 +0100 / mad / revision 2350

native/all/launcher/java-launcher.cpp:
native/all/launcher/launcher.cpp: Sigh. Subversion wants me to check-in the renamed source file before it lets me rename the directory.

martind@duezer:~/software.jessies.org/work/salma-hayek/native/all$ svn mv launcher java-launcher
svn: Use --force to override this restriction
svn: Move will not be attempted unless forced
svn: 'launcher/java-launcher.cpp' has local modifications
martind@duezer:~/software.jessies.org/work/salma-hayek/native/all$


2007-09-05 20:00:03 +0100 / mad / revision 2349

native/all/launcher/launcher.cpp: Clean-up two other " str"-related C-isms.


2007-09-05 19:45:11 +0100 / enh / revision 2348

native/all/launcher/launcher.cpp: mad groans at strdup(3), and I can't find any excuse for it (I thought the users needed a char*, but they don't).


2007-09-05 05:36:22 +0100 / enh / revision 2347

bin/invoke-java.rb: actually, let's commit a disabled version of the changes necessary to use our own launcher on Mac OS.


2007-09-05 05:33:29 +0100 / enh / revision 2346

universal.make: on Mac OS, build all C++ as Objective-C++ and make the Cocoa framework available, so we can easily do Mac-specific stuff.

native/Headers/ScopedAutoReleasePool.h: make it possible to use this header file from C++.

native/all/launcher/launcher.cpp: add Mac OS support. Starting a JVM on Mac OS is quite different from other OSes, plus there are a couple of new options we need to support. If you actually want to use this, you'll need something like the following patch in addition:

--- bin/invoke-java.rb (revision 2344)
+++ bin/invoke-java.rb (working copy)
@@ -133,8 +133,20 @@ Java::initialize
       # This launcher doesn't use the same algorithm as Sun's for picking a jvm.dll.
       @launcher = "#{@salma_hayek}/.generated/#{target_directory()}/bin/launcher"
     end
+ if target_os() == "Darwin"
+ # For Sparkle to work, we need our [NSBundle mainBundle] to point to our .app bundle.
+ # For that to work, the executable that starts the JVM must be in the Contents/MacOS/ directory.
+ mac_os_launcher = "#{@project_root}/../../MacOS/launcher"
+ if File.exist?(mac_os_launcher)
+ @launcher = mac_os_launcher
+ else
+ # We're probably running from a developer's working copy.
+ # Better to run without Sparkle than not run at all.
+ @launcher = "#{@salma_hayek}/.generated/#{target_directory()}/bin/launcher"
+ end
+ end
   end
-
+
   def get_java_version(java_executable)
     # We might like to use -fullversion, but Debian's gij-wrapper Perl script only understands -version. I think for our purposes here, "-version" is accurate enough.
     java_version = `#{java_executable} -version 2>&1`.chomp()



2007-09-04 18:46:24 +0100 / enh / revision 2345

src/e/util/GuiUtilities.java: avoid NullPointerExceptions when the peer is null. (The JDK always seems to check peer before using it.)


2007-09-03 22:42:26 +0100 / enh / revision 2344

src/e/ptextarea/ExternalSearchItemProvider.java: fix "Look Up in Wikipedia" on Mac OS, and make it clear – now I've tried it – that enhancing the Mac-specific dictionary lookup in a way I'd considered turns out to be pointless.


2007-09-03 22:30:10 +0100 / enh / revision 2343

src/e/ptextarea/ExternalSearchItemProvider.java: pull the Mac-specific Dictionary.app code aside and make the normal web-based searching more uniform. Add a "Look Up in Wikipedia" option, but remove the (Mac-only) "Search in Spotlight" because Spotlight's a big fat waste of space.


2007-09-03 22:26:53 +0100 / enh / revision 2342

bin/invoke-java.rb: minor tidying of comments.


2007-09-03 20:32:14 +0100 / enh / revision 2341

src/e/ptextarea/HyperlinkStyleApplicator.java:
www/index.html: use our own website in example URLs.


2007-09-03 01:01:16 +0100 / enh / revision 2340

bin/package-for-distribution.rb: only work out the compressed version number once, add it to the Mac OS "Info.plist", and use Ruby to find the Content/Resources/ directory at run-time, so we can do the equivalent of realpath(1) on Mac OS even though it doesn't have a realpath(1) binary.


2007-08-30 06:35:03 +0100 / enh / revision 2339

src/e/util/GuiUtilities.java: fix an IllegalArgumentException; there are no implicit conversions here.


2007-08-30 06:31:10 +0100 / enh / revision 2338

src/e/util/GuiUtilities.java: commit a library-strength version of the code I just posted on my blog.


2007-08-26 23:52:33 +0100 / enh / revision 2337

src/e/gui/EMenuBar.java: I still can't work out how to forward key events, so add code to search the menu bar for a menu item whose accelerator property is the given KeyStroke.


2007-08-26 21:34:20 +0100 / enh / revision 2336

src/e/ptextarea/PRubyTextStyler.java: treat RubyDoc as a multi-line comment. This may lead to false matches, but it's a step forward without either switching to regular-expression coloring or putting much effort into the existing scheme. The obvious change of switching to something like isStartOfCommentToEndOfLine doesn't work because we also need to know how many characters to skip (which we can simply infer from the definition of the existing case).

src/e/ptextarea/PAbstractLanguageStyler.java:
src/e/ptextarea/PJavaScriptTextStyler.java:
src/e/ptextarea/PPhpTextStyler.java: make a default explicit and remove duplication.


2007-08-22 04:59:59 +0100 / enh / revision 2335

src/e/ptextarea/PRubyIndenter.java: we should indent after "x.each() do" the same as "x.each() {", as Marsell P-K ("Tom") points out.


2007-08-15 06:07:09 +0100 / enh / revision 2334

bin/invoke-java.rb: it can be useful for an application to know where the project root is on the file system, so pass it through as a system property. (An example use is reading a default configuration from the project's lib/ directory.)


2007-08-12 07:43:03 +0100 / enh / revision 2333

www/ubuntu-setup.html: bring this up to date for Ubuntu 7.04 (the current stable release), and correct an error in the Wireshark installation.


2007-08-10 19:38:37 +0100 / enh / revision 2332

bin/invoke-java.rb: Kevin Lidh didn't get back to us on whether this fixed his "gij" problem (he'd already switched to Sun's JVM), but it seems likely to, and should protect us against accidentally running "gij" as java(1).


2007-08-09 22:26:45 +0100 / enh / revision 2331

src/e/gui/PatchListCellRenderer.java: ensure that the selection is always visible in patches presented as lists, as it is in patches presented as text.


2007-08-09 17:29:09 +0100 / enh / revision 2330

bin/download-latest-jdk.rb:
bin/target-os.rb: neilb points out that util-linux's arch(1) is deprecated as of version 2.13, which entered Debian unstable as of 2007-07-10. Make it clearer that we only call it on Linux, and switch over. (I didn't find a rationale, but it turns out arch(1) isn't specified by POSIX, so that might be the reason. "uname -m" is POSIX.)


2007-07-30 03:38:15 +0100 / enh / revision 2329

bin/nightly-build.rb: add support for nightly builds of projects in Mercurial repositories.


2007-07-29 17:10:13 +0100 / pcn / revision 2328

tests/run_tests: Fixed the test runner for MacOS/BSD, on which the 'mktemp' program requires a template argument.


2007-07-27 07:07:07 +0100 / enh / revision 2327

src/e/util/TimerUtilities.java: fix getQueuedSwingTimers for Java 7.


2007-07-27 06:34:30 +0100 / enh / revision 2326

src/e/gui/JFrameUtilities.java: FatBits doesn't have an icon, but it now shares the code that tries to set the window manager icon, so make that code silent in the case where there's no icon to load.


2007-07-27 06:29:31 +0100 / enh / revision 2325

src/e/gui/AboutBox.java: ensure we dispose the JDialog used to implement about boxes.

src/e/gui/SimpleDialog.java: ensure we dispose the JDialog used to ask modal questions.


2007-07-27 05:25:27 +0100 / enh / revision 2324

bin/make-version-file.rb: add support for getting version numbers from Mercurial repositories too.


2007-07-27 00:48:17 +0100 / mad / revision 2323

universal.make: Get rid of all but two mentions of the .svn directory, and keep those in one place. That looks to be the minimum we can easily get away with. As the first line suggests, this is a small step in the direction of supporting Mercurial.


2007-07-26 07:02:45 +0100 / enh / revision 2322

src/e/gui/MainFrame.java: mad pointed out that it was clear from our built-in debugging output that we weren't disposing most of our dialogs and frames. This class, though its name is ugly, factors out what I currently believe to be the best way of coping with the problem.

src/e/debug/EventDispatchThreadHangMonitor.java:
src/e/gui/DebugMenu.java:
src/e/gui/JAsynchronousProgressIndicator.java:
src/e/gui/JFrameUtilities.java:
src/e/gui/StopIcon.java:
src/e/tools/FatBits.java:
src/e/tools/HtmlViewer.java:
src/e/tools/JarExplorer.java:
src/e/tools/JavaWidgetFactory.java:
src/e/tools/TableViewer.java:
src/e/tools/WeatherWindow.java:
src/e/tools/Xv.java:
src/e/toys/world/WorldClock.java: switch our JFrame users over.

bin/notepad:
src/e/tools/notepad:
src/e/tools/notepad/Notepad.java:
src/e/tools/notepad/NotepadWindow.java: remove this, because it looks unlikely to be picked up again. (If I had the time, my current thoughts in that space are quite different anyway.)


2007-07-24 05:32:01 +0100 / enh / revision 2321

src/e/util/PatternUtilities.java: susiw suggests that we should default to "(?m)" because it's more useful if ^ and $ match the start and end of each line rather than just the start and end of input. \A and \Z are still available for the rare cases where you actually want the latter, or there's (?-m). I've also updated the documentation link to point to the Java 6 Pattern documentation.


2007-07-23 17:29:49 +0100 / mad / revision 2320

bin/target-os.rb: Elliott points out that this should have been @os_name, not os_name. I thought it was scary that it was still working, but it will just have been calling os_name() with implicit parentheses. This does fortuitously give me the opportunity to correct my statement that NSRunAlertPanel still doesn't work for me. It does when run by double-clicking SCM.app, which is what Grant Morgan was trying to do. It doesn't when run from the command line but maybe it never did.


2007-07-23 16:54:18 +0100 / mad / revision 2319

bin/target-os.rb: Fix the recent regression here whereby we were reported the target architecture on Mac OS as i386 (on my Intel MacBook). Remove the cause of the confusion that led to a correct-looking patch causing this regression (we shouldn't have had an accessor called "target_os" and a local variable called "target_os" when the accessor wasn't returning the value of that local variable).

This doesn't fix the problem where NSRunAlertPanel doesn't display anything (for me and Grant Morgan) but it does mean that at least I'm running the same code that I'm building.


2007-07-23 07:46:45 +0100 / enh / revision 2318

src/e/gui/AboutBox.java: connect the "License" button up so it does something. We could do with a simple ButtonPanel rather than keep reinventing it over and over. I've also made Esc close the about box (on all platforms). Note that this code will need updating when we switch to GPLv3, and we should either pull FatBits out into its own repository and switch it over to the GPL or improve this code to recognize what license it's shipped with (though that would require us to copy the license somewhere convenient in the distributions for the code to find, and seems like making work so we can make things more complicated, which doesn't seem like a positive direction).


2007-07-23 07:21:39 +0100 / enh / revision 2317

src/e/gui/JFrameUtilities.java: make it easier to close a window when the user hits Esc, even though Java's ridiculous class hierarchy for heavyweight components does its best to get in the way. Also change makeSimpleWindow so we automatically add close-on-Esc behavior to those windows (we were already adding close-on-C-W behavior on Mac OS).


2007-07-23 06:44:26 +0100 / enh / revision 2316

src/e/util/ComponentUtilities.java: remove accidentally-committed debugging output.


2007-07-23 03:20:03 +0100 / enh / revision 2315

bin/invoke-java.rb: make it possible to change one's mind about the class name after construction.


2007-07-23 03:11:37 +0100 / enh / revision 2314

src/e/gui/AboutBox.java: add the "License" button to the GTK+ about box. Leave it disabled for now.


2007-07-23 03:01:46 +0100 / enh / revision 2313

src/e/forms/FormDialog.java:
src/e/util/ComponentUtilities.java: move tieButtonSizes into ComponentUtilities and make it more general (there's no reason to limit it to two buttons) and make it work better (with the GTK+ LAF, at least, it seems to help to set all the sizes if you have buttons with icons and buttons without).


2007-07-21 21:02:08 +0100 / enh / revision 2312

bin/invoke-java.rb: File.exist? is slightly cheaper, slightly shorter, avoids the missing-parentheses ambiguity, and is the usual idiom unless you already have a Pathname.


2007-07-21 06:32:24 +0100 / enh / revision 2311

bin/target-os.rb: cache all the exported functions' values. This doesn't knock much off the time taken by "invoke-java.rb", but it's easy and makes the code more regular anyway.


2007-07-21 06:08:23 +0100 / enh / revision 2310

bin/show-alert.rb: make our alert-showing more robust. The symptom of this, thanks to zenity(1)'s crazy defaults, is a dialog box with the title "Information" and the message "All updates are complete.".


2007-07-20 07:02:55 +0100 / enh / revision 2309

bin/invoke-java.rb:
src/e/gui/AboutBox.java: support Sébastien Pierre's hand-crafted 32x32 icons in preference to scaling down 128x128 icons for title bars. We'll want to make use of his 512x512 icons at some point, but we can worry about that later. (Personally, I'm sorely tempted to use the really big icons on the web pages.)


2007-07-14 06:47:20 +0100 / enh / revision 2308

src/e/tools/JavaHpp.java: follow the "throw by value, catch by const reference" rule.


2007-07-09 01:29:42 +0100 / enh / revision 2307

src/e/util/ByteBufferUtilities.java: never use FileChannel.map, because without a corresponding unmap, it's too broken to be useful.


2007-06-29 00:05:16 +0100 / enh / revision 2306

src/e/util/StringUtilities.java: in Terminator at least, asking nCopies for one copy is not unusual. The JDK's Collections.nCopies for Object doesn't have special cases for 0 and 1, though it is much faster than us when it comes to large values. At the moment, though, I think for StringUtilities.nCopies, large values are more likely to be errors. I've included the microbenchmark I used. On my machine, I went from about 860ns down to about 600ns/610ns depending on whether I pass a String or a char.


2007-06-26 08:13:29 +0100 / enh / revision 2305

src/e/gui/HeapView.java: help consign MessageFormat to the dustbin of history, by switching to String.format.

src/e/forms/FormDialog.java: this can't really be fixed.


2007-06-23 05:58:31 +0100 / enh / revision 2304

www/bug-report.html: cover all four possible bug-reporting/FAQ-reading situations.


2007-06-23 05:33:39 +0100 / enh / revision 2303

www/header.html: hard-code a BASE HREF for the benefit of...

bin/ssi.rb: a new script that's an off-line SSI pre-processor. Useful for testing changes to SSI-based websites before they go live. In addition to producing a pre-processed HTML file, we run tidy(1) to give things a once-over.


2007-06-21 17:44:31 +0100 / mad / revision 2302

universal.make: If the last command in a pipeline succeeds, the pipeline as a whole succeeds (by default), even if an earlier command fails. That's why I didn't get to see this quoting mistake until the occasional "clock skew" message I see from the Windows build provoked filter-build-output.rb into showing all the output from that rule.

Symlinking the latest terminator.msi...
ssh software@jessies.org rm -f /home/software/downloads/windows/terminator.msi '&&' \
ln -s terminator-5.52.2301.msi /home/software/downloads/windows/terminator.msi '&&' \
ls -t '"/home/software/downloads/windows/terminator-*.msi"' '|' tail +8 '|' xargs rm -f
/home/software/downloads/windows/terminator-*.msi: No such file or directory
make[1]: warning: Clock skew detected. Your build may be incomplete.

When passing the -name argument to find, we wanted find to see the *. Now we're calling ls, we want its parent shell (on jessies.org) to expand the *. So remove one layer of quoting and, while I'm there, make it clearer what exactly what we know we should quote.

There will have been no functional problem because of this bug because we didn't have any binary builds ready for removal.


2007-06-20 21:24:36 +0100 / mad / revision 2301

universal.make: We haven't changed anything except scm for the last week. All of our binary downloads have been wiped by the -mtime +7 condition. I can imagine what we were thinking - what if we upload lots of builds during a week? I'm not sure what we really want, to be honest, but removing all the builds isn't a nice failure mode. We'd rather have seven builds all from today and nothing any older.

I haven't really tested this yet.


2007-06-08 06:40:25 +0100 / enh / revision 2300

src/e/util/TimeUtilities.java: show fractional seconds to an arbitrary (but consistent) number of decimal places.


2007-06-08 06:28:10 +0100 / enh / revision 2299

native/Headers/WindowsDllErrorModeChange.h: fix indentation.


2007-06-07 23:50:19 +0100 / mad / revision 2298

native/all/launcher/launcher.cpp: Telling Cygwin to reinstall Ruby fixed my ruby_init_stack problem. I guess I was running Terminator or (perhaps more likely) there were zombie Ruby processes lying around last time I did a Cygwin update.

Now ruby-launcher does complain with a monolog box if you ask it to start an executable whose DLLs can't be loaded. Sadly, it complains four times with an identical monolog. I guess Cygwin's doing some path searching or trying the filename with and without .exe, .com etc. Still, better four half-decent error messages than silent failure.

Let's use it in (java-)launcher too, until we come up with a reason not to.


2007-06-07 22:51:44 +0100 / mad / revision 2297

native/Headers/WindowsDllErrorModeChange.h: Ah, GetErrorMode requires Vista.


2007-06-07 22:49:22 +0100 / mad / revision 2296

native/Headers/WindowsDllErrorModeChange.h: Gonna need to spell Cygwin correctly...

native/all/ruby-launcher/ruby-launcher.cpp: ... and to include <windows.h> (currently the same way (java-)launcher.cpp does).


2007-06-07 22:27:55 +0100 / mad / revision 2295

I've got another silent problem starting my shortcuts today. If I hack the shortcuts to say ruby.exe instead of ruby-launcher rubyw, then I see a monolog box saying:

ruby.exe - Entry Point Not Found
The procedure entry point ruby_init_stack could not be located in the dynamic link library cygruby18.dll.

This is even after a reboot but, at the moment, I'm less concerned about my broken shortcuts and more concerned about the fact that the failure is silent.

native/all/ruby-launcher/ruby-launcher.cpp: Before the exec, call the suggestion from...

native/all/launcher/launcher.cpp: ... the string literal here, which can now become...

native/Headers/WindowsDllErrorModeChange.h: ... code.

I'm wary of turning it on by default in java-launcher because the posix behavior may be what saves us if and when we install both i386 and amd64 versions. I'm checking this in to record it in the history but also to help me get the code from the editor on Linux to my Windows machine for compilation. If it successfully reveals my ruby-launcher error and doesn't get in the way normally, then perhaps I should make the java-launcher change too.


2007-06-04 16:09:03 +0100 / mad / revision 2294

src/e/ptextarea/PAnchorSet.java: Another small simplification with no (intentional) functional change.

The use of "index" to mean offset into the text is confusing me a little too. I think I'm used to it being called "offset" elsewhere in the code. Searching for getIndex, I only find PAnchor's closest relatives and some dead code in PLineList.


2007-06-03 22:34:14 +0100 / mad / revision 2293

src/e/ptextarea/PAnchorSet.java: We binary search the anchors for a text offset, then linearly search backwards stopping before we'd return an anchor with a lower offset. Let's always do the linear search, so we have less conditional code. This shouldn't be a functional change, just a small simplification and perhaps a hardening against future changes. If, for example, we started to discriminate between anchors with the same offset but still sorted primarily by offset, then we'd need to do the linear search even if the binary search found no exact match.


2007-06-03 07:20:14 +0100 / enh / revision 2292

src/e/ptextarea/PAnchor.java: tidy up PAnchor.equals slightly, and fix hashCode so that equal PAnchor instances have equal hash codes.


2007-06-03 02:23:05 +0100 / enh / revision 2291

www/cygwin-problems.html: I misunderstood a few things here at first. Since it's aimed at an international audience, I've tried to make things a bit more explicit, and I've added a link to the cygwin-patches thread.


2007-06-02 22:53:41 +0100 / mad / revision 2290

www/cygwin-problems.html: It's been asked twice, but perhaps cygwin-problems is a better place than the FAQ.


2007-06-02 22:19:55 +0100 / enh / revision 2289

src/e/ptextarea/PHighlight.java: IdentityHashMap allows null values, so there's no need to invent a fake non-null value to make it clear we're only using it as an identity-based key set.


2007-06-02 20:14:45 +0100 / enh / revision 2288

src/e/ptextarea/PAnchorSet.java: Phil seems to be threatening to over-complicate this code too, having written a comment longer than the code to switch to a bulk copy and a bulk remove, so head him off at the pass, at the risk of introducing yet another bug into the overly-subtle anchor code.


2007-06-02 19:51:50 +0100 / enh / revision 2287

src/e/ptextarea/PAnchorSet.java:
src/e/ptextarea/PHighlight.java:
src/e/ptextarea/PTextArea.java: Phil was right about the cause of the recent wandering highlights problem, but none of us liked his fix. Since identity's important, and the only O(1)-lookup identity-based collection is IdentityHashMap, let's use that (with bogus values) and just switch from Collection.contains to Map.containsKey. I've also made PAnchorSet and its methods as hidden as possible, to make it clear that this class really isn't for public consumption. (I still think we could make the whole anchor thing a lot simpler.)


2007-06-01 22:47:50 +0100 / pcn / revision 2286

src/e/ptextarea/PAnchorSet.java: Fixed 'removeAll' so it doesn't delete PAnchors we didn't mean to delete. Because the set's '.contains' method was used to determine whether each anchor was a deletion candidate, which is based in turn on the .equals() method of the PAnchor, which is implemented purely in terms of the anchor's index in the text buffer, the attempted deletion of any PAnchor with a text buffer index of <n> was deleting *all* PAnchors with the same text buffer index. This was causing the weird wandering spelling mistakes bugs we were seeing when a find was cancelled.

I've implemented it using the 1.5 JDK methods; when we move to 1.6, we should use a 'NavigableSet' and use the reverse iterator available from that interface, rather than this rather ugly implementation which requires us to take a copy of the anchors to delete, and then reverse the list.

I've also added a little comment pointing out an inefficiency. Probably not such a dangerous one, mind.


2007-05-31 15:03:12 +0100 / mad / revision 2285

native/all/launcher/launcher.cpp: Next time we run into a DLL we can't load, let's at least remind ourselves in the error message of the previous reason, and of the suggestion that I never got around to implementing, which was to temporarily re-enable the modal dialog that Windows uses for reporting such errors (which Cygwin has to disable for a more Unix-like experience).


2007-05-31 14:48:15 +0100 / mad / revision 2284

native/all/launcher/launcher.cpp: Now that WindowsDirectoryChange.cpp is throwing std::runtime_error, we'd better catch that at the top level. What was I doing with the UsageError everywhere? Clearly many of these errors could never result from an error on the command line. Switch away from UsageError in those cases, rendering UsageError currently useless because I'm (now!) displaying the usage whatever the uncaught exception.

Really, I just came in here to improve an error message, but that can wait for the next check-in...


2007-05-25 17:01:11 +0100 / enh / revision 2283

src/e/gui/DebugMenu.java: I also needed to factor out the creation of windows with a button panel above a (possibly) scrollable area, so I could avoid having the "Refresh" button in the "Show Debugging Messages" window scroll with the text.


2007-05-25 07:11:27 +0100 / enh / revision 2282

src/e/gui/DebugMenu.java: make the "Show Debugging Messages" Action's name match its title. Use PTextBuffer.readFromFile to read the log to avoid showing "\r" at the end of each line on Windows. Add a "Refresh" button. Factor out the repeated idiom for making a button panel.


2007-05-25 06:20:36 +0100 / mad / revision 2281

native/all/launcher/launcher.cpp: I meant to mention this in the check-in comment but it's perhaps better as a code comment even if I hadn't forgotten.


2007-05-25 05:39:54 +0100 / mad / revision 2280

www/cygwin-problems.html: Just as I alleged to have fixed the Ruby "ubygems" and other startup problems, Chris found a problem we'd never seen before that also prevented startup, albeit at the (java-)launcher stage. Let's be very clear that we'd like the user to tell us what happens when they try starting it from bash.


2007-05-25 05:35:25 +0100 / mad / revision 2279

native/all/launcher/launcher.cpp: Rework to make it possible to change to the JRE bin directory (where java.exe) lives while trying to load the jvm.dll. Use Windows-style slash sex for the path components that we append to the JavaHome we read from the registry, so that we aren't submitting API calls with paths that are neither Windows-style nor Cygwin-style. If nothing else, that was making our error messages look like they're pointing at the problem even when they're not.

native/all/launcher/WindowsDirectoryChange.cpp:
native/all/launcher/WindowsDirectoryChange.h: A class for changing the Windows current directory using the native calls to bypass Cygwin. Modern Cygwin doesn't change the underlying Windows directory when the Cygwin current directory changes (to avoid sharing violations and similar non-POSIX behavior).

http://forums.java.net/jive/thread.jspa?messageID=209306 explains the issue. Java 6's JVM depends on msvcr71.dll, which Sun distribute in the same directory as java.exe, but not the same directory as our launcher. We don't want to be in the business of redistributing Microsoft DLLs, nor of keeping track of which DLLs (eg) IBM's JVM is using today. *Hopefully* we can change the current directory before trying to load the DLL and solve the problem. I haven't worked out a way of reproducing the problem, as my explorer.exe is locking the copy of the DLL that, on my machine, is in %SystemDir%.


2007-05-25 02:33:12 +0100 / enh / revision 2278

native/all/launcher/launcher.cpp: mirror Sun's java(1) launcher's behavior when terminating because an exception was thrown from main. This should prevent our make rules not realizing that "javahpp" failed.


2007-05-24 17:55:29 +0100 / mad / revision 2277

www/downloads.html: We can make the instructions a little shorter now, at the expense of not being quite so clear that we'll be sticking our fingers in any sub-directories of what we've called ~/jessies/. That won't be a problem unless the user checks-out into an existing directory with other sub-directories.


2007-05-24 17:52:35 +0100 / mad / revision 2276

bin/nightly-build.rb: Give a sensible default for the projects_root argument again in the name of shortening the web page instructions.


2007-05-24 17:46:59 +0100 / mad / revision 2275

bin/nightly-build.rb: Elliott suggests changing the default targets from nothing to those targets a normal user might want in their nightly build, in order that we could shorten the web page's instructions on how to set up a nightly build. Looking at Elliott's alleged crontab, I can't but think that only one of his nightly builds - the one with explicit targets - has been working since my change to build the targets one at a time.

simple.make: We should probably support explicit specification of the default target, even though I couldn't use it in nightly-build because of lwm.


2007-05-24 06:51:58 +0100 / enh / revision 2274

www/index.html: set this project's SHORT_DIST_NAME.


2007-05-24 06:37:22 +0100 / enh / revision 2273

www/downloads.html: give each table a summary (mainly to keep tidy(1) quiet, in case we end up running it as part of the post-commit process), and give the spacing cells an explicit width (so they line up across tables as well as within tables).


2007-05-23 04:23:34 +0100 / enh / revision 2272

www/index.html: explicitly state that we recommend Java 6, and replace "Cygwin/Ruby" with "Cygwin" here too, now we believe that Ruby-specific Cygwin problems are a thing of the past.


2007-05-23 04:16:50 +0100 / enh / revision 2271

www/downloads.html: compress the Subversion instructions both vertically and – more importantly – horizontally, to avoid a scroll bar without needing to split the crontab entry across lines (at the cost of a worse suggested directory name).


2007-05-23 04:09:04 +0100 / enh / revision 2270

www/downloads.html: now it's no longer part of a list of architectures, "Building from Source" can go back to being called just that.


2007-05-23 04:05:35 +0100 / enh / revision 2269

www/downloads.html: I included one file size to see if it was possible to nest SSI directives, which we'd need to do to automatically list file sizes. It doesn't work, so out it comes.


2007-05-23 04:04:13 +0100 / enh / revision 2268

www/downloads.html: switch to a less verbose, more graphical format for the downloads, in the hope that it will seem less intimidating.


2007-05-22 06:51:33 +0100 / enh / revision 2267

www/downloads.html: mad reports:

  "Windows x86" site:microsoft.com gets a lot of hits, including in the
  context of being "the opposite of" x64.

so let's try to subtly hint that our .msi is 32-bit without being too verbose about it (and especially not getting in to the whole "everything but Terminator will be fine on x86 or x64, and even Terminator will work if you're using an x86 JVM on your x64 OS"). I still want to make this section less daunting, since we've done so much work to make installation "just work".


2007-05-21 20:06:07 +0100 / mad / revision 2266

bin/show-alert.rb: If we ever support "Windows Ruby", then the user might expect to stick one of our ".rbw" files on the desktop (and utilize the association between ".rbw" and the "Windows Ruby" rubyw.exe). This problem, that ruby-launcher is now taking care of for us, could then recur. That tempted me not to remove this code but, on looking more closely, it uses /proc, which ain't going to work with "Windows Ruby". At least Windows Ruby is unlikely to shoot itself in the foot with its setting of RUBYOPT.


2007-05-21 19:37:21 +0100 / mad / revision 2265

lib/installer.wxs: Run Ruby using ruby-launcher, in order to unset RUBYOPT and to give Ruby valid stderr (and stdout) file descriptors. We need to start in the Cygwin bin directory in order that ruby-launcher.exe can find cygwin1.dll. That means we need to give a full path to the (eg) bin/terminator script, which means the path will be in the Windows style - with spaces in the path and drive letters and backslashes. The shortcut executor seems to do the right thing with argv (coping with the spaces and quotes) and Cygwin Ruby (or cygwin1.dll) fortunately copes with the drive letters and backslashes.

I failed to find a way of reusing the existing DirectorySearch object (the help for DirectorySearchRef is impenetrable and there are no examples in the tutorial). Note the change in the Depth attribute. We need a depth of one here or the shortcut's working directory silently becomes empty (while still passing Orca validation).


2007-05-21 19:23:16 +0100 / mad / revision 2264

per-directory.make: Clearly I tested that change well. The effect was to link everything to the console subsystem. Well, that made a change from the previous, opposite error.


2007-05-21 06:33:42 +0100 / enh / revision 2263

src/e/ptextarea/BugDatabaseHighlighter.java: make a note of an alternative implementation.


2007-05-21 06:29:25 +0100 / enh / revision 2262

src/e/ptextarea/FileType.java:
src/e/ptextarea/PTextArea.java: if each PTextArea knows its own FileType...

src/e/ptextarea/RegularExpressionStyleApplicator.java: ..and all regular expression style applicators have the PTextArea available...

src/e/ptextarea/BugDatabaseHighlighter.java: ...the bug database highlighter can restrict itself to only linking comments in source code without losing the ability to link to bug databases in check-in comments and README files and the like.


2007-05-21 06:05:03 +0100 / mad / revision 2261

native/all/ruby-launcher/ruby-launcher.cpp: The promised code for ensuring that stderr (which is the motivating case, and stdout, for completeness) are opened before invoking Ruby, so that any warnings generated by Ruby libraries don't kill us by with EBADF.


2007-05-21 05:53:57 +0100 / enh / revision 2260

src/e/ptextarea/PAnchorSet.java: don't make a "clear" method publicly available when there's no need.


2007-05-20 23:58:14 +0100 / mad / revision 2259

native/all/ruby-launcher/ruby-launcher.cpp: Do the basic job. TODO: ensure stderr is open, try compiling on something (well, everything) other than Mac OS, hook in to Cygwin shortcut.


2007-05-20 23:56:58 +0100 / mad / revision 2258

native/all/ruby-launcher: New directory for a launcher for Ruby to shoot RUBYOPT in the head.


2007-05-20 23:03:51 +0100 / mad / revision 2257

www/cygwin-problems.html: I thought that correcting this section would make it shorter. If we did have a little C++ launcher, it could take responsibility for opening /dev/null as stderr (as well as unsetting RUBYOPTS). Then we could ditch fully half this page.


2007-05-20 22:38:08 +0100 / mad / revision 2256

www/cygwin-problems.html: I do think that what this sentence was trying to say was worthwhile, but it was a bit much for one sentence, which is perhaps what led to part of it being missed off. Perhaps the "you'll not be wanting to write your English homework in Evergreen" sentiment would be better elsewhere.


2007-05-20 17:50:39 +0100 / enh / revision 2255

src/e/gui/AboutBox.java:
src/e/gui/HelpMenu.java: I would have preferred not to have the ordering dependency, but the about box and help menu are naturally quite intimately related, and specifying the application's URL twice is a greater evil.


2007-05-20 07:46:39 +0100 / enh / revision 2254

www/navigation.html: I think the link to the "Features" section – which is the very next thing after the navigation bar – is a useless distraction and an actual impediment to grokking what's available.


2007-05-20 07:26:56 +0100 / enh / revision 2253

src/e/gui/HelpMenu.java: make a cleaner and more explicit assumption about the application's website layout.


2007-05-20 06:59:33 +0100 / enh / revision 2252

www/cygwin-problems.html: enumerate the other Cygwin Ruby startup problems we're aware of.


2007-05-20 06:53:40 +0100 / enh / revision 2251

www/cygwin-problems.html: correct the path to Terminator's log files, which moved a long time ago.


2007-05-20 06:51:44 +0100 / enh / revision 2250

www/downloads.html: make it a little clearer that it's Cygwin's Ruby we need, and condense the blurb.


2007-05-20 06:37:33 +0100 / enh / revision 2249

www/index.html: "cross-platform" is fundamental to jessies.org.


2007-05-20 06:31:11 +0100 / enh / revision 2248

www/downloads.html: add missing P tag.


2007-05-20 06:30:07 +0100 / enh / revision 2247

www/downloads.html: make it clear that Subversion is the recommended way to build from source, and explain why it's better than tarballs. Make it more likely that pasting the commands will work, and space out the sections with HTML commands for easier editing.


2007-05-20 06:22:47 +0100 / enh / revision 2246

www/downloads.html:
www/navigation.html: move the ChangeLog link to the navigation bar.


2007-05-20 06:09:16 +0100 / enh / revision 2245

www/downloads.html: pull the "Reporting a Bug" text...

www/bug-report.html: ...out into its own page...

www/navigation.html: ...and point the navigation bars there.


2007-05-20 06:03:56 +0100 / enh / revision 2244

www/downloads.html: don't imply the absence of 64-bit Linux packages.


2007-05-20 05:49:00 +0100 / enh / revision 2243

www/downloads.html: condense the download information a little.


2007-05-20 01:29:18 +0100 / enh / revision 2242

www/index.html: add a navigation bar.


2007-05-20 01:28:57 +0100 / enh / revision 2241

www/navigation.html: fix a broken link; the section is "Downloads", but the link's "verb" is "Download".


2007-05-20 01:24:12 +0100 / enh / revision 2240

www/navigation.html: an in-project navigation "bar".


2007-05-20 01:17:11 +0100 / enh / revision 2239

www/downloads.html: give all pages a link to the project's FAQ.


2007-05-20 01:14:57 +0100 / enh / revision 2238

www/downloads.html: add an anchor for the "Reporting Bugs" section.


2007-05-20 00:26:15 +0100 / enh / revision 2237

www/downloads.html: add an anchor so we can link to the auto-generated "Downloads" sections.

www/index.html: bring salma-hayek's own web page more into line with the new standard, and add a note about reducing the frequency at which Ubuntu nags you to upgrade.


2007-05-20 00:16:58 +0100 / enh / revision 2236

www/index.html: use a Terminator-style "Features" list.


2007-05-19 23:36:46 +0100 / enh / revision 2235

www/downloads.html: don't use breakable spaces in links that aren't sentences, because you can't tell how many links you're really looking at.


2007-05-19 23:33:52 +0100 / enh / revision 2234

src/e/gui/HelpMenu.java: provide a menu item to show the application's FAQ.


2007-05-19 23:29:38 +0100 / enh / revision 2233

www/downloads.html: remove an unmatched parenthesis.


2007-05-19 23:15:28 +0100 / enh / revision 2232

www/downloads.html: merge "Building from Source" into "Downloads". (The other "Building from Source" in salma-hayek's "index.html" is the one we link to, not this one, so I've removed the confusing anchor.)


2007-05-19 22:55:20 +0100 / enh / revision 2231

www/faq.html: add a FAQ, for consistency.

www/index.html: add a tag line, for consistency.

www/cygwin-problems.html: try to improve some upsetting grammar (which wasn't wrong, but was questionable and inconsistent). Add a note to the existing "why Cygwin?" section that was the main difference between this and the new "why Cygwin?" section I wrote in the FAQ, before remembering that we'd been here before.


2007-05-13 01:38:30 +0100 / enh / revision 2230

universal.make: stick to a case-sensitive file system for our Mac OS disk images, for the ease with which it lets us test running our applications from a case-sensitive file system (which has been broken before), but switch to an HFS variant, because it takes less space than UFS. See http://elliotth.blogspot.com/2007/05/choosing-best-disk-image-format-on-mac.html for a comparison.


2007-05-11 07:23:21 +0100 / enh / revision 2229

universal.make: create bzip2-compressed .dmg files. I include the raw data behind this choice:

Here are the results of making the current .dmg files with the few sensible options amongst the many choices hdiutil(1) provides:

default
-rw-r--r-- 1 elliotth elliotth 2M May 10 22:50 evergreen/.generated/universal_Darwin/bin/evergreen-4.104.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2M May 10 22:50 scm/.generated/universal_Darwin/bin/scm-2.8.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2M May 10 22:51 terminator/.generated/universal_Darwin/bin/terminator-5.32.2228.dmg

UDCO
-rw-r--r-- 1 elliotth elliotth 2M May 10 22:53 evergreen/.generated/universal_Darwin/bin/evergreen-4.104.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2M May 10 22:54 scm/.generated/universal_Darwin/bin/scm-2.8.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2M May 10 22:54 terminator/.generated/universal_Darwin/bin/terminator-5.32.2228.dmg

UDZO zlib-level=1
-rw-r--r-- 1 elliotth elliotth 2M May 10 22:55 evergreen/.generated/universal_Darwin/bin/evergreen-4.104.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2M May 10 22:55 scm/.generated/universal_Darwin/bin/scm-2.8.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2M May 10 22:55 terminator/.generated/universal_Darwin/bin/terminator-5.32.2228.dmg

UDZO zlib-level=9
-rw-r--r-- 1 elliotth elliotth 2M May 10 22:59 evergreen/.generated/universal_Darwin/bin/evergreen-4.104.2228.dmg
-rw-r--r-- 1 elliotth elliotth 1M May 10 22:59 scm/.generated/universal_Darwin/bin/scm-2.8.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2M May 10 22:58 terminator/.generated/universal_Darwin/bin/terminator-5.32.2228.dmg

UDBZ
-rw-r--r-- 1 elliotth elliotth 1M May 10 22:56 evergreen/.generated/universal_Darwin/bin/evergreen-4.104.2228.dmg
-rw-r--r-- 1 elliotth elliotth 1M May 10 22:56 scm/.generated/universal_Darwin/bin/scm-2.8.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2M May 10 22:57 terminator/.generated/universal_Darwin/bin/terminator-5.32.2228.dmg

UDBZ (bzip2) has the disadvantage of only being available in Mac OS 10.4 and later, but we already require Java 5, which limits us to 10.4 or later anyway. This change will make life worse for 10.3 users, though: they won't even be able to get as far as double-clicking and getting our little error message about needing to upgrade. I don't know what 10.3 does when given a .dmg it doesn't understand, but I imagine it's not pretty.

Still, Mac users tend to upgrade swiftly, so I don't think this is a problem in practice. I'd have gone for UDZO with zlib-level=9 if it had performed as well, because that would have been compatible with older releases, but it's not as good.

Ah... hang on... these results are misleading. Mac OS' "ls -h" only shows integers, and uses round-to-zero! Let's start again from scratch with uglier but more accurate data...

default
-rw-r--r-- 1 elliotth elliotth 2433733 May 10 23:09 evergreen/.generated/universal_Darwin/bin/evergreen-4.104.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2112598 May 10 23:08 scm/.generated/universal_Darwin/bin/scm-2.8.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2651413 May 10 23:08 terminator/.generated/universal_Darwin/bin/terminator-5.32.2228.dmg

UDCO
-rw-r--r-- 1 elliotth elliotth 2409338 May 10 23:07 evergreen/.generated/universal_Darwin/bin/evergreen-4.104.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2174589 May 10 23:07 scm/.generated/universal_Darwin/bin/scm-2.8.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2836274 May 10 23:07 terminator/.generated/universal_Darwin/bin/terminator-5.32.2228.dmg

UDZO
-rw-r--r-- 1 elliotth elliotth 2324225 May 10 23:06 evergreen/.generated/universal_Darwin/bin/evergreen-4.104.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2112597 May 10 23:06 scm/.generated/universal_Darwin/bin/scm-2.8.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2786125 May 10 23:05 terminator/.generated/universal_Darwin/bin/terminator-5.32.2228.dmg

UDZO zlib-level=9
-rw-r--r-- 1 elliotth elliotth 2202219 May 10 22:59 evergreen/.generated/universal_Darwin/bin/evergreen-4.104.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2066401 May 10 22:59 scm/.generated/universal_Darwin/bin/scm-2.8.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2671822 May 10 22:58 terminator/.generated/universal_Darwin/bin/terminator-5.32.2228.dmg

UDBZ
-rw-r--r-- 1 elliotth elliotth 1958677 May 10 23:04 evergreen/.generated/universal_Darwin/bin/evergreen-4.104.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2019296 May 10 23:04 scm/.generated/universal_Darwin/bin/scm-2.8.2228.dmg
-rw-r--r-- 1 elliotth elliotth 2522046 May 10 23:05 terminator/.generated/universal_Darwin/bin/terminator-5.32.2228.dmg

So there's not all that much in it. We save between 100KiB and 500KiB. That's better than nothing, but not nearly as good as I'd hoped for. Still, bzip2 is the clear winner in size terms, and I don't think we lose much by further excluding 10.3 users. The download link already says "For Mac OS 10.4".

The two highest compression choices (UDBZ and UDZO zlib-level=9) felt noticeably slower than the others, but I've ignored time in all this, because we don't build the .dmg often enough (or interactively enough) for that to be a consideration.

BTW, I'd been using du(1) this morning, and "du -h" does provide more useful (non-integer) results.


2007-05-11 01:55:13 +0100 / mad / revision 2228

per-directory.make: I made the other change but forgot to check it in. Too many other changes lying around.


2007-05-11 01:26:30 +0100 / mad / revision 2227

universal.make: Prevent spurious rebuilds. Touching the sentinel before the build starts was all very well for indicating when the source has changed during compilation, but the classes directories were getting touched by the compiler afterwards. That meant that it appeared that someone had (potentially) deleted some class files, so it looked like we should rebuild. Actually, we should rebuild if someone truncates or otherwise tampers with the class files too.


2007-05-10 22:56:06 +0100 / mad / revision 2226

per-directory.make: Fix non-Cygwin builds. Sigh, that non-idiomatic code lasted a long time.


2007-05-10 22:42:52 +0100 / enh / revision 2225

bin/package-for-distribution.rb: when we know we're talking to Bash, we may as well use the more descriptive "--login".


2007-05-10 21:52:52 +0100 / mad / revision 2224

per-directory.make: Given that no-one's noticed that we've been only distributing Windows subsystem binaries, let's abandon the *w.exe variant and just link everything with the Windows subsystem.

bin/invoke-java.rb: That requires a change here. This brings the installer size down from ~1.8MiB to ~1.6MiB.


2007-05-10 21:35:20 +0100 / mad / revision 2223

per-directory.make: When I "discovered" that EXECUTABLES.Cygwin didn't contain all of the Cygwin executables, I thought that was a mistake. Why I didn't stop to think that maybe I'd deliberately separated off the ones that needed linking with the Windows subsystem, I don't know. I know what I was thinking - that it was a deviation from the idiom. So let's try a different deviation from the (declarative) idiom to see if that's more robust under maintenance.

bin/invoke-java.rb: That mistake misled me grievously here and in the check-in comment for the previous change to these lines. The check-in comment does effectively record what should be the difference between Windows and Console subsystem applications:

The disadvantage of Windows subsystem applications is that they can't do stdio unless they're started from Cygwin applications.

The disadvantage of Console subsystem applications is that they pop up "a DOS box" when you run them from a Windows application (like a desktop shortcut).

This output from objdump misled me horribly today:

$ g++ ./hello.cpp
$ objdump -p a.exe | grep -i subsys
MajorSubsystemVersion 4
MinorSubsystemVersion 0
Subsystem 00000003 (Windows CUI)
$ g++ ./hello.cpp -Wl,--subsystem,windows
$ objdump -p a.exe | grep -i subsys
MajorSubsystemVersion 4
MinorSubsystemVersion 0
Subsystem 00000002 (Windows GUI)
$

So "3 (Windows GUI)" actually means "Console" and "2 (Windows GUI)" actually means "Windows".


2007-05-10 20:09:06 +0100 / mad / revision 2222

universal.make: http://cygwin.com/ml/cygwin/2006-06/msg00865.html suggests that Cygwin's been ready for DWARF-2 as the default debugging format since the middle of last year. The compiler hasn't switched over yet but it seems to work. pty.dll's size comes down from ~1.5MiB to ~0.5MiB with that change. Sadly, the installer's size only comes down from ~2.5MiB to ~1.8MiB. (And, yes, I did remember to rebuild salma-hayek (and check that it worked).)


2007-05-10 19:10:39 +0100 / mad / revision 2221

lib/installer.wxs: Fix Orca failures:

ICE57 ERROR Component 'RubyShortcut_HKCU' has both per-user data and a keypath that can be either per-user or per-machine.
ICE57 ERROR Component 'RubyShortcut_HKLM' has both per-user data and a keypath that can be either per-user or per-machine.

I haven't run Orca for a while.

A long time ago, I knew I had to install the shortcut under HKCU, even if I'm installing everything else in HKLM. The check-in comment there said [

Distressingly, because we install a shortcut to a file we didn't install, we seem to have to install a registry key under HKCU. This isn't just me trying random things - they made me do it:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/ice43.asp

].


2007-05-10 06:57:30 +0100 / enh / revision 2220

src/e/ptextarea/PRubyTextStyler.java: despite the fact that there are more provisos than code here, I've been using this for five months now, and I wouldn't want to be without it when working on Ruby scripts that are dense in regular expressions.


2007-05-10 06:33:41 +0100 / enh / revision 2219

bin/package-for-distribution.rb: compression reduces Terminator's JAR file by 300KiB, and with Java 6 on Linux and Mac OS I'm not able to reproduce the slow-down I once claimed.


2007-05-09 05:07:55 +0100 / enh / revision 2218

src/e/util/FileUtilities.java: I didn't implement my intention here, which was that the user's path should take precedence; only if we can't find our script on the path should we start trying to be clever. That way neither developers nor end-users lose out.


2007-05-07 23:09:17 +0100 / car / revision 2217

www/footer.html: Chris tires of waiting. And waiting.


2007-05-06 22:41:17 +0100 / mad / revision 2216

universal.make: While accepting that it's quite usual for make-based systems to have race conditions if you change a source file during compilation, Elliott notes that we have an unusually long window during Java compilation, which bit him. He suggested touching the sentinel file back to the date of the start of compilation, but I'd rather not get involved with timestamp granularity and, particularly, bash variables.

Add that to list of things I'd expect to be catered for by a replacement for make. It should also know when a compilation hasn't completely succeeded, even if the make tool is killed without being able to clean up the targets (disk-full is more common reason that kill -9). This sentinel file nonsense wants to be handled by the tool, so it's worth spending the effort to do it right, because the benefit will be shared by all targets.


2007-05-06 20:03:45 +0100 / enh / revision 2215

src/e/util/Rewriter.java: Roger Millington provides another useful enhancement to this class, allowing callers to supply their own StringBuffer and have the replacement appended to it. (We're forced to use StringBuffer rather than Appendable because of java.util.regex.Matcher. See Sun bug 5066679.)


2007-05-06 18:31:54 +0100 / enh / revision 2214

native/Darwin/LSFindApplicationForInfo/LSFindApplicationForInfo.mm: a Mac OS utility to return a path to an application specified by bundle id. A variant of this would let us compile small binaries with hard-coded script and bundle id that would forward to the relevant script. This would let us provide relocatable (in the file system) binaries that could be installed in /usr/bin/ and which would find the corresponding application regardless of where it had been installed.

src/e/util/FileUtilities.java: a new method, FileUtilities.findScriptFromBundle that (at the cost of forcing callers to specify a bundle id) frees callers from worrying about whether one of our scripts is actually on the user's path.


2007-05-06 18:26:24 +0100 / enh / revision 2213

native/Darwin/LSFindApplicationForInfo: new directory.


2007-05-06 03:27:32 +0100 / enh / revision 2212

src/e/tools/FatBits.java: make the window a bit wider too, to better accommodate our newly-widened content.


2007-05-06 03:18:16 +0100 / enh / revision 2211

src/e/tools/FatBits.java: display color values in both hex and decimal. Rearrange the UI to make room, and lose the circular preferences button on Mac OS, which was ugly and less convenient than command-, anyway.

src/e/gui/CircularButton.java: we don't need this any more.


2007-05-05 21:25:23 +0100 / mad / revision 2210

bin/ensure-repository-orthography.rb: The svn switch command is as obtuse, in a different way, as bk parent. I could mail round a copy-and-paste command but it would be quite long, because the URL includes the user name and we wouldn't want to mess up anyone who's using anonymous svn access. It would be nice to run this automatically after everyone updates but I haven't thought of a robust way to do that. So we'll have to rely on people running it manually. Hopefully everyone updates often enough to get this script before we turn off svn access to Evergreen-with-a-capital-E.

bin/make-new-project: We've already started suggesting that people check-out using "evergreen" rather than "Evergreen" as the directory name.

parent.make: Unlike nightly-build.rb, which goes looking for files in the child directories, this script relies on a list of known projects.

www/header.html: The URL orthography is now all lower-case.


2007-05-04 02:36:23 +0100 / mad / revision 2209

bin/show-alert.rb: If something in the invoker scripts were to write the stdout, then we'd die on Cygwin, hopefully with an alert. Which is worse, hiding the output or failing to run? On other platforms, we'd hide the output. Let's do that on Cygwin too, even though the output's quite possibly platform-specific, so we may never find out about it.


2007-05-01 21:59:04 +0100 / mad / revision 2208

www/downloads.html: Chris gives the OK for publishing our anonymous, read-only Subversion URLs. I'm sure there will be more changes - we'd rather people sent svn diff patches than using the tarballs - but this is a start.


2007-04-30 19:25:01 +0100 / mad / revision 2207

bin/show-alert.rb: The work-around for "Insecure world writable dir" warnings killing our desktop shortcuts on Windows isn't Terminator-specific. When it was written, there probably wasn't a single place where we could put a fix. Now there is. Adding this means that its name isn't right but that's a much nicer problem to have than either having three bugs or having four copies of the fix!


2007-04-30 19:09:59 +0100 / mad / revision 2206

bin/invoke-java.rb: Gain the custom Cygwin launcher support from Terminator and lose the support for letting the application decide on the launcher. Lose the support for changing the dock name after we've been constructed. That's just asking for us to do something dependent on the DEBUGGING_TERMINATOR name, only to have the variable's name changed under our feet. A read-only accessor would be fine but we don't currently need it.

By using the same launcher for all Windows applications, we'll always use the same jvm.dll. Previously, we might have been in a situation where Terminator worked and Evergreen didn't. We were previously not checking the Java version on Cygwin when running anything but Terminator. The comment explaining why wasn't quite right.

When it was originally checked-in, the Terminator version of this code used "launcher" rather than "launcherw" when DEBUGGING_TERMINATOR was set. The check-in comment says that this allowed to us to see the Log.java output in the console subsystem window which would pop-up if run from a shortcut to ruby.exe (instead of our normal rubyw.exe). This no longer works on my Cygwin installation, which is now running 1.5.21. Now, regardless of the subsystem of the launcher, I see Java stdio output in my rxvt or Terminator or Evergreen errors window. Now, regardless of the subsystem of the launcher, I don't see Java stdio output in cmd.exe or the Cygwin shortcut window or the window popped up by a shortcut to ruby.exe.

I used this as my test code:

/software.jessies.org/work/salma-hayek/.generated/i386_Cygwin/bin/launcherw -classpath c:/cygwin/software.jessies.org/work/salma-hayek/.generated/classes e/tools/JavaHpp badger


2007-04-30 17:29:31 +0100 / mad / revision 2205

www/index.html: Even if you were already using Ubuntu for development, you likely won't have all the packages you need. Especially given that we already list some of the more well-known programs that you need, any user wanting to build will likely think they already have everything, then be annoyed to find they need fakeroot, then be annoyed to find they need alien.


2007-04-30 16:17:25 +0100 / enh / revision 2204

src/e/gui/DebugMenu.java: add a new "Key Event Tester", similar to Sun's Java Tutorial's KeyEvent demo, so we don't have to send people there next time we have international keyboard trouble. (Another advantage of this code is that it will definitely be running in the same JVM, and it prints the KeyEvent directly, rather than mangling it for "readability".)


2007-04-30 06:39:25 +0100 / enh / revision 2203

src/e/gui/DebugMenu.java: the distinction between "list" and "show" was a mistake, and "Timers" and "Stopwatches" were indistinct enough that I was having to stop and think. Hopefully saying "Swing Timers" will make things more obvious.


2007-04-30 01:25:22 +0100 / enh / revision 2202

src/e/util/GuiUtilities.java: choose our default monospaced font more carefully, so we can take advantage of the fallbacks provided by the "Monospaced" logical font where possible. This won't affect Mac users (who remain well off) or Windows users (who remain screwed), but will improve things for Linux and Solaris users.


2007-04-29 00:28:02 +0100 / enh / revision 2201

src/e/gui/AboutBox.java: the .class files have moved down a level in the directory hierarchy, so we need to look further up for "build-revision.txt".


2007-04-28 06:33:24 +0100 / enh / revision 2200

bin/show-alert.rb: add a new method that reports any exceptions thrown by the given block.

bin/invoke-java.rb: use it to simplify our uncaught exception handling.


2007-04-28 05:26:07 +0100 / enh / revision 2199

bin/invoke-java.rb: there's still enough variation in our GUI start-up scripts to suggest that we're not ready to factor them out yet, but our command-line tool scripts (both of them) are identical, and – other than JNI – it's hard to imagine any need for them to be any different.

bin/javahpp.rb:
tests/indenter: use the new API.


2007-04-27 18:33:55 +0100 / mad / revision 2198

bin/invoke-java.rb: Write the exception handler in closer to the same form as used by bin/terminator and bin/evergreen. I could move launch() to show-alert.rb but I'm more tempted to add an UncaughtExceptionHandler.rb class/file and to "derive" Terminator, Evergreen and Java from it. What does the panel think?


2007-04-27 17:59:18 +0100 / mad / revision 2197

bin/show-alert.rb: It turns out that we can ignore the SystemExit exceptions here without an unwarranted amount of code. I have some sympathy with Elliott's argument that we could use exit!() everywhere but I have a bad feeling about that. The only compelling substantiation I can provide for that bad feeling is that we aren't doing it as an idiom:

martind@duezer:~/software.jessies.org/work$ sgrep '\bexit[^!]' | grep '\.rb:' | wc -l
23
martind@duezer:~/software.jessies.org/work$

We ought to be able to pay once for this wrinkle and not have to think about it elsewhere. A better way to do that, than I've done here, would be to abstract-out the three copies of this exception handler and "rescue SystemExit" separately. I don't think that's too hard either, but this is a step towards collapsing the duplicates.

If I'm going to abbreviate standard class names in identifiers, then, these days, I like to use the first two letters rather than just the first letter. In particular, there's a lot of precedent for "Exception ex".

bin/invoke-java.rb: We can go back to plain exit() now, following the other idiom we have that "! methods are a bad idea". I forget the motivating example for that, but then that's the idea - to be able to program effectively, without having to remember all the gotchas, by following a few pidgin rules.


2007-04-27 17:19:53 +0100 / mad / revision 2196

bin/show-alert.rb: Canonicalize the indentation. The indentation guesser still doesn't do the job, but then it's not aware of the file type and it's brace-structured language assumption doesn't hold well for Ruby.


2007-04-27 07:18:37 +0100 / enh / revision 2195

src/e/util/SpellingChecker.java: time our back-end, and include its greeting in the log, so we know what version we've been talking to.


2007-04-27 00:36:48 +0100 / mad / revision 2194

universal.make: Support a new "test" target, in almost exactly the same form as I suggested to Phil, off the cuff.

bin/filter-build-output.rb: Relax the regular expression so that my "Testing..." message comes out. That's all that comes out unless run_tests returns a failure, in which case we'll see all the output...

tests/run_tests: ... so we should return failure if we see anything unexpected. At the moment, I only do this if we see an unexpected failure on any test. We should consider returning failure for an unexpected success, which would indicate that the test needs changing.

simple.make: "Publish" the new target to any human reader.


2007-04-27 00:22:52 +0100 / mad / revision 2193

src/e/testing/PIndenterTester.java: Yesterday, by replacing the bash invoker script with our standard Ruby script, I lost the usage test. Put it back, in a proper language. The message is slightly different because our Ruby script knows how to pass all of the arguments, rather than just the first one.


2007-04-26 17:23:42 +0100 / mad / revision 2192

bin/nightly-build.rb: Don't tell make to clean and native-dist at the same time - there's no dependency between them to tell make to do the clean first. This bug's been there forever. I did wonder about it when shaking my head over this script's previous insistence on my having a ~/Projects but it's never caused a problem before. Today it does:

martind@wide:~/software.jessies.org/nightlies/terminator$ ../salma-hayek/bin/nightly-build.rb ~martind/software.jessies.org/nightlies/ clean native-dist
-- Updating "salma-hayek"
At revision 2191.
-- Building "salma-hayek"
make[1]: Entering directory `/home/martind/software.jessies.org/nightlies/salma-hayek'
mkdir -p .generated && \
ruby -w -ne '($_.match(/^ *(\S+)\s*[:+]?=/) || $_.match(/^\s*define\s*(\S+)/)) && puts("LOCAL_VARIABLES += #{$1}")' /home/martind/software.jessies.org/nightlies/salma-hayek/per-directory.make | sort -u > .generated/local-variables.make
make[1]: Leaving directory `/home/martind/software.jessies.org/nightlies/salma-hayek'
make[1]: Entering directory `/home/martind/software.jessies.org/nightlies/salma-hayek'
rm -f -r ChangeLog ChangeLog.html .generated && \
find . -name "*.bak" | xargs rm -f
make[1]: *** No rule to make target `.generated/classes', needed by `.generated/java.sentinel'. Stop.
make[1]: Leaving directory `/home/martind/software.jessies.org/nightlies/salma-hayek'

This affects the Mac OS build on hydrogen, where Elliott uses the same invocation of nightly-build.rb to clean and native-dist. ithaki.sh only does the clean once, then builds once on wide and once on ithaki.

bin/mdorey.sh: If Elliott uses that form on Mac OS, I should use it on Windows too, so there's more chance I'd have tested it.


2007-04-26 17:03:06 +0100 / mad / revision 2191

universal.make: The exit 1 here was having two effects - stopping us from overwriting the latest symlink with an identical symlink and dumping all the output from this rule onto stderr. If we remove the exit 1, then, the symlink won't be a problem but we need to write the error message that we still want to see in a form which will get through filter-build-output.rb.

This reduces the verbosity of the nightly build "failures" when nothing's changed, while still letting us know that nothing's changed.


2007-04-26 03:16:10 +0100 / mad / revision 2190

universal.make: Per my code-comment of the other day about the difference between INSTALLERS and PUBLISHABLE_INSTALLERS, installer should only depend on the latter.


2007-04-26 03:12:45 +0100 / mad / revision 2189

parent.make: Now that the phony rebuilds of Java are out of the way, the next one is the phony rebuilds of the installers. I remember sighing when the PHONY .app target went in, knowing we'd be here one day, trying to get rid of it. Make it easier to test, though make installer in salma-hayek fails horribly. (native-dist has a special case.)


2007-04-26 03:05:48 +0100 / mad / revision 2188

universal.make: Let's clean up the old classes/ directories we've been leaving lying around as a side-effect of compilation for a day or two, to make sure we get the bugs ironed out.


2007-04-26 02:00:39 +0100 / mad / revision 2187

universal.make: We don't want to always make the Java compilation dependent on the .generated directory, or it'll recompile spuriously. Fixing that makes the code more intention-revealing, if longer. Write the wildcards in a more idiomatic form.


2007-04-26 01:48:32 +0100 / mad / revision 2186

bin/make-new-project: The .jar file isn't in the project root directory any more.

tests/indenter: Lose the usage checking, which is unfortunate, but gain invoke-java.rb's knowledge of the classes/ directory's location (and correct handling of symlinks to this script).


2007-04-26 01:41:51 +0100 / mad / revision 2185

universal.make: Change all the references to classes/ to read .generated/classes/ , including the subtle, effective "classes/../" that I just added in the previous check-in. Abandon the tricksy .jar rule that we haven't used for ages - the one we are