2007-06-14

Customize a Device Icon in WinXP

This information is quoted from the page at Microsoft.com:

Including Icons in Device Driver Packages

Note: The following information will be included in a future 
version of the Windows DDK.

Once you have created a custom icon for a device, you can include
the icon in the device driver package by referencing it in the INF
file. The DDInstall.HW section is used to set driver-independent
information that is device-specific.

In the sample INF sections that follow, the DDInstall.HW section 
points to a separate AddReg section, which specifies the personalized 
icons.

[DDInstall.NT.HW]
AddReg = IconInformation
[IconInformation]
HKR, , Icons, 0x10000, "<name of icon file>"
HKR, , NoMediaIcons, 0x10000, "<name of no media icon file>"

The AddReg section in this example defines two separate registry values and
corresponding icon files, one for the custom icon to display when media is 
present, and a second, "NoMediaIcons," which specifies an icon to be used to 
indicate the same device when no media is inserted.

The following example shows the registry entries for a Vid_0000&Pid_0000 
device and the dynamic-link library (DLL) files that contain the 
"media inserted" and "no media" versions of the icon.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\ 
 ** remove line break before using! ** 
  Vid_0000&Pid_0000\059B003112010E93\Device Parameters
Icons [REG_MULTI_SZ]= %SystemRoot%\system32\icon.ico
NoMediaIcons [REG_MULTI_SZ]= %SystemRoot%\system32\noicon.ico

In the INF file, icon files must be listed in the [SourceDisksFiles] 
section within the INF file, and copied to the user's system by either a 
CopyFiles directive or a CopyFiles section.

During driver installation, the INF entries listed in the example 
will be stored in the Device Parameters subkey within 
HKLM\System\CurrentControlSet\Enum.

Drivers or other code should never access or modify this registry key 
directly; instead, use one of the following APIs:

* From user-mode, use SetupDiCreateDevRegKey and SetupDiOpenDevRegKey.
 
( From kernel-mode, use IoOpenDeviceRegistryKey.
 

For information about the INF entries cited here, see the Device 
Installation Reference in the current Windows DDK.

2007-06-01

interesting utilities for NTFS - TimeStomp

The article Slashdot | New Anti-Forensic Tools Thwart Police pointed to a couple interesting things:

TimeStomp is a program for viewing and setting file system object date/timestamps on the NTFS file system.

Quick TimeStomp How-To from the Security Articles section at DataStronghold.com.

2007-05-26

Firefox disapearing scroll bar problem - clues

I've been using Mozilla Firefox 2.0.0.x under Windows XP and I have found a clue to the source of the problem that can be seen when resizing the Firefox browser window horizontally and the [Firefox] vertical scroll scroll bar - at some seemingly arbitrary point - disapears under the right edge of the shrinking window.

I tried to look this problem up using Google, but I didn't find much - just some forum posts on a forum I've already forgotten the name and URI of. However, there was a vital clue in the lengthy thread which didn't apply to my situation directly: the problem is triggered by some characteristic or behavior of the Status Line.

There was also some other mention of the Status bar in the threads I looked at. Someone complained that when they removed the weather.com widget from their status bar the problem cleared...

To make a long story short, I had installed a fairly large number of widgets ("add-ons") that took over various bits and chunks of the status line.

The point at which the vertical scroll bar disappears is the point at which the status bar reaches its minimum possible width based on the combined widths of whatever widgets you have installed on the status bar.

Simple, huh? Well, it took me a minute to work it out, so I thought I would share...

2007-05-17

multi-select tag search tool, the general case for a

I've been using "tags" and software applications that utilize and/or perform "tagging" operations for some time now, and while I am not an expert in the theory of operations concerning why we should all use tagging rather than the folder model of organization of information (I use both, and have caught myself trying to use both together), but I do have an observation having watched and done a certain amount of analysis of how I myself use tagging. That observation is this: I really, really want a tag search that will let me specificy multiple tags, rate on tag hits, and not include "keyword text searches" unless I specifically request it as a seperate function.

That's all. I know, I know: I'll have to build it myself. *sigh*

Tag the Bird for Thunderbird Concifuration Issue

========
 Issue:
========

The "Tag the Bird" (version 1.0) extension for Thunderbird
Portable version 1.5.0.10 (20070221) stores a hard-coded path
name in the Thunderbird configuration file.

This information is of interest only insofar as it affects the
working of "Tag The Bird" (and hence Thunderbird) in the
situation where Thunderbird has been moved from one location to
another via a simple Copy operation.


=============
 Background:
=============

Having installed Thunderbird Portable on a USB drive, and having
subsequently realized that the size of my Gmail inbox was
subsequently going to over-run my 1Gig USB stick, and that
having furthermore realized that Thunderbird would load more
quickly and just generally be more lively on my 2.8Ghz laptop if
I had the Thunderbird install on the internal hard disc, and
that I wouldn't have to keep up with a USB stick for my email if
it was on the drive - all these things [and others, like the
fact that Thunderbird stores its message archives in a
sub-folder with an arcane naming scheme under root
ThunderbirdPortable directory]taken together led me to simply
drag the Thunderbird folder from the USB drive to my WinXP
desktop and drop it in a spot where I can open it with a single
click any time I feel the need to use Thunderbird instead of
web-mail.


=========
 Detail:
=========

The config file that is changed is the same one that is opened
from within Thunderbird that is opened when the "Tools | Options
| Advanced | Config Editor..." button is pressed, presenting the
about:config page with a list of several hundred configuration
settings in Thunderbird [and extensions] - which settings may or
may not be accessible otherwise through the Thunderbird or
Extension GUI.

The name of the setting is "webmail.logging.comms.FileLocation"
[no quotes in the view of the file within Thunderbird].  The
listing of items in the about:config page is one item per line,
in alphabetical order.

The first part of the line is the name of the setting, and is
made up of identifiers [words] separated by dots [periods].
Lines that have been changed from their default values [I
believe this is the criteria] are shown in a boldface font.
Line items that have been created after the software was
installed may also be included in the bold facing, so
creation/modification time of the line in the file is somehow
used in the decision taken by the software as to whether the
line should be boldfaced or not.

Each line also contains a "Status" field [I see that "user set"
may be the status condition value which determines boldface of
lines], a Type field ["boolean", "integer", and "string" seem
the most common], and a value conforming to the type of value
shown in the "Type" field.

The value in question, here (webmail.logging.comms.FileLocation)
is a string value giving a fully qualified path name, apparently
a log file location.  The value on my system was

 F:\ThunderbirdPortable\Data\profile\extensions\{3c8e8390-2cf6-11d9-9669-0800200c9a66}\logfiles

Notes:

0.  The Thunderbird root directory in the string above path
    given above is "F:\ThunderbirdPortable\" - all file system
    objects [files] belonging to Thunderbird Portable reside in
    or below the Thunderbird root directory.  We will call this
    directory "ThunderbirdRoot" here, since the concept of the
    root directory as an environment for the operation of the
    software is important, here, to the understanding of the
    problem, and the crafting of a solution.

1.  Rhe string of hexadecimal digits in braces -
    {3c8e8390-2cf6-11d9-9669-0800200c9a66} - that is part of the
    string value shown above is [I believe] a so-called "GUID" -
    a "Globally Unique Identifier" - which uniquely identifies
    some piece of software or item of data [in fact, in many
    cases, a piece of binary executable code which is to be
    treated as data for one reason or another].

2.  {3c8e8390-2cf6-11d9-9669-0800200c9a66} identifies something
    that I find - by looking in the directory, and opening the
    standard-format install.rdf file at
  F:\ThunderbirdPortable\Data\profile\extensions\{3c8e8390-2cf6-11d9-9669-0800200c9a66}\

    is a Mozilla (and so Thunderbird, and so Thunderbird
    Portable) extension called "Tag the Bird" (obviously
    designed for Thunderbird specifically).  I installed this
    extension some time ago, but have not used it, since it
    requires that I log in to my Gmail account through the Tag
    the Bird software, and I haven't been comfortable doing that
    until/unless I have time to examine the sources or otherwise
    convince myself that this software is not phishing software
    designed to steal my account ID and password...

3.  The install.rdf file is an XML file that describes the
    initial configuration of a piece of software - in this case
    Tag the Bird.  RDF is an acronym for "Resource Descrition
    File" [perhpas "Format"] and is a standard extension to XML
    used by Mozilla [and - presumably - others].

4.  The RDF file must identify precisely - in this case using
    GUID, version number, program name, and author name - the
    software that the configuration description applies to.  For
    our purposes here, we just we looking for the program name
    and version number that goes with the GUID in the path name.


============
 Solutions:
============

Since setting entered into the about:config file points to a
sub-directory of the ThunderbirdPortable directory tree, and
since I had previously copied the directory tree entire, I can
assume that the directory pointed to by the current value stored
for webmail.logging.comms.FileLocation was valid at one time -
that is, the point at which the log [we presume] files were
copied from the existing subtree of ThunderbirdRoot on the USB
(F:) drive to the desktop folder on the laptop.

Furthermore, since we know that the desktop folder on the laptop
lives at "C:\Documents and Settings\USERNAME\Desktop" [where
USERNAME is the system user name of the user whose desktop we're
talking about], we can know that when we copied ThunderbirdRoot
from F: to the desktop, the the ThunderbirdRoot directory tree
was copied into C:\Documents and
Settings\USERNAME\Desktop\ThunderbirdPortable such that the
director on the C: drive is a snapshot of what was on the USB
stick at that time,

Therefore, the only critical path question in deciding to simply
change the about:config: setting to point to the path on the C:
drive is simply "Do we need to merge the changes that have been
made to the F: drive path [...]/logfiles into the new C: drive
path before we change the pointer?"

This is important in a couple ways:

1) the log files may be updating even as we make the change, if
Thunderbird is running at the time.  This means we should shut
Thunderbird down while we make the change, so we must get over
the angst of having to shut down a running program and just do
it...

2) We may just want to archive all the existing logs and start
new ones - we didn't know we could do that before, but now since
we know, perhaps we should.

3) We still don't know what physical file-system object [file]
Thunderbird is storing the about:config data in.  This is of
mild historical interest, since it's a point of hacker cred to
know which, amongst the many and varied configuration files
Mozilla uses, particular text file in which to make a particular
change to get the change to "work" in Thunderbird [or any of the
other mozilla softwares].  The reason this is [was] of interest
is simply because there was a time, back in the day, when
Mozilla was known as "Netscape", and the prefs.js file was
marked with a clear notice to the effect of "DO NOT CHANGE THIS
FILE IN YOUR TEXT EDITOR JUST BECAUSE YOU THINK YOU KNOW
JAVASCRIPT, YOU FILTHY TEXT-EDITING, UNRECALCITRANT ANTI-GUI
HACKER YOU FILTH YOU POND SCUM LINUX SUSPECT" which was noticed
by some few of us who were perhaps a bit too enamored of
tweaking hidden text files in an attempt to make our PCs love us
like real women having multiple orgasms.  We must find out if
she's a real blond, here.  Again.  Someone already knows. We
could look it up.  We don't care, we want to figure it out for
ourselves.

4) Okay, after that thrilling adventure, we're about ready to
make this config change to this Thunderbird plugin to make sure
there is no hard reference to a drive/file system which may or
may not be mounted and/or available when the software program in
question actually runs at any given time, at the command of some
as-yet-to-be-determined user.  Just gotta check a few more
things, first, and take another quick look at the current
program state.  Also need to shut down Thunderbird for a minute.

5) Shutting down Thunderbird:  We can figure out which file(s)
in the thunderbird are changed if we make a change to the config
right before we shut it down.  Since this knowledge will be of
use to us in determining which config file stores which config
setting [see above for why we want to know that], we will make a
"random" change to the about:config settings - we do this under
the assumption that all the settings shown in the about:config
dialog are in fact stored in the same file.  This may or may not
be the case, which will also be shown by this particular
[experimental] operation and its outcome.   We select a setting
from this dialog that we either a) don't care anything about,
but can observe, or b) must remember to change back to what we
want it to be, later - say, when (/if/) we come back to make
this change [the logging path] from within the GUI.  I say /if/
because we may just make the changes in the text file once we
know which file that is... we toggle the randomly chosen boolean
setting "wallet.enable" - don't forget to set it back.  Check
the time.  20:40

6) Back into WinXP now, we use the explorer mode of Windows
Explorer to navigate back up to the secret file stash of the
instance of Thunderbird that's running from the hard disc:
C:\Documents and
Settings\USERNAME\Desktop\ThunderbirdPortable\Data\profile

Note:  This is the same directory created when we copied the
ThunderbirdRoot folder off the USB drive.

7) By checking the time-stamps we find that the changed config
file is in fact our old nemesis from the profile folder:
prefs.js  - and if you don't think that filename is
extra-ordinarily hard to remember over time - that is: hard to
remember than "most filenames" - well then, that would mean that
my weed is superior to yours at least in function if not
necessarily in form.  Nothing personal.  We open the file.

8) Sure enough, there it is [see fig. 1.]


Figure 1:

/* Do not edit this file.
[...]
*/

... you scum sucking linux-lovers ... it may as well add.

9) Change it in the about:condig dialog to point at the new
directory [after you merge the files if you're that kind of
person, which we're, not; you should be able to figure out what
"it" means here from what was said above - if not, well, you
probably didn't make this far through here anyway, in that case
;)

2007-01-30

earth blog blogger templates

Here are [links to] templates used for the earth blogs pages. These templates are HTML encoded, so they should be copied and pasted rather than directly downloaded, since the HTML elements and blogger tags will show up as HTML entities in the HTML source code.

These templates is specific to blogger.com and probably won't work with other blogging services.

These templates are moving towards being XHTML and CSS standards compliant, but probably aren't there, yet. That is: the goal here is to write the template in such a way that the resulting blog pages will validate using the W3C validation services.

The blogger template for the ain't it strange blog: aint_it_strange.html

The template for blog null: blog_null-v3.html

The template for this [earth tech] blog is derived from the template for earth food: earth_tech-blog-template.html. Additionally, the stylesheet for earth tech is available: earth_tech.css

Set the bookmark Icon for a Javascript Bookmark in Firefox

Problem

The problem we're solving here is that Firefox does not store a page icon when a bookmark is created which launches a Javascript to e.g. open a pop-up. Specifically, while the Google Bookmarks script is handy and functional, there is no icon stored for it, which means that if we - as some are wont to do - put the Google Bookmarks shortcut on the tool bar without a Name (in the Name: field of the Properties dialog), a generic icon is used which is difficult to differentiate from the rest of the toolbar icons at a glance.

To give you an idea of how annoying this is, here's a screen-shot of typical our FF Links toolbar on a typical day:

[toolbar screenshot 1]

Where is the Bookmark Icon Stored?

In looking at the Firefox bookmarks.html file we find that bookmark icons are stored as non-standard attributes of HTML A elements, each of which contain a bookmark URL as an HREF attribute.

We haven't been able to find this documented anywhere, but if we look at the Firefox bookmark file [Firefox 2.0.0.5], the bookmark for the Firefox Start Page looks something like this:

  <DT><A HREF="http://en-us.start.mozilla.com/firefox"
  LAST_VISIT="1162959544"
  ICON="data:image/png;base64,
  iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/
  9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJ
  ZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7
  ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJ
  mTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf
  8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwx
  YCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9
  ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha
  3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8
  bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAEC
  CJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzg
  ABBgAMJ5THwGvJLAAAAABJRU5ErkJggg=="
  LAST_CHARSET="ISO-8859-1"
  ID="rdf:#$.vPhC3">Firefox Start Page</A>

The example above has been line-wrapped and HTML encoded, but clearly, the icon used for this bookmark is defined by the content of the [non-standard] ICON attribute of the A element. Furthermore, we may deduce a few things from the definition shown:

  • data: - this implies that something besides data might be stored here. Since we don't have a specification for this attribute value, we'll pass over this for the moment and just plan on using it "as is" - that is, we will create a bookmark that uses this same format for the ICON attribute
  • image/png;base64 - This appear to be a MIME-type/encoding specification - we're guessing that the 'base64' goes with the [more obviously a MIME-type] 'image/png' since it is separated by a semi-colon instead of a comma...
  • The string after the comma is obviously uuencoded data - the image itself, stored as ASCII characters pto avoid the problems inherent with trying to put binary image data in a text file]

Solution

Since

  1. we don't have a base64 encoder handy,
  2. we want to avoid manual editting of bookmarks.html
  3. the Firefox bookmark property sheet doesn't provide a means to set the icon to use for the bookmark
  4. we want to do this as much as possible within Firefox

we propose to follow the following steps to accomplish the goal of setting the ICON attribute of a bookmark which launches a Javascript target:

  1. Create a Shortcut Icon Image to use in the bookmark
  2. Create a webpage that has the bookmark/page icon we created
  3. Navigate Firefox to the page we created
  4. Boomark the page in Firefodx
  5. Edit that bookmark, removing the page URL, and adding the Javascript
  6. Clear the 'Name' property of the bookmark

Create an Shortcut Icon Image

Here is a link to the shortcut icon we created for the 'Add Google Bookmark' script: star-gold+16.png

This icon was created using The GIMP - a description of creating the PNG image is beyond the scope of this post.

Create a Web Page that Uses the Shortcut Icon

This is pretty simple, but assumes access to a web server - for some reason it doesn't seem to work with file:// URLs.

Here is the code for the HTML file we use:

  <html>
    <head>
      <title>example</title>
      <link rel="shortcut icon"
      href="star-gold+16.png" />
    </head>
    <body>
      <p>Example of shortcut icon META element</p>
    </body>
  </html>

This file is a here: http://blogs.earthside.org/earth_tech/uploads.html

Creating the Bookmark

Here is a screen shot of the browser showing the newly created toolbar icon - a plain file icon with labeled 'example'.

Note that you will need to click the newly created shortcut once to get the new icon to show up on the toolbar - for some reason the icon doesn't load when the shortcut is created [this can be seen if you watch the bookmarks.html file - it doesn't update until you click the new shortcut for the first time and the icon loads - it may be that the shortcut would update if FF closed, but...].

Here is a screenshot of the browser after the toolbar shortcut icon has loaded:

Next we open the properties page for the old Gmark shortcut and copy the Jacascript out of the Location field.

Below is a copy of the the Javascript - this all has to go on one line for in the bookmark Properties dialog Location field:

 javascript:(function(){var
 a=window,b=document,
 c=encodeURIComponent,
 d=a.open(
 %22http://www.google.com/bookmarks/mark?op=edit&output=popup&bkmk=%22
 +(b.location)+%22&title=%22+c(b.title),%22bkmk_popup%22,
 %22left=%22+((a.screenX||a.screenLeft)+10)+%22,
 top=%22+((a.screenY||a.screenTop)+10)+%22,height=420px,width=550px,
 resizable=1,alwaysRaised=1%22);a.setTimeout(function(){d.focus()},
 300)})();

Here is a link to a text file which contains the Javascript shown above, but all on one line, so it can be easily copied and pasted [the line is 392 characters in length]: gmark.js

  1. Open the properties dialog for the 'example' shortcut
  2. Clear the 'Name' field
  3. Paste the Javascript code into the 'Location' field
  4. Hit the 'OK' button to save the bookmark

Here is a screen-shot of the 'example' properties after the above changes have been made:

The DT element line from the bookmarks.html file with the Javascript target and the custom icon [saved to a text file]: http://blogs.earthside.org/earth_tech/uploads/gmark.txt

The toolbar with the new shortcut icon which launches the Javascript to add a Google Bookmark:

Notes:

  1. In the screenshot above, the button labeled "Gmark" has the script to add the current browser page to Google Bookmarks stored in its "Location" property - the script is launched when the button is clicked.
  2. This functionality [add Google Bookmark] exists in the IE Google toolbar, but not in the Firefox version.
  3. The Gmark button is the only button currently on the toolbar that contains a Javascript, but it's so ugly that it would be nice to have a way to add an icon to the buttons which launch Javascript before any more are added.
  4. The Firefox bookmark property sheet does not provide a way to set the icon to be displayed for a given bookmark.
  5. The Firefox bookmark property sheet does allow a blank "Name" property field, unlike IE, which treats the bookmark name as a filename, and hence will not allow the bookmark to exist without a filename.
  6. There are almost certainly others [e.g. manually Base-64 encoding the icon image], but this solution will work for trivial cases, since it leverages the "built-in" Firefox icon storage functionality - this has the advantage of not requiring you to edit the bookmarks.html file.
  7. Based on the previous note, above, it should be possible to create a PHP or CGI scripted server page which will allow this process to be somewhat automated [e.g. allow the user to select a favicon from a list, then return a page which has that image as a page icon - the Javascript could be added to the bookmark created for the generated page, preserving the ICON attribute of the bookmark A element...
  8. Various of the attribute names used in the Firefox bookmarks file are not defined in HTML, and so are not properly speaking "legal" HTML - we don't really care about that here, but it's worth noting if you are interested in manipulating the bookmarks.html file directly [ignoring the instructions from mozilla to the contrary].
  9. Comletely unrelated, but handy: If you click a button on the toolbar while holding down the Shift key, the target URL opens in a new window. Ctrl+<click> opens the target in a new tab.

2007-01-28

eater.org/blog: Free education

I don't usually blog about other blogs, but Eater's post about the open sourcing of MIT's curriculum is worth taking a look at, if only because he's propagating an idea that I've been pushing for quite a few years: Online [networked], open sourced public schools. Note that there is quite a bit of effort to create the definitive "online high school", but so far everything I've seen [e.g. in state of Ohio] is closed source, and is basically designed to keep the students off the internet. Public schools in the US are long way from being willing to use the Internet to educate students. From the luddite POV adopted by most "Boards of Education" [in my experience], the Internet is something the students must be protected from, not something that they should be allowed to reference as a source in a term paper...

2007-01-25

CSS syntax highlighter

Checking out the JavaScript drawing program example called Doodle at the webreference.com section on JavaScript Programming, I found this bit of CSS that does syntax highlighting: SyntaxHighlighter.css [http://www.webreference.com/css/SyntaxHighlighter.css]

See also the Doodle Javascript programming example provided by WebReference for use of these style classes. Nice bit of work.

Here is a trivial example of the HTML to use of some of SyntaxHighlighter.css classes [from the example article, page 3]:

<div style="width: 700px;">
<textarea name="code" class="javascript" cols="60" rows="10"> 

<P class=code>&lt;script src="core.js" 
type=text/javascript&gt;&lt;/script&gt;<BR>&lt;script src="graphics.js" 
type=text/javascript&gt;&lt;/script&gt;<BR>&lt;script src="canvas.js" 
type=text/javascript&gt;&lt;/script&gt;<BR>&lt;script 
type=text/javascript&gt;<BR>var canvas = null;<BR>function initCanvas() 
{<BR>&nbsp;&nbsp;&nbsp;canvas = new 
Canvas($('theCanvas'));<BR>}<BR>window.setTimeout(initCanvas, 
10);<BR>&lt;/script&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;div id="theFrame" 
class="CanvasFrame"&gt;&lt;/div&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;div id="theCanvas" 
class="Canvas"&gt;&lt;/div&gt;<BR>&lt;/div&gt;</P>

</textarea>
</div>

Other examples occur in the article.

This CSS seems to make a nice complement to the PHP syntax highlighter blogged about elsewhere.

2007-01-12

GNU Emacs Mouse Wheel

Scott Hurring's .emacs has some lines of interest:

;; Turn ON mouse wheel support
(mouse-wheel-mode)

This mouse-wheel-mode doesn't seem to be available in GNU Emacs 20.4.1 (sparc-sun-solaris2.5.1) - instead a couple functions are defined in the .emacs:

;; Mousewheel
(defun sd-mousewheel-scroll-up (event)
  "Scroll window under mouse up by five lines."
  (interactive "e")
  (let ((current-window (selected-window)))
    (unwind-protect
        (progn 
          (select-window (posn-window (event-start event)))
          (scroll-up 5))
      (select-window current-window))))

(defun sd-mousewheel-scroll-down (event)
  "Scroll window under mouse down by five lines."
  (interactive "e")
  (let ((current-window (selected-window)))
    (unwind-protect
        (progn 
          (select-window (posn-window (event-start event)))
          (scroll-down 5))
      (select-window current-window))))

(global-set-key (kbd "") 'sd-mousewheel-scroll-up)
(global-set-key (kbd "") 'sd-mousewheel-scroll-down)

Seems like quite a lot of code, but this probably is what's obscured by the mwheel and mouse-wheel-mode modules.

According to the Fedora Emacs docs, the following should work with "the older version 20 of Emacs":

;; Enable wheelmouse support by default
(require 'mwheel)

However, this doesn't seem to work with the Solaris version - probably because mwheel appears is not installed.

Other items of interest here include:

;; show line numbers at bottom
(setq line-number-mode t)
(setq column-number-mode t)
(line-number-mode t)
(column-number-mode t)

;; no crap in *scratch* on startup
(setq inhibit-startup-message t)
(setq inhibit-startup-echo-area-message t)