/plugins/SideKick/tags/release-0-7-1/users-guide.xml

# · XML · 575 lines · 446 code · 127 blank · 2 comment · 0 complexity · d99430fb321fd6de246f300b8304921c MD5 · raw file

  1. <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
  2. "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
  3. <!-- jEdit buffer-local properties: -->
  4. <!-- :indentSize=2:noTabs=true:folding=sidekick: -->
  5. <book>
  6. <bookinfo><title>SideKick plugin user's guide</title>
  7. <authorgroup>
  8. <author><firstname>Slava</firstname><surname>Pestov</surname></author>
  9. <author><firstname>Dale</firstname><surname>Anson</surname></author>
  10. <author><firstname>Martin</firstname><surname>Raspe</surname></author>
  11. <author><firstname>Alan</firstname><surname>Ezust</surname></author>
  12. </authorgroup>
  13. <legalnotice><title>Legal Notice</title>
  14. <para>
  15. Permission is granted to copy, distribute and/or modify this document
  16. under the terms of the GNU Free Documentation License, Version 1.1 or
  17. any later version published by the Free Software Foundation; with no
  18. <quote>Invariant Sections</quote>, <quote>Front-Cover Texts</quote> or
  19. <quote>Back-Cover Texts</quote>, each as defined in the license. A copy of
  20. the license can be found in the file <filename>COPYING.DOC.txt</filename>
  21. included with jEdit.
  22. </para>
  23. <para>
  24. The SideKick plugin itself is released under the GNU General Public License.
  25. A copy of the GPL can be found in the jEdit online help.
  26. </para>
  27. </legalnotice>
  28. </bookinfo>
  29. <chapter id="browser"><title>The structure browser window</title>
  30. <para>
  31. The SideKick plugin provides a dockable window in which other plugins can
  32. display buffer structure.
  33. </para>
  34. <para>
  35. <guimenu>Plugins</guimenu>&gt;<guisubmenu>SideKick</guisubmenu>&gt;<guimenuitem>Structure
  36. Browser</guimenuitem> displays the current buffer's structure in a
  37. dockable window. This window is floating by
  38. default, but it can be docked into the view 2 ways.
  39. </para>
  40. <orderedlist>
  41. <listitem><para> Choosing a docking area from the docking menu (a little arrow in the upper left corner of each floating dockable)</para></listitem>
  42. <listitem><para> Go to the <guibutton>Docking</guibutton>
  43. pane of the <guimenuitem>Global Options</guimenuitem> dialog box </para></listitem>
  44. </orderedlist>
  45. <para> On the top of the window, you will see a combobox which lists all installed SideKick parsers. You can switch to another parser temporarily for a buffer by selecting it from the combo box. </para>
  46. <para>
  47. The SideKick plugin can automatically parse your buffer depending on various events, such as: Buffer Switch, Buffer Save, or on the fly (after it is idle for a period of time). The last option is rarely used since it can eat up CPU time, so it is disabled by default. </para>
  48. <para>
  49. <guimenu>Plugins</guimenu>&gt;<guisubmenu>SideKick</guisubmenu>&gt;<guimenuitem>Parse
  50. on Keystroke</guimenuitem> is a checkbox menu item that toggles on-the-fly parsing, for the current buffer only.
  51. </para>
  52. <para> You can also manually parse a buffer by clicking on the "reload" button in the Sidekick Structure browser, or through a keyboard shortcut, if you bind Sidekick's "parse buffer" action to a keystroke. <footnote><para>
  53. global options - jedit - Shortcuts - Plugin: Sidekick (combo) - Parse Buffer</para></footnote> </para>
  54. <para>
  55. The current buffer can be parsed at any other time by clicking the parse
  56. button in the <guimenuitem>Structure Browser</guimenuitem> window, or by
  57. invoking the
  58. <guimenu>Plugins</guimenu>&gt;<guisubmenu>SideKick</guisubmenu>&gt;<guimenuitem>Parse
  59. Buffer</guimenuitem> command.
  60. </para>
  61. <tip> <title> Reload button menu </title>
  62. <para> A popup menu is available in JDK 1.5 which
  63. appears when you right-click the "reload" button.
  64. From there, you can set some auto-parse options
  65. without going to the plugin options. </para></tip>
  66. <para>
  67. Any errors found while parsing the buffer are sent to the
  68. <application>ErrorList</application> plugin, which means they are highlighted
  69. in the text area, and shown in the
  70. <guimenu>Plugins</guimenu>&gt;<guisubmenu>Error
  71. List</guisubmenu>&gt; window. See the
  72. documentation for the <application>ErrorList</application> plugin for details.
  73. </para>
  74. <para>
  75. Clicking on a node in the tree will move the caret to its location in the
  76. buffer;
  77. conversely, moving the caret in the buffer will select the corresponding
  78. node.
  79. </para>
  80. <para>
  81. <keycap>Shift</keycap>-clicking on a node will select that node in the text
  82. area. <keycap>Alt</keycap>-clicking on a node will narrow the text area
  83. display to that node.
  84. </para>
  85. <para>
  86. If the structure browser window is docked into the current view, hovering the mouse
  87. over a node will display its attributes in the status bar.
  88. </para>
  89. </chapter>
  90. <chapter id="moving-around"><title>Moving around</title>
  91. <para>
  92. <guimenu>Plugins</guimenu>&gt;<guisubmenu>SideKick</guisubmenu>&gt;<guimenuitem>Go
  93. to Previous Asset</guimenuitem> moves the caret to start of the structure
  94. element (<quote>asset</quote>).
  95. </para>
  96. <para>
  97. <guimenu>Plugins</guimenu>&gt;<guisubmenu>SideKick</guisubmenu>&gt;<guimenuitem>Go
  98. to Next Asset</guimenuitem> moves the caret to start of the next asset.
  99. </para>
  100. <para>
  101. <guimenu>Plugins</guimenu>&gt;<guisubmenu>SideKick</guisubmenu>&gt;<guimenuitem>Select
  102. Asset at Caret</guimenuitem> selects the asset at the caret position.
  103. </para>
  104. </chapter>
  105. <chapter id="folding"><title>Folding</title>
  106. <para>
  107. The SideKick plugin adds a new <quote>sidekick</quote> fold handler that
  108. folds the buffer according to the structure tree. See the jEdit user's guide
  109. for general details about folding.
  110. </para>
  111. <para>
  112. <guimenu>Plugins</guimenu>&gt;<guisubmenu>SideKick</guisubmenu>&gt;<guimenuitem>Narrow to
  113. Asset at Caret</guimenuitem> hides all text except that of the asset at the
  114. caret location. This works in any folding mode, not just the <quote>sidekick</quote>
  115. mode.
  116. </para>
  117. </chapter>
  118. <chapter id="completion"><title>Completion</title>
  119. <para>
  120. A completion popup can be shown at any time
  121. by invoking the
  122. <guimenu>Plugins</guimenu>&gt;<guisubmenu>SideKick</guisubmenu>&gt;<guimenuitem>Show
  123. Completion Popup</guimenuitem> command. Each plugin that uses SideKick
  124. implements its own specific completion behavior; see the plugin documentation
  125. for details.
  126. </para>
  127. </chapter>
  128. <chapter id="other-plugins"><title>Developing SideKick back-ends</title>
  129. <para>
  130. By itself the SideKick plugin is not very useful; it relies on other plugins to
  131. provide buffer structure information. This chapter gives a brief overview of
  132. how it's done.
  133. </para>
  134. <sect1 id="preliminaries"><title>Preliminaries</title>
  135. <para>
  136. First you will also need to add a dependency for the SideKick plugin in your plugin's
  137. property file:
  138. </para>
  139. <programlisting>plugin.MyPlugin.depend.<replaceable>n</replaceable>=plugin sidekick.SideKickPlugin 0.1</programlisting>
  140. <para>
  141. Note that you must replace <replaceable>n</replaceable> with the
  142. appropriate number, as dependency properties must have consecutive numbers.
  143. </para>
  144. <para>
  145. All SideKick plugin classes are in the <classname>sidekick</classname> package;
  146. you will need to add <literal>import</literal> statements where appropriate.
  147. </para>
  148. <para>
  149. Parser instances must be registered using the
  150. <literal>services.xml</literal> file. With this, you define a service which
  151. returns a derived instance of <ulink
  152. url="jeditresource:/Sidekick.jar!/docs/api/sidekick/SideKickParser.html">
  153. <classname>SideKickParser</classname></ulink>
  154. </para>
  155. <programlisting>
  156. &lt;?xml version=&quot;1.0&quot;?&gt;
  157. &lt;!DOCTYPE SERVICES SYSTEM &quot;services.dtd&quot;&gt;
  158. &lt;SERVICES&gt;
  159. &lt;SERVICE CLASS=&quot;sidekick.SideKickParser&quot; NAME=&quot;xml&quot;&gt;
  160. new xml.parser.SAXParserImpl();
  161. &lt;/SERVICE&gt;
  162. &lt;/SERVICES&gt;
  163. </programlisting>
  164. </sect1>
  165. <sect1 id="class-sidekickparser"><title>The SideKickParser class</title>
  166. <para>
  167. <ulink
  168. url="jeditresource:/Sidekick.jar!/docs/api/sidekick/SideKickParser.html">
  169. <classname>SideKickParser</classname></ulink> is an abstract class. The constructor takes one string parameter. This string is used in several properties:
  170. </para>
  171. <itemizedlist>
  172. <listitem><para><literal>sidekick.parser.<replaceable>name</replaceable>.label</literal>
  173. - specifies a human-readable label for the parser, shown in status messages. </para>
  174. <para> Your derived parser class should return this same name from the <literal>getName()</literal> function.
  175. </para>
  176. </listitem>
  177. <listitem><para><literal>mode.<replaceable>mode</replaceable>.sidekick.parser</literal>
  178. - properties of this form are used to associate a parser with an edit mode.
  179. </para></listitem>
  180. </itemizedlist>
  181. <para>
  182. For example, the XML plugin, which used to provide two <classname>SideKickParser</classname>
  183. implementations, had these properties:
  184. </para>
  185. <programlisting>sidekick.parser.xml.label=XML
  186. mode.xml.sidekick.parser=xml
  187. mode.xsl.sidekick.parser=xml
  188. sidekick.parser.html.label=HTML
  189. mode.asp.sidekick.parser=html
  190. mode.coldfusion.sidekick.parser=html
  191. mode.html.sidekick.parser=html
  192. mode.jhtml.sidekick.parser=html
  193. mode.jsp.sidekick.parser=html
  194. mode.php.sidekick.parser=html
  195. mode.shtml.sidekick.parser=html
  196. mode.sgml.sidekick.parser=html
  197. mode.velocity.sidekick.parser=html</programlisting>
  198. </sect1>
  199. <sect1 id="implement-structure-tree"><title>Implementing a structure tree</title>
  200. <para>
  201. The <ulink
  202. url="jeditresource:/Sidekick.jar!/docs/api/sidekick/SideKickParser.html">
  203. <classname>SideKickParser</classname></ulink> has one abstract method that all
  204. subclasses must implement:
  205. </para>
  206. <funcsynopsis>
  207. <funcprototype>
  208. <funcdef>public
  209. SideKickParsedData <function>parse</function></funcdef>
  210. <paramdef>Buffer <parameter>buffer</parameter></paramdef>
  211. <paramdef>DefaultErrorSource <parameter>errorSource</parameter></paramdef>
  212. </funcprototype>
  213. </funcsynopsis>
  214. <para>
  215. The <literal>errorSource</literal> is an instance of a class provided by the
  216. <application>ErrorList</application> plugin; consult its documentation for
  217. details.
  218. </para>
  219. <para>
  220. The method is called from a thread, so care must be taken to access the
  221. buffer in a thread-safe manner; the API documentation for the
  222. <classname>Buffer</classname> class describes how this is done.
  223. </para>
  224. <para>
  225. Your implementation of the <function>parse()</function> method should create and return
  226. an instance of
  227. <ulink url="jeditresource:/Sidekick.jar!/docs/api/sidekick/SideKickParsedData.html">SideKickParsedData </ulink>. Its constructor of the takes one parameter, which is the file name (to be shown at the root of the structure tree). Your method should
  228. add structure elements to the <varname>root</varname> field of the instance.
  229. <varname>root</varname> is an instance of Java's <classname>DefaultMutableTreeNode</classname> class,
  230. and is given an initial value by the <classname>SideKickParsedData</classname> constructor.
  231. </para>
  232. </sect1>
  233. <sect1 id="implement-completion"><title>Implementing completion popups</title>
  234. <para> Your derived instance of
  235. <ulink url="jeditresource:/Sidekick.jar!/docs/api/sidekick/SideKickParser.html">
  236. SideKickParser</ulink> can implement additional
  237. methods to tell Sidekick that your parser supports completions.
  238. </para>
  239. <programlisting>
  240. /* @return true if plugin supports completion */
  241. public boolean supportsCompletion();
  242. /* @return true if we show completions after a period of inactivity. */
  243. public boolean canCompleteAnywhere() ;
  244. /* @return a list of characters which trigger completion immediately. */
  245. public String getInstantCompletionTriggers();
  246. /* @return all completions at a given caret position for this
  247. editpane */
  248. public SideKickCompletion complete(EditPane editPane, int caret)
  249. </programlisting>
  250. <para> If your SideKickParser does support completion, the actual
  251. brains of the plugin goes in the last method, <literal>complete()</literal>,
  252. which must construct an instance of <ulink
  253. url="jeditresource:/Sidekick.jar!/docs/api/sidekick/SideKickCompletion.html">
  254. SideKickCompletion</ulink>, given an EditPane and a caret position.
  255. </para>
  256. <para>
  257. The constructor for SideKickCompletion accepts a list (or array) of possible values, these are the values that are displayed in the dropdown.
  258. This is an abstract class, so you'll need to derive a specific implementation. You may want to override the 'insert(int)' method to
  259. support language specifics, like "dot" completion.
  260. </para>
  261. <para>How you actually create the completion depends on the specific language and support classes, and the information provided by the parser for the current file. </para>
  262. </sect1>
  263. </chapter>
  264. <appendix id="futureplans"><title> Future Plans </title>
  265. <itemizedlist>
  266. <listitem><para> Adding a Help tooltip to the CompletionPopup window and methods to the CompletinoInfo for getting/setting help.
  267. </para></listitem>
  268. </itemizedlist>
  269. </appendix>
  270. <appendix id="changes"><title>Change log</title>
  271. <itemizedlist>
  272. <listitem><para>
  273. <emphasis role="bold">Version 0.71</emphasis> requires JDK 1.5, jEdit 4.3pre8 and ErrorListPlugin 1.4.</para>
  274. <itemizedlist>
  275. <listitem><para> SF.net bugs 1072043, 1553554, 1506964 - Sidekick FoldHandler bugs fixed. </para></listitem>
  276. <listitem><para> SF.net bug # 1593604 - reparse on save happens only in the active view.
  277. </para></listitem>
  278. <listitem><para> Sf.net bug # 1595835 - can't switch to default parser
  279. </para></listitem>
  280. </itemizedlist>
  281. </listitem>
  282. <listitem><para>
  283. <emphasis role="bold">Version 0.7</emphasis> requires JDK 1.5, jEdit 4.3pre8 and ErrorListPlugin 1.4.</para>
  284. <itemizedlist>
  285. <listitem><para>
  286. Added a mode-specific option pane, so that settings can
  287. be customized on a mode basis by SideKick and its parser service plugins. (ezust).
  288. </para>
  289. </listitem>
  290. <listitem><para>
  291. Made the completion popup accept-characters configurable. Prevented the completion popup from showing when the word at the caret is the same as a completion list entry. (hertzhaft) </para>
  292. </listitem>
  293. <listitem><para>Recuses into non-asset nodes #1571697, 1573034. (shlomy) </para></listitem>
  294. </itemizedlist>
  295. </listitem>
  296. <listitem><para>
  297. <emphasis role="bold">Version 0.6.6</emphasis> requires JDK 1.5, jEdit 4.3pre5 and ErrorListPlugin 1.4.</para>
  298. <itemizedlist>
  299. <listitem><para>
  300. Added sidekick.util package. This contains classes to help integrate javacc-generated parsers with sidekick. (danson) </para>
  301. </listitem>
  302. <listitem><para> Some work on the popup for code completion. It still doesn't work right with picking from the list with a mouse. (danson) </para></listitem>
  303. <listitem><para> Fix for a null pointer exception. (danson) </para></listitem>
  304. </itemizedlist>
  305. </listitem>
  306. <listitem><para>
  307. <emphasis role="bold">Version 0.6.4</emphasis> requires JDK 1.5, jEdit 4.3pre5 and ErrorListPlugin 1.4. </para>
  308. <itemizedlist>
  309. <listitem><para>
  310. Emits new EBMessage <classname>msg.CaretChanging</classname> when an asset is selected in the tree. (ezust) </para>
  311. </listitem>
  312. <listitem><para> Mouse Clicks, PgUp and PgDn keys work from completion popups. Arrow keys don't wrap around anymore. (ezust) </para></listitem>
  313. <listitem><para> Popup menu on parse button for conveniently changing auto parse settings/caret follow settings (requires JDK 1.5). (ezust) </para></listitem>
  314. <listitem><para> Parse event bugfixes (ezust) </para></listitem>
  315. </itemizedlist>
  316. </listitem>
  317. <listitem><para>
  318. <emphasis role="bold">Version 0.6.2</emphasis> requires JDK 1.4, jEdit 4.3pre3 and ErrorListPlugin 1.4.
  319. <itemizedlist>
  320. <listitem> <para> Broke up options "parse on buffer switch/save" into 2 separate options. Now you can parse on switch, or on save, or on both, and when you switch buffers with parse-on-switch off, the tree keeps its state. (Alan Ezust) </para> </listitem>
  321. <listitem> <para> Added option setting to turn off tool tips. Tool tips can be
  322. annoying on slower systems as they are not necessarily drawn quickly. (Dale Anson) </para></listitem>
  323. <listitem> <para> Added option setting to be able to display a status window
  324. at the bottom of the tree. This window is larger than the jEdit status bar,
  325. so the full display of tree node can be shown. This is nice when tool tips
  326. are off and the node details are shown on more than one line. (Dale Anson) </para></listitem>
  327. </itemizedlist>
  328. </para>
  329. </listitem>
  330. <listitem> <para>
  331. <emphasis role="bold">Version 0.6.1</emphasis> requires
  332. jEdit 4.3pre3 and ErrorListPlugin 1.4.
  333. <itemizedlist>
  334. <listitem><para> Made <varname>SideKickParser.name</varname> <literal>protected</literal>.
  335. </para></listitem>
  336. <listitem><para> Bug 1504746 fixed [combobox]. </para></listitem>
  337. </itemizedlist>
  338. </para></listitem>
  339. <listitem>
  340. <para>
  341. <emphasis role="bold">Version 0.6</emphasis> requires
  342. jEdit 4.3pre3 and ErrorListPlugin 1.4.
  343. <itemizedlist>
  344. <listitem> <para> Added a combo box to let you switch parsers on an individual buffer basis. (Alan Ezust) </para></listitem>
  345. <listitem>
  346. <para> Improved Documentation. (Alan Ezust) </para> </listitem>
  347. <listitem> <para> No more multi-line StatusBar messages. Using <function>getShortString()</function>
  348. instead of <function>getLongString()</function>. (Alan Ezust) </para> </listitem>
  349. </itemizedlist>
  350. </para>
  351. </listitem>
  352. <listitem> <para>
  353. <emphasis role="bold">Version 0.5</emphasis> requires jEdit 4.3pre3 and ErrorListPlugin 1.2.</para>
  354. <itemizedlist>
  355. <listitem> <para> SideKick now auto-expands the proper depth of the tree, and properly follows the textarea's caret as the selected node in the sidekick. (Dale Anson) </para> </listitem>
  356. <listitem> <para> A new context menu exists in Structure Browser permitting the user to set and view markers. (Martin Raspe) </para> </listitem>
  357. </itemizedlist> </listitem>
  358. <listitem> <para> <emphasis role="bold">Version 0.4</emphasis> requires
  359. jEdit 4.3pre3 and ErrorListPlugin 1.2.</para>
  360. <itemizedlist>
  361. <listitem><para> Moved 4 classes from the PerlSideKick plugin into this plugin. The classes are in <literal>package sidekick.enhanced</literal>.
  362. This is so that we can break the dependency between
  363. JavaScriptSideKick and PerlSideKick. </para> </listitem>
  364. <listitem> <para> Patched for 4.3pre3 API </para> </listitem>
  365. </itemizedlist>
  366. </listitem>
  367. <listitem><para><emphasis role="bold">Version 0.3.4</emphasis> requires
  368. jEdit 4.2final.</para>
  369. <itemizedlist>
  370. <listitem><para>Added a new <classname>IAsset</classname> interface that can be
  371. used instead of the <classname>Asset</classname> abstract class to realize more flexible
  372. inheritance relationships.</para></listitem>
  373. <listitem><para>Added a new option pane to associate edit modes with SideKick parsers.</para></listitem>
  374. </itemizedlist>
  375. </listitem>
  376. <listitem><para><emphasis role="bold">Version 0.3.3</emphasis> requires
  377. jEdit 4.2final.</para>
  378. <itemizedlist>
  379. <listitem><para>The completion popup is now positioned within the screen bounds.</para></listitem>
  380. <listitem><para>The <classname>SideKickCompletion</classname> class is now much more full-featured (but backwards-compatible, if you ignore the new features).</para></listitem>
  381. <listitem><para>Some changes were made to the way the parser works to improve perceived responsiveness.</para></listitem>
  382. <listitem><para>The <classname>SideKickParsedData</classname> associated with a buffer was not unset when the SideKick plugin was unloaded, and as a result, reloading the
  383. SideKick plugin would horribly break buffers using the <quote>sidekick</quote> fold handler.</para></listitem>
  384. <listitem><para>The option to delay parsing after a keystroke did not work; the timeout was always fixed at 1.5 seconds.</para></listitem>
  385. </itemizedlist>
  386. </listitem>
  387. <listitem><para><emphasis role="bold">Version 0.3.2</emphasis> requires
  388. jEdit 4.2final and ErrorListPlugin 1.2.</para>
  389. <itemizedlist>
  390. <listitem><para>Fixed NullPointerException in <guimenuitem>Select Asset</guimenuitem>.</para></listitem>
  391. <listitem><para>Sometimes a buffer would be parsed more than once in a row.</para></listitem>
  392. <listitem><para>Fixed a bug that would show the completion popup twice if the <guilabel>Show completion popups where possible</guilabel> option was on andthe popup trigger delay was larger than 0 seconds and the user invoked the <guilabel>complete</guilabel> action before the trigger delay run out. (Dirk Moebius)</para></listitem>
  393. <listitem><para>Fixed a bug where typing with the completion popup open would not insert keys if there were no completions available.</para></listitem>
  394. </itemizedlist>
  395. </listitem>
  396. <listitem><para><emphasis role="bold">Version 0.3.1</emphasis> requires
  397. jEdit 4.2pre3 and ErrorListPlugin 1.2.</para>
  398. <itemizedlist>
  399. <listitem><para><classname>SideKickCompletion</classname> implementations can now disable automatic completion popups.</para></listitem>
  400. <listitem><para>Fix a problem in buffer listener handling.</para></listitem>
  401. <listitem><para>Various other minor fixes.</para></listitem>
  402. </itemizedlist>
  403. </listitem>
  404. <listitem><para><emphasis role="bold">Version 0.3</emphasis> requires
  405. jEdit 4.2pre3 and ErrorListPlugin 1.1.</para>
  406. <itemizedlist>
  407. <listitem><para>Updated for jEdit 4.2 API changes.</para></listitem>
  408. <listitem><para>Added <function>getParseTriggers()</function> method
  409. to <classname>SideKickParser</classname> class.</para></listitem>
  410. <listitem><para>Added <function>getErrorSource()</function> method
  411. to <classname>SideKickPlugin</classname> class.</para></listitem>
  412. <listitem><para>Cleaned up and debugged completion code.</para></listitem>
  413. <listitem><para>Previously if the <guilabel>parse on keystroke</guilabel>
  414. option was on, an in-progress parse was not stopped. This resulted in poor
  415. performance. Now, an API has been added for stopping parsing (although only
  416. the XML plugin uses it at the moment). Combined with the position optimization
  417. in jEdit 4.2pre3, this should result in improved responsiveness when editing
  418. large XML files.</para></listitem>
  419. </itemizedlist>
  420. </listitem>
  421. <listitem><para><emphasis role="bold">Version 0.2</emphasis> requires
  422. jEdit 4.1pre11 and ErrorListPlugin 1.0.</para>
  423. <itemizedlist>
  424. <listitem><para>Fixed a thread safety problem.
  425. </para></listitem>
  426. <listitem><para>Added <function>activate()</function> and
  427. <function>deactivate()</function> methods to
  428. <classname>SideKickParser</classname> class. These methods are called when
  429. a buffer using this parser is selected and deselected in a given view.
  430. </para></listitem>
  431. <listitem><para>The priority of the thread used by SideKick to parse files
  432. is now the minimum priority.
  433. </para></listitem>
  434. <listitem><para>jEdit keyboard shortcuts now work when invoked while a
  435. completion popup is open.
  436. </para></listitem>
  437. </itemizedlist>
  438. </listitem>
  439. <listitem><para><emphasis role="bold">Version 0.1</emphasis> requires
  440. jEdit 4.1pre11.</para>
  441. <itemizedlist>
  442. <listitem><para>Initial release.
  443. </para></listitem>
  444. </itemizedlist>
  445. </listitem>
  446. </itemizedlist>
  447. </appendix>
  448. </book>