<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-10911258</id><updated>2011-12-14T18:46:42.677-08:00</updated><title type='text'>The Deep End</title><subtitle type='html'>go to &lt;a href="http://www.graworks.com"&gt;graworks.com!&lt;/a&gt;
&lt;a href="mailto:graworks@averdyne.com?subject=Blog Feedback"&gt;email!&lt;/a&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10911258.post-114116218502271206</id><published>2006-02-28T13:23:00.000-08:00</published><updated>2006-02-28T13:29:45.033-08:00</updated><title type='text'>Using Gmail with Thunderbird</title><content type='html'>Thought &lt;a href="http://www.linuxforums.org/forum/linux-tutorials-howtos-reference-material/41552-complete-guide-using-gmail-thunderbird-mozilla-mail-evolution-kmail.html"&gt;this&lt;/a&gt;  was kind of cool--using your gmail account with Thunderbird.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-114116218502271206?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/114116218502271206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=114116218502271206' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/114116218502271206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/114116218502271206'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2006/02/using-gmail-with-thunderbird.html' title='Using Gmail with Thunderbird'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-114037728982935623</id><published>2006-02-19T11:25:00.000-08:00</published><updated>2006-02-19T11:28:09.830-08:00</updated><title type='text'>RSS Feeds in Thunderbird</title><content type='html'>&lt;a href="http://www.vdomck.org/blog/"&gt;Mike McKay&lt;/a&gt; is writing an extension that will handle a feed and add it to the "rss feed list if it doesn't already exist."&lt;br /&gt;&lt;br /&gt;I'm not much help because I know nothing about how thunderbird does rss feeds; does anyone know of any rss components or any extensions that would be similar enough to pick apart and examine?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-114037728982935623?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/114037728982935623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=114037728982935623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/114037728982935623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/114037728982935623'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2006/02/rss-feeds-in-thunderbird.html' title='RSS Feeds in Thunderbird'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-114037707686206555</id><published>2006-02-19T11:20:00.000-08:00</published><updated>2006-02-28T13:04:03.546-08:00</updated><title type='text'>DOM Inspector for 1.5??</title><content type='html'>The &lt;a href="http://kb.mozillazine.org/DOM_Inspector"&gt;DOM Inspector&lt;/a&gt; was great and I actually got it to work with Thunderbird. Unfortunately, it doesn't work anymore with 1.5. I tried just changing the maxVersion in the rdf file, but that didn't seem to work.&lt;br /&gt;&lt;br /&gt;Is anyone working on this?? I was thinking I'd try and get it to work, but I don't even know where to begin.&lt;br /&gt;&lt;br /&gt;2-28-06: uh...I posted a comment with a &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?application=thunderbird&amp;numpg=10&amp;amp;id=1806"&gt;DOM Inspector for Thunderbird&lt;/a&gt;, but the link didn't come out right.  Haven't tried it yet, but I'm going to; you should check it out, too!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-114037707686206555?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/114037707686206555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=114037707686206555' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/114037707686206555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/114037707686206555'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2006/02/dom-inspector-for-15.html' title='DOM Inspector for 1.5??'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-113632284350171206</id><published>2006-01-03T13:04:00.000-08:00</published><updated>2007-03-27T11:20:58.980-07:00</updated><title type='text'>Using Reloadchromezilla with Firefox/Thunderbird 1.5</title><content type='html'>With whatever 1.5, you won't need to edit &lt;code&gt;chrome.rdf&lt;/code&gt;!  All you need to do is install Reloadchromezilla, install your extension, and reload the chrome as often as you would like!  You will have to make one simple edit to a "&lt;code&gt;chrome.manifest&lt;/code&gt;" file, as explained later.&lt;br /&gt;&lt;br /&gt;As noted in &lt;a href="http://kb.mozillazine.org/Getting_started_with_extension_development"&gt;this mozillazine entry&lt;/a&gt;, you could just restart firefox/thunderbird and see the changes you made in your extension.  Reloadchromezilla is useful because instead of restarting, you can just click the button.  This works because "reloading the chrome" will cause mozilla to update the changes you made to your extension.  For more information on how Reloadchromezila works, see &lt;a href="http://thunderbirddocs.blogspot.com/2005/07/part-one-no-more-restarts-for.html"&gt;this previous post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Read &lt;a href="http://kb.mozillazine.org/Getting_started_with_extension_development"&gt;this mozillazine entry&lt;/a&gt; for how to package and install your extension, but the installation method below worked for me:&lt;br /&gt;&lt;br /&gt;1. package your extension into an&lt;br /&gt;.xpi, and drag into the extensions folder in your &lt;strong&gt;profile directory&lt;/strong&gt;.  This is usually located in &lt;span style="font-style: italic;"&gt;C:\documents and settings\(your user name)\Application Data\Mozilla\Firefox&lt;/span&gt; or &lt;span style="font-style: italic;"&gt;Application Data\Thunderbird&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2. restart Firefox/thunderbird.  On the restart, your extension will install.&lt;br /&gt;&lt;br /&gt;3. once installed, to edit your files, extract your &lt;code&gt;.jar&lt;/code&gt; file.  This will reveal your .js and .xul files&lt;br /&gt;&lt;br /&gt;4.  To get the program to use these files instead of the .jar, you'll have to &lt;strong&gt;edit your chrome.manifest file&lt;/strong&gt;.  All you have to do is replace jar:chrome/(your extension).jar!/ with chrome/&lt;br /&gt;&lt;br /&gt;   you're replacing the jar stuff with "chrome" because the files will be in the &lt;code&gt;chrome&lt;/code&gt; folder.&lt;br /&gt;&lt;br /&gt;5.  start developing!  Use the Reloadchromezilla button or highly customizable context menu!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-113632284350171206?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/113632284350171206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=113632284350171206' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/113632284350171206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/113632284350171206'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2006/01/using-reloadchromezilla-with.html' title='Using Reloadchromezilla with Firefox/Thunderbird 1.5'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-113390709881769676</id><published>2005-12-06T14:07:00.000-08:00</published><updated>2006-05-15T11:57:28.633-07:00</updated><title type='text'>Mozilla Thunderbird: Creating Folders</title><content type='html'>I don't remember if this was a previous post or not, but...&lt;br /&gt;&lt;br /&gt;just  get to your folder (see &lt;a href="http://thunderbirddocs.blogspot.com/2005/02/thunderbird-extensions-navigating.html"&gt;Navigating Folders&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;this will be an &lt;code&gt;nsIMsgFolder&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Use &lt;code&gt;nsIMsgFolder.createSubfolder(&lt;/code&gt;folder_name&lt;code&gt;,msgWindow);&lt;/code&gt;&lt;br /&gt;As may be inferred, this will create the subfolder, but you have to &lt;span style="font-style: italic;"&gt;update&lt;/span&gt; the parent folder to get it to show up in the Folder Pane.&lt;br /&gt;&lt;br /&gt;parentFolder.&lt;code&gt;updateFolder(msgWindow);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;If you want to learn more about &lt;code&gt;nsIMsgFolder&lt;/code&gt;, go to &lt;a href="http://www.xulplanet.com/references/xpcomref/ifaces/nsIMsgFolder.html"&gt;the XulPlanet article&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-113390709881769676?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/113390709881769676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=113390709881769676' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/113390709881769676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/113390709881769676'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/12/mozilla-thunderbird-creating-folders.html' title='Mozilla Thunderbird: Creating Folders'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-113390344793750687</id><published>2005-12-06T13:02:00.000-08:00</published><updated>2005-12-06T13:10:47.950-08:00</updated><title type='text'>Updating Extensions to 1.5; Changes and Problems</title><content type='html'>While frantically trying to understand how I'm going to make my extension compatibile with thunderbird 1.5 beta, I came across &lt;a href="http://kb.mozillazine.org/Getting_started_with_extension_development#overlay.xul"&gt;this&lt;/a&gt;. &lt;br /&gt;The most important change that I see is the &lt;code&gt;chrome.manifest&lt;/code&gt; file, which...replaces contents.rdf?&lt;br /&gt;&lt;br /&gt;Anyway, it was useful to me to restructure my files as it's shown in the mozillazine article--you'll need to change the references to your .dtd files and .css files because the locations will be different.  This may sound redundant or insane, but be sure those locations are correct!  I had a lot of problems because I put &lt;code&gt;chrome://thunderbirdtemplates/locale/en-US/overlay.dtd&lt;/code&gt; in the &lt;code&gt;.xul&lt;/code&gt; instead of &lt;code&gt;chrome://thunderbirdtemplates/locale/overlay.dtd&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Good luck updating!&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-113390344793750687?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/113390344793750687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=113390344793750687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/113390344793750687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/113390344793750687'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/12/updating-extensions-to-15-changes-and.html' title='Updating Extensions to 1.5; Changes and Problems'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-113269488640091924</id><published>2005-11-22T13:16:00.000-08:00</published><updated>2005-11-24T14:20:56.016-08:00</updated><title type='text'>Updating Extensions for 1.5..."New" Extension Manager??</title><content type='html'>Well, I've been having a lot of problems getting my extension to work with Thunderbird 1.5--this probably applies to the beta of Firefox, as well.&lt;br /&gt;&lt;br /&gt;Although this  won't cause errors when you try to install, your .xpi file is going to need these changes:&lt;br /&gt;&lt;br /&gt;1) &lt;code&gt;chrome.manifest&lt;/code&gt; file.  This replaces &lt;code&gt;contents.rdf&lt;/code&gt;--you don't need contents.rdf files in subfolders now, either.  A good place to go is the &lt;a href="http://kb.mozillazine.org/Getting_started_with_extension_development"&gt;Mozillazine article&lt;/a&gt;.   Look at the file hierarchy for how to set up your .xpi.&lt;br /&gt;&lt;br /&gt;Ok, not that bad.  But what the heck is the "New Extension Manager"??  The &lt;a href="http://kb.mozillazine.org/Getting_started_with_extension_development"&gt;Mozillazine article&lt;/a&gt; made this really confusing for me.&lt;br /&gt;&lt;br /&gt;So go &lt;a href="http://www.mozilla.org/projects/firefox/extensions/em-changes.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-113269488640091924?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/113269488640091924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=113269488640091924' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/113269488640091924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/113269488640091924'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/11/updating-extensions-for-15new.html' title='Updating Extensions for 1.5...&quot;New&quot; Extension Manager??'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-113072473618796180</id><published>2005-10-30T18:08:00.000-08:00</published><updated>2005-10-31T11:23:53.966-08:00</updated><title type='text'>File I/O in Mozilla</title><content type='html'>For anyone interested in how File i/o works for Mozilla, check out the linked mozillazine article&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-113072473618796180?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://kb.mozillazine.org/File_IO' title='File I/O in Mozilla'/><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/113072473618796180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=113072473618796180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/113072473618796180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/113072473618796180'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/10/file-io-in-mozilla.html' title='File I/O in Mozilla'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-112480960399966267</id><published>2005-08-23T08:02:00.000-07:00</published><updated>2006-04-12T17:29:21.730-07:00</updated><title type='text'>Populating the Messagepane in Thunderbird??</title><content type='html'>You know, the message preview pane--how does &lt;span style="font-style: italic;"&gt;that&lt;/span&gt; get populated with the body of whatever selected message??  How do you get the body of a message in general?  &lt;a href="http://thunderbirddocs.blogspot.com/2005/02/thunderbird-extensions-how-to-get-body.html"&gt;Setting up a stream and then reading the body out of the stream&lt;/a&gt; won't work for IMAP messages, because you have to download them first.  How would one go about accomplishing that?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-112480960399966267?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/112480960399966267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=112480960399966267' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112480960399966267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112480960399966267'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/08/populating-messagepane-in-thunderbird.html' title='Populating the Messagepane in Thunderbird??'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-112471848135698871</id><published>2005-08-22T06:42:00.000-07:00</published><updated>2005-08-22T06:49:20.493-07:00</updated><title type='text'>New Version!! Reloadchromezilla 0.0.6</title><content type='html'>&lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?application=thunderbird&amp;category=Newest&amp;amp;numpg=10&amp;amp;id=964"&gt;The  New Version of Reloadchromezilla&lt;/a&gt; now works for firefox!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-112471848135698871?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://addons.mozilla.org/extensions/moreinfo.php?application=thunderbird&amp;category=Newest&amp;numpg=10&amp;id=964' title='New Version!! Reloadchromezilla 0.0.6'/><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/112471848135698871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=112471848135698871' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112471848135698871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112471848135698871'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/08/new-version-reloadchromezilla-006.html' title='New Version!! Reloadchromezilla 0.0.6'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-112316753911454154</id><published>2005-08-04T07:54:00.000-07:00</published><updated>2005-08-04T07:58:59.120-07:00</updated><title type='text'>Aghhh So Complicated</title><content type='html'>An interesting blog which might help with firefox and thunderbird development woes is &lt;a href="http://mozilla-firefox-extension-dev.blogspot.com/"&gt;David Huynh's blog&lt;/a&gt;.   Maybe.  I guess.  All the posts look ridiculously complicated to me, but it seems like it's making sense to at least some people.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-112316753911454154?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/112316753911454154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=112316753911454154' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112316753911454154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112316753911454154'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/08/aghhh-so-complicated.html' title='Aghhh So Complicated'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-112309125456593954</id><published>2005-08-03T10:45:00.000-07:00</published><updated>2005-08-03T10:55:33.920-07:00</updated><title type='text'>Alejandro Torrado debugs Reloadchromezilla</title><content type='html'>Thanks Alejandro Torrado for finding an error in the new version of Reloadchromezilla (0.0.6) It's fixed now and the new version should show up on Mozilla Update any minute.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-112309125456593954?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/112309125456593954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=112309125456593954' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112309125456593954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112309125456593954'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/08/alejandro-torrado-debugs.html' title='Alejandro Torrado debugs Reloadchromezilla'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-112264876470101150</id><published>2005-07-29T07:45:00.000-07:00</published><updated>2005-07-29T07:52:44.706-07:00</updated><title type='text'>Xul: Creating toolbar buttons</title><content type='html'>Mozillazine has &lt;a href="http://kb.mozillazine.org/Creating_toolbar_buttons"&gt;a great article on creating toolbar buttons&lt;/a&gt;.  One thing they sort of go into is toolbar palettes -- here are the toolbar palettes I've run across:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;MailToolbarPalette&lt;/code&gt;: the toolbar in Thunderbird's main window&lt;br /&gt;&lt;br /&gt;&lt;code&gt;MsgComposeToolbarPalette&lt;/code&gt;: the toolbar for a Thunderbird compose window&lt;br /&gt;&lt;br /&gt;&lt;code&gt;AddressBookToolbarPalette&lt;/code&gt;: the toolbar for the address book toolbar palette, but if you're trying to write an overlay for the address book, you'll need to modify your &lt;code&gt;contents.rdf&lt;/code&gt; file to add an overlay for the address book .xul file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-112264876470101150?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/112264876470101150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=112264876470101150' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112264876470101150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112264876470101150'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/07/xul-creating-toolbar-buttons.html' title='Xul: Creating toolbar buttons'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-112239352679869354</id><published>2005-07-26T08:55:00.000-07:00</published><updated>2005-07-26T08:58:46.806-07:00</updated><title type='text'>Arrays in Javascript</title><content type='html'>&lt;a href="http://www.croczilla.com/~alex/reference/javascript_guide/obj.html#1008453"&gt;Arrays in Javascript&lt;/a&gt; are awesome.  Just look at all the things you can do with them:&lt;br /&gt;&lt;br /&gt;you can pop,&lt;br /&gt;you can push,&lt;br /&gt;you can remove,&lt;br /&gt;you can splice,&lt;br /&gt;you can unshift (which adds new elements to the front and returns the length)&lt;br /&gt;you can sort&lt;br /&gt;you can reverse the entire array&lt;br /&gt;&lt;br /&gt;you can define it like new Array("this", "this", "this", "this")&lt;br /&gt;or like  = ["jaa","whaa","gaaa"]&lt;br /&gt;&lt;br /&gt;they're beautiful&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-112239352679869354?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/112239352679869354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=112239352679869354' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112239352679869354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112239352679869354'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/07/arrays-in-javascript.html' title='Arrays in Javascript'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-112238687580973467</id><published>2005-07-26T07:00:00.000-07:00</published><updated>2005-07-26T07:07:55.830-07:00</updated><title type='text'>about:Config Extension</title><content type='html'>In previous &lt;a href="http://thunderbirddocs.blogspot.com/2005/07/part-two-no-more-restarts-to.html"&gt;Reloadchromezilla-related posts&lt;/a&gt; the process to add the &lt;code&gt;nglayout.debug.disable_xul_cache&lt;/code&gt; preference is a little laborious -- it turns out that you can just download the &lt;a href="http://aboutconfig.mozdev.org/installation.html"&gt;about:config&lt;/a&gt; extension for Thunderbird!  You can read more about &lt;a href="http://kb.mozillazine.org/About:config"&gt;the about:config extension here&lt;/a&gt;.  It's a great extension, and from my experience, worked a lot better than the &lt;a href="http://preferential.mozdev.org/"&gt;preferential extension&lt;/a&gt; (which consistently crashed Thunderbird while building a tree of preferences)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-112238687580973467?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/112238687580973467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=112238687580973467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112238687580973467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112238687580973467'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/07/aboutconfig-extension.html' title='about:Config Extension'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-112135114995705354</id><published>2005-07-14T07:16:00.000-07:00</published><updated>2005-07-14T07:25:49.966-07:00</updated><title type='text'>How do you download messages from an IMAP folder??</title><content type='html'>How do you download messages from a folder on an IMAP server??  Specifically, with an XPCOM component of some kind...&lt;br /&gt;&lt;br /&gt;using &lt;a href="http://www.xulplanet.com/references/xpcomref/ifaces/nsIMsgFolder.html#method_DownloadMessagesForOffline"&gt;&lt;code&gt;folder.DownloadMessagesForOffline(msgHdrArray,msgWindow);&lt;/code&gt;&lt;/a&gt; doesn't work.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xulplanet.com/references/xpcomref/ifaces/nsIImapService.html"&gt;nsIImapService&lt;/a&gt; has a &lt;a href="http://www.xulplanet.com/references/xpcomref/ifaces/nsIImapService.html#method_downloadMessagesForOffline"&gt;&lt;code&gt;downloadMessagesForOffline()&lt;/code&gt;&lt;/a&gt;,but the parameters are really confusing-- a "&lt;code&gt;char *&lt;/code&gt;" of messageIds??  Does that mean that I'm supposed to do something like &lt;code&gt;var messageIds  = id1 + "," +id2&lt;/code&gt;??  How would I even get a messageId if none of the messages have been downloaded yet (the &lt;a href="http://www.blogger.com/post-create.g?blogID=10911258"&gt;&lt;code&gt;getMessages&lt;/code&gt;&lt;/a&gt; function returns an empty &lt;a href="http://www.xulplanet.com/references/xpcomref/ifaces/nsISimpleEnumerator.html"&gt;&lt;code&gt;nsISimpleEnumerator&lt;/code&gt;&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;What the heck?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-112135114995705354?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/112135114995705354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=112135114995705354' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112135114995705354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112135114995705354'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/07/how-do-you-download-messages-from-imap.html' title='How do you download messages from an IMAP folder??'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-112111240430836076</id><published>2005-07-11T13:05:00.000-07:00</published><updated>2005-07-12T07:39:43.983-07:00</updated><title type='text'>I wrote an extension!!</title><content type='html'>It's called Reloadchromezilla (yep) and it can be downloaded &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?id=964&amp;amp;application=thunderbird"&gt;here&lt;/a&gt; at &lt;a href="https://addons.mozilla.org/"&gt;Mozilla Update&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It adds a "Reload Chrome" option to the context menu and a toolbar button.&lt;br /&gt;&lt;br /&gt;As far as version 0.0.3 is concerned, you'll still need to set things up before Reloadchromezilla will work (see previous posts), but eventually Reloadchromezilla may do this on its own.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-112111240430836076?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/112111240430836076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=112111240430836076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112111240430836076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112111240430836076'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/07/i-wrote-extension.html' title='I wrote an extension!!'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-112066691524131585</id><published>2005-07-06T09:20:00.000-07:00</published><updated>2005-07-14T08:29:17.966-07:00</updated><title type='text'>PART TWO: No More Restarts to Thunderbird Ext...</title><content type='html'>This post deals with some features of the new &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?id=964&amp;application=thunderbird"&gt;Reloadchromezilla&lt;/a&gt; extension and how to set up your development environment for Reloadchromezilla to work.  &lt;a href="http://thunderbirddocs.blogspot.com/2005/07/part-one-no-more-restarts-for.html"&gt;Part One&lt;/a&gt; deals with how Reloadchromezilla actually works.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You'll have to configure a lot of stuff in Thunderbird:&lt;br /&gt;&lt;br /&gt;(1) go to the &lt;a href="http://kb.mozillazine.org/Main_Page"&gt;Mozillazine Knowledgebase&lt;/a&gt; entry, "&lt;a href="http://kb.mozillazine.org/Setting_up_extension_development_environment"&gt;Setting Up the Extension Development Environment&lt;/a&gt;"  Everything here is pretty straightforward--basically, there are just a few handy options which I don't actually use.&lt;br /&gt;&lt;br /&gt;(2) &lt;a href="http://kb.mozillazine.org/Dev_:_Tips_:_Disable_XUL_cache"&gt;Disable The "XUL Cache"&lt;/a&gt; This is another Knowledgebase entry. Disabling the XUL cache is a must for the "Reload Chrome" feature to work.   Basically, you need to find your extension in your profile directory, unpack the &lt;code&gt;.jar&lt;/code&gt; file, and remove references to the jar file in the chrome.rdf and install.rdf files--read the article.&lt;br /&gt;&lt;br /&gt;As the article states, you will also have to set a preference in your &lt;code&gt;user.js&lt;/code&gt;, which Thunderbird does not automatically create.  So you might need to:&lt;br /&gt;&lt;br /&gt;(3) Create a &lt;code&gt;user.js&lt;/code&gt; file: First, get to your profile -- for example, c:\documents and settings\{user}\Application Data\Thunderbird\Profiles\{your profile--if there's more than one, explore around to find the one that's yours}&lt;br /&gt;Next, create a file called user.js with something like Notepad, and add,&lt;blockquote&gt;&lt;code&gt;user_pref("nglayout.debug.disable_xul_cache", true);&lt;/code&gt;&lt;/blockquote&gt;You've just created a &lt;code&gt;user.js&lt;/code&gt; file and disabled the XUL cache!&lt;br /&gt;&lt;br /&gt;However, as &lt;a href="http://kb.mozillazine.org/Dev_:_Tips_:_Disable_XUL_cache"&gt;Disable The "XUL Cache"&lt;/a&gt; further states, you'll also need to edit &lt;code&gt;install.rdf&lt;/code&gt; and &lt;code&gt;chrome.rdf&lt;/code&gt;. The article also goes on to state something about injecting Javascript, but I'm not sure how this would work if you have a large and complicated extension--I ignored it.&lt;br /&gt;&lt;br /&gt;And you should be done! The files that you edit from now on should be the files in your profile's extensions folder--find your GUID, open that folder, open some files and extend away! Unfortunately, the Reloadchromezilla extension (which follows the procedure outlined in previous posts) will not update changes you make to your &lt;code&gt;install.rdf&lt;/code&gt; file.  I'm guessing that the reason for this is that because the install.rdf file is not in what would normally be your &lt;code&gt;.jar&lt;/code&gt;, it is outside the chrome. If you want to change the install.rdf file, you'll need to reinstall your extenesion the normal way, with the "Extension Builder" option of the &lt;a href="http://ted.mielczarek.org/code/mozilla/extensiondev/index.html"&gt;Extension Builder's Extension&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note: as the knowledgebase articles state, you'll need to unpack your .jar file in your extension directory (which is located in your profile directory)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-112066691524131585?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/112066691524131585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=112066691524131585' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112066691524131585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112066691524131585'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/07/part-two-no-more-restarts-to.html' title='PART TWO: No More Restarts to Thunderbird Ext...'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-112059472761109282</id><published>2005-07-05T13:09:00.000-07:00</published><updated>2006-02-17T18:06:47.573-08:00</updated><title type='text'>PART ONE: No More Restarts for Installing Thunderbird Extensions</title><content type='html'>What came of this post was the&lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?id=964&amp;application=thunderbird"&gt;Reloadchromezilla&lt;/a&gt; extension; if you're looking for how to set up Thunderbird to use Reloadchromezilla, see &lt;a href="http://thunderbirddocs.blogspot.com/2005/07/part-two-no-more-restarts-to.html"&gt;Part Two&lt;/a&gt;--Part One deals with how the extension actually works.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As I wandered the Internet for how to not have to package your .xpi, install, and restart thunderbird, I happened across &lt;a href="http://ted.mielczarek.org/"&gt;Ted Mielczarek's&lt;/a&gt; &lt;a href="http://ted.mielczarek.org/code/mozilla/extensiondev/index.html"&gt;Extension Developer's Extension&lt;/a&gt;. Apparently, this program works beautifully and effortlessly for Firefox, but unfortunately I develop for Thunderbird. Mr. Mielczarek seemed to be having a problem with getting this to work in Thunderbird, so I opened up the .xpi (hope you don't mind; thanks for the great extension) and poked around until I got it to work.&lt;br /&gt;&lt;br /&gt;The feature of the &lt;a href="http://ted.mielczarek.org/code/mozilla/extensiondev/index.html"&gt;Extension Developer's Extension&lt;/a&gt; that allows you to see your changes without restarting is the "Reload All Chrome" feature. The "Reload All Chrome" feature consists of getting an instance of a &lt;code&gt;&lt;a href="http://www.xulplanet.com/references/xpcomref/comps/c_chromechromeregistry1.html"&gt;@mozilla.org/chrome/chrome-registry;1&lt;/a&gt;&lt;/code&gt; component, like this:&lt;blockquote&gt;&lt;code&gt;var chromeRegistry = Components.classes["@mozilla.org/chrome/chrome-registry;1"].&lt;br /&gt;getService(Components.interfaces.nsIXULChromeRegistry);&lt;/code&gt;&lt;/blockquote&gt;The &lt;code&gt;&lt;a href="http://www.xulplanet.com/references/xpcomref/ifaces/nsIXULChromeRegistry.html"&gt;nsIXulChromeRegistry&lt;/a&gt;&lt;/code&gt; interface is the one with the &lt;code&gt;reloadChrome&lt;/code&gt; method.&lt;br /&gt;&lt;br /&gt;Because the method's name is "reloadChrome," you would expect this to work. However, calling this will just mutate your Thunderbird window into a mass of deformity which is summarily unresponsive to doing whatever you normally do with Thunderbird.&lt;br /&gt;&lt;br /&gt;I think the moral of this brief and ultimately fulfilling story is to never give up, even when confronted by the most insane difficulties. Basically, you just call reloadChrome() again!&lt;br /&gt;&lt;br /&gt;here's the code:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;function reloadTheChromeDammit(){&lt;br /&gt;try {&lt;br /&gt;&lt;br /&gt;var chromeRegistry = Components.classes["@mozilla.org/chrome/chrome-registry;1"].&lt;br /&gt;getService(Components.interfaces.nsIXULChromeRegistry);&lt;br /&gt;&lt;br /&gt;chromeRegistry.reloadChrome();&lt;br /&gt;&lt;br /&gt;var params ={out: ""};&lt;br /&gt;&lt;br /&gt;window.open("chrome://reloadchromezilla/content/pleasewaitdialog.xul",&lt;br /&gt;"_blank",&lt;br /&gt;"chrome,close,titlebar,modal,centerscreen");&lt;br /&gt;&lt;br /&gt;} catch(e) { }&lt;br /&gt;}&lt;/code&gt;&lt;/blockquote&gt;  The "dialog" &lt;code&gt;pleasewaitdialog.xul&lt;/code&gt; is really just a window.  The &lt;code&gt;.xul&lt;/code&gt; file looks like this:&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;page id="please-wait-dialog" title="Please Wait" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" onload="pleaseWaitLoad();"&amp;gt;&lt;br /&gt;&amp;lt;description value="Please wait while whatever aweseome modifications you've made to your chrome are loaded"&amp;gt;&lt;br /&gt;&amp;lt;script src= "chrome://reloadchromezilla/content/reloadchromezillaoverlay.js"&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/description&amp;gt;&amp;lt;/page&amp;gt;&lt;/code&gt;&lt;/blockquote&gt; The function &lt;code&gt;pleaseWaitLoad()&lt;/code&gt; looks like this: &lt;blockquote&gt;&lt;code&gt;function pleaseWaitLoad(){&lt;br /&gt;try{&lt;br /&gt;var dialog = document.getElementById("please-wait-dialog");&lt;br /&gt;setTimeout(function(){try{ var chromeRegistry = Components.classes["@mozilla.org/chrome/chrome-registry;1"].&lt;br /&gt;getService(Components.interfaces.nsIXULChromeRegistry);&lt;br /&gt;chromeRegistry.reloadChrome(); window.close(); }catch(e){alert(e)}},2000);&lt;br /&gt;}catch(e){&lt;br /&gt;alert("in pleasewaitload "+e);&lt;br /&gt;}&lt;br /&gt;}&lt;/code&gt;&lt;/blockquote&gt; this is necessary because without &lt;code&gt;&lt;a href="http://www.javascriptkit.com/javatutors/time4.shtml"&gt;setTimeout&lt;/a&gt;&lt;/code&gt;, Thunderbird executes the two &lt;code&gt;reloadChrome()&lt;/code&gt; functions too quickly--apparently, you have to wait until Thunderbird has completely hosed itself from the first &lt;code&gt;reloadChrome()&lt;/code&gt; before you can bring it back with another call to &lt;code&gt;reloadChrome()&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Hopefully this was useful to someone; an extension may follow.&lt;br /&gt;&lt;br /&gt;Again, thank you &lt;a href="http://ted.mielczarek.org/"&gt;Ted Mielczarek&lt;/a&gt; for being a lot better at developing &lt;a href="http://www.mozilla.org/"&gt;Mozilla&lt;/a&gt; than I am!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-112059472761109282?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/112059472761109282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=112059472761109282' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112059472761109282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112059472761109282'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/07/part-one-no-more-restarts-for.html' title='PART ONE: No More Restarts for Installing Thunderbird Extensions'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-112022949996444935</id><published>2005-07-01T07:48:00.000-07:00</published><updated>2007-01-31T06:52:05.710-08:00</updated><title type='text'>JavaScript Guide</title><content type='html'>Found a great link while searching for info on the throw statement in Javascript--if you need to clarify something about Javascript's syntax, go to the &lt;a href="http://www.croczilla.com/~alex/reference/javascript_guide/index.html"&gt;Core JavaScript Guide&lt;/a&gt;.  And hey, you can even &lt;a href="http://www.croczilla.com/~alex/reference/javascript_guide/CoreGuideJS15.zip"&gt;download&lt;/a&gt; it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-112022949996444935?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/112022949996444935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=112022949996444935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112022949996444935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/112022949996444935'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/07/javascript-guide.html' title='JavaScript Guide'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-111817145013132445</id><published>2005-06-07T12:10:00.000-07:00</published><updated>2005-06-07T12:10:50.136-07:00</updated><title type='text'>Javascript: Converting Strings to Integers</title><content type='html'>Go &lt;a href="http://www.javascripter.net/faq/convert2.htm"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-111817145013132445?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/111817145013132445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=111817145013132445' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111817145013132445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111817145013132445'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/06/javascript-converting-strings-to.html' title='Javascript: Converting Strings to Integers'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-111815302125313861</id><published>2005-06-07T06:19:00.000-07:00</published><updated>2007-04-12T13:48:14.790-07:00</updated><title type='text'>Thunderbird: DOMming Around</title><content type='html'>First, get the &lt;a href="http://kb.mozillazine.org/DOM_Inspector"&gt;DOM Inspector&lt;/a&gt; for Thunderbird. Because the DOM Inspector, apparently, was included in Thunderbird for a little while but discontinued, it's a little weird to install, but there are detailed instructions--basically, you just have to delete a few files. There may be a version 0.0.2, but I got 0.0.1 from &lt;a href="http://www.extensionsmirror.nl/index.php?showtopic=2601"&gt;here&lt;/a&gt; and I have no complaints.&lt;br /&gt;&lt;br /&gt;After you get the DOM Inspector, everything will be great. Want to get the body of that message, but don't feel like downloading it? Headers starting to bore you? Well, just&lt;br /&gt;get the selected message&lt;blockquote&gt;&lt;code&gt;var view = GetDBView();&lt;br /&gt;var hdr = view.hdrForFirstSelectedMessage;&lt;/code&gt;&lt;/blockquote&gt;then get the Message Pane (that preview window at the bottom, if  you have 3-pane Thunderbird)&lt;blockquote&gt;&lt;code&gt;var messagePane = document.getElementById("messagepane");&lt;/code&gt;&lt;/blockquote&gt;and then...get really complicated:&lt;blockquote&gt;&lt;code&gt;var msgPaneDocChildren = messagePane.contentDocument.childNodes;&lt;br /&gt;&lt;br /&gt;var ndHTML = msgPaneDocChildren.item(0);&lt;br /&gt;&lt;br /&gt;var ndHead = ndHTML.childNodes.item(0);&lt;br /&gt;var ndBODY = ndHTML.childNodes.item(2);&lt;br /&gt;var ndDIV = ndBODY.childNodes.item(1);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;var domBody = "";&lt;br /&gt;&lt;br /&gt;//now find the a tags, if any&lt;br /&gt;try{&lt;br /&gt; var htmlPre = ndDIV.childNodes.item(0);&lt;br /&gt;var htmlPreText = htmlPre.childNodes.item(0);&lt;br /&gt;domBody = htmlPreText.nodeValue;&lt;br /&gt;for(var i = 0; i &lt; dombody =" domBody" dombody =" domBody+htmlPre.childNodes.item(i);" nddivtext =" ndDIV.childNodes.item(0);" dombody =" ndDivText.nodeValue;"&gt;&lt;/code&gt;&lt;/blockquote&gt;ok: &lt;code&gt;messagePane&lt;/code&gt; itself is a &lt;code&gt;&lt;a href="http://www.xulplanet.com/references/elemref/ref_browser.html"&gt;browser&lt;/a&gt;&lt;/code&gt; object.  You can find it via the DOM Inspector by: &lt;blockquote&gt;(1) file --&gt; Inspect A Window --&gt; Inbox&lt;br /&gt;(2) Search --&gt; Find Nodes&lt;br /&gt;(3) Search by &lt;strong&gt;Tag Name&lt;/strong&gt; for &lt;code&gt;browser&lt;/code&gt;&lt;/blockquote&gt;  &lt;code&gt;messagePane&lt;/code&gt; has an attribute called &lt;a href="http://www.xulplanet.com/references/elemref/ref_browser.html#prop_contentDocument"&gt;&lt;code&gt;contentDocument&lt;/code&gt;&lt;/a&gt; which will show up in the DOM Inspector as &lt;code&gt;#document&lt;/code&gt; (and purple).&lt;br /&gt;Going deeper into the DOM Tree--or DOM Hell; whatever--the &lt;code&gt;childNodes&lt;/code&gt; of &lt;code&gt;messagePane.contentDocument&lt;/code&gt; will be a single &lt;a href="http://xulplanet.com/references/objref/Node.html"&gt;&lt;code&gt;Node&lt;/code&gt;&lt;/a&gt; whose &lt;code&gt;nodeName&lt;/code&gt; (nodeName is a property) is "HTML."  As you can see, this is where I got &lt;code&gt;var ndHTML = msgPaneDocChildren.item(0);&lt;/code&gt; "Open this up"--&lt;code&gt;ndHTML.childNodes&lt;/code&gt;--and you'll get three children this time with &lt;code&gt;nodeName&lt;/code&gt;s "HEAD," "#text," and "BODY."  As you'll see from the DOM Inspector, &lt;code&gt;#text&lt;/code&gt; is basically an empty string.   What is represented in the DOM Inspector as "#text" is really a &lt;a href="http://www.xulplanet.com/references/xpcomref/ifaces/nsIDOMText.html"&gt;&lt;code&gt;nsIDOMText&lt;/code&gt;&lt;/a&gt; node.  However, since the body of the message is a text node like this, to get the string out of a node that shows up &lt;code&gt;#text&lt;/code&gt; in the DOM Inspector, use &lt;code&gt;&lt;span style="font-style: italic;"&gt;node&lt;/span&gt;.nodeValue&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Ok so anyways, if we're getting the body of the selected message, we want the child of &lt;code&gt;ndHTML&lt;/code&gt; called "BODY."&lt;blockquote&gt;&lt;code&gt;var ndBODY = ndHTML.childNodes.item(2);&lt;/code&gt;&lt;/blockquote&gt;Now, child 1 is a text node, but child 2 is a "DIV" element. Open that (&lt;code&gt;var ndDIV = ndBODY.childNodes.item(1);&lt;/code&gt;), and things get a little strange again:&lt;br /&gt;&lt;br /&gt;You will either have (the easy case) a "#text" node which contains the body--&lt;code&gt;nodeValue&lt;/code&gt; that and you're done!&lt;br /&gt;&lt;br /&gt;The more difficult case is if you have, instead of a #text node, an &lt;a href="http://xulplanet.com/references/objref/HTMLPreElement.html"&gt;HTML Pre Element&lt;/a&gt;.  In the code above, this would be that large try/catch block.  Use &lt;a href="http://www.ors.uoguelph.ca/docs/xul/xultu/xpcom.html"&gt;QueryInterface&lt;/a&gt; to see if the node really is an &lt;code&gt;HTMLPreElement&lt;/code&gt;--if not, then it's &lt;strong&gt;probably&lt;/strong&gt; a #text node.&lt;br /&gt;&lt;br /&gt;If it is a PRE Element, &lt;blockquote&gt;&lt;code&gt;var htmlPre = ndDIV.childNodes.item(0);&lt;br /&gt;var htmlPreText = htmlPre.childNodes.item(0);&lt;/code&gt;&lt;/blockquote&gt;the &lt;code&gt;childNode&lt;/code&gt;s of htmlPre will be, hopefully, some #text nodes and possibly, if there are any links in the email message, some A tags, which you will have to open up and get their #text nodes, depending on how many A tags there are. Basically, use the DOM Inspector to find out which cases you'll have to handle, and just get to the #text nodes. Once you've gotten to a text node, you're done--just use &lt;code&gt;.nodeValue&lt;/code&gt; to get the text.&lt;br /&gt;&lt;br /&gt;The code above should work. I think I've handled all the cases. The only thing I can think of is if there's another html element in the email message like strong or something--the best way is probably to recurse until you get all the #text nodes.&lt;br /&gt;&lt;br /&gt;Hopefully, even if you weren't looking for another way to get the body of an email message, this post will still be useful because it provides a basis for getting anything you can see in Thunderbird--just find the right window, and explore around with the DOM Inspector until you have it.&lt;br /&gt;&lt;br /&gt;Want to get the date of a selected message?&lt;blockquote&gt;&lt;code&gt;function elt_getDate(){&lt;br /&gt;var dateBox = document.getElementById("collapseddateValue");&lt;br /&gt;return dateBox.inputField.value;&lt;br /&gt;}&lt;/code&gt;&lt;/blockquote&gt; &amp;amp;c, &amp;amp;c.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-111815302125313861?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/111815302125313861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=111815302125313861' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111815302125313861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111815302125313861'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/06/thunderbird-domming-around.html' title='Thunderbird: DOMming Around'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-111806461430857304</id><published>2005-06-06T06:28:00.000-07:00</published><updated>2005-06-07T07:17:01.166-07:00</updated><title type='text'>Thunderbird: How to Open a Dialog Window</title><content type='html'>&lt;blockquote&gt;&lt;code&gt;window.openDialog(&lt;br /&gt;"chrome://editor/content/EdFormProps.xul", "_blank", "chrome,close,titlebar,modal");&lt;br /&gt;    window.content.focus();&lt;/code&gt;&lt;/blockquote&gt;  Found this in line 2511 of ComposerCommands.js.  Could be useful when designing some options menu for your particular extension.&lt;br /&gt;&lt;br /&gt;If you were designing some kind of options window, you would replace EdFormProps.xul with your own .xul file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-111806461430857304?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/111806461430857304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=111806461430857304' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111806461430857304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111806461430857304'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/06/thunderbird-how-to-open-dialog-window.html' title='Thunderbird: How to Open a Dialog Window'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-111806376704568715</id><published>2005-06-06T06:14:00.000-07:00</published><updated>2005-06-06T06:16:50.113-07:00</updated><title type='text'>Great Band: Doves</title><content type='html'>&lt;a href="http://www.doves.net/"&gt;Doves&lt;/a&gt; are great!  They sound almost like Coldplay (which may or may not be a good thing), except weird like Pink Floyd and The Flaming Lips.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-111806376704568715?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/111806376704568715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=111806376704568715' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111806376704568715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111806376704568715'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/06/great-band-doves.html' title='Great Band: Doves'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-111763775929224758</id><published>2005-06-01T07:54:00.000-07:00</published><updated>2005-06-01T07:55:59.300-07:00</updated><title type='text'>Thunderbird And Mozilla Development: Search the Mozilla Source!!</title><content type='html'>&lt;a href="http://lxr.mozilla.org/mailnews/"&gt;Search the Mozilla source!!&lt;/a&gt;  I have been looking for something like this for a really long time.  More posts citing various important areas later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-111763775929224758?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/111763775929224758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=111763775929224758' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111763775929224758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111763775929224758'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/06/thunderbird-and-mozilla-development.html' title='Thunderbird And Mozilla Development: Search the Mozilla Source!!'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-111755987797717319</id><published>2005-05-31T10:10:00.000-07:00</published><updated>2005-05-31T10:19:01.003-07:00</updated><title type='text'>Thunderbird Extensions Documentation: Wielding the nsIEnumerator</title><content type='html'>This post deals with the two kinds of enumerators in Mozilla.  &lt;code&gt;&lt;a href="http://www.mozilla.org/projects/embedding/embedapiref/embedapi40.html"&gt;nsISimpleEnumerator&lt;/a&gt;&lt;/code&gt; is really simple, and there's no reason to talk about that.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;a href="http://www.xulplanet.com/references/xpcomref/ifaces/nsIEnumerator.html"&gt;nsIEnumerator&lt;/a&gt;&lt;/code&gt; is really bizarre, and although this may seem obvious to everyone else, this might be helpful to anyone who's a little stuck.&lt;br /&gt;&lt;br /&gt;Basically, &lt;code&gt;nsIEnumerator&lt;/code&gt; runs happily until it crashes.&lt;br /&gt;&lt;br /&gt;Here's some code that you can pretend is a &lt;code&gt;while(friendlyAndNice.hasNext())&lt;/code&gt; loop:&lt;code&gt;&lt;blockquote&gt;&lt;code&gt;var keepGoing = 1; &lt;br /&gt;  &lt;br /&gt;  blah&lt;br /&gt;  &lt;br /&gt;  try{&lt;br /&gt;   nseSubFolders.first();&lt;br /&gt;  }catch(e1){&lt;br /&gt;   keepGoing = 0;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  while(keepGoing == 1){&lt;br /&gt;   thing = blah.currentItem();&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;   try{&lt;br /&gt;    nseSubFolders.next();&lt;br /&gt;   }catch(e2){&lt;br /&gt;    keepGoing = 0;   &lt;br /&gt;   }&lt;br /&gt;}&lt;/code&gt;&lt;/blockquote&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-111755987797717319?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/111755987797717319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=111755987797717319' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111755987797717319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111755987797717319'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/05/thunderbird-extensions-documentation_31.html' title='Thunderbird Extensions Documentation: Wielding the nsIEnumerator'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-111754790197973552</id><published>2005-05-31T06:51:00.000-07:00</published><updated>2005-05-31T06:58:21.983-07:00</updated><title type='text'>Thunderbird Extensions Documentation: Going from Message Key to Message Uri</title><content type='html'>A lot of functions that I've come across in Mozilla require something called a "message uri"-- like the &lt;code&gt;&lt;a href="http://www.xulplanet.com/references/xpcomref/ifaces/nsIMessenger.html"&gt;nsIMessenger&lt;/a&gt;&lt;/code&gt; component's &lt;code&gt;getMessageServiceFromUri&lt;/code&gt;.  Since most of my other posts deal with something else called a "message key," here's how to convert between them:&lt;code&gt;fdr.generateMessageURI(msgKey);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;So you could write something like, &lt;blockquote&gt;&lt;code&gt;var fdr = hdr.folder;&lt;br /&gt;fdr.generateMessageURI(hdr.messageKey);&lt;/code&gt;&lt;/blockquote&gt;.  I think.  If not, you may have to Get To The Folder From An Account or Local Folders (see post).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-111754790197973552?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/111754790197973552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=111754790197973552' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111754790197973552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111754790197973552'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/05/thunderbird-extensions-documentation.html' title='Thunderbird Extensions Documentation: Going from Message Key to Message Uri'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-111653169515395428</id><published>2005-05-19T12:39:00.000-07:00</published><updated>2006-06-05T07:12:19.536-07:00</updated><title type='text'>Thunderbird Extensions: Adding Stuff to the Editor Tag</title><content type='html'>This post describes how to add stuff to the message body textbox in a compose window. The message body textbox is really a XUL element called the editor tag. If you search around the mozilla source (line 692 of messengercompose.xul), you'll find &lt;blockquote&gt;&lt;code&gt;&amp;lt;editor type="content-primary" id="content-frame" src="about:blank" name="browser.message.body" flex="1"&amp;gt;&lt;/code&gt;&lt;/blockquote&gt;Apparently, the editor tag is really, in Javascript, a &lt;code&gt;nsIEditorBoxObject.  &lt;/code&gt;The &lt;a href="http://www.mozilla.org/editor/editor-internals.html"&gt;Mozilla Documentation&lt;/a&gt; has some highly informative information about this, although it didn't really help me.&lt;br /&gt;&lt;br /&gt;What did help me was wandering helplessly around the Internet and &lt;a href="http://www.xulplanet.com/"&gt;XulPlanet&lt;/a&gt; until I found The Answer.  Here it is:&lt;blockquote&gt;&lt;code&gt;var domndEditor = document.getElementById("content-frame");&lt;br /&gt;  var htmlEditor = domndEditor.getHTMLEditor(domndEditor.contentWindow); //htmlEditor is the same&lt;br /&gt;         // thing as nsiEditor!!!&lt;br /&gt;   &lt;br /&gt;         //this means that the editor&lt;br /&gt;         //is a bizarre mixture&lt;br /&gt;         //of about a gazillion&lt;br /&gt;         //interfaces.&lt;br /&gt;&lt;br /&gt;//there may be some better way to do this      if(body.toUpperCase().indexOf("html")==-1){&lt;br /&gt;   htmlEditor = htmlEditor.QueryInterface(Components.interfaces.nsIPlaintextEditor);&lt;br /&gt; //this is so weird.  htmlEditor, I command you to become an //nsIPlainTextEditor!!!&lt;br /&gt; //...&lt;br /&gt; //it worked!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   htmlEditor.insertText(body);&lt;br /&gt;  }&lt;br /&gt;else htmlEditor.insertHTML(body); //body is whatever text you'd like to //insert into the editor tag (or "that textbox message body thing in a //compose window")&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-111653169515395428?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/111653169515395428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=111653169515395428' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111653169515395428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111653169515395428'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/05/thunderbird-extensions-adding-stuff-to.html' title='Thunderbird Extensions: Adding Stuff to the Editor Tag'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-111351573465970989</id><published>2005-04-14T14:40:00.000-07:00</published><updated>2005-04-14T14:57:42.320-07:00</updated><title type='text'>Thunderbird Extensions: A Better Way to Navigate Folders</title><content type='html'>Previously, I introduced a way to navigate folders using &lt;code&gt;&lt;a href="http://www.xulplanet.com/references/xpcomref/ifaces/nsIMsgDBView.html"&gt;nsIMsgDBView&lt;/a&gt;&lt;/code&gt;.&lt;br /&gt;Unfortunately, this will only work when you have the right folders selected in the tree /navigator/thing on the left of thunderbird.  Also, the tree must be fully expanded.&lt;br /&gt;&lt;br /&gt;Because that's horrible, there's a different and better way. &lt;blockquote&gt;&lt;code&gt;var accountManager = Components.classes&lt;br /&gt;["@mozilla.org/messenger/account-manager;1"]&lt;br /&gt;.getService(&lt;br /&gt;Components.interfaces.nsIMsgAccountManager);&lt;br /&gt;var fdrlocal = accountManager.localFoldersServer.rootFolder;&lt;br /&gt;var fdrfoo = fdrlocal.FindSubFolder("Foo");&lt;/code&gt;&lt;/blockquote&gt;  This will work all the time.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xulplanet.com/references/xpcomref/comps/c_messengeraccountmanager1.html"&gt;&lt;code&gt;accountManager&lt;/code&gt;&lt;/a&gt; is a spiffy Component which keeps track of your accounts--and their folders! &lt;code&gt;localFoldersServer.rootFolder&lt;/code&gt; will get you the server for "Local Folders," and then the Local Folders folder itself.  After that, because &lt;code&gt;fdrlocal&lt;/code&gt; is a &lt;a href="http://www.xulplanet.com/references/xpcomref/ifaces/nsIMsgFolder.html"&gt;&lt;code&gt;nsIMsgFolder&lt;/code&gt;&lt;/a&gt; , feel free to use any of the previously mentioned functions to navigate around.  &lt;code&gt;GetSubFolder(String folderName)&lt;/code&gt; and the &lt;code&gt;rootFolder&lt;/code&gt; property were mentioned in the example and in previous posts, but looking at &lt;a href="http://www.xulplanet.com/references/xpcomref/ifaces/nsIMsgFolder.html"&gt;XulPlanet&lt;/a&gt;'s     documentation would be a good idea.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-111351573465970989?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/111351573465970989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=111351573465970989' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111351573465970989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111351573465970989'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/04/thunderbird-extensions-better-way-to.html' title='Thunderbird Extensions: A Better Way to Navigate Folders'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-111029014814113093</id><published>2005-03-08T05:47:00.000-08:00</published><updated>2005-03-08T06:12:00.840-08:00</updated><title type='text'>Java Apps: Events, Button-Clicks, and How to Make Your Program Work</title><content type='html'>Although adding buttons is fun and looks cool, it's a whole lot better when you can click on them and have things actually happen.&lt;br /&gt;&lt;br /&gt;When the user clicks on a button (or moves a mouse or presses a key) it's called an &lt;code&gt;Event&lt;/code&gt;. The general terminology is that an event gets "fired" (when you click that button) and to "catch" the event, you'll need to do a lot of stuff.&lt;br /&gt;&lt;br /&gt;Firstly, your program will have to implement the &lt;code&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/ActionListener.html"&gt;ActionListener&lt;/a&gt;&lt;/code&gt; interface--this means that you have to have an &lt;code&gt;actionPerformed()&lt;/code&gt; method somewhere in the class that is your app. The parameter to &lt;code&gt;actionPerformed&lt;/code&gt; is an &lt;code&gt;ActionEvent&lt;/code&gt; which is basically the event that's just occurred.&lt;br /&gt;&lt;br /&gt;If you just have one button, then the &lt;code&gt;actionPerformed&lt;/code&gt; method is all you'll need. Just type in the code that you want "performed" when the event fires--like &lt;blockquote&gt;&lt;code&gt;System.out.println("I've just been pressed!");&lt;/blockquote&gt;&lt;/code&gt;&lt;br /&gt;However, there are a few more things that you have to do:&lt;br /&gt;&lt;br /&gt;1. Don't forget to put &lt;code&gt;implements ActionListener&lt;/code&gt; next to your class name, and import the package &lt;code&gt;java.awt.event.*&lt;/code&gt;.&lt;br /&gt;2. When you create a button that you want &lt;code&gt;actionPerformed&lt;/code&gt; to trap the events for, write this: &lt;blockquote&gt;&lt;code&gt;JButton btn = new JButton("Click Me, I'm Fatal");&lt;br /&gt;btn.addActionListener(this);&lt;/blockquote&gt;&lt;/code&gt;This makes sense because you want to be "listening" for an event, and because &lt;code&gt;this&lt;/code&gt; (which is your class) implements ActionListener, it &lt;em&gt;is&lt;/em&gt; an ActionListener.  It's also where the actionPerformed method is; it's all tied together!&lt;br /&gt;&lt;br /&gt;If you have more than one button that you want to handle events for, use &lt;code&gt;addActionListener(this)&lt;/code&gt; as usual, but in the actionPerformed method you'll need to write something like:&lt;blockquote&gt;&lt;code&gt;public void actionPerformed(ActionEvent e){&lt;br /&gt;  String action = e.getActionCommand();&lt;br /&gt;  if(action.equals("Click Me, I'm Fatal")){&lt;br /&gt;    ...&lt;br /&gt;  }&lt;br /&gt;  else if(action.equals("I'm Another Button!")){&lt;br /&gt;    ....&lt;br /&gt;  }&lt;br /&gt;}&lt;/blockquote&gt;&lt;/code&gt;  &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/ActionEvent.html#getActionCommand()"&gt;&lt;code&gt;getActionCommand()&lt;/code&gt;&lt;/a&gt; returns the &lt;em&gt;name&lt;/em&gt; of the Component.&lt;br /&gt;&lt;br /&gt;There are lots of other events other than &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/ActionEvent.html"&gt;&lt;code&gt;ActionEvent&lt;/code&gt;&lt;/a&gt;--like &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/KeyEvent.html"&gt;&lt;code&gt;KeyEvent&lt;/code&gt;&lt;/a&gt; or &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/MouseEvent.html"&gt;&lt;code&gt;MouseEvent&lt;/code&gt;&lt;/a&gt;, but they're pretty easy to understand once you've gotten ActionEvent.  You'll have to add KeyListeners, MouseListeners, etc. and implement the MouseListener/KeyListener interfaces, but there are Java Tutorials for that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-111029014814113093?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/111029014814113093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=111029014814113093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111029014814113093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/111029014814113093'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/03/java-apps-events-button-clicks-and-how.html' title='Java Apps: Events, Button-Clicks, and How to Make Your Program Work'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-110985913134276836</id><published>2005-03-03T05:24:00.000-08:00</published><updated>2005-03-08T05:47:30.023-08:00</updated><title type='text'>Swing Java Apps Tutorial</title><content type='html'>Java applications (not Java applets, which are a lot different) begin with a &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JFrame.html"&gt;JFrame&lt;/a&gt;--although the best place to begin is &lt;a href="http://java.sun.com/docs/books/tutorial/uiswing/learn/example1.html"&gt;here&lt;/a&gt;, at the &lt;a href="http://java.sun.com/docs/books/tutorial/index.html"&gt;Java Tutorial&lt;/a&gt;.  In the tutorial, they use threads, which may make the program safe but is also very confusing and not fun if you have to hard-code the entire thing anyways.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;frame.pack()&lt;/code&gt; shrinks the app down to the size of the components--so you don't have a lot of extra space. &lt;code&gt;setVisible(true)&lt;/code&gt; makes it visible...&lt;br /&gt;&lt;br /&gt;The JFrame is the main window--this kind of makes sense because it's like a picture frame into which you add contents like...pictures. You do this using &lt;code&gt;frame.getContentPane().add(&lt;/code&gt;your &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Component.html"&gt;Component&lt;/a&gt;&lt;code&gt;)&lt;/code&gt; You can read more about JFrame &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JFrame.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;After you've got a JFrame, you can add all sorts of things. Reading the Swing Tutorial would be a lot better than me putting up everything I know (which isn't a lot) but a few spiffy items to get started with are:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JTextField.html"&gt;JTextField&lt;/a&gt;!&lt;br /&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JButton.html"&gt;JButton&lt;/a&gt;!&lt;br /&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JLabel.html"&gt;JLabel&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Organizing Your App&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;To organize your gui (graphical user interface), if you're hard-coding everything, then you'll need to use &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JPanel.html"&gt;JPanel&lt;/a&gt;s.  JPanels are like mini-frames in that they start out empty and you can add stuff (Components) like JTextFields and JButtons to them.  This makes your app more organized in that you can have &lt;code&gt;inputPanel&lt;/code&gt;, which contains all the input Components (like JTextFields and JButtons), and &lt;code&gt;labelPanel&lt;/code&gt; which would be the labels that you'll place above the input Components.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Positioning Stuff&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;To do things like place one JPanel above another, you'll need to use a Layout Manager.  A great Java Tutorial is located &lt;a href="http://java.sun.com/docs/books/tutorial/uiswing/layout/visual.html"&gt;here&lt;/a&gt;.  By default, every &lt;code&gt;Container&lt;/code&gt; (like a JPanel, JFrame, or anything that has an &lt;code&gt;add()&lt;/code&gt; method) uses &lt;code&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/uiswing/layout/visual.html#flow"&gt;FlowLayout&lt;/a&gt;&lt;/code&gt;, which, as stated in the Java Tutorial, basically just adds things in a row.&lt;br /&gt;&lt;br /&gt;A lot of the other layouts are really confusing, so the main one that I use is &lt;code&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/uiswing/layout/visual.html#border"&gt;BorderLayout&lt;/a&gt;&lt;/code&gt;.  For how to use &lt;code&gt;BorderLayout&lt;/code&gt;, refer to the Java Tutorial segment &lt;a href="http://java.sun.com/docs/books/tutorial/uiswing/layout/border.html"&gt;"How to Use BorderLayout"&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hope that helps!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-110985913134276836?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/110985913134276836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=110985913134276836' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/110985913134276836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/110985913134276836'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/03/swing-java-apps-tutorial.html' title='Swing Java Apps Tutorial'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-110971374793248380</id><published>2005-03-01T13:42:00.000-08:00</published><updated>2005-03-01T13:50:46.053-08:00</updated><title type='text'>Thunderbird Extensions: nsIMsgComposeParams and nsIMsgCompFields</title><content type='html'>&lt;a href = "http://www.xulplanet.com/references/xpcomref/xpcomref1.0/nsIMsgComposeParams.html"&gt;nsIMsgComposeParams&lt;/a&gt;  specifies the formatting of the Compose window that is opened when you call&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;code&gt;OpenComposeWindowWithParams(null, params); //params is a nsIMsgComposeParams&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;In addition to type and format, which are explained in other posts, the other field that I saw used was &lt;code&gt;composeFields&lt;/code&gt;, which is a  &lt;a href = "http://www.xulplanet.com/references/xpcomref/ifaces/nsIMsgCompFields.html"&gt;nsIMsgCompFields&lt;/a&gt;.  nsIMsgCompFields is basically the headers of the new message, plus the body.  Just use the self-explanatory properties.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-110971374793248380?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/110971374793248380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=110971374793248380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/110971374793248380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/110971374793248380'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/03/thunderbird-extensions.html' title='Thunderbird Extensions: nsIMsgComposeParams and nsIMsgCompFields'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-110971317248982638</id><published>2005-03-01T13:10:00.000-08:00</published><updated>2005-03-01T14:24:27.960-08:00</updated><title type='text'>Thunderbird Extensions: nsIMsgCompType and nsIMsgCompFormat</title><content type='html'>I didn't include this in the post "How to Open a Compose Window" because I'm not 100% sure what these components do. I have played around with them some, so the theory is this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xulplanet.com/references/xpcomref/xpcomref1.0/nsIMsgCompType.html"&gt;nsIMsgCompType&lt;/a&gt; dictates which type of compose window is going to be opened.  How exactly this will change the look of the message, I don't know.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xulplanet.com/references/xpcomref/xpcomref1.0/nsIMsgCompFormat.html"&gt;nsIMsgCompFormat&lt;/a&gt;  formats, I think, the text that will make up the body of your message.  For example, if you use &lt;code&gt;PlainText&lt;/code&gt; on text that has HTML in it, you'll get tags.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;In Relation to Opening a Compose Window&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The component &lt;a href="http://www.xulplanet.com/references/xpcomref/xpcomref1.0/nsIMsgComposeParams.html"&gt;nsIMsgComposeParams&lt;/a&gt; has &lt;code&gt;type&lt;/code&gt; and &lt;code&gt;format&lt;/code&gt; properties--use nsIMsgCompType and nsIMsgCompFormat.&lt;br /&gt;&lt;br /&gt;Obviously, if you write&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;code&gt;var params = Components.classes['@mozilla.org/messengercompose/composeparams;1'].&lt;br /&gt;createInstance(Components.interfaces.nsIMsgComposeParams);&lt;br /&gt;var msgComposeFormat = Components.interfaces.nsIMsgCompFormat;&lt;br /&gt;...&lt;br /&gt;params.format = msgComposeFormat.PlainText;&lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;and later set body to text that uses HTML, then you'll see tags.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-110971317248982638?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/110971317248982638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=110971317248982638' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/110971317248982638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/110971317248982638'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/03/thunderbird-extensions-nsimsgcomptype.html' title='Thunderbird Extensions: nsIMsgCompType and nsIMsgCompFormat'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-110928593711711488</id><published>2005-02-24T14:45:00.000-08:00</published><updated>2005-03-01T14:20:17.843-08:00</updated><title type='text'>Thunderbird Extensions: Navigating Folders</title><content type='html'>Your Thunderbird extension may need, at some point, to find a folder, delete a folder, get the messages in a folder, or whatever.  And here's how!&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;var view = GetDBView();&lt;br /&gt;  view.doCommand(nsMsgViewCommandType.expandAll);&lt;br /&gt;  var fldrlocal = view.getFolderForViewIndex(0).rootFolder;&lt;br /&gt;  var fldrtemplates = fldrlocal.FindSubFolder("Templates");&lt;br /&gt;  var subfdr = fldrtemplates.FindSubFolder("Inferior Subfolder");&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;First of all, GetDBView() wasn't defined somewhere else in my .js file; apparently it is defined somewhere in the Thunderbird source, because you can use it and it works.  Again, thanks to the &lt;a href="http://dictionarysearch.mozdev.org/"&gt;DictionarySearch&lt;/a&gt; extension, because I got some of this code from there.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;A major limitation of this code is that it assumes the folder at "View Index 0" has a root folder!!!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The only reason that this wouldn't work is if you had selected "Local Folders" instead of an actual folder.  Normally this isn't a problem because by default "Inbox" is selected.&lt;br /&gt;&lt;br /&gt;Something that I don't understand is the correlation between the list of folders in the Folders pane and the "ViewIndex".  From prior experimentation I know that if you select a folder and then call &lt;code&gt;getURIForViewIndex(&lt;/code&gt;int&lt;code&gt;)&lt;/code&gt; then the uri returned will be the message uri of the somethingth message of whatever folder you have selected.&lt;br /&gt;&lt;br /&gt;My guess is that a "ViewIndex" actually refers to a message, and &lt;code&gt;getURI&lt;/code&gt; gets the message Uri while &lt;code&gt;getFolder&lt;/code&gt; gets the parent folder.  However, this may not be the case and should not be assumed to be true.  If anyone really does know what a ViewIndex is, please feel free to comment or email me.&lt;br /&gt;&lt;br /&gt;Once you've actually found a folder, moving around gets pretty easy.  &lt;a href = "http://www.xulplanet.com/references/xpcomref/xpcomref1.0/nsIMsgFolder.html"&gt;nsIMsgFolder&lt;/a&gt;  is the XPCOM model of a folder, and there are some useful and self-explanatory functions at XulPlanet!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-110928593711711488?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/110928593711711488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=110928593711711488' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/110928593711711488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/110928593711711488'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/02/thunderbird-extensions-navigating.html' title='Thunderbird Extensions: Navigating Folders'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-110928489667315392</id><published>2005-02-24T14:19:00.000-08:00</published><updated>2005-03-01T13:58:11.870-08:00</updated><title type='text'>Thunderbird Extensions: Opening a Compose Window</title><content type='html'>Previous posts have made vague and mysterious allusions to "opening a compose window" and to clear that up, here's how:&lt;br /&gt;&lt;br /&gt;There are actually a multitude of ways to open a compose window, but most of them will have &lt;a href="http://www.xulplanet.com/references/xpcomref/xpcomref1.0/nsIMsgComposeParams.html"&gt;nsIMsgComposeParams&lt;/a&gt; and &lt;a href="http://www.xulplanet.com/references/xpcomref/xpcomref1.0/nsIMsgComposeService.html"&gt;nsIMsgComposeService&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The way I found it done was in the &lt;a href="http://dictionarysearch.mozdev.org/index.html"&gt;DictionarySearch&lt;/a&gt; extension (this is a little bit different from his version but not much):&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;code&gt;function composeMessageWithText(subject,text,type,format){&lt;br /&gt;var msgComposeType = Components.interfaces.nsIMsgCompType;&lt;br /&gt;var msgComposFormat = Components.interfaces.nsIMsgCompFormat;&lt;br /&gt;var msgComposeService = Components.classes['@mozilla.org/messengercompose;1'].getService();&lt;br /&gt;msgComposeService = msgComposeService.QueryInterface(Components.interfaces.nsIMsgComposeService);&lt;br /&gt;&lt;br /&gt;gAccountManager = Components.classes['@mozilla.org/messenger/account-manager;1'].&lt;br /&gt;getService(Components.interfaces.nsIMsgAccountManager);&lt;br /&gt;&lt;br /&gt;var params = Components.classes['@mozilla.org/messengercompose/composeparams;1'].&lt;br /&gt;createInstance(Components.interfaces.nsIMsgComposeParams);&lt;br /&gt;if (params)&lt;br /&gt;{&lt;br /&gt;params.type = msgComposeType.Template;&lt;br /&gt;params.format = format;&lt;br /&gt;var composeFields = Components.classes['@mozilla.org/messengercompose/composefields;1'].&lt;br /&gt;createInstance(Components.interfaces.nsIMsgCompFields);&lt;br /&gt;if (composeFields)&lt;br /&gt;{&lt;br /&gt;composeFields.to = "foo@foo.net"&lt;br /&gt;text = trimAll(text);&lt;br /&gt;composeFields.body = text;&lt;br /&gt;composeFields.subject = subject;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;params.composeFields = composeFields;&lt;br /&gt;&lt;br /&gt;msgComposeService.OpenComposeWindowWithParams(null, params);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;The other ways are all through &lt;a href="http://www.xulplanet.com/references/xpcomref/xpcomref1.0/nsIMsgComposeService.html"&gt;msgComposeService&lt;/a&gt;; for the nsIMsgWindow parameter, type msgWindow. This works because...msgWindow is always the right menu? At any rate, it always works. Which is nice, even if it is complicated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-110928489667315392?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/110928489667315392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=110928489667315392' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/110928489667315392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/110928489667315392'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/02/thunderbird-extensions-opening-compose.html' title='Thunderbird Extensions: Opening a Compose Window'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-110928354077157802</id><published>2005-02-24T13:34:00.000-08:00</published><updated>2006-12-13T02:15:00.200-08:00</updated><title type='text'>Thunderbird Extensions: How to Get the Body of  A Message</title><content type='html'>The XPCOM component &lt;a href="http://www.xulplanet.com/references/xpcomref/xpcomref1.0/nsIMsgHdr.html"&gt;nsIMsgHdr&lt;/a&gt; is, as you would expect, the header of a message. Oddly there doesn't seem to be a component like "nsITheMsg" that includes the header--the header is, for all practical purposes, the message. This means that getting to the &lt;span style="font-style: italic;"&gt;body&lt;/span&gt; of the message is really frustrating.  So--to get the body:&lt;br /&gt;&lt;br /&gt;First you'll need to create an &lt;a href="http://www.mozilla.org/projects/embedding/embedapiref/embedapi47.html"&gt;nsIInputStream&lt;/a&gt; .  Because the stream that you create will need to "contain" the message, the &lt;a href="http://www.xulplanet.com/references/xpcomref/ifaces/nsIMsgFolder.html#method_getOfflineFileStream"&gt;getOfflineFileStream&lt;/a&gt; method of &lt;a href="http://www.xulplanet.com/references/xpcomref/ifaces/nsIMsgFolder.html"&gt;nsIMsgFolder&lt;/a&gt;  will return a relevant stream.&lt;br /&gt;&lt;br /&gt;The parameters of getOfflineFileStream are (1) the message key, which is a property of the header (yourHdr.messageKey); and two so-called "out" parameters--which is basically the way that javascript returns more than one thing. All that you need to do with these to make Thunderbird happy is to initialize them as Objects and then just pass them in. Like so:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;var offset = new Object();&lt;br /&gt;var messageSize = new Object();&lt;br /&gt;&lt;br /&gt;try{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;         is = fdr.getOfflineFileStream(hdr.messageKey,offset,messageSize);&lt;br /&gt;&lt;br /&gt;        }catch(e){&lt;br /&gt;         alert("message: "+e.message);&lt;br /&gt;        }&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;fdr is the folder. If you're having trouble getting to the right folder/any folder, see the subsequent post on navigating folders with XPCOM.&lt;br /&gt;Then, because nsIInputStream is a "frozen interface" (I'm not entirely sure what a frozen interface is, so I'm not going to guess) you'll need to use a safe, friendly wrapper class called &lt;a href="http://developer.mozilla.org/xpcom/api/nsIScriptableInputStream/"&gt;nsIScriptableInputStream&lt;/a&gt;.&lt;br /&gt;This code will get you the body and headers of the message (in other words the entire message):&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;try{&lt;br /&gt;&lt;br /&gt;   &lt;br /&gt;          var factory = Components.classes["@mozilla.org/scriptableinputstream;1"];&lt;br /&gt;&lt;br /&gt;var sis = factory.createInstance(nsIScriptableInputStream);&lt;br /&gt;sis.init(is);&lt;br /&gt;&lt;br /&gt;bodyAndHdr = sis.read(hdr.messageSize-10);&lt;br /&gt;&lt;br /&gt;//the -10 gets rid of this really weird "From - Tue " thing&lt;br /&gt;     // (which is an exact quote).  The reason why it shows "From - Tue" is&lt;br /&gt;     //that it's actually part of the next message's header, and in fact,&lt;br /&gt;     //the stream contains all of the messages in the folder.&lt;br /&gt;     //it's as yet unclear why hdr.messageSize should be off by 10, or why&lt;br /&gt;     //the out parameter to is (which is also called messageSize) always&lt;br /&gt;     //shows up as 0.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;         }catch(e){&lt;br /&gt;          alert("message: "+e.message);&lt;br /&gt;         }&lt;/code&gt;&lt;/blockquote&gt;Weirdly, offset (the out parameter "returned" from getOfflineFileStream) has the same value as hdr.messageSize. This may be a problem with the API, because offset and messageSize are entirely different things.&lt;br /&gt;&lt;br /&gt;As a side note, if you want to do anything at all with offset, use offset.value because offset is an object.&lt;br /&gt;&lt;br /&gt;The last part to successfully getting the body--which is really sort of optional--is to open the body in a compose window.&lt;br /&gt;&lt;br /&gt;One easy way to separate the hdr from the body in bodyAndHdr is:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;var hdrstr = bodyAndHdr.indexOf("\r\n\r\n"); //marks the end of the //headers&lt;br /&gt;body = bodyAndHdr.substring(hdrstr+1,body.length);&lt;/code&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-110928354077157802?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/110928354077157802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=110928354077157802' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/110928354077157802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/110928354077157802'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/02/thunderbird-extensions-how-to-get-body.html' title='Thunderbird Extensions: How to Get the Body of  A Message'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10911258.post-110869528431702972</id><published>2005-02-22T22:46:00.000-08:00</published><updated>2006-07-24T01:05:27.813-07:00</updated><title type='text'>Thunderbird Development: Extensions Introduction</title><content type='html'>&lt;img alt="What does this alt thing do" src="http://www.averdyne.com/graworks/bird_of_thunder.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Well, this is my first post of any kind ever! I'm an intern and working on a project which requires the development of extensions for Thunderbird, Mozilla's mail client (see above picture.) Because there's not a lot of documentation for Mozilla--although apparently there are people out there who actually understand how it works--I've had to piece together a lot of juicy informational tidbits which sort of make sense as a cohesive whole.&lt;br /&gt;&lt;br /&gt;Mozilla extensions (Firefox or Thunderbird) are composed of two main parts -- the .xul file, and the .js file (javascript). XUL is the xml-based graphical part of Mozilla, and there are extensive tutorials at &lt;a href="http://www.xulplanet.com/"&gt;XulPlanet&lt;/a&gt;. XulPlanet mostly just explains how xul can be used for gui's outside of Mozilla (and not specifically for Mozilla) so the best way that I found for learning how xul works is to download an extension and dissect all the files--this way, you can learn Mozilla-specific things like the name of the toolbar you're inserting a button into. Because my extension requires a button, I downloaded &lt;a href="http://www.chuonthis.com/extensions/"&gt;Buttons! by Maximum Extension&lt;/a&gt;.  A great tutorial that explains the basics of extensions can be found on &lt;a href="http://roachfiend.com/archives/2004/12/08/how-to-create-firefox-extensions/"&gt;Eric Hamiter's blog&lt;/a&gt; , and I'll try not to repeat anything that's stated there.&lt;br /&gt;&lt;br /&gt;The javascript is by far the most confusing half of writing an extension. While functions inherent to javascript like alert() are easy, most of the things that you'll want an extension to do are accomplished using XPCOM. An in-depth explanation and tutorial of xpcom can be found &lt;a href="http://www.mozilla.org/projects/xpcom/book/cxc/html/index.html"&gt;here&lt;/a&gt; at Mozilla's site. After the basics of all this, the most important part of writing an extension is finding the components/interfaces that you want, and you'll do that at &lt;a href="http://www.xulplanet.com/"&gt;xulplanet&lt;/a&gt;. Because xulplanet lists the components, properties, methods, etc., but doesn't actually explain what they mean, I soon developed an unhealthy love-hate relationship with that site, but the complete lack of meaningful information will develop your sixth sense to the uncanny point where you don't even need documentation--although it is xulplanet, not xpcomplanet.&lt;br /&gt;&lt;br /&gt;Mozilla's site does have some interfaces documented; the ones that I found that were relevant to my purposes were found &lt;a href="http://www.mozilla.org/projects/embedding/embedapiref/embedapi40.html"&gt;here&lt;/a&gt; and a few others which will be probably be posted up later. Poking around &lt;a href="http://www.mozilla.org/projects/embedding/embedapiref/embedapi40.html"&gt;here&lt;/a&gt; would probably be helpful.&lt;br /&gt;&lt;br /&gt;That's it for the introduction--later posts will be a lot more specific to certain components and interfaces (the ones that I'm using and happen to understand).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10911258-110869528431702972?l=thunderbirddocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thunderbirddocs.blogspot.com/feeds/110869528431702972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10911258&amp;postID=110869528431702972' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/110869528431702972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10911258/posts/default/110869528431702972'/><link rel='alternate' type='text/html' href='http://thunderbirddocs.blogspot.com/2005/02/thunderbird-development-extensions.html' title='Thunderbird Development: Extensions Introduction'/><author><name>Mitch Graw</name><uri>http://www.blogger.com/profile/05554638939595512587</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry></feed>
