<?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-36079472</id><updated>2012-01-28T00:14:03.746-08:00</updated><category term='Screenshot'/><category term='zenity'/><category term='ListEditor'/><category term='Desktop'/><category term='paste'/><category term='Enhancement'/><category term='keybindings'/><category term='Template Variables'/><category term='Info'/><category term='Applescript'/><category term='Logging'/><category term='pulldown actions'/><category term='Navigation'/><category term='Split Editor'/><category term='bash'/><category term='Java'/><category term='NetBeans'/><category term='Finder'/><category term='Expose'/><category term='gnome-terminal'/><category term='Code'/><category term='Mozilla browser'/><category term='android'/><category term='eclipse plug-in'/><category term='xcode'/><category term='copy'/><category term='Self maintaining'/><category term='Ruby'/><category term='Copy Paths'/><category term='Eclipse'/><category term='selection'/><category term='java.lang.Runtime'/><category term='Type Token'/><category term='Swing Component'/><category term='Mac OS X'/><category term='FieldEditor'/><category term='layout'/><category term='Plug-in'/><category term='Find/Replace Bar'/><category term='Web based clipboard'/><category term='Ubuntu'/><category term='productivity'/><category term='Terminal'/><category term='Ruby on Rails'/><title type='text'>Sandip Chitale's Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sandip Chitale</name><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>60</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-36079472.post-378753919124301598</id><published>2011-12-31T11:00:00.000-08:00</published><updated>2012-01-03T22:21:01.145-08:00</updated><title type='text'>Code Clips Eclipse Plug-in</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;The Code Clips Eclipse Plug-in lets you create code clips on the fly and associate abbreviations with them.&amp;nbsp;The abbreviations are expanded using the TAB key.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-CJMRans5xBg/Tv-CmvAn3fI/AAAAAAAADc0/7oqWtYxmaSs/s1600/ccc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="360" src="http://2.bp.blogspot.com/-CJMRans5xBg/Tv-CmvAn3fI/AAAAAAAADc0/7oqWtYxmaSs/s640/ccc.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;If there is more than one abbreviation that matches the prefix before the caret then a content assist style popup is shown. You may select the item in the popup by clicking on it or typing it's ordinal number. Once selected the expansion associated with the selected abbreviation is inserted in place of the prefix.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-O7mc0xTZcmE/TwPvo0yVbmI/AAAAAAAADdE/AFq0EOjEF-k/s1600/ccpopup.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="234" src="http://2.bp.blogspot.com/-O7mc0xTZcmE/TwPvo0yVbmI/AAAAAAAADdE/AFq0EOjEF-k/s640/ccpopup.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The expansion text may contain the following variables:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Nf2egNJeqPY/Tv9agjphVLI/AAAAAAAADco/Av9AO4lHE24/s1600/variables.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-Nf2egNJeqPY/Tv9agjphVLI/AAAAAAAADco/Av9AO4lHE24/s1600/variables.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The numbered variables ${1} through ${9} act as tab stops. The ${clipboard} variable will be replaced by the contents of the clipboard at the time of expansion. You can use the &lt;b&gt;Variablize... &lt;/b&gt;dialog to convert multiple occurrence of same word into a variables. All occurrences of the same variable can be edited together using the Linked editing support of Eclipse editors.&lt;br /&gt;&lt;br /&gt;To create a code clips use the&lt;b&gt; Edit &amp;gt; Create Code Clip&lt;/b&gt; menu item&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-mw_sZ-h5aoI/Tv9W6rncYmI/AAAAAAAADcE/DaQlOnDylJk/s1600/cccmi.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-mw_sZ-h5aoI/Tv9W6rncYmI/AAAAAAAADcE/DaQlOnDylJk/s1600/cccmi.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;or use&amp;nbsp;&lt;b&gt;Control+5&lt;/b&gt;&amp;nbsp;(windows and linux) or &lt;b&gt;Command+5 &lt;/b&gt;(mac) keyboard shortcuts. This will show the &lt;b&gt;Create Code Clip&lt;/b&gt;&amp;nbsp;dialog.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-FSL5xGVCnyc/Tv9aaSKF7lI/AAAAAAAADcc/5kA1x-XqiC8/s1600/ccc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="360" src="http://2.bp.blogspot.com/-FSL5xGVCnyc/Tv9aaSKF7lI/AAAAAAAADcc/5kA1x-XqiC8/s640/ccc.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;If you had any text selected in the editor that will be populated in the &lt;b&gt;Expansion &lt;/b&gt;text area. You may insert the above mentioned variables using the &lt;b&gt;Insert Variables&lt;/b&gt;&amp;nbsp;menu button.&lt;br /&gt;&lt;br /&gt;You can manager the Code Clips using the &lt;b&gt;Manage Code Clips&lt;/b&gt; dialog which can be invoked by clicking on the &lt;b&gt;Manage... &lt;/b&gt;button in &lt;b&gt;Create Code Clips&lt;/b&gt; dialog&amp;nbsp;:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-0UhmyNZNttI/Tv9W4qpR9ZI/AAAAAAAADb8/T6gBeFf181A/s1600/mcc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-0UhmyNZNttI/Tv9W4qpR9ZI/AAAAAAAADb8/T6gBeFf181A/s1600/mcc.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The Code Clips Eclipse Plug-in is available on &lt;a href="http://marketplace.eclipse.org/content/code-clips" target="_blank"&gt;Eclipse Marketplace&lt;/a&gt;!&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-378753919124301598?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/378753919124301598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=378753919124301598' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/378753919124301598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/378753919124301598'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2011/12/code-clips-eclipse-plug-in.html' title='Code Clips Eclipse Plug-in'/><author><name>Sandip Chitale</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-CJMRans5xBg/Tv-CmvAn3fI/AAAAAAAADc0/7oqWtYxmaSs/s72-c/ccc.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36079472.post-987265967782187245</id><published>2011-12-27T09:02:00.000-08:00</published><updated>2011-12-28T10:53:54.051-08:00</updated><title type='text'>UPDATED:One-click editor splitting in Eclipse</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;In the &lt;a href="http://sandipchitale.blogspot.com/2011/03/one-click-editor-splitting-in-eclipse.html" target="_blank"&gt;One-click editor splitting in Eclipse&lt;/a&gt; post I blogged about a simple Eclipse plug-in that lets you split the active editor. I have updated the plug-in to let you split the active editor with any other editors in the same tab. The functionality is available in the Split Editor toolbar's Horizontal and Vertical split button's drop down menu.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ay3CQJzK1Jg/Tvn6CXZA8WI/AAAAAAAADbo/GKh7KVOFGaA/s1600/spliteditordropdownmenu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="232" src="http://3.bp.blogspot.com/-ay3CQJzK1Jg/Tvn6CXZA8WI/AAAAAAAADbo/GKh7KVOFGaA/s640/spliteditordropdownmenu.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;The updated&amp;nbsp;Split Editor Plug-in is available on &lt;a href="http://marketplace.eclipse.org/content/split-editor-plug" target="_blank"&gt;Eclipse Marketplace&lt;/a&gt;!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-987265967782187245?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/987265967782187245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=987265967782187245' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/987265967782187245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/987265967782187245'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2011/12/updatedone-click-editor-splitting-in.html' title='UPDATED:One-click editor splitting in Eclipse'/><author><name>Sandip Chitale</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-ay3CQJzK1Jg/Tvn6CXZA8WI/AAAAAAAADbo/GKh7KVOFGaA/s72-c/spliteditordropdownmenu.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36079472.post-6225664050677898715</id><published>2011-12-10T10:26:00.001-08:00</published><updated>2011-12-10T11:09:25.767-08:00</updated><title type='text'>TIP: Stable history navigation using Eclipse toolbar</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Eclipse has a nice location history navigation toolbar. By repeatedly clicking on the history toolbar buttons you can quickly navigate to the locations the cursor/focus was at in various editors that are open. Unfortunately, out of the box, the position of the&amp;nbsp;history navigation&amp;nbsp;toolbar buttons is not stable if you have files of varying types open in the editor area. That is because the toolbar contributed by various editors are shown and hidden as the focused editor changes. These editor contributed toolbars (shown in blue rectangle below), when shown, are inserted to the left of history navigation toolbar. The following two screenshots demonstrates the behavior.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ew6QqxEoxoY/TuOkJ8y5pkI/AAAAAAAADaw/V0wCGn38NCQ/s1600/shifting1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="51" src="http://4.bp.blogspot.com/-ew6QqxEoxoY/TuOkJ8y5pkI/AAAAAAAADaw/V0wCGn38NCQ/s640/shifting1.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-vI8cY5bS53A/TuOkLDG3kPI/AAAAAAAADa4/lejAHP5opb8/s1600/shifting2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="49" src="http://1.bp.blogspot.com/-vI8cY5bS53A/TuOkLDG3kPI/AAAAAAAADa4/lejAHP5opb8/s640/shifting2.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Fortunately there is a way to fix this behavior. It is possible to to drag the editor toolbar to the right-most side of the toolbar strip like shown in the following screenshot:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-zMNGFF-JSOA/TuOkMY8XymI/AAAAAAAADbA/EceK2d89Z5U/s1600/stable1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="52" src="http://4.bp.blogspot.com/-zMNGFF-JSOA/TuOkMY8XymI/AAAAAAAADbA/EceK2d89Z5U/s640/stable1.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-JxXR913EUbY/TuOkN-sN4TI/AAAAAAAADbI/C6m6g3lFoSE/s1600/stable2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="50" src="http://1.bp.blogspot.com/-JxXR913EUbY/TuOkN-sN4TI/AAAAAAAADbI/C6m6g3lFoSE/s640/stable2.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;With this adjustment the&amp;nbsp;history navigation&amp;nbsp;toolbar remains in same place making it easier to use.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;You may have to unlock the toolbars to see the drag handles as shown in the screenshot below:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-0Wi1wM578NY/TuOoIUzSmQI/AAAAAAAADbQ/zIcuqWqDa7g/s1600/toolbar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="87" src="http://1.bp.blogspot.com/-0Wi1wM578NY/TuOoIUzSmQI/AAAAAAAADbQ/zIcuqWqDa7g/s320/toolbar.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I think this should be the default location of editor toolbars in Eclipse. Just filed &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=366314" target="_blank"&gt;this&lt;/a&gt;&amp;nbsp;enhancement.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Such small adjustments makes the tool more productive.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-6225664050677898715?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/6225664050677898715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=6225664050677898715' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/6225664050677898715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/6225664050677898715'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2011/12/tip-stable-history-navigation-using.html' title='TIP: Stable history navigation using Eclipse toolbar'/><author><name>Sandip Chitale</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-ew6QqxEoxoY/TuOkJ8y5pkI/AAAAAAAADaw/V0wCGn38NCQ/s72-c/shifting1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36079472.post-6571914004872448646</id><published>2011-12-04T22:10:00.001-08:00</published><updated>2011-12-10T11:10:45.224-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse plug-in'/><category scheme='http://www.blogger.com/atom/ns#' term='selection'/><title type='text'>Selection Explorer Eclipse Plug-in</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;This Selection Explorer feature shows information about:&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Active Part (this is somewhat similar to Plug-in spy action)&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Part name&lt;/li&gt;&lt;li&gt;Part Id&lt;/li&gt;&lt;li&gt;Class implementing the part&lt;/li&gt;&lt;li&gt;Super class of the class implementing the part&lt;/li&gt;&lt;li&gt;Interfaces&lt;/li&gt;&lt;li&gt;Contributing Plugin&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Active Selection&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Class of selection objects&lt;/li&gt;&lt;li&gt;Superclass of selection object&lt;/li&gt;&lt;li&gt;Interfaces&lt;/li&gt;&lt;li&gt;Adapted Types&lt;/li&gt;&lt;li&gt;toString() value&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Active Contexts&lt;/li&gt;&lt;li&gt;Active ActionSet Contexts&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;in the Selection Explorer view. Here are some screenshots:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-2X7SiVbI0x4/TtxhMhr8YEI/AAAAAAAADaY/AE89FacdnBI/s1600/SelectionExplorer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-2X7SiVbI0x4/TtxhMhr8YEI/AAAAAAAADaY/AE89FacdnBI/s1600/SelectionExplorer.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Clicking on the hyperlinks shows the Open Type dialog:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Ukg9TIvp3II/TtxhekVn89I/AAAAAAAADag/ObuAyZ4os4Q/s1600/OpenType.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-Ukg9TIvp3II/TtxhekVn89I/AAAAAAAADag/ObuAyZ4os4Q/s1600/OpenType.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Update Site:&amp;nbsp;&lt;a href="http://sandipchitaleseclipseplugins.googlecode.com/svn/trunk/SelectionExplorerUpdateSite"&gt;http://sandipchitaleseclipseplugins.googlecode.com/svn/trunk/SelectionExplorerUpdateSite&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Also on &lt;a href="http://marketplace.eclipse.org/content/selection-explorer-eclipse-plug" target="_blank"&gt;Eclipse Marketplace&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-6571914004872448646?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/6571914004872448646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=6571914004872448646' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/6571914004872448646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/6571914004872448646'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2011/12/selection-explorer-eclipse-plug-in.html' title='Selection Explorer Eclipse Plug-in'/><author><name>Sandip Chitale</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-2X7SiVbI0x4/TtxhMhr8YEI/AAAAAAAADaY/AE89FacdnBI/s72-c/SelectionExplorer.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36079472.post-2638552225560058795</id><published>2011-12-01T01:19:00.001-08:00</published><updated>2011-12-11T11:37:29.773-08:00</updated><title type='text'>Close Views Eclipse Plug-in</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;div style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 1.25em; max-width: 64em; text-align: -webkit-auto;"&gt;The Close Views feature provides commands related to closing views:&lt;/div&gt;&lt;div style="background-color: white; max-width: 64em; text-align: -webkit-auto;"&gt;&lt;/div&gt;&lt;ul style="font-family: arial, sans-serif; font-size: 13px; line-height: 1.25em; text-align: left;"&gt;&lt;li&gt;&lt;span style="line-height: 1.25em; text-align: left;"&gt;Window &amp;gt; Close (active) View - This closes the last active view.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 1.25em; text-align: left;"&gt;Window &amp;gt; Close All Views in Tab - This closes all views in the tab containing the last active view.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 1.25em; text-align: left;"&gt;Window &amp;gt; Close Other Views in Tab - This closes other views in the tab containing the last active view.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 1.25em; text-align: left;"&gt;Window &amp;gt; Other Views -&amp;nbsp;&lt;/span&gt;This closes all views except the last active view.&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 1.25em; text-align: left;"&gt;Window &amp;gt; Close All Views - As such this closes all the open views. If all the views are already closed it offers to reset the perspectives.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Here is a screenshot:&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family: arial, sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-FYKmM2aphJk/TuUGT6EPs2I/AAAAAAAADbY/k4vGMoO0ERQ/s1600/CloseViews.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://2.bp.blogspot.com/-FYKmM2aphJk/TuUGT6EPs2I/AAAAAAAADbY/k4vGMoO0ERQ/s320/CloseViews.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family: arial, sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Update site:&lt;br /&gt;&lt;a href="http://sandipchitaleseclipseplugins.googlecode.com/svn/trunk/CloseViewsFeatureUpdateSite/site.xml" target="_blank"&gt;http://sandipchitaleseclipseplugins.googlecode.com/svn/trunk/CloseViewsFeatureUpdateSite/site.xml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Also on &lt;a href="http://marketplace.eclipse.org/content/close-views-eclipse-plugin" target="_blank"&gt;Eclipse Marketplace&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-2638552225560058795?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/2638552225560058795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=2638552225560058795' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/2638552225560058795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/2638552225560058795'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2011/12/close-views-eclipse-plug-in.html' title='Close Views Eclipse Plug-in'/><author><name>Sandip Chitale</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-FYKmM2aphJk/TuUGT6EPs2I/AAAAAAAADbY/k4vGMoO0ERQ/s72-c/CloseViews.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36079472.post-7498144825831792065</id><published>2011-11-28T22:41:00.001-08:00</published><updated>2011-11-28T22:42:11.097-08:00</updated><title type='text'>Path Tools Eclipse Plug-in Updated</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;h1 style="background-attachment: initial; background-clip: initial; background-color: white; background-image: none; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: arial, sans-serif; font-size: x-large; margin-top: 0px; max-width: 700px; padding-left: 0px; text-align: -webkit-auto;"&gt;What is new?&lt;/h1&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Added support for Copy Path, Explore and Command Line Shell actions to local resources in RSE (needs RSE)&lt;/li&gt;&lt;li&gt;Added Copy SVN URL for resources in SVN based projects (needs Subclipse)&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Read more &lt;a href="http://code.google.com/p/pathtools/" target="_blank"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-7498144825831792065?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/7498144825831792065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=7498144825831792065' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7498144825831792065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7498144825831792065'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2011/11/path-tools-eclipse-plug-in-updated.html' title='Path Tools Eclipse Plug-in Updated'/><author><name>Sandip Chitale</name><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-36079472.post-2744714013592520685</id><published>2011-07-13T16:06:00.000-07:00</published><updated>2011-07-13T16:07:09.009-07:00</updated><title type='text'>Google Factor</title><content type='html'>Recently I joined the Google+.&amp;nbsp;Today I got an invite for Google Music. Was looking at my Google Accounts page and realized so much of our life is on Google based services.&lt;br /&gt;&lt;br /&gt;Just came up with a new term - Google Factor or GF for short&lt;br /&gt;&lt;br /&gt;Google Factor,&amp;nbsp;noun&lt;br /&gt;GF, acronym&lt;br /&gt;&lt;br /&gt;definition:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Percentage or ratio of your waking life that involves Google services&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;usage:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;What is your GF?&lt;/li&gt;&lt;li&gt;Just signed up for new Google Service FOO, now my Google Factor is .37.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Kind of scary!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-2744714013592520685?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/2744714013592520685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=2744714013592520685' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/2744714013592520685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/2744714013592520685'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2011/07/google-factor.html' title='Google Factor'/><author><name>Sandip Chitale</name><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-36079472.post-4118590866048769836</id><published>2011-06-17T23:53:00.000-07:00</published><updated>2011-06-18T01:00:39.230-07:00</updated><title type='text'>Eclipse: Key Strokes display utility</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Key Strokes is a simple Eclipse plug-in to display the typed Key Strokes in a small, always-on-top window. Useful for doing Eclipse screen casts no matter which platform you are on. Only works when working inside Eclipse.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-L5f4sfIRn28/TfxLEa-hWII/AAAAAAAADXQ/KjR6xQx75iY/s1600/KeyStrokes.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="494" src="http://1.bp.blogspot.com/-L5f4sfIRn28/TfxLEa-hWII/AAAAAAAADXQ/KjR6xQx75iY/s640/KeyStrokes.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Kkbu08qGfZk/TfxbCpNx5pI/AAAAAAAADXU/h4hItz6gmww/s1600/KeyStrokes.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="376" src="http://1.bp.blogspot.com/-Kkbu08qGfZk/TfxbCpNx5pI/AAAAAAAADXU/h4hItz6gmww/s640/KeyStrokes.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;You can install the plug-in from it's update site:&lt;br /&gt;&lt;br /&gt;http://sandipchitaleseclipseplugins.googlecode.com/svn/trunk/KeyStrokesUpdateSite&lt;br /&gt;&lt;br /&gt;Please file any issues at:&lt;br /&gt;&lt;br /&gt;http://code.google.com/p/sandipchitaleseclipseplugins/issues/list&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-4118590866048769836?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/4118590866048769836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=4118590866048769836' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/4118590866048769836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/4118590866048769836'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2011/06/eclipse-key-strokes-display-utility.html' title='Eclipse: Key Strokes display utility'/><author><name>Sandip Chitale</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-L5f4sfIRn28/TfxLEa-hWII/AAAAAAAADXQ/KjR6xQx75iY/s72-c/KeyStrokes.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36079472.post-1994930230355902897</id><published>2011-06-04T11:59:00.000-07:00</published><updated>2011-06-04T16:38:30.798-07:00</updated><title type='text'>Eclipse: Command Key binding Cross Reference</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I dusted off an Eclispe Plug-in that I had developed a few years ago. The idea is similar to Emac's&amp;nbsp;&lt;b&gt;describe-key (Ctrl+h) &lt;/b&gt;and&amp;nbsp;&lt;b&gt;where-is (Ctrl+w)&lt;/b&gt;&amp;nbsp;but applied to Eclipse with some additional bells and whistles.&lt;br /&gt;&lt;br /&gt;The&amp;nbsp;&amp;nbsp;Command Key binding Cross Reference Plug-in shows a pop-up dialog. The dialog can be invoked in two modes:&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Key binding centric&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Command centric&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;Key binding centric&lt;/b&gt;&amp;nbsp;mode can be invoked by clicking on the keys icon&lt;a href="http://4.bp.blogspot.com/-pS8EooRxb94/Tep5Nx8AmfI/AAAAAAAADWU/ofAOYnpR2cc/s1600/keys.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-pS8EooRxb94/Tep5Nx8AmfI/AAAAAAAADWU/ofAOYnpR2cc/s1600/keys.png" /&gt;&lt;/a&gt;&amp;nbsp;(&lt;b&gt;Ctrl+Alt+Shift+K&lt;/b&gt;)&amp;nbsp;in the status bar. It shows the following pop-up dialog:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-_DvahMMZ9d4/TerBXTl3ijI/AAAAAAAADW4/49y4httUXbc/s1600/ModifiedKeybinding.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="415" src="http://2.bp.blogspot.com/-_DvahMMZ9d4/TerBXTl3ijI/AAAAAAAADW4/49y4httUXbc/s640/ModifiedKeybinding.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The focus is in the &lt;b&gt;Keysequence:&lt;/b&gt; field. You can type any modified keys and it shows the key sequence in text for e.g. &lt;b&gt;Ctrl+D&lt;/b&gt; in the screenshot above. The &lt;b&gt;BACKSPACE &lt;/b&gt;works normally&lt;b&gt;. &lt;/b&gt;If you want to enter the &lt;b&gt;BACKSPACE&amp;nbsp;&lt;/b&gt;key itself use the small left arrow menu next to the&amp;nbsp;&lt;b&gt;Keysequence:&lt;/b&gt;&amp;nbsp;field. In the bottom table it shows all the commands that match the key &amp;nbsp;sequence text. The current hierarchy of contexts, platform, and some help info is shows in the legend at the bottom. For example, the legend is showing that the Editing Java Source context is the most active context. The commands applicable in the context are shown in normal font. The commands not applicable in any of the active contexts are shown in &lt;i&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;disabled&lt;/span&gt;&lt;/i&gt; font. You can invoked the active commands by double clicking on the row or selecting the row and typing Enter key.&lt;br /&gt;&lt;br /&gt;Eclipse has different key binding schemes. You can explore the key bindings of other schemes by selecting it in the &lt;b&gt;Scheme:&lt;/b&gt;&amp;nbsp;combo box.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can type the keys without any modifiers. In that case commands matching all modifier variants of the key sequence are shown:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-EnWlTHMAPk8/TerBhS5fqKI/AAAAAAAADW8/JJSWkyznU-8/s1600/Keybinding.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="416" src="http://1.bp.blogspot.com/-EnWlTHMAPk8/TerBhS5fqKI/AAAAAAAADW8/JJSWkyznU-8/s640/Keybinding.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This can help you see if you are defining the key binding modifiers in a consistent fashion.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Command centric&amp;nbsp;&lt;/b&gt;mode can be invoked by clicking on the keys icon&lt;a href="http://4.bp.blogspot.com/-JANIg4t73AI/Tep6EkV_CSI/AAAAAAAADWY/cOovyPjKEqA/s1600/commands.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-JANIg4t73AI/Tep6EkV_CSI/AAAAAAAADWY/cOovyPjKEqA/s1600/commands.png" /&gt;&lt;/a&gt;(&lt;b&gt;Ctrl+Alt+Shift+L&lt;/b&gt;)&amp;nbsp;in the status bar. It shows the following pop-up dialog:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-UFQIbsWGXyo/TerBoVx-SfI/AAAAAAAADXA/yla-cYAF9oQ/s1600/Commands.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="414" src="http://3.bp.blogspot.com/-UFQIbsWGXyo/TerBoVx-SfI/AAAAAAAADXA/yla-cYAF9oQ/s640/Commands.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;In this mode the &lt;b&gt;Command: &lt;/b&gt;field has the focus. You can just type part of the command name and it will filter out the matching commands. To anchor the match at the beginning use the &lt;b&gt;^&lt;/b&gt;. You can use the * and &lt;b&gt;?&lt;/b&gt; as the wildcards. You &amp;nbsp;can easily switch&amp;nbsp;&lt;b&gt;Key binding centric&lt;/b&gt; mode by hitting tab.&lt;br /&gt;&lt;br /&gt;Lastly, the &lt;b&gt;P&lt;/b&gt; column shows the icon of the platform if the command is defined for a specific platform such as Windows&lt;a href="http://2.bp.blogspot.com/-Ism_rZMfLp4/TeqBY_OUdII/AAAAAAAADWo/WcW7Q4HPjxU/s1600/windows.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-Ism_rZMfLp4/TeqBY_OUdII/AAAAAAAADWo/WcW7Q4HPjxU/s1600/windows.png" /&gt;&lt;/a&gt;, Mac&lt;a href="http://1.bp.blogspot.com/-J1lX46mGyGI/TeqBddL0fGI/AAAAAAAADWs/HKBbF8DEKGw/s1600/apple.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-J1lX46mGyGI/TeqBddL0fGI/AAAAAAAADWs/HKBbF8DEKGw/s1600/apple.png" /&gt;&lt;/a&gt;or Linux&lt;a href="http://1.bp.blogspot.com/-cHNSe6tmhWE/TeqBgsEgoJI/AAAAAAAADWw/VXcaH8FTXuM/s1600/linux.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-cHNSe6tmhWE/TeqBgsEgoJI/AAAAAAAADWw/VXcaH8FTXuM/s1600/linux.png" /&gt;&lt;/a&gt;.&amp;nbsp;The &lt;b&gt;U&lt;/b&gt; column shows the &lt;a href="http://2.bp.blogspot.com/-yzvp4rZK3ec/TeqBvdZx1bI/AAAAAAAADW0/3Uem7Ol0_N0/s1600/user.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-yzvp4rZK3ec/TeqBvdZx1bI/AAAAAAAADW0/3Uem7Ol0_N0/s1600/user.gif" /&gt;&lt;/a&gt;icon&amp;nbsp;if the user has customized the key binding using &lt;b&gt;Preferences &amp;gt; General &amp;gt; Keys&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;You can install the plug-in from it's update site:&lt;br /&gt;&lt;br /&gt;http://sandipchitaleseclipseplugins.googlecode.com/svn/trunk/commandkeybinding.xref.updatesite&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Please file any issues at:&lt;br /&gt;&lt;br /&gt;http://code.google.com/p/sandipchitaleseclipseplugins/issues/list&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Works in Eclipse 3.5.x and 3.6.x.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-1994930230355902897?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/1994930230355902897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=1994930230355902897' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1994930230355902897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1994930230355902897'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2011/06/eclipse-command-key-binding-cross.html' title='Eclipse: Command Key binding Cross Reference'/><author><name>Sandip Chitale</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-pS8EooRxb94/Tep5Nx8AmfI/AAAAAAAADWU/ofAOYnpR2cc/s72-c/keys.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36079472.post-6429765908193564324</id><published>2011-05-29T10:11:00.000-07:00</published><updated>2011-06-11T10:22:47.201-07:00</updated><title type='text'>Eclipse: Show all instances of selected Java Class</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;As mentioned in the Eclipse help Java Development User Guide Tips and tricks &lt;a href="http://help.eclipse.org/helios/topic/org.eclipse.jdt.doc.user/tips/jdt_tips.html#debugging_section"&gt;Debugging&lt;/a&gt; section, when debugging with JavaSE-1.6 you can see all instances of a particular class. You can invoke this functionality via the popup menu (All Instances...) of Variables view rows for reference type values or in the Java editor by positioning the cursor on or selecting a reference type expression. However it is not possible to see all instances of an arbitrary class. The All Instances plug-in adds this functionality. It can be invoked using the:&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Run &amp;gt; All Instances of Java Class...&lt;/b&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;b&gt;All Instances of Java Class...&lt;/b&gt; toolbar buttons in the &lt;b&gt;Variables &lt;/b&gt;and &lt;b&gt;Expressions &lt;/b&gt;views&lt;/li&gt;&lt;/ul&gt;Once invoked it shows the following customized Open Type dialog of JDT.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ML5nS8ygyFY/TfOjZJ_zkEI/AAAAAAAADXI/7zgvDyFx9CY/s1600/AllInstancesSelectClass.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-ML5nS8ygyFY/TfOjZJ_zkEI/AAAAAAAADXI/7zgvDyFx9CY/s1600/AllInstancesSelectClass.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Once you selects the class it adds the &lt;b&gt;&amp;lt;Java Class&amp;gt; Instances&amp;nbsp;&lt;/b&gt;expression to the &lt;b&gt;Expressions &lt;/b&gt;view. Please note that instances of sub classes are also shown if the &lt;b&gt;Show instances of subclasses &lt;/b&gt;checkbox is selected.&amp;nbsp;For example, when&amp;nbsp;&lt;a href="http://download.oracle.com/javase/6/docs/api/java/io/OutputStream.html"&gt;java.io.OutputStream&lt;/a&gt;&amp;nbsp;is selected it shows the instances of it's subclasses also. You can further filter out inner and anonymous inner classes using the additional check boxes.&amp;nbsp;This functionality is not provided by Eclipse Java debugger's &lt;b&gt;All Instances... &lt;/b&gt;action.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-d6b9wf28Owk/TehlCNHKFVI/AAAAAAAADV0/VCwp7NVHUBM/s1600/AllInstancesClassAndSubclasses.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-d6b9wf28Owk/TehlCNHKFVI/AAAAAAAADV0/VCwp7NVHUBM/s1600/AllInstancesClassAndSubclasses.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;In addition, an expression showing&amp;nbsp;&lt;a href="http://download.oracle.com/javase/6/docs/api/java/security/CodeSource.html"&gt;java.security.CodeSource&lt;/a&gt;&amp;nbsp;info for&amp;nbsp;the class is also added if that information is available.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/--58_64rbedA/TfOkNTnxyUI/AAAAAAAADXM/geXoeDbcl3w/s1600/AllInstancesSelectFoo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/--58_64rbedA/TfOkNTnxyUI/AAAAAAAADXM/geXoeDbcl3w/s1600/AllInstancesSelectFoo.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-HSt2VJmHaaE/TehmIV0YGWI/AAAAAAAADV8/GLwL2Ro3XAQ/s1600/AllInstancesCodeSource.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="136" src="http://1.bp.blogspot.com/-HSt2VJmHaaE/TehmIV0YGWI/AAAAAAAADV8/GLwL2Ro3XAQ/s640/AllInstancesCodeSource.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;NOTE: &lt;/b&gt;The selected class (FQN) may have been loaded by different ClassLoaders. Entries for each class loaded by distinct Classloader are shown independently. This is helpful in debugging issues related to class loading and seemingly mysterious ClassCastExceptions.&lt;/div&gt;&lt;br /&gt;These expressions are automatically removed from the &lt;b&gt;Expressions &lt;/b&gt;view when the debug session terminates.&lt;br /&gt;&lt;br /&gt;You can further explore the instances using the &lt;b&gt;All References... &lt;/b&gt;popup menu item provided by the Eclipse Expressions view.&lt;br /&gt;&lt;br /&gt;The functionality works only if you have a active Java debug session, running under a JavaSE-1.6 (and above) that supports the all instances retrieval functionality, selected in the &lt;b&gt;Debug &lt;/b&gt;view.&lt;br /&gt;&lt;br /&gt;You can install the plug-in from the plug-in's update site:&lt;br /&gt;&lt;br /&gt;http://sandipchitaleseclipseplugins.googlecode.com/svn/trunk/AllInstancesUpdateSite&lt;br /&gt;&lt;br /&gt;Please file any issues at:&lt;br /&gt;&lt;br /&gt;http://code.google.com/p/sandipchitaleseclipseplugins/issues/list&lt;br /&gt;&lt;br /&gt;&lt;div&gt;It works in Eclipse 3.5.2, 3.6.x and 3.7.x.&lt;br /&gt;&lt;br /&gt;Also available on &lt;a href="http://marketplace.eclipse.org/content/show-all-instances-selected-java-type"&gt;Eclipse Marketplace&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Enjoy!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-6429765908193564324?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/6429765908193564324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=6429765908193564324' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/6429765908193564324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/6429765908193564324'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2011/05/eclipse-show-all-instances-of-selected.html' title='Eclipse: Show all instances of selected Java Class'/><author><name>Sandip Chitale</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-ML5nS8ygyFY/TfOjZJ_zkEI/AAAAAAAADXI/7zgvDyFx9CY/s72-c/AllInstancesSelectClass.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36079472.post-7788560553887514305</id><published>2011-04-21T23:04:00.000-07:00</published><updated>2011-05-01T23:21:50.336-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Find/Replace Bar'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Eclipse: Find/Replace Bar</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I prefer &lt;a href="http://www.netbeans.org/"&gt;NetBeans &lt;/a&gt;style &lt;a href="http://ui.netbeans.org/docs/ui/find_integration/"&gt;Incremental Search Bar&lt;/a&gt; interface instead of the usual Find/Replace Dialog. Eclipse only has the Find/Replace Dialog. So I implemented a similar Find/Replace Bar for Eclipse. Here are the screenshots:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-HR6LjVtuAE8/Tb4rwzwNFuI/AAAAAAAADTc/Gg5b6YDmzkY/s1600/FindReplaceBar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="177" src="http://2.bp.blogspot.com/-HR6LjVtuAE8/Tb4rwzwNFuI/AAAAAAAADTc/Gg5b6YDmzkY/s640/FindReplaceBar.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Known issue: If you have customized the perspective, the Find bar view will be shown with a tab unlike the above screenshot. Try resetting the perspective and the tab may go away. I had mixed success with that though.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Find/Replace Bar Plug-in is on&amp;nbsp;&lt;a href="http://marketplace.eclipse.org/content/find-bar-eclipse"&gt;Eclipse Marketplace&lt;/a&gt;&amp;nbsp;!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;Currently the Find/Replace Bar supports the following features:&lt;/div&gt;&lt;div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Find as you type&lt;/li&gt;&lt;li&gt;Find Next/Find Previous&lt;/li&gt;&lt;ul&gt;&lt;li&gt;same key bindings as Eclipse&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Show the total number of occurrences in the document&lt;/li&gt;&lt;li&gt;Case sensitive mode&lt;/li&gt;&lt;li&gt;Whole word only mode&lt;/li&gt;&lt;li&gt;Regular Expression mode&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Indicate illegal regular expression&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Show Find/Replace dialog by pressing CTRL+F on Windows and Linux and COMMAND+F on Mac&lt;/li&gt;&lt;li&gt;Enable/Disable Find/Replace Bar using preferences&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Show Preferences button on the Find/Replace Bar&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Optionally override the standard Find/Replace Dialog of Eclipse. Control the override through preference page.&lt;/li&gt;&lt;li&gt;Press CTRL+F on Windows and Linux and COMMAND+F on Mac to show the Find/Replace Bar&lt;/li&gt;&lt;ul&gt;&lt;/ul&gt;&lt;li&gt;Press ESCAPE to hide the Find/Replace bar&lt;/li&gt;&lt;li&gt;Find/Replace Bar works with text editors inside a Multi page editor e.g. plugin.xml XML editor inside the Plug-in Manifest editor.&lt;/li&gt;&lt;li&gt;Show the preceding and succeeding match count&lt;/li&gt;&lt;li&gt;Show text matching groups in regular expressions in a combobox&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;I am planning to implement the following enhancements:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Full Replace/Find,Replace and Replace All support&lt;/li&gt;&lt;li&gt;Find in selection&lt;/li&gt;&lt;li&gt;Highlight current and other occurrences of the matched text&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Highlight groups in regular expressions in different colors&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Show current line number and column range of the match&lt;/li&gt;&lt;li&gt;Make it work in Console and other views where Find/Replace dialog is applicable&lt;/li&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;You can install it from the plug-in's update site:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://sandipchitaleseclipseplugins.googlecode.com/svn/trunk/FindReplaceBarUpdateSite/"&gt;http://sandipchitaleseclipseplugins.googlecode.com/svn/trunk/FindReplaceBarUpdateSite/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Please file any issues at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/sandipchitaleseclipseplugins/issues/list"&gt;http://code.google.com/p/sandipchitaleseclipseplugins/issues/list&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After installing the plug-in, go the Find/Replace Bar preferences page to enable the Find/Replace Bar as shown in the screenshot below:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-tDkxPQq__Ho/TbEYHDld23I/AAAAAAAADSc/62syT2BZLDI/s1600/FindReplaceBarPreferences.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-tDkxPQq__Ho/TbEYHDld23I/AAAAAAAADSc/62syT2BZLDI/s1600/FindReplaceBarPreferences.png" style="cursor: move;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Works on Eclipse 3.6 and 3.5.2&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enjoy!&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-7788560553887514305?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/7788560553887514305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=7788560553887514305' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7788560553887514305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7788560553887514305'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2011/04/eclipse-findreplace-bar.html' title='Eclipse: Find/Replace Bar'/><author><name>Sandip Chitale</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-HR6LjVtuAE8/Tb4rwzwNFuI/AAAAAAAADTc/Gg5b6YDmzkY/s72-c/FindReplaceBar.png' height='72' width='72'/><thr:total>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36079472.post-8874479210669404647</id><published>2011-03-30T17:22:00.000-07:00</published><updated>2011-05-08T11:12:52.262-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Split Editor'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>One-click editor splitting in Eclipse</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;You may know that one can split layout the editors in Eclipse by dragging the editor tab to any edge of the editor area. This works only if you have more than one editor. However there are times when I want to work on two parts of the same file. To do that I first do &lt;b&gt;Window &amp;gt; New Editor&lt;/b&gt; to duplicate the editor and then drag it to split the editor in a side-by-side or top-bottom layout. But that is too many clicks and drags. I developed a simple Eclipse Plugin which will help you split the active editor either horizontally or vertically with a single click. It is based on some code I found &lt;a href="http://eclipse.dzone.com/tips/programmatically-split-editor-"&gt;here&lt;/a&gt; that was written by&amp;nbsp;Dimitri Missoh (thanks Dimitri - I have given you credit in the source code of the plug-in). I adapted his code to suite our purpose.&lt;br /&gt;&lt;br /&gt;Here is the screenshot:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-NjNuV3LrD1M/TZPIoKppVNI/AAAAAAAADR8/tyVbKj8_TBA/s1600/SplitEditor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="312" src="http://4.bp.blogspot.com/-NjNuV3LrD1M/TZPIoKppVNI/AAAAAAAADR8/tyVbKj8_TBA/s640/SplitEditor.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Split Editor Plug-in is available on &lt;a href="http://marketplace.eclipse.org/content/split-editor-plug"&gt;Eclipse Marketplace&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;You can install it from the plug-in's update site:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sandipchitaleseclipseplugins.googlecode.com/svn/trunk/SplitEditorFeatureUpdateSite"&gt;http://sandipchitaleseclipseplugins.googlecode.com/svn/trunk/SplitEditorFeatureUpdateSite&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Source code is &lt;a href="http://sandipchitaleseclipseplugins.googlecode.com/svn/trunk/SpiltEditor/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Works in Eclipse 3.4, 3.5 and 3.6.&lt;br /&gt;&lt;br /&gt;Also available on &lt;a href="http://marketplace.eclipse.org/content/split-editor-plug"&gt;Eclipse Marketplace&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-8874479210669404647?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/8874479210669404647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=8874479210669404647' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/8874479210669404647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/8874479210669404647'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2011/03/one-click-editor-splitting-in-eclipse.html' title='One-click editor splitting in Eclipse'/><author><name>Sandip Chitale</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-NjNuV3LrD1M/TZPIoKppVNI/AAAAAAAADR8/tyVbKj8_TBA/s72-c/SplitEditor.png' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36079472.post-1535713878216956105</id><published>2011-03-15T15:10:00.000-07:00</published><updated>2011-03-19T23:45:36.120-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Applescript'/><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><title type='text'>XCode: Corrected user scripts - Delete Line, Copy/Move line Up/Down</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;[Note: It is a shame that XCode 4 does not have the Scripts menu]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;XCode has the following scripts:&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Delete Line&lt;/li&gt;&lt;li&gt;Move Line Up&lt;/li&gt;&lt;li&gt;Move Line Down&lt;/li&gt;&lt;/ul&gt;I added two more (as described in &lt;a href="http://sandipchitale.blogspot.com/2011/03/xcode-copymove-updown-line.html"&gt;this&lt;/a&gt; post):&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Copy Line Up&lt;/li&gt;&lt;li&gt;Copy Line Down&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;However there was a problem. The script always worked on the &lt;i&gt;&lt;b&gt;first text document&lt;/b&gt;&lt;/i&gt;. That meant that when you had multiple documents open, the commands sometimes modified the document which did not have focus (baaad!).&lt;br /&gt;&lt;br /&gt;It turns out the &lt;i&gt;&lt;b&gt;window 1&lt;/b&gt;&lt;/i&gt; is always the window which has the focus. I corrected the scripts to make use of this fact. Here is the general strategy behind the modifications I made to the scripts:&lt;br /&gt;&lt;pre&gt;:&lt;/pre&gt;&lt;pre&gt;:&lt;br /&gt;using terms from application "Xcode"&lt;br /&gt; set selectedDocument to missing value&lt;br /&gt; repeat with index from 1 to (count of text documents)&lt;br /&gt;  if (associated file name of window 1 as string) is equal to (path of text document index) then&lt;br /&gt;   -- found the document&lt;br /&gt;   set selectedDocument to (text document index)&lt;br /&gt;   exit repeat&lt;br /&gt;  end if&lt;br /&gt; end repeat&lt;br /&gt; if (selectedDocument is not missing value) then&lt;br /&gt;  tell selectedDocument&lt;br /&gt;   -- do the modifications to document&lt;br /&gt;  end tell&lt;br /&gt; else&lt;br /&gt;  beep 1&lt;br /&gt; end if&lt;br /&gt;end using terms from&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Download the scripts &lt;a href="http://sandipchitalesmacosxstuff.googlecode.com/svn/trunk/User%20Scripts.zip"&gt;here&lt;/a&gt;. Just unzip and drop the scripts in&amp;nbsp;/Developer/Library/Xcode/User Scripts/ .&lt;br /&gt;&lt;br /&gt;I have filed a bug at http://radar.apple.com for this. The problem Id is&amp;nbsp;9138643. I have attached the fixed scripts to the problem.&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-1535713878216956105?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/1535713878216956105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=1535713878216956105' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1535713878216956105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1535713878216956105'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2011/03/xcode-corrected-user-scripts-delete.html' title='XCode: Corrected user scripts - Delete Line, Copy/Move line Up/Down'/><author><name>Sandip Chitale</name><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-36079472.post-4112683137023203168</id><published>2011-03-09T23:39:00.000-08:00</published><updated>2011-03-16T07:39:11.615-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='productivity'/><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><title type='text'>XCode: Copy/Move Up/Down line</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;a href="http://4.bp.blogspot.com/-6CrUb2inwZg/TXjzZ2tOKaI/AAAAAAAADR0/9WuERSKMdQ0/s1600/edituserscriptsmenu.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="color: #990000;"&gt;[Note: Please see &lt;a href="http://sandipchitale.blogspot.com/2011/03/xcode-corrected-user-scripts-delete.html"&gt;this&lt;/a&gt; post for corrected scripts]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;XCode already has the following scripts under Script Menu &amp;gt; Text&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Delete Line&lt;/li&gt;&lt;li&gt;Move Line Up&lt;/li&gt;&lt;li&gt;Move Line Down&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;I added the following two scripts:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Copy Line Up&lt;/li&gt;&lt;li&gt;Copy Line Down&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Basically I started by creating the following Applescript files:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;/Developer/Library/Xcode/User Scripts/Copy Line Up.scpt with content:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;--&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;(*&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;To edit this script, choose Save As... and save it in your home directory, then re-add it to the User Scripts list.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;*)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;using terms from application "Xcode"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;tell first text document&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;set {startLine, endLine} to selected paragraph range&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="font-family: 'Courier New', Courier, monospace; white-space: pre;"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if startLine &amp;gt; 1 then&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;set theText to (paragraphs startLine through endLine)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;set theText to (theText as string)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;make new paragraph at beginning of paragraph (startLine) with data theText&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;set selected paragraph range to {startLine, endLine}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;else&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;beep 1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;end if&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;end tell&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;end using terms from&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;--&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;/Developer/Library/Xcode/User Scripts/Copy Line Down.scpt with content:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;--&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;(*&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;To edit this script, choose Save As... and save it in your home directory, then re-add it to the User Scripts list.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;*)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;using terms from application "Xcode"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;tell first text document&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;set {startLine, endLine} to selected paragraph range&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if endLine &amp;lt; (count paragraphs) then&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;set theText to (paragraphs startLine through endLine)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;set theText to (theText as string)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;make new paragraph at beginning of paragraph (startLine + 1) with data theText&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;set selected paragraph range to {endLine + 1, endLine + 1}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;else&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;beep 1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;end if&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;end tell&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;end using terms from&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;--&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;and then added those scripts using the Script Menu &amp;gt; Edit User Scripts... dialog.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/-6CrUb2inwZg/TXjzZ2tOKaI/AAAAAAAADR0/9WuERSKMdQ0/s1600/edituserscriptsmenu.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5582479363633195426" src="http://4.bp.blogspot.com/-6CrUb2inwZg/TXjzZ2tOKaI/AAAAAAAADR0/9WuERSKMdQ0/s400/edituserscriptsmenu.png" style="cursor: pointer; display: block; height: 116px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While I was at it I added the following keybindings:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Delete Line&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;Command+D&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Move Line Up&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;Alt+UP&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Copy Line Up&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;Control+Alt+UP&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Move Line Down&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;Alt+Down&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Copy Line Down&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;Control+Alt+Down&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Note: The Command+D keybinding for Delete Line conflicts with the default Add Bookmark keybinding. I changed that keybinding to something else in Preference &amp;gt; Key Bindings &amp;gt; Menu Key Bindings &amp;gt; Edit section.&lt;br /&gt;&lt;br /&gt;Here is the screenshot:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/-wnK3dgtr670/TXiFQu8ddrI/AAAAAAAADRM/q0wShnCnmHI/s1600/XCodeScriptsKB.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5582358260651751090" src="http://2.bp.blogspot.com/-wnK3dgtr670/TXiFQu8ddrI/AAAAAAAADRM/q0wShnCnmHI/s320/XCodeScriptsKB.png" style="cursor: pointer; display: block; height: 313px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now I have my LineTools NetBeans plugin like functionality in XCode. Yay!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-4112683137023203168?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/4112683137023203168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=4112683137023203168' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/4112683137023203168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/4112683137023203168'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2011/03/xcode-copymove-updown-line.html' title='XCode: Copy/Move Up/Down line'/><author><name>Sandip Chitale</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-6CrUb2inwZg/TXjzZ2tOKaI/AAAAAAAADR0/9WuERSKMdQ0/s72-c/edituserscriptsmenu.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36079472.post-7994362778709823201</id><published>2010-09-05T14:59:00.000-07:00</published><updated>2010-09-05T15:18:30.874-07:00</updated><title type='text'>Updated Path Tools Eclipse plug-in</title><content type='html'>&lt;div&gt;&lt;b&gt;What's new?&lt;/b&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;The Custom commands can now we edited using the table editor which allows you to use a display labels and wildcard patterns for the command. The display label is used in the menu items that invoke the commands. The wildcard patterns are used to determine if the command applies to the selected file.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://pathtools.googlecode.com/files/PathToolsPreferencesPage.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 600px; height: 385px;" src="http://pathtools.googlecode.com/files/PathToolsPreferencesPage.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;The Path Tools commands remain enabled even if there is no file selected in the Eclipse workbench. The commands operate on the workspace folder when no file is selected in the workbench.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Read more about Path Tools &lt;a href="http://code.google.com/p/pathtools/"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-7994362778709823201?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/7994362778709823201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=7994362778709823201' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7994362778709823201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7994362778709823201'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2010/09/updated-path-tools-eclipse-plug-in.html' title='Updated Path Tools Eclipse plug-in'/><author><name>Sandip Chitale</name><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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36079472.post-5684988562496218999</id><published>2010-05-11T10:08:00.000-07:00</published><updated>2010-06-08T17:09:16.623-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='layout'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>LinearLayout gravity and layout_gravity explained</title><content type='html'>Recently I started hacking on Android. Android uses Java as the development language which made it very easy to get started :) .&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am very familiar with Swing and SWT GUI layout mechanism of &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/LayoutManager.html"&gt;Layout Managers&lt;/a&gt; and &lt;a href="http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/widgets/Layout.html"&gt;Layouts&lt;/a&gt; respectively. I was happy to find out that Android also uses a notion of &lt;a href="http://developer.android.com/reference/android/view/ViewGroup.html"&gt;View Groups&lt;/a&gt; which are analogous to the Layout Managers. The Android supports several View Groups, &lt;a href="http://developer.android.com/reference/android/widget/LinearLayout.html"&gt;LinearLayout&lt;/a&gt;, &lt;a href="http://developer.android.com/reference/android/widget/RelativeLayout.html"&gt;RelativeLayout&lt;/a&gt; to name a few. There many more.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Android View Groups employ a notion of &lt;a href="http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html"&gt;LayoutParams&lt;/a&gt; that are analogous to layout constraints used by Swing Layout Managers. The LayoutParams configure the way the Android View Group lays out it's children views. In Android the GUI can be either built programmatically using Java code or using an XML file. The structure of the XML elements parallels the structure of View object you may build programatically. The XML attributes are used to configure the Layout Params.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;LinearLayout&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;The LinearLayout is a commonly used View Group that lays out it's children views either horizontally or vertically. More details of LinearLayout read &lt;a href="http://developer.android.com/resources/tutorials/views/hello-linearlayout.html"&gt;this&lt;/a&gt;.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;android:gravity and android:layout_gravity&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;After reading the documentation I set out to use the Linear Layout and I came across the the following layout params:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;android:gravity&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;android:layout_gravity&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;I must say that my initial experience was a little frustrating. Based on the documentation it was not very clear how the above layout parameters work. After a little bit of googling I soon found out that many people have run into this. So I dove in to find out more details and finally understood how to use these layout parameters with Linear Layout. I will explain using an example layout:&lt;/div&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;android:layout_width="fill_parent" android:layout_height="fill_parent"&lt;br /&gt;android:orientation="vertical" android:background="#666666"&amp;gt;&lt;br /&gt;&amp;lt;TextView android:layout_width="fill_parent"&lt;br /&gt;android:layout_height="wrap_content" android:text="Linear Layout - horizontal, gravity=center"&lt;br /&gt;android:textColor="#FFFFFF" android:padding="2dip" /&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;android:layout_width="fill_parent" android:orientation="horizontal"&lt;br /&gt;android:layout_height="0dip" android:layout_weight="1"&lt;br /&gt;android:gravity="center" android:background="#EEEEEE"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Button android:id="@+id/Button01" android:layout_width="wrap_content"&lt;br /&gt;android:layout_height="wrap_content" android:layout_gravity="top"&lt;br /&gt;android:text="top"&amp;gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&amp;lt;Button android:id="@+id/Button02" android:layout_width="wrap_content"&lt;br /&gt;android:layout_height="wrap_content" android:layout_gravity="center"&lt;br /&gt;android:text="center"&amp;gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&amp;lt;Button android:id="@+id/Button03" android:layout_width="wrap_content"&lt;br /&gt;android:layout_height="wrap_content" android:text="bottom"&lt;br /&gt;android:layout_gravity="bottom"&amp;gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&amp;lt;TextView android:layout_width="fill_parent"&lt;br /&gt;android:layout_height="wrap_content" android:text="Linear Layout - vertical, gravity=center"&lt;br /&gt;android:textColor="#FFFFFF" android:padding="2dip" /&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;android:layout_width="fill_parent" android:orientation="vertical"&lt;br /&gt;android:layout_height="0dip" android:layout_weight="1"&lt;br /&gt;android:gravity="center" android:background="#DDDDDD"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Button android:id="@+id/Button04" android:layout_width="wrap_content"&lt;br /&gt;android:layout_height="wrap_content" android:layout_gravity="left"&lt;br /&gt;android:text="left"&amp;gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&amp;lt;Button android:id="@+id/Button05" android:layout_width="wrap_content"&lt;br /&gt;android:layout_height="wrap_content" android:layout_gravity="center"&lt;br /&gt;android:text="center"&amp;gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&amp;lt;Button android:id="@+id/Button06" android:layout_height="wrap_content"&lt;br /&gt;android:text="right" android:layout_gravity="right"&lt;br /&gt;android:layout_width="wrap_content"&amp;gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;This results in the following layout:&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://docs.google.com/drawings/pub?id=17MRxVUYtP-ZMp1YO03Ku3H2OGZD8gfDu4Y7mIp5NsGo&amp;amp;w=575&amp;amp;h=537"&gt;&lt;img style="text-align: left;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; cursor: pointer; width: 575px; height: 537px; " src="http://docs.google.com/drawings/pub?id=17MRxVUYtP-ZMp1YO03Ku3H2OGZD8gfDu4Y7mIp5NsGo&amp;amp;w=575&amp;amp;h=537" border="0" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;android:gravity attribute&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Strictly speaking android:gravity is not a Layout Param. The android:gravity is really an attribute of the View Group. It controls the way the contents of the View Group will be positioned horizontally and vertically.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the above example the top Linear Layout is a horizontal Linear Layout. So setting the android:gravity=center has an effect of positioning the set of buttons in the horizontal center.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the above example the bottom Linear Layout is a vertical Linear Layout. So setting the android:gravity=center has an effect of positioning the set of buttons in the vertical center.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;android:layout_gravity Layout Param&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The &lt;b&gt;&lt;i&gt;android:layout_gravity&lt;/i&gt;&lt;/b&gt; is a Layout Param. Not all View Groups support this Layout Param. See the documentation to find out which Layout Params are supported by a particular View Group. Linear Layout does support &lt;b&gt;&lt;i&gt;android:layout_gravity&lt;/i&gt;&lt;/b&gt; Layout Param.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For a &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;horizontal&lt;/span&gt; Linear Layout the following values make sense:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;top&lt;/li&gt;&lt;li&gt;center&lt;/li&gt;&lt;li&gt;bottom &lt;/li&gt;&lt;/ul&gt;&lt;div&gt;That is because the children of a &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;horizontal&lt;/span&gt; Linear Layout are layed out horizontally one after the other. Only thing can be controlled using the android:layout_gravity is how a child view is positioned vertically.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the above example the top Linear Layout is a horizontal Linear Layout. Setting the android:layout_gravity=top on the &lt;b&gt;l_g=top&lt;/b&gt; Button has an effect of positioning  it at the top. Setting the android:layout_gravity=center on the&lt;b&gt; l_g=center&lt;/b&gt; Button has an effect of positioning  it at the vertical center. Setting the android:layout_gravity=bottom on the &lt;b&gt;l_g=bottom&lt;/b&gt; Button has an effect of positioning  it at the bottom.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;For a &lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;vertical&lt;/span&gt;&lt;/i&gt; Linear Layout the following values make sense:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;left&lt;/li&gt;&lt;li&gt;center&lt;/li&gt;&lt;li&gt;right&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;That is because the children of a &lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;vertical&lt;/span&gt;&lt;/i&gt; Linear Layout are layed out vertically one below the other. Only thing can be controlled using the android:layout_gravity is how a child view is positioned horizontally.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the about example the bottom Linear Layout is a vertical Linear Layout. Setting the android:layout_gravity=left on the&lt;b&gt; l_g=left&lt;/b&gt; Button has an effect of positioning it at the left. Setting the android:layout_gravity=center on the &lt;b&gt;l_g=center&lt;/b&gt; Button has an effect of positioning  it at the horizontal center. Setting the android:layout_gravity=right on the l&lt;b&gt;_g=righ&lt;/b&gt;t Button has an effect of positioning  it at the right.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-5684988562496218999?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/5684988562496218999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=5684988562496218999' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/5684988562496218999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/5684988562496218999'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2010/05/linearlayout-gravity-and-layoutgravity.html' title='LinearLayout gravity and layout_gravity explained'/><author><name>Sandip Chitale</name><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>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36079472.post-2819991226387923756</id><published>2009-12-23T00:28:00.000-08:00</published><updated>2010-04-23T09:22:49.793-07:00</updated><title type='text'>Mac Win Man - a unified Mac OS X Desktop Window and Application Manager</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;a style="font-weight: bold;" name="Features"&gt;Features&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Hide/Unhide Application&lt;/li&gt;            &lt;li&gt;Minimize/Unminimize Window&lt;/li&gt;            &lt;li&gt;Show window with same action no matter it was minimized or hidden&lt;/li&gt;&lt;li&gt;Zoom/Unzoom Window&lt;/li&gt;            &lt;li&gt;Move and Resize windows using keyboard and mouse&lt;ul&gt;                    &lt;li&gt;Resize windows by dragging on the window edges and corners&lt;/li&gt;&lt;li&gt;Snap window to edges and center of the display using keystrokes&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;                    &lt;li&gt;Precisely position and size the windows by entering the location and size values&lt;/li&gt;                &lt;/ul&gt;            &lt;/li&gt;            &lt;li&gt;Tile Windows Vertically&lt;/li&gt;&lt;li&gt;Tile Windows Horizontally&lt;/li&gt;&lt;li&gt;Cascade Windows&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Close Window&lt;/li&gt;            &lt;li&gt;Quit Application&lt;/li&gt;        &lt;/ul&gt;&lt;div&gt;Now works with multiple displays.&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;&lt;div&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;Screenshots&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;b&gt;Switcher (Command TAB replacement)&lt;br /&gt;&lt;/b&gt;&lt;div&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sandipchitalesmacosxstuff.googlecode.com/svn/trunk/MWM/MWM/switcher.png"&gt;&lt;img src="http://sandipchitalesmacosxstuff.googlecode.com/svn/trunk/MWM/MWM/switcher.png" border="0" alt="" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 896px; height: 334px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sandipchitalesmacosxstuff.googlecode.com/svn/trunk/MWM/MWM/switcher.png"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#551A8B;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;u&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Move and Resize using mouse and keyboard&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_U_EhZY5D4KQ/Sz7jCcKwtGI/AAAAAAAADFE/w8VX0yMvKlI/s1600-h/moveresize.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 250px;" src="http://2.bp.blogspot.com/_U_EhZY5D4KQ/Sz7jCcKwtGI/AAAAAAAADFE/w8VX0yMvKlI/s400/moveresize.png" alt="" id="BLOGGER_PHOTO_ID_5422020632461227106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/sandipchitalesmacosxstuff/#Mac_Win_Man_-_MWM_for_short_-_a_unified_Mac_OS_X_Desktop_Window"&gt;Read more and Download...&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-2819991226387923756?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/2819991226387923756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=2819991226387923756' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/2819991226387923756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/2819991226387923756'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/12/mac-win-man-unified-mac-os-x-desktop.html' title='Mac Win Man - a unified Mac OS X Desktop Window and Application Manager'/><author><name>Sandip Chitale</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_U_EhZY5D4KQ/Sz7jCcKwtGI/AAAAAAAADFE/w8VX0yMvKlI/s72-c/moveresize.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36079472.post-3460236459884699764</id><published>2009-10-16T00:15:00.000-07:00</published><updated>2009-10-16T07:43:54.842-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Applescript'/><category scheme='http://www.blogger.com/atom/ns#' term='Expose'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>TIP:Applescript to invoke All Windows function of Exposé and bind it to key you please</title><content type='html'>Here is the applescript to invoke the All Windows function of &lt;span style="font-weight: bold;"&gt;Exposé&lt;/span&gt; :&lt;br /&gt;&lt;pre&gt;on run&lt;br /&gt;-- delay is needed so that keybindings defined in&lt;br /&gt;-- tools like Fastscripts works&lt;br /&gt;delay 0.1&lt;br /&gt;tell application "System Events"&lt;br /&gt;-- 101 is key code for F9 key&lt;br /&gt;key code 101&lt;br /&gt;end tell&lt;br /&gt;end run&lt;br /&gt;&lt;/pre&gt;Assuming you have bound &lt;span style="font-family:courier new;"&gt;Exposé&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;:All Windows&lt;/span&gt; function to &lt;span style="font-family:courier new;"&gt;F9&lt;/span&gt; key.&lt;br /&gt;&lt;br /&gt;So you say - what is the big deal?&lt;br /&gt;&lt;br /&gt;Well, if you look at &lt;span style="font-weight: bold;"&gt;System Preferences... &gt; Exposé  and Spaces pane&lt;/span&gt; &gt; &lt;span style="font-weight: bold;"&gt;Exposé Tab&lt;/span&gt; , you will see that it allows you to bind various functions to limited set of keys. The script enables   you to bind it to any key such as Option+Tab. How? Heres how:&lt;br /&gt;&lt;br /&gt;Save the above script in &lt;span style="font-family:courier new;"&gt;~/Library/Scripts/Expose.app&lt;/span&gt; . Then bind it to Option+Tab using Quicksilver or Launchbar or Fastscripts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-3460236459884699764?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/3460236459884699764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=3460236459884699764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/3460236459884699764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/3460236459884699764'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/10/tipapplescript-to-invoke-all-windows.html' title='TIP:Applescript to invoke All Windows function of Exposé and bind it to key you please'/><author><name>Sandip Chitale</name><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-36079472.post-5620728993968352267</id><published>2009-10-03T01:32:00.000-07:00</published><updated>2009-10-03T01:44:38.921-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Applescript'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>Un-minimize minimized windows and bring them to front using Applescript</title><content type='html'>While implementing the AWS tool that I talked about in the &lt;a href="http://sandipchitale.blogspot.com/2009/10/aws-unified-application-and-window.html"&gt;last post&lt;/a&gt; - I learned a cool new Applescript technique to unminimize minimized windows. Here it is:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;-- assuming you have name of a minimized window&lt;br /&gt;set theWindowName to ....&lt;br /&gt;&lt;br /&gt;-- is it minimized?&lt;br /&gt;if (value of attribute "AXMinimized" of window theWindowName is true) then&lt;br /&gt;   -- first un-minimize the window&lt;br /&gt;   value of attribute "AXMinimized" of window theWindowName to false&lt;br /&gt;end if&lt;br /&gt;&lt;br /&gt;-- raise it&lt;br /&gt;perform action "AXRaise" of window theWindowName&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;I had not much documentation on &lt;span style="font-family:courier new;"&gt;attributes &lt;/span&gt;such as "&lt;span style="font-family:courier new;"&gt;AXMinimized&lt;/span&gt;" &lt;span style="font-family:courier new;"&gt;&lt;/span&gt;and &lt;span style="font-family:courier new;"&gt;perform action "AXRaise"&lt;/span&gt;.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-5620728993968352267?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/5620728993968352267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=5620728993968352267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/5620728993968352267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/5620728993968352267'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/10/un-minimize-minimized-windows-and-bring.html' title='Un-minimize minimized windows and bring them to front using Applescript'/><author><name>Sandip Chitale</name><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-36079472.post-7547587193971164723</id><published>2009-10-02T22:54:00.000-07:00</published><updated>2009-10-03T09:02:34.498-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby on Rails'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Ruby on Rails : Injecting routes from a separate file</title><content type='html'>I am currently working on a Ruby on Rails (RoR) application and needed a mechanism to load routes that are generated into a file by another tool. After some experimentation I came up with the following solution.&lt;br /&gt;&lt;br /&gt;In a Ruby on Rails application the routing is configured using the &lt;span style="font-family:courier new;"&gt;config/routes.rb&lt;/span&gt; file. The routes are defined using the &lt;span style="font-family:courier new;"&gt;draw&lt;/span&gt; method of &lt;span style="font-family:courier new;"&gt;ActionController::Routing::Routes&lt;/span&gt; class like this:&lt;br /&gt;&lt;pre&gt;ActionController::Routing::Routes.draw do |map|&lt;br /&gt; ...&lt;br /&gt; map.connect ':controller/:action/:id'&lt;br /&gt; map.connect ':controller/:action/:id.:format'&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;The block is executed with a local variable &lt;span style="font-family:courier new;"&gt;map&lt;/span&gt; in the scope. I wanted to insert routes defined in a separate file that is generated by another tool. To do that I tried to use the &lt;span style="font-family:courier new;"&gt;load&lt;/span&gt; or &lt;span style="font-family:courier new;"&gt;require&lt;/span&gt; methods. However I realized that  it will not work because the &lt;span style="font-family:courier new;"&gt;load&lt;/span&gt; or &lt;span style="font-family:courier new;"&gt;require&lt;/span&gt; methods reset the scope to the top level. So I came up with the following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# insert routes from generated file&lt;br /&gt;instance_eval(File.read(File.expand_path(File.dirname(__FILE__)) + "/generated-routes.rb"))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Basically it is evaluating the contents of a file in the instance (current) scope.  The &lt;span style="font-family:courier new;"&gt;File.expand_path(File.dirname(__FILE__))&lt;/span&gt; simply computes the path to folder that contains  routes.rb file. To that I append the name of generated routes file which lives next to routes.rb file.&lt;br /&gt;&lt;br /&gt;Is there a better/idiomtic way to do this?&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-7547587193971164723?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/7547587193971164723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=7547587193971164723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7547587193971164723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7547587193971164723'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/10/ruby-on-rails-including-routes-from.html' title='Ruby on Rails : Injecting routes from a separate file'/><author><name>Sandip Chitale</name><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-36079472.post-683924999349564241</id><published>2009-10-02T22:36:00.000-07:00</published><updated>2009-10-04T12:20:27.399-07:00</updated><title type='text'>AWS - a unified Application and Window Switcher i.e. a Command TAB alternative</title><content type='html'>&lt;a name="AWS_-_a_unified_A_pplication_and_W_indow__S_witcher_i.e._Command"&gt;My other pet peeve with Mac OS X is how it deals differently with Applications and Windows that are minimized or hidden when one navigates using Command TAB(&lt;img src="http://sandipchitalesmacosxstuff.googlecode.com/files/ks_command.gif" /&gt; TAB)/Command Shift Tab (&lt;img src="http://sandipchitalesmacosxstuff.googlecode.com/files/ks_command.gif" border="0" /&gt;&lt;img src="http://sandipchitalesmacosxstuff.googlecode.com/files/ks_shift.gif" border="0" /&gt; TAB).&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sandipchitalesmacosxstuff.googlecode.com/files/AWS.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://sandipchitalesmacosxstuff.googlecode.com/files/AWS.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;p&gt;&lt;a name="AWS_-_a_unified_A_pplication_and_W_indow__S_witcher_i.e._Command"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="AWS_-_a_unified_A_pplication_and_W_indow__S_witcher_i.e._Command"&gt;When on asked about any alternatives to the IMHO broken Command Tab behavior, frequently Mac-heads respond condescendingly about: &lt;/a&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a name="AWS_-_a_unified_A_pplication_and_W_indow__S_witcher_i.e._Command"&gt;how Mac is different than Windows &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a name="AWS_-_a_unified_A_pplication_and_W_indow__S_witcher_i.e._Command"&gt;Command Tab is for switching between applications but a window on Mac maps to a document and not an application and so on &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a name="AWS_-_a_unified_A_pplication_and_W_indow__S_witcher_i.e._Command"&gt;how minimized windows are different than hidden windows &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a name="AWS_-_a_unified_A_pplication_and_W_indow__S_witcher_i.e._Command"&gt;if you don't like how Mac works...buzz off...in one form or another &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a name="AWS_-_a_unified_A_pplication_and_W_indow__S_witcher_i.e._Command"&gt;For me it does not matter if it is a window or application...I want to be able to switch to various windows where I want to work - hidden, minimized or what ever. Using Command TAB (&lt;img src="http://sandipchitalesmacosxstuff.googlecode.com/files/ks_command.gif" /&gt; TAB)/Command Shift Tab (&lt;img src="http://sandipchitalesmacosxstuff.googlecode.com/files/ks_command.gif" /&gt;&lt;img src="http://sandipchitalesmacosxstuff.googlecode.com/files/ks_shift.gif" /&gt; TAB) to switch between applications and Command ~ (&lt;img src="http://sandipchitalesmacosxstuff.googlecode.com/files/ks_command.gif" /&gt; ~)/Command Shift ~ (&lt;img src="http://sandipchitalesmacosxstuff.googlecode.com/files/ks_command.gif" /&gt;&lt;img src="http://sandipchitalesmacosxstuff.googlecode.com/files/ks_shift.gif" /&gt; ~) to switch between windows of an application is just plain wrong. &lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="AWS_-_a_unified_A_pplication_and_W_indow__S_witcher_i.e._Command"&gt;Once again, I was aggravated enough to make me write a tool to address just those issue. I wrote the AWS tool.&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="AWS_-_a_unified_A_pplication_and_W_indow__S_witcher_i.e._Command"&gt;&lt;/a&gt;&lt;a href="http://code.google.com/p/sandipchitalesmacosxstuff/#AWS_-_a_unified_A_pplication_and_W_indow__S_witcher_i.e._Command"&gt;Read more...&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="AWS_-_a_unified_A_pplication_and_W_indow__S_witcher_i.e._Command"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://code.google.com/p/sandipchitalesmacosxstuff/#AWS_-_a_unified_A_pplication_and_W_indow__S_witcher_i.e._Command"&gt; &lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-683924999349564241?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/683924999349564241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=683924999349564241' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/683924999349564241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/683924999349564241'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/10/aws-unified-application-and-window.html' title='AWS - a unified Application and Window Switcher i.e. a Command TAB alternative'/><author><name>Sandip Chitale</name><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-36079472.post-4919278183245038282</id><published>2009-07-14T22:41:00.000-07:00</published><updated>2009-07-14T22:43:36.315-07:00</updated><title type='text'>Update: Move Resize tool for Mac OS X</title><content type='html'>&lt;h3&gt;&lt;a name="What's_new?"&gt;What's new?&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a name="What's_new?"&gt;Now you can directly enter location (x,y) and/or size (width,height) in the text fields and then type enter to move and/or resize the window.&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="What's_new?"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="What's_new?"&gt;&lt;/a&gt;&lt;a href="http://code.google.com/p/sandipchitalesmacosxstuff/#Move_and_resize_windows_on_Mac_OS_X"&gt;Read more...&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-4919278183245038282?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/4919278183245038282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=4919278183245038282' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/4919278183245038282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/4919278183245038282'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/07/update-move-resize-tool-for-mac-os-x.html' title='Update: Move Resize tool for Mac OS X'/><author><name>Sandip Chitale</name><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-36079472.post-1432285262150051796</id><published>2009-07-07T01:01:00.000-07:00</published><updated>2009-07-07T01:03:12.503-07:00</updated><title type='text'>Origins Symposium - shear delight!</title><content type='html'>&lt;a href="http://thesciencenetwork.org/programs/origins-symposium"&gt;Origins Symposium&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-1432285262150051796?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/1432285262150051796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=1432285262150051796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1432285262150051796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1432285262150051796'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/07/origins-symposium-shear-delight.html' title='Origins Symposium - shear delight!'/><author><name>Sandip Chitale</name><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-36079472.post-8430733815913031479</id><published>2009-05-28T00:20:00.000-07:00</published><updated>2009-05-30T10:06:09.831-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Swing Component'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>A Swing component to display last keystroke and keystroke history</title><content type='html'>A Swing component to display last keystroke. Also shows the keystroke history.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How it works&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The KeyLabel component registers a global listener for KeyEvents using:&lt;br /&gt;&lt;pre&gt;Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.KEY_EVENT_MASK);&lt;/pre&gt;On receiving KEY_RELEASED event formats the KeyStroke as a string and displays it.  The dropdown shows history of last 100 keystrokes. Clicking on the &lt;span style="font-weight: bold;"&gt;X&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; (Clear KeyStroke History)&lt;/span&gt; button clears the keystroke history. The KeyEvent listening can be suspended by deseleting the checkbox.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Usage&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;JComponent keyLabel = KeyLabelFactory.createKeyLabel();&lt;br /&gt;// Use keyLabel in your application's statusbar&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;Demo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;a href="http://sandipchitaleseclipseplugins.googlecode.com/files/KeyLabel.jar"&gt;Download (KeyLabel.jar)&lt;/a&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;pre&gt;&gt; java -jar KeyLabel.jar&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;Screenshot of &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;KeyLabel Demo&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sandipchitaleseclipseplugins.googlecode.com/files/KeyLabelDemo.png"&gt;&lt;img style="cursor: pointer; width: 459px; height: 416px;" src="http://sandipchitaleseclipseplugins.googlecode.com/files/KeyLabelDemo.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/sandipchitaleseclipseplugins/source/browse/#svn/trunk/KeyLabel"&gt;&lt;span style="font-weight: bold;"&gt;Source Code&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-8430733815913031479?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/8430733815913031479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=8430733815913031479' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/8430733815913031479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/8430733815913031479'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/05/simple-component-to-display-last.html' title='A Swing component to display last keystroke and keystroke history'/><author><name>Sandip Chitale</name><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-36079472.post-6360700583875314631</id><published>2009-05-27T00:46:00.000-07:00</published><updated>2009-05-30T10:12:09.424-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java.lang.Runtime'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Mozilla browser'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Error launching Mozilla (only from inside Eclipse) using simple Runtime.exec() on Ubuntu.</title><content type='html'>I discovered that, on Ubuntu 9.04, I cannot launch mozilla browser using the simple invocation of Runtime.getRuntime().exec("/usr/bin/mozilla"). It turns out, I have to use the variant of exec() where I can pass in some environment variables explicitly.&lt;br /&gt;&lt;br /&gt;Here is the program that I used to test it:&lt;br /&gt;&lt;pre&gt;import java.io.IOException;&lt;br /&gt;&lt;br /&gt;public class MB {&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @param args&lt;br /&gt;*/&lt;br /&gt;public static void main(String[] args) {&lt;br /&gt;   try {&lt;br /&gt;       Process exec = Runtime.getRuntime().exec("/usr/bin/mozilla"&lt;br /&gt;               // Uncommenting out following line will launch mozilla browser on Ubuntu&lt;br /&gt;               //, new String[] {"DISPLAY=:0.0", "HOME="+System.getProperty("user.home")}&lt;br /&gt;               );&lt;br /&gt;       System.out.println(exec.waitFor());&lt;br /&gt;   } catch (IOException e) {&lt;br /&gt;       e.printStackTrace();&lt;br /&gt;   } catch (InterruptedException e) {&lt;br /&gt;       e.printStackTrace();&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Very interesting. May be that is why Eclipse has trouble launching help in default external browser on Ubuntu.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UPDATE:&lt;/span&gt; It turns out that this fails only if I run the above program from inside Eclipse. If I run it from a terminal window it works. It turns out that Eclipse sets an environment variable MOZILLA_FIVE_HOME to point to /usr/lib[64]/xulrunner-addon to make the SWT's embedded browser widget work correctly. However this environment variable is inherited by any process that is launched from within Eclipse. And apparently  MOZILLA_FIVE_HOME inteferes with the Mozilla browser (/usr/bin/mozilla) launch.&lt;br /&gt;&lt;br /&gt;Two issues have been filed in Eclipse Bugzilla:&lt;br /&gt;&lt;br /&gt;https://bugs.eclipse.org/bugs/show_bug.cgi?id=278415&lt;br /&gt;https://bugs.eclipse.org/bugs/show_bug.cgi?id=278296&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-6360700583875314631?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/6360700583875314631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=6360700583875314631' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/6360700583875314631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/6360700583875314631'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/05/error-launching-mozilla-browser-using.html' title='Error launching Mozilla (only from inside Eclipse) using simple Runtime.exec() on Ubuntu.'/><author><name>Sandip Chitale</name><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-36079472.post-2445289599177135061</id><published>2009-05-17T10:47:00.000-07:00</published><updated>2009-05-17T10:54:47.678-07:00</updated><title type='text'>MultiPage Editor Tab Traverse Eclipse Plug-in</title><content type='html'>The MultiPage editors such as plug-in manifest editor do not support navigation of tabs (pages of the editor) using keyboard. &lt;a href="http://code.google.com/p/sandipchitaleseclipseplugins/#MultiPage_Editor_Tab_Traverse"&gt;This&lt;/a&gt; plug-in implements that functionality for any MultiPage editor that subclasses org.eclipse.ui.part.MultiPageEditorPart and uses org.eclipse.swt.custom.CTabFolder to implement the tab folder.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Screenshots:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a name="Screenshot"&gt;Starting with Overview tab:&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sandipchitaleseclipseplugins.googlecode.com/files/mpetto.png"&gt;&lt;img style="cursor: pointer; width: 1077px; height: 132px;" src="http://sandipchitaleseclipseplugins.googlecode.com/files/mpetto.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Type &lt;tt&gt;CTRL+TAB&lt;/tt&gt; to go to Dependencies tab:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sandipchitaleseclipseplugins.googlecode.com/files/mpettd.png"&gt;&lt;img style="cursor: pointer; width: 1077px; height: 132px;" src="http://sandipchitaleseclipseplugins.googlecode.com/files/mpettd.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Type &lt;tt&gt;CTRL+SHIFT+TAB&lt;/tt&gt; instead to go to build.properties tab:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sandipchitaleseclipseplugins.googlecode.com/files/mpettb.png"&gt;&lt;img style="cursor: pointer; width: 1076px; height: 132px;" src="http://sandipchitaleseclipseplugins.googlecode.com/files/mpettb.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-2445289599177135061?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/2445289599177135061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=2445289599177135061' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/2445289599177135061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/2445289599177135061'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/05/multipage-editor-tab-traverse-eclipse.html' title='MultiPage Editor Tab Traverse Eclipse Plug-in'/><author><name>Sandip Chitale</name><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-36079472.post-7835150958874023357</id><published>2009-04-25T10:43:00.000-07:00</published><updated>2009-05-18T20:14:01.683-07:00</updated><title type='text'>Move and Resize windows on Mac OS X</title><content type='html'>&lt;a name="Move_and_resize_windows_on_Mac_OS_X"&gt;I have been always extremely annoyed by the fact that one cannot resize the windows on Mac OS X using all four edges of the window. In fact that is one of the most &lt;span style="font-weight: bold;"&gt;aggravating&lt;/span&gt; thing for me about using a Mac. Another issue is that one cannot use the keyboard to move and resize the windows. I was aggravated enough to make me write a tool to address just those issue. I wrote the &lt;/a&gt;&lt;a href="http://code.google.com/p/sandipchitalesmacosxstuff/#Move_and_resize_windows_on_Mac_OS_X"&gt;MoveResize&lt;/a&gt; tool. It make synergistic use of Applescript and Java to fix IMHO a major usability flaw in Mac OS.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How it works (Swing version)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;The implementation uses Applescript to get the frontmost window and it's bound. It sends the bounds rectangle to a server implemented in Java over a socket connection. The Java server takes the screen shot of the full Desktop and uses it as the Image label (a JLabel with ImageIcon) as the &lt;span style="font-style: italic;"&gt;content pane&lt;/span&gt; of an undecorated JFrame which has the same bounds as the Desktop. A JPanel with semitransparent background and a dark rounded rectangular border is given the same bounds that were received over the socket. This JPanel is added to the PALETTE_LAYER of the JFrame's &lt;span style="font-style: italic;"&gt;layered pane&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;- which makes it appear floating in front of the front window. Mouse and Key listeners on the JPanel allows moving and resizing of the JPanel. When the user types the ENTER key the JFrame is hidden and the new bounds of the JPanel are sent back to the Applescript over the socket connection which moves and resizes the frontmost window.&lt;br /&gt;&lt;br /&gt;Initially I had implemented the original version using SWT. However, it turns out that it is implementable in Swing also - once again proving that Swing is a very good toolkit. Added advantage is that Swing is part of the JDK making the implementation much much smaller. BTW the Swing implementation is much faster and plays nicely with log off and shutdown.&lt;br /&gt;&lt;a href="http://www.screentoaster.com/watch/stU0NRQkxIR11dR11eXVpcUlJW"&gt;&lt;br /&gt;Watch Screencast&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is a screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sandipchitalesmacosxstuff.googlecode.com/files/MoveResize.png"&gt;&lt;img style="cursor: pointer;" src="http://sandipchitalesmacosxstuff.googlecode.com/files/MoveResize.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;a name="Move_and_resize_windows_on_Mac_OS_X"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-7835150958874023357?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/7835150958874023357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=7835150958874023357' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7835150958874023357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7835150958874023357'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/04/move-and-resize-windows-on-mac-os-x.html' title='Move and Resize windows on Mac OS X'/><author><name>Sandip Chitale</name><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>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36079472.post-7495314806456027881</id><published>2009-04-18T14:55:00.000-07:00</published><updated>2009-04-18T22:47:15.111-07:00</updated><title type='text'>YouTube Viewer Firefox Extension</title><content type='html'>Check out the &lt;a href="http://code.google.com/p/sandipchitalesmozillastuff/"&gt;YouTube Viewer&lt;/a&gt; Firefox extension.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sandipchitalesmozillastuff.googlecode.com/files/youtubeviewer1.png"&gt;&lt;img style="cursor: pointer; width: 700px; height: 670px;" src="http://sandipchitalesmozillastuff.googlecode.com/files/youtubeviewer1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sandipchitalesmozillastuff.googlecode.com/files/youtubeviewer.png"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-7495314806456027881?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/7495314806456027881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=7495314806456027881' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7495314806456027881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7495314806456027881'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/04/youtube-viewer-firefox-extension.html' title='YouTube Viewer Firefox Extension'/><author><name>Sandip Chitale</name><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-36079472.post-4815987647074996631</id><published>2009-04-15T22:59:00.000-07:00</published><updated>2009-04-16T22:04:59.465-07:00</updated><title type='text'></title><content type='html'>Check out the Mac OS X Finder and Terminal scripts &lt;a href="http://code.google.com/p/sandipchitalesmacosxstuff/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sandipchitalesmacosxstuff.googlecode.com/files/findertoolbar.png"&gt;&lt;img style="cursor: pointer; width: 149px; height: 39px;" src="http://sandipchitalesmacosxstuff.googlecode.com/files/findertoolbar.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.screentoaster.com/watch/stU0NRQkxIR1pWSVlfU11QXlFc"&gt;&lt;br /&gt;Screencast&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-4815987647074996631?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/4815987647074996631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=4815987647074996631' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/4815987647074996631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/4815987647074996631'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/04/check-out-mac-os-x-finder-and-terminal.html' title=''/><author><name>Sandip Chitale</name><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-36079472.post-5744984465541597296</id><published>2009-03-29T22:18:00.000-07:00</published><updated>2009-04-17T08:25:57.247-07:00</updated><title type='text'>Sampler Eclipse Plug-in</title><content type='html'>Check out the &lt;a href="http://code.google.com/p/sandipchitaleseclipseplugins/"&gt;Sampler&lt;/a&gt; Eclipse Plug-in. The sampler plug-in adds a Color Sampler Toolbar. Color of any pixel on the desktop can be sampled by simply dragging the cursor from the Color Sampler label and copied to the clipboard in various formats as shown in the pop-up menu.&lt;br /&gt;&lt;object width="708" height="180" class="BLOG_video_class" id="BLOG_video-861ac84ebcb18cce" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v10.nonxt3.googlevideo.com/videoplayback?id%3D861ac84ebcb18cce%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329973696%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D43082435B85F5D68C8A0BBABECCD03FB89B67022.4C785F742DC465A8E351776B012489FD5B74C5A%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D861ac84ebcb18cce%26offsetms%3D5000%26itag%3Dw160%26sigh%3DnxEKOBK_4QBdScqba0CHjgVufUI&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="708" height="180" bgcolor="#FFFFFF"flashvars="flvurl=http://v10.nonxt3.googlevideo.com/videoplayback?id%3D861ac84ebcb18cce%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329973696%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D43082435B85F5D68C8A0BBABECCD03FB89B67022.4C785F742DC465A8E351776B012489FD5B74C5A%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D861ac84ebcb18cce%26offsetms%3D5000%26itag%3Dw160%26sigh%3DnxEKOBK_4QBdScqba0CHjgVufUI&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;!--&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_url = 'http://www.dzone.com/links/sampler_eclipse_plugin.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_title = 'Sampler Eclipse Plug-in';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_blurb = 'at dzone.com';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '1';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"&gt;&lt;/script&gt;&lt;br /&gt;--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-5744984465541597296?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=861ac84ebcb18cce&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/5744984465541597296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=5744984465541597296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/5744984465541597296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/5744984465541597296'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/03/sampler-eclipse-plug-in.html' title='Sampler Eclipse Plug-in'/><author><name>Sandip Chitale</name><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-36079472.post-7926372345135624001</id><published>2009-03-21T11:31:00.000-07:00</published><updated>2009-04-02T23:07:05.543-07:00</updated><title type='text'>Reverse Text Selection Eclipse Plug-in</title><content type='html'>Check out the &lt;a href="http://code.google.com/p/sandipchitaleseclipseplugins/"&gt;Reverse Text Selection&lt;/a&gt; Eclipse Plug-in.&lt;br /&gt;&lt;br /&gt;The following screencast shows how you can start with a initial selection and then extend it in both directions using the Reverse Text Selection command (&lt;span style="font-family:courier new;"&gt;Alt+Shift+/&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;object width="650" height="74" class="BLOG_video_class" id="BLOG_video-adede312d6fade3d" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v6.nonxt5.googlevideo.com/videoplayback?id%3Dadede312d6fade3d%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329973696%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D443C39F9A740DDA6A3C004F34C6668DE0202684.20CDB30F03ECF7254BEABE81DE2CD8713BB49A3C%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dadede312d6fade3d%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dg63Lqg-Oo-sRBOaKh2WsWvast-o&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="650" height="74" bgcolor="#FFFFFF"flashvars="flvurl=http://v6.nonxt5.googlevideo.com/videoplayback?id%3Dadede312d6fade3d%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329973696%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D443C39F9A740DDA6A3C004F34C6668DE0202684.20CDB30F03ECF7254BEABE81DE2CD8713BB49A3C%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dadede312d6fade3d%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dg63Lqg-Oo-sRBOaKh2WsWvast-o&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-7926372345135624001?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=adede312d6fade3d&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/7926372345135624001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=7926372345135624001' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7926372345135624001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7926372345135624001'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/03/reverse-text-selection-eclipse-plug-in.html' title='Reverse Text Selection Eclipse Plug-in'/><author><name>Sandip Chitale</name><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-36079472.post-8487044367058756828</id><published>2009-03-17T22:55:00.000-07:00</published><updated>2009-03-17T22:57:28.670-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Web based clipboard'/><title type='text'>Google Clips Eclipse Plug-in</title><content type='html'>Check out the &lt;a href="http://code.google.com/p/sandipchitaleseclipseplugins/"&gt;Google Clips&lt;/a&gt; Eclipse Plug-in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-8487044367058756828?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/8487044367058756828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=8487044367058756828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/8487044367058756828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/8487044367058756828'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/03/google-clips-eclipse-plug-in.html' title='Google Clips Eclipse Plug-in'/><author><name>Sandip Chitale</name><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-36079472.post-8060679099758850896</id><published>2009-03-12T23:30:00.000-07:00</published><updated>2009-05-30T16:10:06.697-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desktop'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Screenshot'/><title type='text'>ClickIt a desktop variant of Screen shot Eclipse Plug-in</title><content type='html'>Check out &lt;a href="http://code.google.com/p/sandipchitaleseclipseplugins/"&gt;ClickIt!&lt;/a&gt;. It is a desktop variant of the Screen shot Eclipse plug-in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-8060679099758850896?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/8060679099758850896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=8060679099758850896' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/8060679099758850896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/8060679099758850896'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/03/clickit-desktop-variant-of-screen-shot.html' title='ClickIt a desktop variant of Screen shot Eclipse Plug-in'/><author><name>Sandip Chitale</name><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-36079472.post-9100913060545724695</id><published>2009-02-21T17:38:00.000-08:00</published><updated>2009-02-21T17:39:16.339-08:00</updated><title type='text'>Screenshot Plug-in for Eclipse</title><content type='html'>Check out the &lt;a href="http://code.google.com/p/sandipchitaleseclipseplugins/"&gt;Screenshot Plug-in for Eclipse&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-9100913060545724695?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/9100913060545724695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=9100913060545724695' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/9100913060545724695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/9100913060545724695'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/02/screenshot-plug-in-for-eclipse.html' title='Screenshot Plug-in for Eclipse'/><author><name>Sandip Chitale</name><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-36079472.post-1979117804796554504</id><published>2009-01-01T19:54:00.000-08:00</published><updated>2009-01-04T23:21:10.030-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Finder'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><category scheme='http://www.blogger.com/atom/ns#' term='Copy Paths'/><title type='text'>Copy paths of selected items in Mac OS X Finder to clipboard</title><content type='html'>&lt;b&gt;copypaths.app&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(*&lt;br /&gt; Script: copypaths.app&lt;br /&gt; &lt;br /&gt; This script sets the clipboard to the paths of items selected in Finder window.&lt;br /&gt; If there is no selection the clipboard is set to the path of the target&lt;br /&gt; of the Finder window.&lt;br /&gt; &lt;br /&gt; Installation:&lt;br /&gt; &lt;br /&gt; 1. Paste this script in Script editor&lt;br /&gt; 2. Save it as an application - ~/scripts/finder/copypaths.app&lt;br /&gt; 3. Drag and drop copypaths.app onto the Finder widow toolbar.&lt;br /&gt; &lt;br /&gt; @author Sandip V. Chitale&lt;br /&gt; @version 1.0&lt;br /&gt; @date 1/1/2009&lt;br /&gt;*)&lt;br /&gt;tell application "Finder"&lt;br /&gt; set paths to ""&lt;br /&gt; set selected to selection&lt;br /&gt; if (count of selected) is 0 then&lt;br /&gt;  set paths to POSIX path of (target of front window as alias)&lt;br /&gt; else&lt;br /&gt;  repeat with aPath in every item in selected&lt;br /&gt;   set aPathString to POSIX path of (aPath as alias)&lt;br /&gt;   if paths is "" then&lt;br /&gt;    set paths to aPathString&lt;br /&gt;   else&lt;br /&gt;    set paths to paths &amp; "&lt;br /&gt;" &amp; aPathString&lt;br /&gt;   end if&lt;br /&gt;  end repeat&lt;br /&gt; end if&lt;br /&gt; if paths is not "" then&lt;br /&gt;  set the clipboard to paths as text&lt;br /&gt; end if&lt;br /&gt;end tell&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-1979117804796554504?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/1979117804796554504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=1979117804796554504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1979117804796554504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1979117804796554504'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/01/copy-paths-of-selected-items-in-mac-os.html' title='Copy paths of selected items in Mac OS X Finder to clipboard'/><author><name>Sandip Chitale</name><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-36079472.post-7253693189675800683</id><published>2009-01-01T17:45:00.000-08:00</published><updated>2009-01-01T17:50:35.063-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Navigation'/><category scheme='http://www.blogger.com/atom/ns#' term='Finder'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>Go to parent folder in Mac OS X Finder</title><content type='html'>&lt;b&gt;up.app&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(*&lt;br /&gt; Script: up.app&lt;br /&gt; &lt;br /&gt; This script sets the target of the Finder window to the&lt;br /&gt; parent of the current target of the Finder window.&lt;br /&gt; &lt;br /&gt; Installation:&lt;br /&gt; &lt;br /&gt; 1. Paste this script in Script editor&lt;br /&gt; 2. Save it as an application - ~/scripts/finder/up.app&lt;br /&gt; 3. Drag and drop up.app onto the Finder widow toolbar.&lt;br /&gt; &lt;br /&gt; @author Sandip V. Chitale&lt;br /&gt; @version 1.0&lt;br /&gt; @date 1/1/2009&lt;br /&gt;*)&lt;br /&gt;tell application "Finder"&lt;br /&gt; set target of front window to (parent of target of front window)&lt;br /&gt;end tell&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-7253693189675800683?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/7253693189675800683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=7253693189675800683' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7253693189675800683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7253693189675800683'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/01/go-to-parent-folder-in-mac-osx-finder.html' title='Go to parent folder in Mac OS X Finder'/><author><name>Sandip Chitale</name><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-36079472.post-4142838582910061225</id><published>2009-01-01T14:32:00.000-08:00</published><updated>2009-12-23T09:01:24.817-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Finder'/><category scheme='http://www.blogger.com/atom/ns#' term='Terminal'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>Keep Mac OS X Finder and Terminal in sync</title><content type='html'>&lt;b&gt;findercd.scpt&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(*&lt;br /&gt;Script: findercd.scpt&lt;br /&gt;&lt;br /&gt;This script sets the target of the front window of Finder&lt;br /&gt;to the directory path passed as the first argument. If&lt;br /&gt;there is no Finder window, one is created. Optionally&lt;br /&gt;the finder window can be activated by passing in "true"&lt;br /&gt;as second argument. If no argument is passed&lt;br /&gt;the user is prompted to select a directory&lt;br /&gt;to go to.&lt;br /&gt;&lt;br /&gt;The following two bash functions can be used to&lt;br /&gt;invoke this script from bash running in Terminal&lt;br /&gt;window:&lt;br /&gt;&lt;br /&gt;# Change the directory of front window of&lt;br /&gt;# Finder to pwd of shell&lt;br /&gt;fcd() {&lt;br /&gt;     cd "${1}"&lt;br /&gt;     osascript ~/scripts/finder/findercd.scpt "`pwd`" ${2}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Change the directory of front window of&lt;br /&gt;# Finder to pwd of shell and activate the&lt;br /&gt;# Finder window&lt;br /&gt;fcda() {&lt;br /&gt;     fcd "${1}" true&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Installation:&lt;br /&gt;&lt;br /&gt;1. Paste this script in Script editor&lt;br /&gt;2. Save it as a script - ~/scripts/finder/findercd.scpt&lt;br /&gt;3. Add the fcd() and fcda() functions mentioned above&lt;br /&gt;   to your .bashrc or .bashrc_profile&lt;br /&gt;&lt;br /&gt;This script complements the terminalcd.scpt script.&lt;br /&gt;&lt;br /&gt;@author Sandip V. Chitale&lt;br /&gt;@version 1.0&lt;br /&gt;@date 1/1/2009&lt;br /&gt;*)&lt;br /&gt;on run argv&lt;br /&gt;if (count of argv) is 0 then&lt;br /&gt; try&lt;br /&gt;  set directory to POSIX path of (choose folder with prompt "Go to")&lt;br /&gt; on error&lt;br /&gt;  return&lt;br /&gt; end try&lt;br /&gt;else&lt;br /&gt; set directory to (item 1 of argv)&lt;br /&gt;end if&lt;br /&gt;set doActivate to false&lt;br /&gt;if (count of argv) is greater than 1 then&lt;br /&gt; set doActivate to (item 2 of argv)&lt;br /&gt;end if&lt;br /&gt;tell application "Finder"&lt;br /&gt; if (count of windows) is 0 then&lt;br /&gt;  make new Finder window&lt;br /&gt; end if&lt;br /&gt; set target of front window to (POSIX file directory)&lt;br /&gt; if doActivate = "true" then&lt;br /&gt;  activate&lt;br /&gt; end if&lt;br /&gt;end tell&lt;br /&gt;end run&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;terminalcd.app&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(*&lt;br /&gt;  Script: terminalcd.app&lt;br /&gt;&lt;br /&gt;  This script sets the directory of the shell in front window of Terminal to the&lt;br /&gt;  target directory of front window of Finder. If there is no Terminal window&lt;br /&gt;  is there a new window is created. If the the front window of&lt;br /&gt;  Terminal is busy new window is created.&lt;br /&gt;&lt;br /&gt;  Installation:&lt;br /&gt;&lt;br /&gt;  1. Paste this script in Script editor&lt;br /&gt;  2. Save it as an application - ~/scripts/finder/temrinalcd.app&lt;br /&gt;  3. Drag and drop terminalcd.app onto the Finder widow toolbar.&lt;br /&gt;&lt;br /&gt;  This script compliments the findercd.scpt script.&lt;br /&gt;&lt;br /&gt;  @author Sandip V. Chitale&lt;br /&gt;  @version 1.0&lt;br /&gt;  @date 1/1/2009&lt;br /&gt;*)&lt;br /&gt;tell application "Finder"&lt;br /&gt;  if (count of windows) is greater than 0 then&lt;br /&gt;      set cdTo to POSIX path of (target of front window as alias)&lt;br /&gt;      set terminalWasRunning to false&lt;br /&gt;      tell application "System Events"&lt;br /&gt;          if exists process "Terminal" then&lt;br /&gt;              set terminalWasRunning to true&lt;br /&gt;          end if&lt;br /&gt;      end tell&lt;br /&gt;      tell application "Terminal"&lt;br /&gt;          activate&lt;br /&gt;          if (count of windows) is 0 then&lt;br /&gt;              do script ""&lt;br /&gt;          else if window 1 is busy then&lt;br /&gt;              do script ""&lt;br /&gt;          end if&lt;br /&gt;          do script "cd '" &amp;amp; cdTo &amp;amp; "'" in front window&lt;br /&gt;      end tell&lt;br /&gt;  end if&lt;br /&gt;end tell&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-4142838582910061225?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/4142838582910061225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=4142838582910061225' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/4142838582910061225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/4142838582910061225'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2009/01/keep-finder-and-termnal-in-sync.html' title='Keep Mac OS X Finder and Terminal in sync'/><author><name>Sandip Chitale</name><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-36079472.post-2366741271216056431</id><published>2008-12-17T20:17:00.000-08:00</published><updated>2008-12-17T20:19:13.392-08:00</updated><title type='text'>Automatically Create Working Sets Eclipse plug-in</title><content type='html'>Check out the &lt;a href="http://code.google.com/p/automaticallycreateworkingsets/"&gt;Automatically Create Working Sets&lt;/a&gt; Eclipse plug-in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-2366741271216056431?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/2366741271216056431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=2366741271216056431' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/2366741271216056431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/2366741271216056431'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/12/automatically-create-working-sets.html' title='Automatically Create Working Sets Eclipse plug-in'/><author><name>Sandip Chitale</name><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-36079472.post-3112039392530855943</id><published>2008-12-16T07:18:00.000-08:00</published><updated>2008-12-16T07:20:08.829-08:00</updated><title type='text'>Smart Semicolon Eclipse plug-in</title><content type='html'>Check out the &lt;a href="http://code.google.com/p/smartsemicolon/"&gt;Smart Semicolon&lt;/a&gt; Eclipse plug-in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-3112039392530855943?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/3112039392530855943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=3112039392530855943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/3112039392530855943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/3112039392530855943'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/12/smart-semicolon-eclipse-plug-in.html' title='Smart Semicolon Eclipse plug-in'/><author><name>Sandip Chitale</name><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-36079472.post-7016192502920526595</id><published>2008-12-07T19:47:00.000-08:00</published><updated>2008-12-07T20:03:10.688-08:00</updated><title type='text'>Hooking into Eclipse command execution</title><content type='html'>When I was working on implementing the &lt;a href="http://code.google.com/p/clipseclipseplugin/"&gt;Clips plug-in&lt;/a&gt; I wanted to intercept the Cut and Copy actions and automatically create clips from the selection. To my delight I discovered the necessary mechanism to exactly do that. Basically I had to add the following listener:&lt;br /&gt;&lt;pre&gt;// Add listener to monitor Cut and Copy commands&lt;br /&gt;ICommandService commandService = (ICommandService) PlatformUI&lt;br /&gt;      .getWorkbench().getAdapter(ICommandService.class);&lt;br /&gt;if (commandService != null) {&lt;br /&gt;  commandService.addExecutionListener(new IExecutionListener() {&lt;br /&gt;&lt;br /&gt;      public void notHandled(String commandId,&lt;br /&gt;              NotHandledException exception) {&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      public void postExecuteFailure(String commandId,&lt;br /&gt;              ExecutionException exception) {&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      public void postExecuteSuccess(String commandId,&lt;br /&gt;              Object returnValue) {&lt;br /&gt;          // Is it a Cut or Copy command&lt;br /&gt;          if ("org.eclipse.ui.edit.copy".equals(commandId)&lt;br /&gt;                  || "org.eclipse.ui.edit.cut".equals(commandId)) {&lt;br /&gt;              Clipboard clipboard = new Clipboard(PlatformUI&lt;br /&gt;                      .getWorkbench().getActiveWorkbenchWindow()&lt;br /&gt;                      .getShell().getDisplay());&lt;br /&gt;              Object contents = clipboard&lt;br /&gt;                      .getContents(TextTransfer.getInstance());&lt;br /&gt;              if (contents instanceof String) {&lt;br /&gt;                  // Now do something with text selection&lt;br /&gt;              }&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      public void preExecute(String commandId, ExecutionEvent event) {&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;  });&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Cool huh?&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-7016192502920526595?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/7016192502920526595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=7016192502920526595' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7016192502920526595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7016192502920526595'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/12/hooking-into-eclipse-command-execution.html' title='Hooking into Eclipse command execution'/><author><name>Sandip Chitale</name><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-36079472.post-785721565436538038</id><published>2008-11-27T14:48:00.000-08:00</published><updated>2008-11-27T14:51:17.535-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='zenity'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Graphical cd</title><content type='html'>The following bash function allows you to change directory using a Directory chooser:&lt;br /&gt;&lt;pre&gt;gcd() {&lt;br /&gt;   local CDTO=`zenity  --title="cd" --file-selection --directory`&lt;br /&gt;   if [ -n "${CDTO}" ] ; then&lt;br /&gt;   cd "${CDTO}"&lt;br /&gt;   fi&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-785721565436538038?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/785721565436538038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=785721565436538038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/785721565436538038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/785721565436538038'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/11/graphical-cd.html' title='Graphical cd'/><author><name>Sandip Chitale</name><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-36079472.post-9215153301213714085</id><published>2008-11-27T13:17:00.000-08:00</published><updated>2008-11-27T14:56:47.113-08:00</updated><title type='text'>Clips Eclipse Plug-in</title><content type='html'>Check out the new Clips Eclipse plug-in &lt;a href="http://code.google.com/p/clipseclipseplugin/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Clips View&lt;/span&gt;&lt;br /&gt;&lt;img src="http://clipseclipseplugin.googlecode.com/files/ClipsView.png" alt="" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Clips Preferences&lt;/span&gt;&lt;br /&gt;&lt;img src="http://clipseclipseplugin.googlecode.com/files/ClipsPreferencesPage.png" alt="" border="0" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-9215153301213714085?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/9215153301213714085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=9215153301213714085' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/9215153301213714085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/9215153301213714085'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/11/clips-eclipse-plug-in.html' title='Clips Eclipse Plug-in'/><author><name>Sandip Chitale</name><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-36079472.post-6043988361336428838</id><published>2008-11-13T23:12:00.000-08:00</published><updated>2008-11-15T09:23:32.404-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Type Token'/><title type='text'>Zero length Java array cache</title><content type='html'>Many times I find myself declaring private static final zero length array fields of some type or the other. Some times the zero length arrays for a same type are declared in more than one place. To avoid this, I came up with the simple zero length array cache backed by a WeakHashMap. The beauty of this is that it does not require a cast because it uses the generic method which uses the Class&lt;br /&gt;&lt;t&gt;as a type token.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import java.util.Map;&lt;br /&gt;import java.util.WeakHashMap;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* A simple cache using WeakHashMap of zero length arrays of a given class.&lt;br /&gt;*&lt;br /&gt;* @author schitale&lt;br /&gt;*&lt;br /&gt;*/&lt;br /&gt;public class ZeroLength {&lt;br /&gt;private static Map&lt;class,&gt; map = new WeakHashMap&lt;class,&gt;();&lt;br /&gt;&lt;br /&gt;@SuppressWarnings("unchecked")&lt;br /&gt;public static &lt;t&gt; T[] array(Class&lt;t&gt; c) {&lt;br /&gt;T[] array = (T[]) map.get(c);&lt;br /&gt;if (array == null) {&lt;br /&gt; array = (T[]) java.lang.reflect.Array.newInstance(c, 0);&lt;br /&gt; map.put(c, array);&lt;br /&gt;}&lt;br /&gt;return array;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static void main(String[] args) {&lt;br /&gt;System.out.println(array(String.class).getClass().getCanonicalName()&lt;br /&gt; + " of length " + array(String.class).length);&lt;br /&gt;System.out.println(array(String[].class).getClass().getCanonicalName()&lt;br /&gt; + " of length " + array(String.class).length);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/t&gt;&lt;/t&gt;&lt;/class,&gt;&lt;/class,&gt;&lt;/pre&gt;The output is:&lt;br /&gt;&lt;pre&gt;java.lang.String[] of length 0&lt;br /&gt;java.lang.String[][] of length 0&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;If you want to rely on the identity of the zero length array instance (e.g. == based comparison) then replace the WeakHashMap with HashMap. However, in that case you have to watch out for memory leaks through static fields of array component classes. You may want to add a method to remove the reference to the array from the HashMap.&lt;br /&gt;&lt;br /&gt;Is there a better way to do this?&lt;br /&gt;&lt;br /&gt;IMHO the java.lang.Class class should provide such factory method. This is along the lines of factory method:&lt;br /&gt;&lt;pre&gt;public static final T  List T java.util.Collections.emptyList();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The implementation in java.lang.Class may look like:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;private static T[] zeroLengthArray;&lt;br /&gt;&lt;br /&gt;public static synchronized T[] emptyArray() {&lt;br /&gt;    if (zeroLengthArray == null) {&lt;br /&gt;          zeroLengthArray = (T[]) java.lang.reflect.Array.newInstance(this, 0);&lt;br /&gt;    }&lt;br /&gt;    return zeroLengthArray;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-6043988361336428838?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/6043988361336428838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=6043988361336428838' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/6043988361336428838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/6043988361336428838'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/11/import-java.html' title='Zero length Java array cache'/><author><name>Sandip Chitale</name><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-36079472.post-7845104787669351681</id><published>2008-10-23T07:16:00.001-07:00</published><updated>2008-10-23T21:46:31.745-07:00</updated><title type='text'>Bundles, Extension Points, Extensions View for Eclipse 3.4</title><content type='html'>The BEPEB View is replacement for PDE's Plug-ins view. It allows you to explore:  &lt;ul&gt;&lt;li&gt;Bundles &lt;/li&gt;&lt;li&gt;Extensions Points &lt;/li&gt;&lt;li&gt;Extensions &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;You can start with any one of these at the top level by using the toolbar settings. You can continue to expand the relationships between these objects to any level. &lt;/p&gt; &lt;p&gt;Several actions are supported in the context menu: &lt;/p&gt; &lt;ul&gt;&lt;li&gt;Open plugin.xml &lt;/li&gt;&lt;li&gt;Copy extension and extension element trees &lt;/li&gt;&lt;li&gt;Open Java Type specified by attributes which specify implementing Java classes. &lt;/li&gt;&lt;/ul&gt;&lt;pre class="prettyprint"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bepebview.googlecode.com/files/BEPEBView1.png"&gt;&lt;img style="cursor: pointer; width: 511px; height: 621px;" src="http://bepebview.googlecode.com/files/BEPEBView1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt;For example, the Copy Extension action copied the following xml to the Clipboard:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;extension point="org.eclipse.ui.exportWizards"&gt;&lt;br /&gt;&lt;category name="Team" id="org.eclipse.team.ui.exportWizards"&gt;&lt;br /&gt;&lt;/category&gt;&lt;br /&gt;&lt;wizard name="Team Project Set" icon="$nl$/icons/full/obj/export_projectset.gif" class="org.eclipse.team.internal.ui.wizards.ProjectSetExportWizard" category="org.eclipse.team.ui.exportWizards" id="org.eclipse.team.ui.ProjectSetExportWizard"&gt;&lt;br /&gt;&lt;description&gt;&lt;br /&gt;Export a file containing the names and locations of the shared projects in the workspace.&lt;/description&gt;&lt;br /&gt;&lt;selection class="org.eclipse.core.resources.IProject"&gt;&lt;br /&gt;&lt;/selection&gt;&lt;br /&gt;&lt;/wizard&gt;&lt;br /&gt;&lt;/extension&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I plan to make more enhancements to this view.&lt;br /&gt;&lt;br /&gt;You can download it &lt;a href="http://code.google.com/p/bepebview/downloads/list"&gt;here&lt;/a&gt;.&lt;b&gt;&lt;br /&gt;&lt;br /&gt;DISCLAIMER:&lt;/b&gt; This plug-in is experimental. So no guarantees. Use the plug-in at your own risk.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-7845104787669351681?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/7845104787669351681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=7845104787669351681' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7845104787669351681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7845104787669351681'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/10/bundles-extension-points-extensions.html' title='Bundles, Extension Points, Extensions View for Eclipse 3.4'/><author><name>Sandip Chitale</name><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-36079472.post-8840236332081064268</id><published>2008-10-14T22:12:00.001-07:00</published><updated>2008-10-15T12:02:49.341-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='keybindings'/><category scheme='http://www.blogger.com/atom/ns#' term='copy'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='paste'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome-terminal'/><title type='text'>Reclaim Ctrl+C and Ctrl+V for familiar Copy and Paste in gnome-terminal</title><content type='html'>Most people work with graphical desktops.  Most desktop (GUI) applications use the Ctrl+C and Ctrl+V for Copy and Paste actions respectively.  One gets use to these really fast.  However, when working with bash shell running inside a gnome-terminal those key bindings mean something different i.e. Ctrl+C sends the kill signal to the foreground process and Ctrl+V is used for quoted insert functionality  (i.e. to enter control keys literally).   This is the legacy of the command line oriented Unix terminals based on tty (stty - program that controls the settings of tty devices).&lt;br /&gt;&lt;br /&gt;In this entry I describe how to make Ctrl+C and Ctrl+V do Copy and Paste in gnome-terminals. Here is how to do it:&lt;br /&gt;&lt;br /&gt;Open a gnome-terminal window and type the following commands:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&gt; stty intr ^K         # free Ctrl+C for copy&lt;br /&gt;&gt; stty lnext ^-        # free Ctrl+V for paste&lt;br /&gt;&gt; stty -g&lt;br /&gt;&gt; stty -g &gt; ~/.stty    # store the settings in home directory&lt;br /&gt;&lt;/pre&gt;Add the following to .bashrc&lt;br /&gt;&lt;pre&gt;case $- in&lt;br /&gt;*i*)&lt;br /&gt;stty `cat ~/.stty`     #  reload the stored stty settings&lt;br /&gt;bind -u quoted-insert  #  unbind the quoted-insert function of bash - free Ctrl+V for paste&lt;br /&gt;esac&lt;br /&gt;&lt;/pre&gt;Now using the gconf-editor, edit the gnome-terminal's key bindings (@ /apps/gnome-terminal/keybindings key).&lt;br /&gt;&lt;br /&gt;Close and reopen the terminal window.  And now Ctrl+C will copy and Ctrl+V will paste.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-8840236332081064268?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/8840236332081064268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=8840236332081064268' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/8840236332081064268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/8840236332081064268'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/10/reclaim-ctrlc-and-ctrlv-for-familiar.html' title='Reclaim Ctrl+C and Ctrl+V for familiar Copy and Paste in gnome-terminal'/><author><name>Sandip Chitale</name><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-36079472.post-171624100709868178</id><published>2008-10-12T20:12:00.001-07:00</published><updated>2008-10-12T20:21:51.111-07:00</updated><title type='text'>Launching the Open Type dialog</title><content type='html'>You can use the following code to launch the JDT's Open Type dialog to select a Java Type name and then open it in the Java editor programmatically:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;OpenTypeSelectionDialog dialog = new OpenTypeSelectionDialog(&lt;br /&gt;    PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),&lt;br /&gt;    true,&lt;br /&gt;    PlatformUI.getWorkbench().getProgressService(),&lt;br /&gt;    null,&lt;br /&gt;    IJavaSearchConstants.TYPE);&lt;br /&gt;dialog.setTitle(JavaUIMessages.OpenTypeAction_dialogTitle);&lt;br /&gt;dialog.setMessage(JavaUIMessages.OpenTypeAction_dialogMessage);&lt;br /&gt;dialog.setInitialPattern("java.lang.String");&lt;br /&gt;&lt;br /&gt;int result= dialog.open();&lt;br /&gt;if (result != IDialogConstants.OK_ID)&lt;br /&gt;{&lt;br /&gt;    return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Object[] types= dialog.getResult();&lt;br /&gt;if (types != null &amp;&amp; types.length &gt; 0) {&lt;br /&gt;    IType type= null;&lt;br /&gt;    for (int i= 0; i &lt; types.length; i++) {&lt;br /&gt;        type= (IType) types[i];&lt;br /&gt;        try {&lt;br /&gt;            JavaUI.openInEditor(type, true, true);&lt;br /&gt;        } catch (CoreException x) {&lt;br /&gt;            // Handle exception&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-171624100709868178?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/171624100709868178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=171624100709868178' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/171624100709868178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/171624100709868178'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/10/launching-open-type-dialog.html' title='Launching the Open Type dialog'/><author><name>Sandip Chitale</name><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-36079472.post-5689692851947760702</id><published>2008-10-12T09:25:00.000-07:00</published><updated>2008-10-12T20:07:26.894-07:00</updated><title type='text'>Enhanced Plug-in Registry View</title><content type='html'>The Plug-in Registry View Enhancements Plug-in enhances the Plug-in Registry View.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The Plug-in Registry View has a mode (&lt;strong&gt;Show Extension Content only&lt;/strong&gt;) to show: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;extension-points &lt;/li&gt;&lt;li&gt;extensions &lt;/li&gt;&lt;li&gt;extension elements &lt;/li&gt;&lt;li&gt;extension attributes &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This plug-in adds some additional actions on the  Plug-in Registry View's tool bar. The following screen shot shows the example of the additional actions.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://pluginregistryenhancements.googlecode.com/files/plug-in-registry-enhanced.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://pluginregistryenhancements.googlecode.com/files/plug-in-registry-enhanced.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;For attributes with values that look like Java Type name - the Open &lt;java&gt; action opens the Open Type dialog:&lt;/java&gt;&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://pluginregistryenhancements.googlecode.com/files/Open%20Type%20Dialog%20.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://pluginregistryenhancements.googlecode.com/files/Open%20Type%20Dialog%20.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This works well if you have added all the plug-in classes to your Java search using the tip - &lt;b&gt;&lt;a href="http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.pde.doc.user/tips/pde_tips.htm"&gt;Extending the Java      search scope&lt;/a&gt;.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;The other supported action is:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Open plugin.xml&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;You can download the plug-in &lt;a href="http://code.google.com/p/pluginregistryenhancements/downloads/list"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;BTW this plug-in makes use of the technique described in the entry - &lt;a href="http://sandipchitale.blogspot.com/2008/09/add-pulldown-actions-on-eclipse-view.html"&gt;Add pulldown actions to Eclipse View's Toolbars&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;DISCLAIMER:&lt;/b&gt; This plug-in is experimental. So no guarantees. Use the plug-in at your own risk.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-5689692851947760702?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/5689692851947760702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=5689692851947760702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/5689692851947760702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/5689692851947760702'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/10/enhanced-plug-in-registry-view.html' title='Enhanced Plug-in Registry View'/><author><name>Sandip Chitale</name><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-36079472.post-1958927241548721658</id><published>2008-09-28T19:26:00.000-07:00</published><updated>2008-09-29T20:57:36.987-07:00</updated><title type='text'>Template Tools Eclipse plug-in</title><content type='html'>&lt;span style="font-weight: bold;"&gt;UPDATE: &lt;/span&gt;&lt;br /&gt;Template Tools Eclipse plug-in enhances the functionality of code templates: &lt;div id="wikicontent" style="padding: 0pt 3em 1.2em 0pt;"&gt;&lt;ul&gt;&lt;li&gt;${clipboard} template variable - replaced by the contents of the clipboard. &lt;/li&gt;&lt;li&gt;${prompt(input|file|directory|enumeration, value [, value]&lt;tt&gt;*&lt;/tt&gt;|color|font)} &lt;ul&gt;&lt;li&gt;input - the user is prompted to enter a value&lt;/li&gt;&lt;li&gt;file -  the user is prompted to select a file&lt;/li&gt;&lt;li&gt;directory -  the user is prompted to select a directory&lt;/li&gt;&lt;li&gt;enumeration - the user is prompted to select a value from the list of values&lt;/li&gt;&lt;li&gt;color  - the user is prompted to select a color using a color dialog. The color value can be formatted using java.util.Formatter strings. The parameters  passed to the format are red, green or blue color component values. If no format is specified the value is formatted as the org.eclipse.swt.graphics.RGB.toString() value of the color.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;font - the user is prompted to select a font using a FontDialog. The returned value is the org.eclipse.swt.graphics.FontData.toString() value returned by the font dialog.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This plug-in also supports extension-point promptProviders. &lt;extension point="TemplateTools.promptProviders"&gt;&lt;promptprovider class="templatetools.InputPrompt" type="input"&gt;&lt;/promptprovider&gt;&lt;/extension&gt;Here is an example:&lt;/p&gt;&lt;pre class="prettyprint"&gt;  &amp;lt;extension&lt;br /&gt;    point="TemplateTools.promptProviders"&amp;gt;&lt;br /&gt; &amp;lt;promptProvider&lt;br /&gt;       class="templatetools.InputPrompt"&lt;br /&gt;       type="input"&amp;gt;&lt;br /&gt; &amp;lt;/promptProvider&amp;gt;&lt;br /&gt;:&lt;br /&gt;:&lt;br /&gt;&amp;lt;/extension&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Here is the implementation:&lt;br /&gt;&lt;/p&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;package templatetools;&lt;br /&gt;&lt;br /&gt;import java.util.Formatter;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import org.eclipse.swt.graphics.RGB;&lt;br /&gt;import org.eclipse.swt.widgets.ColorDialog;&lt;br /&gt;import org.eclipse.ui.PlatformUI;&lt;br /&gt;&lt;br /&gt;public class ColorPrompt implements IPrompt {&lt;br /&gt;&lt;br /&gt;@SuppressWarnings("unchecked")&lt;br /&gt;public String getValue(String name, List params) {&lt;br /&gt; ColorDialog colorDilaog = new ColorDialog(PlatformUI.getWorkbench()&lt;br /&gt;   .getActiveWorkbenchWindow().getShell());&lt;br /&gt; RGB color = colorDilaog.open();&lt;br /&gt; if (color != null) {&lt;br /&gt;  if (params.size() &gt; 0) {&lt;br /&gt;   Object format = params.get(0);&lt;br /&gt;   if (format instanceof String) {&lt;br /&gt;    StringBuffer formatBuffer = new StringBuffer();&lt;br /&gt;    new Formatter(formatBuffer).format((String) format,&lt;br /&gt;      color.red, color.green, color.blue);&lt;br /&gt;    return formatBuffer.toString();&lt;br /&gt;   }&lt;br /&gt;  } else {&lt;br /&gt;   return color.toString();&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; return null;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;You can download the plug-in &lt;a href="http://code.google.com/p/templatetools/downloads/list"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;b&gt;DISCLAIMER:&lt;/b&gt; This plug-in is experimental. So no guarantees. Use the plug-in at your own risk.&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="form1:center_container:page_border:fixed_contentarea:fixed_contextbox:bottomPanel:categoryDetailPanel:descPanel:txtDescription"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-1958927241548721658?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/1958927241548721658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=1958927241548721658' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1958927241548721658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1958927241548721658'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/09/template-tools-eclipse-plug-in.html' title='Template Tools Eclipse plug-in'/><author><name>Sandip Chitale</name><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-36079472.post-1230234204461308297</id><published>2008-09-15T22:10:00.000-07:00</published><updated>2008-09-16T21:00:06.579-07:00</updated><title type='text'>Reorder Eclipse Plug-in : How does it work?</title><content type='html'>In the &lt;a href="http://sandipchitale.blogspot.com/2008/09/reorder-eclipse-plug-in.html"&gt;last&lt;/a&gt; entry I published the Reorder Eclipse plug-in. In this entry I will talk about how it works.&lt;br /&gt;&lt;br /&gt;Basically, the Reorder plug-in uses the AST APIs to get parsed structure of the Java source code surrounding the caret in the Java editor.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It gets the &lt;a href="http://help.eclipse.org/help32/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/dom/ASTNode.html"&gt;ASTNode&lt;/a&gt; at caret position using NodeFinder API and starts traversing the parent ASTNodes until it find a Class Instance Creation, Method Invocation, Method Declaration or an Array initializer node.&lt;/li&gt;&lt;li&gt;Once found it gets the ASTNode's list of arguments, parameters or array initialization elements and stores the text of each node in a ordered list of items. While doing so, it also records the intervening white spaces as items.&lt;/li&gt;&lt;li&gt;It also records which item's extent surrounds the caret position. It records it as a current item.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Then, it swaps the current item with the following or preceding non-whitespace item in the list based on the action that was invoked - forward or backward swap.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Lastly it builds the string from the list of items and replaces the original text with the new string.&lt;/li&gt;&lt;/ul&gt;That's it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-1230234204461308297?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/1230234204461308297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=1230234204461308297' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1230234204461308297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1230234204461308297'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/09/reorder-eclipse-plug-in-how-does-it.html' title='Reorder Eclipse Plug-in : How does it work?'/><author><name>Sandip Chitale</name><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-36079472.post-8768591163287350430</id><published>2008-09-14T19:06:00.000-07:00</published><updated>2008-09-24T21:45:33.032-07:00</updated><title type='text'>Reorder Eclipse Plug-in for Java Editor</title><content type='html'>The asymmetrical way in which the ,  (comma)  is used to separate the items in parameter and arguments lists always causes problem when one wants to reorder that list in Java editor.  Is that why Java allows trailing commas in array initializer? ;) may be. The Reorder plug-in supports single click swapping of a parameter, argument or array initializer expressions with previous or next item in the list. Each item of the sequence can be a simple literal, an identifier or a more complex function call expression. The comma delimiter is correctly handled.&lt;p&gt;This plug-in adds two toolbar buttons to the Java editor:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Swap backward&lt;/li&gt;&lt;li&gt;Swap forward&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://reorder.googlecode.com/files/ReorderActions.png"&gt;&lt;img style="cursor: pointer;" src="http://reorder.googlecode.com/files/ReorderActions.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Usage&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;With the caret at &lt;span style="font-family:courier new,courier,monospace;"&gt;|&lt;/span&gt; in: &lt;/p&gt;&lt;pre&gt;void method(int iii, String |sss, boolean bbb){}&lt;br /&gt;&lt;/pre&gt; pressing the &lt;b&gt;Swap forward&lt;/b&gt; button yields: &lt;pre&gt;void method(int iii, boolean bbb, String |sss){}&lt;br /&gt;&lt;/pre&gt; or pressing &lt;span id="form1:center_container:page_border:fixed_contentarea:fixed_contextbox:bottomPanel:categoryDetailPanel:descPanel:txtDescription"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;span id="form1:center_container:page_border:fixed_contentarea:fixed_contextbox:bottomPanel:categoryDetailPanel:descPanel:txtDescription"&gt;&lt;b&gt;Swap backward&lt;/b&gt; button &lt;/span&gt;&lt;span id="form1:center_container:page_border:fixed_contentarea:fixed_contextbox:bottomPanel:categoryDetailPanel:descPanel:txtDescription"&gt;with the original source yields: &lt;pre&gt;void method(String |sss, int iii, boolean bbb){}&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;p&gt;&lt;span id="form1:center_container:page_border:fixed_contentarea:fixed_contextbox:bottomPanel:categoryDetailPanel:descPanel:txtDescription"&gt;&lt;p&gt;&lt;span&gt;&lt;span id="form1:center_container:page_border:fixed_contentarea:fixed_contextbox:bottomPanel:categoryDetailPanel:descPanel:txtDescription"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span id="form1:center_container:page_border:fixed_contentarea:fixed_contextbox:bottomPanel:categoryDetailPanel:descPanel:txtDescription"&gt;You can download the plug-in from &lt;a href="http://code.google.com/p/reorder/downloads/list"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span id="form1:center_container:page_border:fixed_contentarea:fixed_contextbox:bottomPanel:categoryDetailPanel:descPanel:txtDescription"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span id="form1:center_container:page_border:fixed_contentarea:fixed_contextbox:bottomPanel:categoryDetailPanel:descPanel:txtDescription"&gt;&lt;span style="font-weight: bold;"&gt;TODO&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Key bindings for the actions&lt;/li&gt;&lt;li&gt;Generalization of the concept to other language editors&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span id="form1:center_container:page_border:fixed_contentarea:fixed_contextbox:bottomPanel:categoryDetailPanel:descPanel:txtDescription"&gt;&lt;p&gt;&lt;b&gt;DISCLAIMER:&lt;/b&gt; This plug-in is experimental. So no guarantees. Use the plug-in at your own risk.&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-8768591163287350430?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/8768591163287350430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=8768591163287350430' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/8768591163287350430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/8768591163287350430'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/09/reorder-eclipse-plug-in.html' title='Reorder Eclipse Plug-in for Java Editor'/><author><name>Sandip Chitale</name><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-36079472.post-7471250404530457486</id><published>2008-09-13T20:49:00.000-07:00</published><updated>2008-09-13T20:58:59.318-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='pulldown actions'/><title type='text'>Add pulldown actions to Eclipse View's Toolbars</title><content type='html'>The actions added to the &lt;code&gt;org.eclipse.ui.actionSets&lt;/code&gt; extension point (which allows contribution to the Wokbench Window's toolbars) allow the &lt;code&gt;pulldown&lt;/code&gt; style. However the actions added to the &lt;code&gt;org.eclipse.ui.viewActions&lt;/code&gt; extension point do not allow the &lt;code&gt;pulldown&lt;/code&gt; style. IMHO this is a annoying limitation. It may be that the original reason for this limitation was to avoid confusion with the drop down menu in the View toolbars. However the visual of a &lt;code&gt;pulldown &lt;/code&gt;action down action is different enough that it is not confusing. Besides the pull down actions &lt;span style="font-weight: bold;"&gt;are&lt;/span&gt; used in View toolbars of many Eclipse provided Views e.g. Open Console action on the as &lt;span style="font-weight: bold;"&gt;Console&lt;/span&gt; view's toolbar. So how are such actions created? Well such actions are programatically created during the View's &lt;code&gt;createPartControl()&lt;/code&gt; invocation. However that is not always the case. You may want to contribute a &lt;code&gt;pulldown &lt;/code&gt;action to a View created elsewhere. In this entry I show you how to do exactly that programatically.&lt;br /&gt;&lt;br /&gt;The basic idea behind this is to watch for opening of the view that you are interested in and programatically add the &lt;code&gt;pulldown&lt;/code&gt; style action when the view is  opened. Just put the following code in your plug-in's Activator. One thing to keep in mind is that your plug-in may get activated some time after the View that you are contributing a pull down action to - was already created. To handle that we process all the exiting windows that are already present when our code activates. We monitor the opening of the views in the Workbench windows by adding the IPartListener to the Window's PartService. What happens if the user creates more Workbench windows and then openes the View of interest in that Workbench window. Well, we monitor creation of new Workbench windows by adding the IWindowListener to the Workbench. We keep track of the fact that the action was added to the View's toolbar in a WeakHashMap (keyed by the IViewPart) so that we add the action only once. This is because the addActions() is called from multiple places in the following code. One more thing...the action you add must use &lt;span style="font-weight: bold;"&gt;SWT.AS_DROP_DOWN_MENU&lt;/span&gt; style and also implement the IMenuCreator intreface. That's it. Here is the code: &lt;pre&gt;private static WeakHashMap actionsAddedToView = new WeakHashMap();&lt;br /&gt;private static void addActions(IViewPart viewPart)&lt;br /&gt;{&lt;br /&gt;   Boolean added = actionsAddedToView.get(viewPart);&lt;br /&gt;   if (added == null) {&lt;br /&gt;       // The actions were not added yet&lt;br /&gt;       final IToolBarManager toolBarManager = viewPart.getViewSite().getActionBars().getToolBarManager();&lt;br /&gt;      &lt;br /&gt;       // SomePulldownAction extends Action implements IMenuCreator&lt;br /&gt;       // public SomePulldownAction() {&lt;br /&gt;       //     super("Some Action...", IAction.AS_DROP_DOWN_MENU);&lt;br /&gt;       // }&lt;br /&gt;       // Also implement the getMenu() action.&lt;br /&gt;       // public Menu getMenu(Control parent) {&lt;br /&gt;       //     create menu&lt;br /&gt;       //     add menu items&lt;br /&gt;       //     return the menu&lt;br /&gt;       // }&lt;br /&gt;       SomePulldownAction someDownloadAction = new SomePulldownAction();&lt;br /&gt;       someDownloadAction.init(viewPart);&lt;br /&gt;       toolBarManager.insertAfter("id-of-an-exiting-action-on-views-toolbar", someDownloadAction); //$NON-NLS-1$&lt;br /&gt;      &lt;br /&gt;       // Add more actions&lt;br /&gt;       // ...&lt;br /&gt;       // ...&lt;br /&gt;       // ...&lt;br /&gt;      &lt;br /&gt;       toolBarManager.update(true);&lt;br /&gt;       actionsAddedToView.put(viewPart, Boolean.TRUE);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Listner for monitoring the view opening&lt;br /&gt;private static final IPartListener partListener = new PartListenerAdapter()&lt;br /&gt;   {&lt;br /&gt;       @Override&lt;br /&gt;       public void partOpened(IWorkbenchPart part)&lt;br /&gt;       {&lt;br /&gt;           if (part instanceof IViewPart)&lt;br /&gt;           {&lt;br /&gt;               IViewPart viewPart = (IViewPart) part;&lt;br /&gt;               if ("-id-of-the-view-to-which-you-want-to-add-the-pulldown-action".equals(viewPart.getSite().getId()))&lt;br /&gt;               {&lt;br /&gt;                   addActions(viewPart);&lt;br /&gt;               }       &lt;br /&gt;           }&lt;br /&gt;       }&lt;br /&gt;      &lt;br /&gt;       @Override&lt;br /&gt;       public void partClosed(IWorkbenchPart part)&lt;br /&gt;       {&lt;br /&gt;           if (part instanceof IViewPart)&lt;br /&gt;           {&lt;br /&gt;               IViewPart viewPart = (IViewPart) part;&lt;br /&gt;               if ("-id-of-the-view-to-which-you-want-to-add-the-pulldown-action".equals(viewPart.getSite().getId()))&lt;br /&gt;               {&lt;br /&gt;                   // forget the view's actions added state&lt;br /&gt;                   actionsAddedToView.remove(viewPart);&lt;br /&gt;               }       &lt;br /&gt;           }&lt;br /&gt;       }&lt;br /&gt;   };&lt;br /&gt;&lt;br /&gt;private static void processWindow(IWorkbenchWindow window)&lt;br /&gt;{&lt;br /&gt;   IWorkbenchPage[] pages = window.getPages();&lt;br /&gt;   for (IWorkbenchPage workbenchPage : pages)&lt;br /&gt;   {&lt;br /&gt;       IViewPart viewPart = workbenchPage.findView("-id-of-the-view-to-which-you-want-to-add-the-pulldown-action");&lt;br /&gt;       if viewPart != null  &amp;amp;&amp;amp; viewPart.getSite() != null)&lt;br /&gt;   {&lt;br /&gt;       addActions(viewPart);&lt;br /&gt;       break;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Monitor furture view creation in case the view&lt;br /&gt;// is closed and reopened&lt;br /&gt;window.getPartService().addPartListener(partListener);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;static {&lt;br /&gt;   // Add pulldown action to the view that may be already present in&lt;br /&gt;   // exiting Workbench windows.&lt;br /&gt;   IWorkbenchWindow[] workbenchWindows = PlatformUI.getWorkbench().getWorkbenchWindows();&lt;br /&gt;   for (IWorkbenchWindow workbenchWindow : workbenchWindows)&lt;br /&gt;   {&lt;br /&gt;       processWindow(workbenchWindow);&lt;br /&gt;   }&lt;br /&gt;  &lt;br /&gt;   // Monitor future Workbench windows&lt;br /&gt;   PlatformUI.getWorkbench().addWindowListener(new IWindowListener()&lt;br /&gt;       {&lt;br /&gt;           public void windowActivated(IWorkbenchWindow window) {}&lt;br /&gt;           public void windowClosed(IWorkbenchWindow window) {}&lt;br /&gt;           public void windowDeactivated(IWorkbenchWindow window) {}&lt;br /&gt;           public void windowOpened(IWorkbenchWindow window)&lt;br /&gt;           {&lt;br /&gt;               processWindow(window);&lt;br /&gt;           }&lt;br /&gt;       });&lt;br /&gt;}&lt;iviewpart,&gt;&lt;iviewpart,&gt;&lt;br /&gt;&lt;/iviewpart,&gt;&lt;/iviewpart,&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-7471250404530457486?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/7471250404530457486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=7471250404530457486' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7471250404530457486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/7471250404530457486'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/09/add-pulldown-actions-on-eclipse-view.html' title='Add pulldown actions to Eclipse View&apos;s Toolbars'/><author><name>Sandip Chitale</name><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-36079472.post-8981459035820314473</id><published>2008-09-09T20:35:00.000-07:00</published><updated>2008-09-10T07:40:23.720-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FieldEditor'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='ListEditor'/><title type='text'>An enhanced ListEditor implementation</title><content type='html'>As discussed in &lt;a href="http://www.eclipse.org/articles/Article-Field-Editors/field_editors.html"&gt;this&lt;/a&gt; article on Eclipse.org, the Eclipse FieldEditors make it easy to implement the preferences pages. The ListEditor is one of the many imlementations provided by Eclipse which allows editing of list like values. However it has a serious limitation. It only allows addition, deletion and reordering of the values. It does not allow editing of the values already in the list. The following subclass of ListEditor overcomes that limitation by providing the functionality of editing any one value in the list of values. To use it you have to subclass and implement the following additional abstract method:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; /**&lt;br /&gt;  * The subclasses must override this to return the modified entry.&lt;br /&gt;  *&lt;br /&gt;  * @param original the new entry&lt;br /&gt;  * @return the modified entry. Return null to prevent modification.&lt;br /&gt;  */&lt;br /&gt; protected abstract String getModifiedEntry(String original);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;One possible implementation could look something like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; @Override&lt;br /&gt; protected String getModifiedEntry(String original) {&lt;br /&gt;     InputDialog entryDialog = new InputDialog(&lt;br /&gt;         PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),&lt;br /&gt;         "Edit entry", "Edit entry:", original, null);&lt;br /&gt;     if (entryDialog.open() == InputDialog.OK) {&lt;br /&gt;         return entryDialog.getValue();&lt;br /&gt;     }&lt;br /&gt;     return null;&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In fact, I make use of this in my &lt;a href="http://code.google.com/p/pathtools/"&gt;Path Tools&lt;/a&gt; Eclipse Plug-in to edit the custom commands for folders and files. Here is the screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://pathtools.googlecode.com/files/PathToolsPreferencesPage.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://pathtools.googlecode.com/files/PathToolsPreferencesPage.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Here is the full code:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package somepackage;&lt;br /&gt;&lt;br /&gt;import org.eclipse.jface.dialogs.IDialogConstants;&lt;br /&gt;import org.eclipse.jface.preference.ListEditor;&lt;br /&gt;import org.eclipse.swt.SWT;&lt;br /&gt;import org.eclipse.swt.events.DisposeEvent;&lt;br /&gt;import org.eclipse.swt.events.DisposeListener;&lt;br /&gt;import org.eclipse.swt.events.SelectionAdapter;&lt;br /&gt;import org.eclipse.swt.events.SelectionEvent;&lt;br /&gt;import org.eclipse.swt.layout.GridData;&lt;br /&gt;import org.eclipse.swt.widgets.Button;&lt;br /&gt;import org.eclipse.swt.widgets.Composite;&lt;br /&gt;import org.eclipse.swt.widgets.List;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* This class extends {@link ListEditor} to enable editing of entries.&lt;br /&gt;*&lt;br /&gt;* @author Sandip V. Chitale&lt;br /&gt;*&lt;br /&gt;*/&lt;br /&gt;public abstract class EntryModifiableListEditor extends ListEditor {&lt;br /&gt;&lt;br /&gt; public EntryModifiableListEditor(String name, String labelText, Composite parent) {&lt;br /&gt;     super(name, labelText, parent);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * The subclasses must override this to return the modified entry.&lt;br /&gt;  *&lt;br /&gt;  * @param original the new entry&lt;br /&gt;  * @return the modified entry. Return null to prevent modification.&lt;br /&gt;  */&lt;br /&gt; protected abstract String getModifiedEntry(String original);&lt;br /&gt;&lt;br /&gt; private Button editButton;&lt;br /&gt; private List commandListControl;&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public Composite getButtonBoxControl(Composite parent) {&lt;br /&gt;     Composite buttonBoxControl = super.getButtonBoxControl(parent);&lt;br /&gt;     if (editButton == null) {&lt;br /&gt;         editButton = createPushButton(buttonBoxControl, "Edit..."); // TODO I18N&lt;br /&gt;         editButton.setEnabled(false);&lt;br /&gt;         editButton.addSelectionListener(new SelectionAdapter() {&lt;br /&gt;             @Override&lt;br /&gt;             public void widgetSelected(SelectionEvent e) {&lt;br /&gt;                 if (commandListControl.getSelectionCount() == 1) {&lt;br /&gt;                     String modified = getModifiedEntry(commandListControl.getSelection()[0]);&lt;br /&gt;                     if (modified != null) {&lt;br /&gt;                         int selectedIndex = commandListControl.getSelectionIndex();&lt;br /&gt;                         commandListControl.remove(selectedIndex);&lt;br /&gt;                         commandListControl.add(modified, selectedIndex);&lt;br /&gt;                     }&lt;br /&gt;                 }&lt;br /&gt;             }&lt;br /&gt;         });&lt;br /&gt;         buttonBoxControl.addDisposeListener(new DisposeListener() {&lt;br /&gt;             public void widgetDisposed(DisposeEvent event) {&lt;br /&gt;                 editButton = null;&lt;br /&gt;             }&lt;br /&gt;         });&lt;br /&gt;     }&lt;br /&gt;     return buttonBoxControl;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Helper method to create a push button.&lt;br /&gt;  *&lt;br /&gt;  * @param parent the parent control&lt;br /&gt;  * @param key the resource name used to supply the button's label text&lt;br /&gt;  * @return Button&lt;br /&gt;  */&lt;br /&gt; private Button createPushButton(Composite parent, String key) {&lt;br /&gt;     Button button = new Button(parent, SWT.PUSH);&lt;br /&gt;     button.setText(key);&lt;br /&gt;     button.setFont(parent.getFont());&lt;br /&gt;     GridData data = new GridData(GridData.FILL_HORIZONTAL);&lt;br /&gt;     int widthHint = convertHorizontalDLUsToPixels(button,&lt;br /&gt;             IDialogConstants.BUTTON_WIDTH);&lt;br /&gt;     data.widthHint = Math.max(widthHint, button.computeSize(SWT.DEFAULT,&lt;br /&gt;             SWT.DEFAULT, true).x);&lt;br /&gt;     button.setLayoutData(data);&lt;br /&gt;     return button;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public List getListControl(Composite parent) {&lt;br /&gt;     List listControl = super.getListControl(parent);&lt;br /&gt;     if (commandListControl == null) {&lt;br /&gt;         commandListControl = listControl;&lt;br /&gt;         commandListControl.addSelectionListener(new SelectionAdapter() {&lt;br /&gt;             @Override&lt;br /&gt;             public void widgetSelected(SelectionEvent e) {&lt;br /&gt;                 editButton.setEnabled(commandListControl.getSelectionCount() == 1);&lt;br /&gt;             }&lt;br /&gt;         });&lt;br /&gt;     }&lt;br /&gt;     return listControl;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-8981459035820314473?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/8981459035820314473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=8981459035820314473' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/8981459035820314473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/8981459035820314473'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/09/enhanced-listeditor-implementation.html' title='An enhanced ListEditor implementation'/><author><name>Sandip Chitale</name><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-36079472.post-6705633015909015982</id><published>2008-09-07T13:29:00.000-07:00</published><updated>2008-09-07T19:49:15.791-07:00</updated><title type='text'>Perspectives and Views Toolbar Plugin for Eclipse</title><content type='html'>In Eclipse IDE, I find it very inconvenient to go to the the &lt;span style="font-weight: bold;"&gt;Window:Open Perspective&lt;/span&gt; or &lt;span style="font-weight: bold;"&gt;Window:Show View&lt;/span&gt; submenu, and then select the one I want in dialog that is shown. I was inconvenienced enough that I wrote a simple Eclipse Plug-in called - &lt;span style="font-weight: bold;"&gt;Perspectives and Views Toolbar&lt;/span&gt;. The basic idea is that it adds two drop down menus to the toolbar. Using the drop down you can directly select the Perspective or the View that you want to show.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_U_EhZY5D4KQ/SMRPh3EyS6I/AAAAAAAABSQ/6XvcCeNPdkI/s1600-h/PerspectivesViewsToolbar.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_U_EhZY5D4KQ/SMRPh3EyS6I/AAAAAAAABSQ/6XvcCeNPdkI/s320/PerspectivesViewsToolbar.png" alt="" id="BLOGGER_PHOTO_ID_5243403309304400802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Get the Eclipse 3.4 compatible &lt;span style="font-weight: bold;"&gt;Perspectives and Views Toolbar&lt;/span&gt; Plug-in &lt;a href="http://code.google.com/p/perspectivesviewstoolbar/downloads/list"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span id="form1:center_container:page_border:fixed_contentarea:fixed_contextbox:bottomPanel:categoryDetailPanel:descPanel:txtDescription"&gt;&lt;b&gt;DISCLAIMER:&lt;/b&gt; This plug-in is experimental. So no guarantees. Use the plug-in at your own risk.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-6705633015909015982?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/6705633015909015982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=6705633015909015982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/6705633015909015982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/6705633015909015982'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/09/perspectives-and-view-toolbar-plugin.html' title='Perspectives and Views Toolbar Plugin for Eclipse'/><author><name>Sandip Chitale</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_U_EhZY5D4KQ/SMRPh3EyS6I/AAAAAAAABSQ/6XvcCeNPdkI/s72-c/PerspectivesViewsToolbar.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36079472.post-6825363964958069362</id><published>2008-08-31T10:20:00.000-07:00</published><updated>2011-03-25T15:17:46.819-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Enhancement'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Template Variables'/><title type='text'>Eclipse template variables ${selection} and ${clipboard}</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I just filed two enhancement requests in bugzilla at Eclipse.org:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=245788"&gt;245788&lt;/a&gt; Add a template variable ${selection} and allow Surround With action to deal consider it.&lt;br /&gt;&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=245790"&gt;245790&lt;/a&gt; Add a template variable ${clipboard}&lt;br /&gt;&lt;br /&gt;The jist of the enhancement is that two new template variables should be added:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;${selection}&lt;/span&gt; - this is replaced by what ever was the selection in the editor at the time of template insertion was invoked. Note that this requires a template invocation machanism that does not destroy the selection in text editor.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;${clipboard}&lt;/span&gt; - this is replaced by the text content of the the clipboard.&lt;br /&gt;&lt;br /&gt;Here is a use case:&lt;br /&gt;&lt;br /&gt;template name: &lt;span style="font-style: italic;"&gt;hyperlink&lt;/span&gt;&lt;br /&gt;template pattern:&lt;br /&gt;&lt;br /&gt;&amp;lt;a href="${clipboard}"&amp;gt;${selection}&amp;lt;/a&amp;gt;${cursor}&lt;br /&gt;&lt;br /&gt;and with text &lt;span style="font-weight: bold;"&gt;http://www.google.com/&lt;/span&gt; in the clipboard and the text&lt;br /&gt;&lt;br /&gt;Google|&lt;br /&gt;&lt;br /&gt;selected in the Eclipse editor.&lt;br /&gt;&lt;br /&gt;Invoking the &lt;span style="font-style: italic;"&gt;hyperlink&lt;/span&gt; template using the &lt;span style="font-weight: bold;"&gt;Surround with...&lt;/span&gt; action yields:&lt;br /&gt;&lt;br /&gt;&amp;lt;a herf="http://www.google.com"&amp;gt;Google&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;br /&gt;Granted this would have been easy to type but imagine a complex URL copied into the clipboard from the browser address bar in place of "http://www.google.com/".&lt;br /&gt;&lt;br /&gt;Please vote on the enhancement if you like this idea.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-6825363964958069362?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/6825363964958069362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=6825363964958069362' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/6825363964958069362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/6825363964958069362'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/08/eclipse-template-variables-selection.html' title='Eclipse template variables ${selection} and ${clipboard}'/><author><name>Sandip Chitale</name><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-36079472.post-1733754202872655835</id><published>2008-08-29T22:08:00.000-07:00</published><updated>2008-08-30T09:38:23.946-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Self maintaining'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Logging'/><category scheme='http://www.blogger.com/atom/ns#' term='Code'/><title type='text'>Self maintaining package level logger access class</title><content type='html'>Many times I have seen that programmers declare a static field which hold an instance of a Logger. I find this pattern repeated in many classes in the same package. Below is an example of a simple package level logger accessor class. It has an interesting property being a self maintaining code in that you can drop this code in any package and fix the package name by hand or even better let the IDE such as Eclipse provide the quick fix to correct the package for you.&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size:130%;"&gt;package somepackage;&lt;br /&gt;&lt;br /&gt;import java.util.logging.Logger;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Self maintaining package level logger access&lt;br /&gt;*&lt;br /&gt;*/&lt;br /&gt;final class Log {&lt;br /&gt;private static Logger logger;&lt;br /&gt;&lt;br /&gt;// not thread safe&lt;br /&gt;static Logger getLogger() {&lt;br /&gt;   if (logger == null) {&lt;br /&gt;       logger =&lt;br /&gt;       Logger.getLogger(Log.class.getPackage().getName());&lt;br /&gt;   }&lt;br /&gt;   return logger;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private Log(){}&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;Thoughts?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-1733754202872655835?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/1733754202872655835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=1733754202872655835' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1733754202872655835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1733754202872655835'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/08/self-maintaining-package-level-logger.html' title='Self maintaining package level logger access class'/><author><name>Sandip Chitale</name><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-36079472.post-1291337015294687336</id><published>2008-08-25T16:55:00.000-07:00</published><updated>2008-08-26T22:06:56.720-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Info'/><title type='text'>INFO: Eclipse View and Perspective IDs</title><content type='html'>&lt;table style="border-collapse: collapse;" border="1"&gt;   &lt;tbody&gt;     &lt;tr&gt;       &lt;td style="font-weight: bold;"&gt;Views&lt;/td&gt;       &lt;td&gt;  &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Ant&lt;/td&gt;       &lt;td&gt;org.eclipse.ant.ui.views.AntView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Bookmarks&lt;/td&gt;       &lt;td&gt;org.eclipse.ui.views.BookmarkView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Breakpoints&lt;/td&gt;       &lt;td&gt;org.eclipse.debug.ui.BreakpointView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;CVS Annotate&lt;/td&gt;       &lt;td&gt;org.eclipse.team.ccvs.ui.AnnotateView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;CVS Editors&lt;/td&gt;       &lt;td&gt;org.eclipse.team.ccvs.ui.EditorsView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;CVS Repositories&lt;/td&gt;       &lt;td&gt;org.eclipse.team.ccvs.ui.RepositoriesView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Call Hierarchy&lt;/td&gt;       &lt;td&gt;org.eclipse.jdt.callhierarchy.view&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Cheat Sheets&lt;/td&gt;       &lt;td&gt;org.eclipse.ui.cheatsheets.views.CheatSheetView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Classic Search&lt;/td&gt;       &lt;td&gt;org.eclipse.search.SearchResultView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Console&lt;/td&gt;       &lt;td&gt;org.eclipse.ui.console.ConsoleView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Debug&lt;/td&gt;       &lt;td&gt;org.eclipse.debug.ui.DebugView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Declaration&lt;/td&gt;       &lt;td&gt;org.eclipse.jdt.ui.SourceView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Display&lt;/td&gt;       &lt;td&gt;org.eclipse.jdt.debug.ui.DisplayView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Error Log&lt;/td&gt;       &lt;td&gt;org.eclipse.pde.runtime.LogView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Expressions&lt;/td&gt;       &lt;td&gt;org.eclipse.debug.ui.ExpressionView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Help&lt;/td&gt;       &lt;td&gt;org.eclipse.help.ui.HelpView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Hierarchy&lt;/td&gt;       &lt;td&gt;org.eclipse.jdt.ui.TypeHierarchy&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;History&lt;/td&gt;       &lt;td&gt;org.eclipse.team.ui.GenericHistoryView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Internal Web Browser&lt;/td&gt;       &lt;td&gt;org.eclipse.ui.browser.view&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;JUnit&lt;/td&gt;       &lt;td&gt;org.eclipse.jdt.junit.ResultView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Javadoc&lt;/td&gt;       &lt;td&gt;org.eclipse.jdt.ui.JavadocView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Members&lt;/td&gt;       &lt;td&gt;org.eclipse.jdt.ui.MembersView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Memory&lt;/td&gt;       &lt;td&gt;org.eclipse.debug.ui.MemoryView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Navigator&lt;/td&gt;       &lt;td&gt;org.eclipse.ui.views.ResourceNavigator&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Outline&lt;/td&gt;       &lt;td&gt;org.eclipse.ui.views.ContentOutline&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Package Explorer&lt;/td&gt;       &lt;td&gt;org.eclipse.jdt.ui.PackageExplorer&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Packages&lt;/td&gt;       &lt;td&gt;org.eclipse.jdt.ui.PackagesView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Plug-in Dependencies&lt;/td&gt;       &lt;td&gt;org.eclipse.pde.ui.DependenciesView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Plug-in Registry&lt;/td&gt;       &lt;td&gt;org.eclipse.pde.runtime.RegistryBrowser&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Plug-ins&lt;/td&gt;       &lt;td&gt;org.eclipse.pde.ui.PluginsView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Problems&lt;/td&gt;       &lt;td&gt;org.eclipse.ui.views.ProblemView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Progress&lt;/td&gt;       &lt;td&gt;org.eclipse.ui.views.ProgressView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Project Explorer&lt;/td&gt;       &lt;td&gt;org.eclipse.ui.navigator.ProjectExplorer&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Projects&lt;/td&gt;       &lt;td&gt;org.eclipse.jdt.ui.ProjectsView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Properties&lt;/td&gt;       &lt;td&gt;org.eclipse.ui.views.PropertySheet&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Registers&lt;/td&gt;       &lt;td&gt;org.eclipse.debug.ui.RegisterView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;SVN Annotate&lt;/td&gt;       &lt;td&gt;org.tigris.subversion.subclipse.ui.annotations.AnnotateView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;SVN Properties&lt;/td&gt;       &lt;td&gt;org.tigris.subversion.subclipse.ui.svnproperties.SvnPropertiesView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;SVN Repositories&lt;/td&gt;       &lt;td&gt;org.tigris.subversion.subclipse.ui.repository.RepositoriesView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Search&lt;/td&gt;       &lt;td&gt;org.eclipse.search.ui.views.SearchView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Synchronize&lt;/td&gt;       &lt;td&gt;org.eclipse.team.sync.views.SynchronizeView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Tasks&lt;/td&gt;       &lt;td&gt;org.eclipse.ui.views.TaskList&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Types&lt;/td&gt;       &lt;td&gt;org.eclipse.jdt.ui.TypesView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Variables&lt;/td&gt;       &lt;td&gt;org.eclipse.debug.ui.VariableView&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Welcome&lt;/td&gt;       &lt;td&gt;org.eclipse.ui.internal.introview&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td style="font-weight: bold;"&gt;Perspectives&lt;/td&gt;       &lt;td&gt;&lt;br /&gt;      &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;CVS Repository Exploring&lt;/td&gt;       &lt;td&gt;org.eclipse.team.cvs.ui.cvsPerspective&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Debug&lt;/td&gt;       &lt;td&gt;org.eclipse.debug.ui.DebugPerspective&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Java&lt;/td&gt;       &lt;td&gt;org.eclipse.jdt.ui.JavaPerspective&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Java Browsing&lt;/td&gt;       &lt;td&gt;org.eclipse.jdt.ui.JavaBrowsingPerspective&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Java Type Hierarchy&lt;/td&gt;       &lt;td&gt;org.eclipse.jdt.ui.JavaHierarchyPerspective&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Plug-in Development&lt;/td&gt;       &lt;td&gt;org.eclipse.pde.ui.PDEPerspective&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Resource&lt;/td&gt;       &lt;td&gt;org.eclipse.ui.resourcePerspective&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;SVN Repository Exploring&lt;/td&gt;       &lt;td&gt;org.tigris.subversion.subclipse.ui.svnPerspective&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt;Team Synchronizing&lt;/td&gt;       &lt;td&gt;org.eclipse.team.ui.TeamSynchronizingPerspective&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt; &lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-1291337015294687336?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/1291337015294687336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=1291337015294687336' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1291337015294687336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1291337015294687336'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/08/info-eclipse-view-and-perspective-ids.html' title='INFO: Eclipse View and Perspective IDs'/><author><name>Sandip Chitale</name><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-36079472.post-4953844460407879610</id><published>2008-08-18T14:00:00.000-07:00</published><updated>2008-08-18T14:02:39.119-07:00</updated><title type='text'>Where is Sandip?</title><content type='html'>I have joined &lt;a href="http://www.aptana.com"&gt;Aptana&lt;/a&gt;. I will be working on &lt;a href="http://www.aptana.com/studio"&gt;Aptana Studio&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-4953844460407879610?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/4953844460407879610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=4953844460407879610' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/4953844460407879610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/4953844460407879610'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/08/where-is-sandip.html' title='Where is Sandip?'/><author><name>Sandip Chitale</name><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-36079472.post-1842626445541895620</id><published>2008-08-17T23:39:00.000-07:00</published><updated>2008-09-07T16:21:40.998-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Plug-in'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Article on Eclipse Zone</title><content type='html'>Check out my article on Eclipse Zone:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://eclipse.dzone.com/articles/pathtools-simple-yet-useful-ec"&gt;PathTools : Simple Yet Useful Eclipse Plug-in&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Toolbar&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_U_EhZY5D4KQ/SMRh27UBzuI/AAAAAAAABSY/Vl1KRL4LKpQ/s1600-h/PathToolsToolbar.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_U_EhZY5D4KQ/SMRh27UBzuI/AAAAAAAABSY/Vl1KRL4LKpQ/s320/PathToolsToolbar.png" alt="" id="BLOGGER_PHOTO_ID_5243423462428626658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Preferences Page&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_U_EhZY5D4KQ/SMRh9UKx4VI/AAAAAAAABSg/IYrAH8uqfb8/s1600-h/PathToolsPreferencesPage.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_U_EhZY5D4KQ/SMRh9UKx4VI/AAAAAAAABSg/IYrAH8uqfb8/s320/PathToolsPreferencesPage.png" alt="" id="BLOGGER_PHOTO_ID_5243423572179935570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-1842626445541895620?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/1842626445541895620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=1842626445541895620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1842626445541895620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/1842626445541895620'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/08/article-on-eclipse-zone.html' title='Article on Eclipse Zone'/><author><name>Sandip Chitale</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_U_EhZY5D4KQ/SMRh27UBzuI/AAAAAAAABSY/Vl1KRL4LKpQ/s72-c/PathToolsToolbar.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36079472.post-3300652072993110295</id><published>2008-08-15T17:10:00.000-07:00</published><updated>2008-08-15T17:18:46.964-07:00</updated><title type='text'>Personal blog</title><content type='html'>Welcome to my personal blog!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-3300652072993110295?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/3300652072993110295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=3300652072993110295' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/3300652072993110295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/3300652072993110295'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2008/08/personal-blog.html' title='Personal blog'/><author><name>Sandip Chitale</name><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-36079472.post-116145870879775283</id><published>2006-10-21T12:22:00.000-07:00</published><updated>2008-08-09T14:51:26.543-07:00</updated><title type='text'>Check out my technical blog</title><content type='html'>Check out my technical blog &lt;a href="http://blogs.sun.com/scblog"&gt;scblog&lt;/a&gt; (Sun Microsystems) . I discuss topics related to Java and Netbeans. I have also posted a lot of Netbeans modules that I have developed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36079472-116145870879775283?l=sandipchitale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandipchitale.blogspot.com/feeds/116145870879775283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36079472&amp;postID=116145870879775283' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/116145870879775283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36079472/posts/default/116145870879775283'/><link rel='alternate' type='text/html' href='http://sandipchitale.blogspot.com/2006/10/check-out-my-technical-blog.html' title='Check out my technical blog'/><author><name>Sandip Chitale</name><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></feed>
