Code Snippets plugin

From Code::Blocks
Code snippets
Generic-plugin.png
Developer(s): Arto Jonsson & Pecan Heber
Maintainer(s): Pecan
Version: 1.1

Code snippets plugin is a simple snippets management plugin for Code::Blocks. It integrates with the interface by creating a floating docking window which shows all the snippets. Snippets can be assigned to categories or they can be in the global category called All snippets.

Snippet management

Creating a new snippet

To create a snippet you may

  • 1) write the text in the default snippet editor;
  • 2) mark some text and drag it over the top of a snippet tree item; or
  • 3) cut, paste or drag text into the snippet editor.

For example, create some external text. Select your text and and drag it over the top of a Category, either to the All Snippets root item or to some other Category you may have created via the Snippets context menu.

You might noticed that the text you dragged disappeared. This is the default behavior of drag and drop; it moves by default. If you want to copy instead, simply hold down the Ctrl key while dragging the text.

To assign text to a existing snippet, you drag and drop the text to that snippet. If you pefer to append the text, use the context menu Edit command.

The default editor is based on Scintilla and contains a context menu of its own for copy/cut/paste/undo etc.

Applying a snippet

To apply a snippet, double click it and it will be applied to the currently active editor. You can alternatively right click on the snippet and select Apply.

Creating a new category

Snippets can be added to categories. Each snippet can be at one category at a time. The number of categories and sub-categories is not limited however.

Each user created category has a parent category, the categories created in root have the All snippets category as parent. So if you want to create a category to the root, right click All snippets and select Add subcategory.

Searching

Snippets can be searched by typing words to the text edit control at the top of the docking window. Searching is performed by find-as-you-type method so you don't have to press any search buttons or Enter key. Searching by default includes both snippets and categories.

Searching is case-sensitive by default so "C++" and "c++" are seen as different search terms.

File format

Code snippets plugin uses XML (UTF-8 encoded) file to save all code snippets.

The XML file starts with root item, snippets, which holds all the categories and code snippets. Code snippets and categories use the same element called item. The item's attributes tell what type of item it is, category or code snippet.

Elements

snippets

  • Attributes: None
  • Sub-elements: All snippets and categories

item

  • Attributes:
    • name -- Name of the element
    • type -- Type of the element, either snippet or category
  • Sub-elements:
    • snippet -- The actual code snippet (only if the item's type is snippet)
    • Sub-items and categories (only if the item's type is category)

Example file

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<snippets>
	<item name="Test category" type="category" />
		<item name="Test item 1" type="snippet" />
			<snippet>// Test 1</snippets>
		</item>	
	</item>
	<item name="Test item 2" type="snippet" />
		<snippet>// Test 2</snippets>
	<item>
</snippets>

The file would create the following structure:

All snippets
|
|- Test category
|  |
|  |- Test item 1
|
|- Test item 2

Known Issues

wxMSW

Using the Tab key in snippet editor causes the focus to move to the next control

Most likely a bug in wxWidgets, I haven't investigated it much yet. Broken also in wxWidgets 2.8, works correctly in wxGTK.

Snippet tool tips show garbage text (squares) instead of line breaks (wxWidgets 2.6)

A bug in wxWidgets, fixed in wxWidgets 2.8.

wxGTK

Snippet tool tips don't work

A limitation in wxWidgets, not implemented as of wxWidgets 2.8.0.

"Name:" and "Snippet:" text labels in Edit snippet dialog don't have underscores; makes keyboard navigation hard

A bug in wxWidgets, fixed in wxWidgets 2.8. The fix might be backported to 2.6.