Geany Manual

Embed Size (px)

Citation preview

Pgina 119 de 119

GeanyA fast, light, GTK+ IDEAuthors:Enrico TrgerNick TreleavenFrank LanitzColomban WendlingMatthew Brush

Date:2014-04-16

Version:1.25

Copyright 2005-2014This document is distributed under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. A copy of this license can be found in the file COPYING included with the source code of this program, and also in the chapterGNU General Public License.Contents Introduction About Geany Where to get it License About this document Installation Requirements Binary packages Source compilation Autotools based build system Waf based build system Waf cache Cleaning the cache Custom installation Dynamic linking loader support and VTE Build problems Installation prefix Usage Getting started The Geany workspace Command line options General Startup Opening files from the command-line in a running instance Virtual terminal emulator widget (VTE) Defining own widget styles using .gtkrc-2.0 Documents Switching between documents Cloning documents Character sets and Unicode Byte-Order-Mark (BOM) Using character sets In-file encoding specification Special encoding "None" Unicode Byte-Order-Mark (BOM) Editing Folding Column mode editing (rectangular selections) Drag and drop of text Indentation Applying new indentation settings Detecting indent type Auto-indentation Bookmarks Code navigation history Sending text through custom commands Context actions Autocompletion Word part completion Scope autocompletion User-definable snippets Snippet keybindings Inserting Unicode characters Search, replace and go to Toolbar entries Search bar Find Matching options Find all Change font in search dialog text fields Find selection Find usage Find in files Filtering out version control files Replace Replace all Go to tag definition Go to tag declaration Go to line Regular expressions Multi-line regular expressions View menu Color schemes menu Tags Workspace tags Global tags Default global tags files Global tags file format Pipe-separated format CTags format Generating a global tags file Generating C/C++ tag files Generating tag files on Windows C ignore.tags Preferences General Startup preferences Startup Shutdown Paths General Miscellaneous preferences Miscellaneous Search Projects Interface preferences Sidebar Message window Fonts Miscellaneous Interface Notebook tab preferences Editor tabs Tab positions Interface Toolbar preferences Toolbar Appearance Editor Features preferences Features Editor Indentation preferences Indentation group Editor Completions preferences Completions Auto-close quotes and brackets Editor Display preferences Display Long line marker Virtual spaces Files preferences New files Saving files Miscellaneous Tools preferences Tool paths Commands Template preferences Template data Keybinding preferences Printing preferences Various preferences Statusbar Templates Terminal (VTE) preferences Terminal widget Project management New project Project properties Open project Close project Build menu Indicators Default build menu items Compile Build Lint Make Make custom target Make object Next error Previous error Execute Stopping running processes Terminal emulators Set build commands Build menu configuration Build menu commands dialog Substitutions in commands and working directories Build menu keyboard shortcuts Old settings Printing support Plugins Plugin manager Keybindings Switching documents Configurable keybindings File keybindings Editor keybindings Clipboard keybindings Select keybindings Insert keybindings Format keybindings Settings keybindings Search keybindings Go to keybindings View keybindings Focus keybindings Notebook tab keybindings Document keybindings Project keybindings Build keybindings Tools keybindings Help keybindings Configuration files Configuration file paths Paths on Unix-like systems Paths on Windows Tools menu items Global configuration file Filetype definition files Filenames System files User files Custom filetypes Creating a custom filetype from an existing filetype Filetype configuration [styling] section Using a named style Reading styles from another filetype [keywords] section [lexer_properties] section [settings] section [indentation] section [build_settings] section Special file filetypes.common [named_styles] section [named_colors] section [styling] section [settings] section Filetype extensions Filetype group membership Preferences file format [build-menu] section Project file format [build-menu] additions Templates Template meta data File templates Adding file templates Customizing templates Template wildcards Special {command:} wildcard Customizing the toolbar Manually editing the toolbar layout Available toolbar elements Plugin documentation HTML Characters Insert entity dialog Replace special chars by its entity At typing time Bulk replacement Save Actions Auto Save Save on focus out Instant Save Backup Copy Contributing to this document Scintilla keyboard commands Keyboard commands Tips and tricks Document notebook Editor Interface GTK-related Compile-time options src/geany.h project.h filetypes.c editor.h keyfile.c build.c GNU General Public License License for Scintilla and SciTEIntroductionAbout GeanyGeany is a small and lightweight Integrated Development Environment. It was developed to provide a small and fast IDE, which has only a few dependencies on other packages. Another goal was to be as independent as possible from a particular Desktop Environment like KDE or GNOME - Geany only requires the GTK2 runtime libraries.Some basic features of Geany: Syntax highlighting Code folding Autocompletion of symbols/words Construct completion/snippets Auto-closing of XML and HTML tags Calltips Many supported filetypes including C, Java, PHP, HTML, Python, Perl, Pascal, and others Symbol lists Code navigation Build system to compile and execute your code Simple project management Plugin interfaceWhere to get itYou can obtain Geany fromhttp://www.geany.org/or perhaps also from your distribution. For a list of available packages, please seehttp://www.geany.org/Download/ThirdPartyPackages.LicenseGeany is distributed under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. A copy of this license can be found in the file COPYING included with the source code of this program and in the chapter,GNU General Public License.The included Scintilla library (found in the subdirectoryscintilla/) has its own license, which can be found in the chapter,License for Scintilla and SciTE.About this documentThis documentation is available in HTML and text formats. The latest version can always be found athttp://www.geany.org/.If you want to contribute to it, seeContributing to this document.InstallationRequirementsYou will need the GTK (>= 2.24) libraries and their dependencies (Pango, GLib and ATK). Your distro should provide packages for these, usually installed by default. For Windows, you can download an installer from the website which bundles these libraries.Binary packagesThere are many binary packages available. For an up-to-date but maybe incomplete list seehttp://www.geany.org/Download/ThirdPartyPackages.Source compilationCompiling Geany is quite easy. To do so, you need the GTK (>= 2.24) libraries and header files. You also need the Pango, GLib and ATK libraries and header files. All these files are available athttp://www.gtk.org, but very often your distro will provide development packages to save the trouble of building these yourself.Furthermore you need, of course, a C and C++ compiler. The GNU versions of these tools are recommended.Autotools based build systemThe Autotools based build system is very mature and has been well tested. To use it, you just need the Make tool, preferably GNU Make.Then run the following commands:$ ./configure$ makeThen as root:% make installOr via sudo:% sudo make installWaf based build systemThe Waf build system is still quite young and under heavy development but already in a usable state. In contrast to the Autotools system, Waf needs Python. So before using Waf, you need to install Python on your system. The advantage of the Waf build system over the Autotools based build system is that the whole build process might be a bit faster. Especially when you use the Waf cache feature for repetitive builds (e.g. when changing only a few source files to test something) will become much faster since Waf will cache and re-use the unchanged built files and only compile the changed code again. SeeWaf Cachefor details. To build Geany with Waf as run:$ ./waf configure$ ./waf buildThen as root:% ./waf installWaf cacheThe Waf build system has a nice and interesting feature which can help to avoid a lot of unnecessary rebuilding of unchanged code. This often happens when developing new features or trying to debug something in Geany. Waf is able to store and retrieve the object files from a cache. This cache is declared using the environment variableWAFCACHE. A possible location of the cache directory could be~/.cache/waf. In order to make use of this, you first need to create this directory:$ mkdir -p ~/.cache/wafthen add the environment variable to your shell configuration (the following example is for Bash and should be adjusted to your used shell):export WAFCACHE=/home/username/.cache/wafRemember to replaceusernamewith your actual username.More information about the Waf cache feature are available athttp://code.google.com/p/waf/wiki/CacheObjectFiles.Cleaning the cacheYou should be careful about the size of the cache directory as it may grow rapidly over time. Waf doesn't do any cleaning or other house-keeping of the cache yet, so you need to keep it clean by yourself. An easy way to keep it clean is to run the following command regularly to remove old cached files:$ find /home/username/.cache/waf -mtime +14 -exec rm {} \;This will delete all files in the cache directory which are older than 14 days.For details about thefindcommand and its options, check its manual page.Custom installationThe configure script supports several common options, for a detailed list, type:$ ./configure --helpor:$ ./waf --help(depending on which build system you use).You may also want to read the INSTALL file for advanced installation options. See alsoCompile-time options.Dynamic linking loader support and VTEIn the case that your system lacks dynamic linking loader support, you probably want to pass the option--disable-vteto theconfigurescript. This prevents compiling Geany with dynamic linking loader support for automatically loadinglibvte.so.4if available.Build problemsIf there are any errors during compilation, check your build environment and try to find the error, otherwise contact the mailing list or one the authors. Sometimes you might need to ask for specific help from your distribution.Installation prefixIf you want to find Geany's system files after installation you may want to know the installation prefix.Pass the--print-prefixoption to Geany to check this - seeCommand line options. The first path is the prefix.On Unix-like systems this is commonly/usrif you installed from a binary package, or/usr/localif you build from source.NoteEditing system files is not necessary as you should use the per-user configuration files instead, which don't need root permissions. SeeConfiguration files.UsageGetting startedYou can start Geany in the following ways: From the Desktop Environment menu:Choose in your application menu of your used Desktop Environment: Development --> Geany.At Windows-systems you will find Geany after installation inside the application menu within its special folder. From the command line:To start Geany from a command line, type the following and press Return:% geanyThe Geany workspaceThe Geany window is shown in the following figure:

The workspace has the following parts: The menu. An optional toolbar. An optional sidebar that can show the following tabs: Documents - A document list, and Symbols - A list of symbols in your code. The main editor window. An optional message window which can show the following tabs: Status - A list of status messages. Compiler - The output of compiling or building programs. Messages - Results of 'Find Usage', 'Find in Files' and other actions Scribble - A text scratchpad for any use. Terminal - An optional terminal window. A status barMost of these can be configured in theInterface preferences, theView menu, or the popup menu for the relevant area.Additional tabs may be added to the sidebar and message window by plugins.The position of the tabs can be selected in the interface preferences.The sizes of the sidebar and message window can be adjusted by dragging the dividers.Command line optionsShort optionLong optionFunction

none+numberSet initial line number for the first opened file (same as --line, do not put a space between the + sign and the number). E.g. "geany +7 foo.bar" will open the file foo.bar and place the cursor in line 7.

none--columnSet initial column number for the first opened file.

-c dir_name--config=directory_nameUse an alternate configuration directory. The default configuration directory is~/.config/geany/and that is wheregeany.confand other configuration files reside.

none--ft-namesPrint a list of Geany's internal filetype names (useful for snippets configuration).

-g--generate-tagsGenerate a global tags file (seeGenerating a global tags file).

-P--no-preprocessingDon't preprocess C/C++ files when generating tags.

-i--new-instanceDo not open files in a running instance, force opening a new instance. Only available if Geany was compiled with support for Sockets.

-l--lineSet initial line number for the first opened file.

none--list-documentsReturn a list of open documents in a running Geany instance. This can be used to read the currently opened documents in Geany from an external script or tool. The returned list is separated by newlines (LF) and consists of the full, UTF-8 encoded filenames of the documents. Only available if Geany was compiled with support for Sockets.

-m--no-msgwinDo not show the message window. Use this option if you do not need compiler messages or VTE support.

-n--no-ctagsDo not load symbol completion and call tip data. Use this option if you do not want to use them.

-p--no-pluginsDo not load plugins or plugin support.

none--print-prefixPrint installation prefix, the data directory, the lib directory and the locale directory (in that order) to stdout, one line each. This is mainly intended for plugin authors to detect installation paths.

-r--read-onlyOpen all files given on the command line in read-only mode. This only applies to files opened explicitly from the command line, so files from previous sessions or project files are unaffected.

-s--no-sessionDo not load the previous session's files.

-t--no-terminalDo not load terminal support. Use this option if you do not want to load the virtual terminal emulator widget at startup. If you do not havelibvte.so.4installed, then terminal-support is automatically disabled. Only available if Geany was compiled with support for VTE.

none--socket-fileUse this socket filename for communication with a running Geany instance. This can be used with the following command to execute Geany on the current workspace:geany --socket-file=/tmp/geany-sock-$(xprop -root _NET_CURRENT_DESKTOP | awk '{print $3}')

none--vte-libSpecify explicitly the path including filename or only the filename to the VTE library, e.g./usr/lib/libvte.soorlibvte.so. This option is only needed when the auto-detection does not work. Only available if Geany was compiled with support for VTE.

-v--verboseBe verbose (print useful status messages).

-V--versionShow version information and exit.

-?--helpShow help information and exit.

none[files ...]Open all given files at startup. This option causes Geany to ignore loading stored files from the last session (if enabled). Geany also recognizes line and column information when appended to the filename with colons, e.g. "geany foo.bar:10:5" will open the file foo.bar and place the cursor in line 10 at column 5.Projects can also be opened but a project file (*.geany) must be the first non-option argument. All additionally given files are ignored.

You can also pass line number and column number information, e.g.:geany some_file.foo:55:4Geany supports all generic GTK options, a list is available on the help screen.GeneralStartupAt startup, Geany loads all files from the last time Geany was launched. You can disable this feature in the preferences dialog (seeGeneral Startup preferences).You can start several instances of Geany, but only the first will load files from the last session. In the subsequent instances, you can find these files in the file menu under the "Recent files" item. By default this contains the last 10 recently opened files. You can change the number of recently opened files in the preferences dialog.To run a second instance of Geany, do not specify any filenames on the command-line, or disable opening files in a running instance using the appropriate command line option.Opening files from the command-line in a running instanceGeany detects if there is an instance of itself already running and opens files from the command-line in that instance. So, Geany can be used to view and edit files by opening them from other programs such as a file manager.You can also pass line number and column number information, e.g.:geany some_file.foo:55:4This would open the filesome_file.foowith the cursor on line 55, column 4.If you do not like this for some reason, you can disable using the first instance by using the appropriate command line option -- see the section calledCommand line options.Virtual terminal emulator widget (VTE)If you have installedlibvte.soon your system, it is loaded automatically by Geany, and you will have a terminal widget in the notebook at the bottom.If Geany cannot find anylibvte.soat startup, the terminal widget will not be loaded. So there is no need to install the package containing this file in order to run Geany. Additionally, you can disable the use of the terminal widget by command line option, for more information see the section calledCommand line options.You can use this terminal (from now on called VTE) much as you would a terminal program like xterm. There is basic clipboard support. You can paste the contents of the clipboard by pressing the right mouse button to open the popup menu, and choosing Paste. To copy text from the VTE, just select the desired text and then press the right mouse button and choose Copy from the popup menu. On systems running the X Window System you can paste the last selected text by pressing the middle mouse button in the VTE (on 2-button mice, the middle button can often be simulated by pressing both mouse buttons together).In the preferences dialog you can specify a shell which should be started in the VTE. To make the specified shell a login shell just use the appropriate command line options for the shell. These options should be found in the manual page of the shell. For zsh and bash you can use the argument--login.NoteGeany tries to loadlibvte.so. If this fails, it tries to load some other filenames. If this fails too, you should check whether you installed libvte correctly. Again note, Geany will run without this library.It could be, that the library is called something else thanlibvte.so(e.g. on FreeBSD 6.0 it is calledlibvte.so.8). If so please set a link to the correct file (as root):# ln -s /usr/lib/libvte.so.X /usr/lib/libvte.soObviously, you have to adjust the paths and set X to the number of yourlibvte.so.You can also specify the filename of the VTE library to use on the command line (see the section calledCommand line options) or at compile time by specifying the command line option--with-vte-module-pathto ./configure.Defining own widget styles using .gtkrc-2.0You can define your widget style for many of Geany's GUI parts. To do this, just edit your.gtkrc-2.0(usually found in your home directory on UNIX-like systems and in the etc subdirectory of your Geany installation on Windows).To have a defined style used by Geany you must assign it to at least one of Geany's widgets. For example use the following line:widget "Geany*" style "geanyStyle"This would assign your style "geany_style" to all Geany widgets. You can also assign styles only to specific widgets. At the moment you can use the following widgets: GeanyMainWindow GeanyEditMenu GeanyToolbarMenu GeanyDialog GeanyDialogPrefs GeanyDialogProject GeanyDialogSearch GeanyMenubar GeanyToolbarAn example of a simple.gtkrc-2.0:style "geanyStyle"{ font_name="Sans 12"}widget "GeanyMainWindow" style "geanyStyle"

style "geanyStyle"{ font_name="Sans 10"}widget "GeanyPrefsDialog" style "geanyStyle"DocumentsSwitching between documentsThe documents list and the editor tabs are two different ways to switch between documents using the mouse. When you hit the key combination to move between tabs, the order is determined by the tab order. It is not alphabetical as shown in the documents list (regardless of whether or not editor tabs are visible).See theNotebook tab keybindingssection for useful shortcuts including for Most-Recently-Used document switching.Cloning documentsTheDocument->Clonemenu item copies the current document's text, cursor position and properties into a new untitled document. If there is a selection, only the selected text is copied. This can be useful when making temporary copies of text or for creating documents with similar or identical contents.Character sets and Unicode Byte-Order-Mark (BOM)Using character setsGeany provides support for detecting and converting character sets. So you can open and save files in different character sets, and even convert a file from one character set to another. To do this, Geany uses the character conversion capabilities of the GLib library.Only text files are supported, i.e. opening files which contain NULL-bytes may fail. Geany will try to open the file anyway but it is likely that the file will be truncated because it can only be read up to the first occurrence of a NULL-byte. All characters after this position are lost and are not written when you save the file.Geany tries to detect the encoding of a file while opening it, but auto-detecting the encoding of a file is not easy and sometimes an encoding might not be detected correctly. In this case you have to set the encoding of the file manually in order to display it correctly. You can this in the file open dialog by selecting an encoding in the drop down box or by reloading the file with the file menu item "Reload as". The auto-detection works well for most encodings but there are also some encodings where it is known that auto-detection has problems.There are different ways to set different encodings in Geany: Using the file open dialogThis opens the file with the encoding specified in the encoding drop down box. If the encoding is set to "Detect from file" auto-detection will be used. If the encoding is set to "Without encoding (None)" the file will be opened without any character conversion and Geany will not try to auto-detect the encoding (see below for more information). Using the "Reload as" menu itemThis item reloads the current file with the specified encoding. It can help if you opened a file and found out that the wrong encoding was used. Using the "Set encoding" menu itemContrary to the above two options, this will not change or reload the current file unless you save it. It is useful when you want to change the encoding of the file. Specifying the encoding in the file itselfAs mentioned above, auto-detecting the encoding of a file may fail on some encodings. If you know that Geany doesn't open a certain file, you can add the specification line, described in the next section, to the beginning of the file to force Geany to use a specific encoding when opening the file.In-file encoding specificationGeany detects meta tags of HTML files which contain charset information like:

and the specified charset is used when opening the file. This is useful if the encoding of the file cannot be detected properly. For non-HTML files you can also define a line like:/* geany_encoding=ISO-8859-15 */or:# geany_encoding=ISO-8859-15 #to force an encoding to be used. The #, /* and */ are examples of filetype-specific comment characters. It doesn't matter which characters are around the string " geany_encoding=ISO-8859-15 " as long as there is at least one whitespace character before and after this string. Whitespace characters are in this case a space or tab character. An example to use this could be you have a file with ISO-8859-15 encoding but Geany constantly detects the file encoding as ISO-8859-1. Then you simply add such a line to the file and Geany will open it correctly the next time.Since Geany 0.15 you can also use lines which match the regular expression used to find the encoding string:coding[\t]*[:=][\t]*([a-z0-9-]+)[\t]*NoteThese specifications must be in the first 512 bytes of the file. Anything after the first 512 bytes will not be recognized.Some examples are:# encoding = ISO-8859-15or:# coding: ISO-8859-15Special encoding "None"There is a special encoding "None" which uses no encoding. It is useful when you know that Geany cannot auto-detect the encoding of a file and it is not displayed correctly. Especially when the file contains NULL-bytes this can be useful to skip auto detection and open the file properly at least until the occurrence of the first NULL-byte. Using this encoding opens the file as it is without any character conversion.Unicode Byte-Order-Mark (BOM)Furthermore, Geany detects a Unicode Byte Order Mark (seehttp://en.wikipedia.org/wiki/Byte_Order_Markfor details). Of course, this feature is only available if the opened file is in a Unicode encoding. The Byte Order Mark helps to detect the encoding of a file, e.g. whether it is UTF-16LE or UTF-16BE and so on. On Unix-like systems using a Byte Order Mark could cause some problems for programs not expecting it, e.g. the compiler gcc stops with stray errors, PHP does not parse a script containing a BOM and script files starting with a she-bang maybe cannot be started. In the status bar you can easily see whether the file starts with a BOM or not.If you want to set a BOM for a file or if you want to remove it from a file, just use the document menu and toggle the checkbox.NoteIf you are unsure what a BOM is or if you do not understand where to use it, then it is probably not important for you and you can safely ignore it.EditingFoldingGeany provides basic code folding support. Folding means the ability to show and hide parts of the text in the current file. You can hide unimportant code sections and concentrate on the parts you are working on and later you can show hidden sections again. In the editor window there is a small grey margin on the left side with [+] and [-] symbols which show hidden parts and hide parts of the file respectively. By clicking on these icons you can simply show and hide sections which are marked by vertical lines within this margin. For many filetypes nested folding is supported, so there may be several fold points within other fold points.NoteYou can customize the folding icon and line styles - see the filetypes.commonFolding Settings.If you don't like it or don't need it at all, you can simply disable folding support completely in the preferences dialog.The folding behaviour can be changed with the "Fold/Unfold all children of a fold point" option in the preference dialog. If activated, Geany will unfold all nested fold points below the current one if they are already folded (when clicking on a [+] symbol). When clicking on a [-] symbol, Geany will fold all nested fold points below the current one if they are unfolded.This option can be inverted by pressing the Shift key while clicking on a fold symbol. That means, if the "Fold/Unfold all children of a fold point" option is enabled, pressing Shift will disable it for this click and vice versa.Column mode editing (rectangular selections)There is basic support for column mode editing. To use it, create a rectangular selection by holding down the Control and Shift keys (or Alt and Shift on Windows) while selecting some text. Once a rectangular selection exists you can start editing the text within this selection and the modifications will be done for every line in the selection.It is also possible to create a zero-column selection - this is useful to insert text on multiple lines.Drag and drop of textIf you drag selected text in the editor widget of Geany the text is moved to the position where the mouse pointer is when releasing the mouse button. Holding Control when releasing the mouse button will copy the text instead. This behaviour was changed in Geany 0.11 - before the selected text was copied to the new position.IndentationGeany allows each document to indent either with a tab character, multiple spaces or a combination of both.TheTabssetting indents with one tab character per indent level, and displays tabs as the indent width.TheSpacessetting indents with the number of spaces set in the indent width for each level.TheTabs and Spacessetting indents with spaces as above, then converts as many spaces as it can to tab characters at the rate of one tab for each multiple of theVarious preferencesettingindent_hard_tab_width(default 8) and displays tabs as theindent_hard_tab_widthvalue.The default indent settings are set inEditor Indentation preferences(see the link for more information).The default settings can be overridden per-document using the Document menu. They can also be overridden by projects - seeProject management.The indent mode for the current document is shown on the status bar as follows:TABIndent with Tab characters.SPIndent with spaces.T/SIndent with tabs and spaces, depending on how much indentation is on a line.Applying new indentation settingsAfter changing the default settings you may wish to apply the new settings to every document in the current session. To do this use theProject->Apply Default Indentationmenu item.Detecting indent typeTheDetect from fileindentation preference can be used to scan each file as it's opened and set the indent type based on how many lines start with a tab vs. 2 or more spaces.Auto-indentationWhen enabled, auto-indentation happens when pressingEnterin the Editor. It adds a certain amount of indentation to the new line so the user doesn't always have to indent each line manually.Geany has four types of auto-indentation:NoneDisables auto-indentation completely.BasicAdds the same amount of whitespace on a new line as on the previous line. For theTabsand theSpacesindent types the indentation will use the same combination of characters as the previous line. TheTabs and Spacesindentation type converts as explained above.Current charsDoes the same asBasicbut also indents a new line after an opening brace '{', and de-indents when typing a closing brace '}'. For Python, a new line will be indented after typing ':' at the end of the previous line.Match bracesSimilar toCurrent charsbut the closing brace will be aligned to match the indentation of the line with the opening brace. This requires the filetype to be one where Geany knows that the Scintilla lexer understands matching braces (C, C++, D, HTML, Pascal, Bash, Perl, TCL).There is also XML-tag auto-indentation. This is enabled when the mode is more than just Basic, and is also controlled by a filetype setting - seexml_indent_tags.BookmarksGeany provides a handy bookmarking feature that lets you mark one or more lines in a document, and return the cursor to them using a key combination.To place a mark on a line, either left-mouse-click in the left margin of the editor window, or else use Ctrl-m. This will produce a small green plus symbol in the margin. You can have as many marks in a document as you like. Click again (or use Ctrl-m again) to remove the bookmark. To remove all the marks in a given document, use "Remove Markers" in the Document menu.To navigate down your document, jumping from one mark to the next, use Ctrl-. (control period). To go in the opposite direction on the page, use Ctrl-, (control comma). Using the bookmarking feature together with the commands to switch from one editor tab to another (Ctrl-PgUp/PgDn and Ctrl-Tab) provides a particularly fast way to navigate around multiple files.Code navigation historyTo ease navigation in source files and especially between different files, Geany lets you jump between different navigation points. Currently, this works for the following: Go to tag declaration Go to tag definition Symbol list items Build errors Message itemsWhen using one of these actions, Geany remembers your current position and jumps to the new one. If you decide to go back to your previous position in the file, just use "Navigate back a location". To get back to the new position again, just use "Navigate forward a location". This makes it easier to navigate in e.g. foreign code and between different files.Sending text through custom commandsYou can define several custom commands in Geany and send the current selection to one of these commands using theEdit->Format->Send Selection tomenu or keybindings. The output of the command will be used to replace the current selection. This makes it possible to use text formatting tools with Geany in a general way.The selected text will be sent to the standard input of the executed command, so the command should be able to read from it and it should print all results to its standard output which will be read by Geany. To help finding errors in executing the command, the output of the program's standard error will be printed on Geany's standard output.If there is no selection, the whole current line is used instead.To add a custom command, use theSend Selection to->Set Custom Commandsmenu item. Click onAddto get a new item and type the command. You can also specify some command line options. Empty commands are not saved.Normal shell quoting is supported, so you can do things like: sed's/\./(dot)/g'The above example would normally be done with theReplace allfunction, but it can be handy to have common commands already set up.Note that the command is not run in a shell, so if you want to use shell features like pipes and command chains, you need to explicitly launch the shell and pass it your command: sh-c'sort | uniq'Context actionsYou can execute the context action command on the current word at the cursor position or the available selection. This word or selection can be used as an argument to the command. The context action is invoked by a menu entry in the popup menu of the editor and also a keyboard shortcut (see the section calledKeybindings).The command can be specified in the preferences dialog and also for each filetype (see "context_action_cmd" in the section calledFiletype configuration). When the context action is invoked, the filetype specific command is used if available, otherwise the command specified in the preferences dialog is executed.The current word or selection can be referred with the wildcard "%s" in the command, it will be replaced by the current word or selection before the command is executed.For example a context action can be used to open API documentation in a browser window, the command to open the PHP API documentation would be:firefox "http://www.php.net/%s"when executing the command, the %s is substituted by the word near the cursor position or by the current selection. If the cursor is at the word "echo", a browser window will open(assumed your browser is called firefox) and it will open the address:http://www.php.net/echo.AutocompletionGeany can offer a list of possible completions for symbols defined in the tags and for all words in a document.The autocompletion list for symbols is presented when the first few characters of the symbol are typed (configurable, seeEditor Completions preferences, default 4) or when theComplete wordkeybinding is pressed (configurable, seeEditor keybindings, default Ctrl-Space).When the defined keybinding is typed and theAutocomplete all words in documentpreference (inEditor Completions preferences) is selected then the autocompletion list will show all matching words in the document, if there are no matching symbols.If you don't want to use autocompletion it can be dismissed until the next symbol by pressing Escape. The autocompletion list is updated as more characters are typed so that it only shows completions that start with the characters typed so far. If no symbols begin with the sequence, the autocompletion window is closed.The up and down arrows will move the selected item. The highlighted item on the autocompletion list can be chosen from the list by pressing Enter/Return. You can also double-click to select an item. The sequence will be completed to match the chosen item, and if theDrop rest of word on completionpreference is set (inEditor Completions preferences) then any characters after the cursor that match a symbol or word are deleted.Word part completionBy default, pressing Tab will complete the selected item by word part; useful e.g. for adding the prefixgtk_combo_box_entry_without typing it manually: gtk_com gtk_combo_ gtk_combo_box_ gtk_combo_box_entry_ gtk_combo_box_entry_set_text_columnThe key combination can be changed from Tab - SeeEditor keybindings. If you clear/change the key combination for word part completion, Tab will complete the whole word instead, like Enter.Scope autocompletionE.g.:struct{ int i; char c;} foo;When you typefoo.it will show an autocompletion list with 'i' and 'c' symbols.It only works for languages that set parent scope names for e.g. struct members. Currently this means C-like languages. The C tag parser only parses global scopes, so this won't work for structs or objects declared in local scope.User-definable snippetsSnippets are small strings or code constructs which can be replaced or completed to a more complex string. So you can save a lot of time when typing common strings and letting Geany do the work for you. To know what to complete or replace Geany reads a configuration file calledsnippets.confat startup.Maybe you need to often type your name, so define a snippet like this:[Default]myname=Enrico TrgerEvery time you writemyname in Geany, it will replace "myname" with "Enrico Trger". The key to start autocompletion can be changed in the preferences dialog, by default it is TAB. The corresponding keybinding is calledComplete snippet.PathsYou can override the default snippets using the usersnippets.conffile. Use theTools->Configuration Files->snippets.confmenu item. See alsoConfiguration file paths.This adds the default settings to the user file if the file doesn't exist. Alternatively the file can be created manually, adding only the settings you want to change. All missing settings will be read from the system snippets file.Snippet groupsThe filesnippets.confcontains sections defining snippets that are available for particular filetypes and in general.The two sections "Default" and "Special" apply to all filetypes. "Default" contains all snippets which are available for every filetype and "Special" contains snippets which can only be used in other snippets. So you can define often used parts of snippets and just use the special snippet as a placeholder (see thesnippets.conffor details).You can define sections with the name of a filetype eg "C++". The snippets in that section are only available for use in files with that filetype. Snippets in filetype sections will hide snippets with the same name in the "Default" section when used in a file of that filetype.Substitution sequences for snippetsTo define snippets you can use several special character sequences which will be replaced when using the snippet:\n or %newline%Insert a new line (it will be replaced by the used EOL char(s): LF, CR/LF, or CR).

\t or %ws%Insert an indentation step, it will be replaced according to the current document's indent mode.

\s\s to force whitespace at beginning or end of a value ('key= value' won't work, use 'key=\svalue')

%cursor%Place the cursor at this position after completion has been done. You can define multiple %cursor% wildcards and use the keybindingMove cursor in snippetto jump to the next defined cursor position in the completed snippet.

%...%"..." means the name of a key in the "Special" section. If you have defined a key "brace_open" in the "Special" section you can use %brace_open% in any other snippet.

Snippet names must not contain spaces otherwise they won't work correctly. But beside that you can define almost any string as a snippet and use it later in Geany. It is not limited to existing contructs of certain programming languages(likeif,for,switch). Define whatever you need.Template wildcardsSince Geany 0.15 you can also use most of the available templates wildcards listed inTemplate wildcards. All wildcards which are listed asavailable in snippetscan be used. For instance to improve the above example:[Default]myname=My name is {developer}mysystem=My system: {command:uname -a}this will replacemynamewith "My name is " and the value of the template preferencedeveloper.Word charactersYou can change the way Geany recognizes the word to complete, that is how the start and end of a word is recognised when the snippet completion is requested. The section "Special" may contain a key "wordchars" which lists all characters a string may contain to be recognized as a word for completion. Leave it commented to use default characters or define it to add or remove characters to fit your needs.Snippet keybindingsNormally you would type the snippet name and press Tab. However, you can define keybindings for snippets under theKeybindingsgroup insnippets.conf:[Keybindings]for=7block_cursor=8NoteSnippet keybindings may be overridden by Geany's configurable keybindings.Inserting Unicode charactersYou can insert Unicode code points by hitting Ctrl-Shift-u, then still holding Ctrl-Shift, type some hex digits representing the code point for the character you want and hit Enter or Return (still holding Ctrl-Shift). If you release Ctrl-Shift before hitting Enter or Return (or any other character), the code insertion is completed, but the typed character is also entered. In the case of Enter/Return, it is a newline, as you might expect.In some earlier versions of Geany, you might need to first unbind Ctrl-Shift-u in thekeybinding preferences, then selectTools->Reload Configurationor restart Geany. Note that it works slightly differently from other GTK applications, in that you'll need to continue to hold down the Ctrl and Shift keys while typing the code point hex digits (and the Enter or Return to finish the code point).Search, replace and go toThis section describes search-related commands from the Search menu and the editor window's popup menu: Find Find selection Find usage Find in files Replace Go to tag definition Go to tag declaration Go to lineSee alsoSearchpreferences.Toolbar entriesThere are also two toolbar entries: Search bar Go to line entryThere are keybindings to focus each of these - seeFocus keybindings. Pressing Escape will then focus the editor.Search barThe quickest way to find some text is to use the search bar entry in the toolbar. This performs a case-insensitive search in the current document whilst you type. Pressing Enter will search again, and pressing Shift-Enter will search backwards.FindThe Find dialog is used for finding text in one or more open documents.

Matching optionsThe syntax for theUse regular expressionsoption is shown inRegular expressions.NoteUse escape sequencesis implied for regular expressions.TheUse multi-line matchingoption enables multi-line regular expressions instead of single-line ones. SeeRegular expressionsfor more details on the differences between the two modes.TheUse escape sequencesoption will transform any escaped characters into their UTF-8 equivalent. For example, \t will be transformed into a tab character. Other recognized symbols are: \\, \n, \r, \uXXXX (Unicode characters).Find allTo find all matches, click on the Find All expander. This will reveal several options: In Document In Session MarkFind All In Document will show a list of matching lines in the current document in the Messages tab of the Message Window.Find All In Sessiondoes the same for all open documents.Mark will highlight all matches in the current document with a colored box. These markers can be removed by selecting the Remove Markers command from the Document menu.Change font in search dialog text fieldsAll search related dialogs use a Monospace for the text input fields to increase the readability of input text. This is useful when you are typing input such as regular expressions with spaces, periods and commas which might it hard to read with a proportional font.If you want to change the font, you can do this easily by inserting the following style into your.gtkrc-2.0(usually found in your home directory on UNIX-like systems and in the etc subdirectory of your Geany installation on Windows):style "search_style"{ font_name="Monospace 8"}widget "GeanyDialogSearch.*.GtkEntry" style:highest "search_style"Please note the addition of ":highest" in the last line which sets the priority of this style to the highest available. Otherwise, the style is ignored for the search dialogs.Find selectionTheFind Next/Previous Selectioncommands perform a search for the current selected text. If nothing is selected, by default the current word is used instead. This can be customized by thefind_selection_typepreference - seeVarious preferences.Valuefind_selection_typebehaviour

0Use the current word (default).

1Try the X selection first, then current word.

2Repeat last search.

Find usageFind Usagesearches all open files. It is similar to theFind All In Sessionoption in the Find dialog.If there is a selection, then it is used as the search text; otherwise the current word is used. The current word is either taken from the word nearest the edit cursor, or the word underneath the popup menu click position when the popup menu is used. The search results are shown in the Messages tab of the Message Window.NoteYou can also use Find Usage for symbol list items from the popup menu.Find in filesFind in Filesis a more powerful version ofFind Usagethat searches all files in a certain directory using the Grep tool. The Grep tool must be correctly set in Preferences to the path of the system's Grep utility. GNU Grep is recommended (see note below).

TheSearchfield is initially set to the current word in the editor (depending onSearchpreferences).TheFilessetting allows to choose which files are included in the search, depending on the mode:AllSearch in all files;ProjectUse the current project's patterns, seeProject properties;CustomUse custom patterns.Both project and custom patterns use a glob-style syntax, each pattern separated by a space. To search all.cand.hfiles, use:*.c *.h. Note that an empty pattern list searches in all files rather than none.TheDirectoryfield is initially set to the current document's directory, unless this field has already been edited and the current document has not changed. Otherwise, the current document's directory is prepended to the drop-down history. This can be disabled - seeSearchpreferences.TheEncodingfield can be used to define the encoding of the files to be searched. The entered search text is converted to the chosen encoding and the search results are converted back to UTF-8.TheExtra optionsfield is used to pass any additional arguments to the grep tool.NoteTheFilessetting uses--include=when searching recursively,Recurse in subfoldersuses-r; both are GNU Grep options and may not work with other Grep implementations.Filtering out version control filesWhen using theRecurse in subfoldersoption with a directory that's under version control, you can set theExtra optionsfield to filter out version control files.If you have GNU Grep >= 2.5.2 you can use the--exclude-dirargument to filter out CVS and hidden directories like.svn.Example:--exclude-dir=.svn--exclude-dir=CVSIf you have an older Grep, you can try using the--excludeflag to filter out filenames.SVN Example:--exclude=*.svn-baseThe --exclude argument only matches the file name part, not the path.ReplaceThe Replace dialog is used for replacing text in one or more open documents.

The Replace dialog has the same options for matching text as the Find dialog. See the sectionMatching options.TheUse regular expressionsoption allows regular expressions to be used in the search string and back references in the replacement text -- see the entry for '\n' inRegular expressions.Replace allTo replace several matches, click on theReplace Allexpander. This will reveal several options: In Document In Session In SelectionReplace All In Documentwill replace all matching text in the current document.Replace All In Sessiondoes the same for all open documents.Replace All In Selectionwill replace all matching text in the current selection of the current document.Go to tag definitionIf the current word or selection is the name of a tag definition (e.g. a function name) and the file containing the tag definition is open, this command will switch to that file and go to the corresponding line number. The current word is either the word nearest the edit cursor, or the word underneath the popup menu click position when the popup menu is used.NoteIf the corresponding tag is on the current line, Geany will first look for a tag declaration instead, as this is more useful. LikewiseGo to tag declarationwill search for a tag definition first in this case also.Go to tag declarationLikeGo to tag definition, but for a forward declaration such as a C function prototype orexterndeclaration instead of a function body.Go to lineGo to a particular line number in the current file.Regular expressionsYou can use regular expressions in the Find and Replace dialogs by selecting theUse regular expressionscheck box (seeMatching options). The syntax is Perl compatible. Basic syntax is described in the table below. For full details, seehttp://www.geany.org/manual/gtk/glib/glib-regex-syntax.html.By default regular expressions are matched on a line-by-line basis. If you are interested in multi-line regular expressions, matched against the whole buffer at once, see the sectionMulti-line regular expressionsbelow.Note1. TheUse escape sequencesdialog option always applies for regular expressions.2. Searching backwards with regular expressions is not supported.3. TheUse multi-line matchingdialog option to select single or multi-line matching.In a regular expression, the following characters are interpreted:.Matches any character.

(This marks the start of a region for tagging a match.

)This marks the end of a tagged region.

\nWhere n is 1 through 9 refers to the first through ninth tagged region when searching or replacing.Searching for (Wiki)\1 matches WikiWiki.If the search string was Fred([1-9])XXX and the replace string was Sam\1YYY, when applied to Fred2XXX this would generate Sam2YYY.

\0When replacing, the whole matching text.

\bThis matches a word boundary.

\cA backslash followed by d, D, s, S, w or W, becomes a character class (both inside and outside sets []). d: decimal digits D: any char except decimal digits s: whitespace (space, \t \n \r \f \v) S: any char except whitespace (see above) w: alphanumeric & underscore W: any char except alphanumeric & underscore

\xThis allows you to use a character x that would otherwise have a special meaning. For example, \[ would be interpreted as [ and not as the start of a character set. Use \\ for a literal backslash.

[...]Matches one of the characters in the set. If the first character in the set is ^, it matches the characters NOT in the set, i.e. complements the set. A shorthand S-E (start dash end) is used to specify a set of characters S up to E, inclusive.The special characters ] and - have no special meaning if they appear first in the set. - can also be last in the set. To include both, put ] first: []A-Z-].Examples:[]|-] matches these 3 chars[]-|] matches from ] to | chars[a-z] any lowercase alpha[^]-] any char except - and ][^A-Z] any char except uppercase alpha[a-zA-Z] any alpha

^This matches the start of a line (unless used inside a set, see above).

$This matches the end of a line.

*This matches 0 or more times. For example, Sa*m matches Sm, Sam, Saam, Saaam and so on.

+This matches 1 or more times. For example, Sa+m matches Sam, Saam, Saaam and so on.

?This matches 0 or 1 time(s). For example, Joh?n matches John, Jon.

NoteThis table is adapted from Scintilla and SciTE documentation, distributed under theLicense for Scintilla and SciTE.Multi-line regular expressionsNoteTheUse multi-line matchingdialog option enables multi-line regular expressions.Multi-line regular expressions work just like single-line ones but a match can span several lines.While the syntax is the same, a few practical differences applies:.Matches any character but newlines. This behavior can be changed to also match newlines using the (?s) option, seehttp://www.geany.org/manual/gtk/glib/glib-regex-syntax.html#idp5671632

[^...]A negative range (see above)willmatch newlines if they are not explicitly listed in that negative range. For example, range [^a-z] will match newlines, while range [^a-z\r\n] won't. While this is the expected behavior, it can lead to tricky problems if one doesn't think about it when writing an expression.

View menuThe View menu allows various elements of the main window to be shown or hidden, and also provides various display-related editor options.Color schemes menuThe Color schemes menu is available under theView->Editorsubmenu. It lists various color schemes for editor highlighting styles, including the default scheme first. Other items are available based on what color scheme files Geany found at startup.Color scheme files are read from theConfiguration file pathsunder thecolorschemessubdirectory. They should have the extension.conf. The default color scheme is read fromfiletypes.common.The[named_styles] sectionand[named_colors] sectionare the same as forfiletypes.common.The[theme_info]section can contain information about the theme. Thenameanddescriptionkeys are read to set the menu item text and tooltip, respectively. These keys can have translations, e.g.:key=Hellokey[de]=Hallokey[fr_FR]=BonjourTagsTags are information that relates symbols in a program with the source file location of the declaration and definition.Geany has built-in functionality for generating tag information (aka "workspace tags") for supported filetypes when you open a file. You can also have Geany automatically load external tag files (aka "global tags files") upon startup, or manually usingTools --> Load Tags.Geany uses its own tag file format, similar to whatctagsuses (but is incompatible with ctags). You use Geany to generate global tags files, as described below.Workspace tagsTags for each document are parsed whenever a file is loaded, saved or modified (seeSymbol list update frequencypreference in theEditor Completions preferences). These are shown in the Symbol list in the Sidebar. These tags are also used for autocompletion of symbols and calltips for all documents open in the current session that have the same filetype.TheGo to Tagcommands can be used with all workspace tags. SeeGo to tag definition.Global tagsGlobal tags are used to provide autocompletion of symbols and calltips without having to open the corresponding source files. This is intended for library APIs, as the tags file only has to be updated when you upgrade the library.You can load a custom global tags file in two ways: Using theLoad Tagscommand in the Tools menu. By moving or symlinking tags files to thetagssubdirectory of one of theconfiguration file pathsbefore starting Geany.You can either download these files or generate your own. They have the format:name.lang_ext.tagslang_extis one of the extensions set for the filetype associated with the tags. See the section calledFiletype extensionsfor more information.Default global tags filesFor some languages, a list of global tags is loaded when the corresponding filetype is first used. Currently these are for: C Pascal PHP HTML -- &symbol; completion, e.g. for ampersand, copyright, etc. LaTeX PythonGlobal tags file formatGlobal tags files can have three different formats: Tagmanager format Pipe-separated format CTags formatThe first line of global tags files should be a comment, introduced by#followed by a space and a string likeformat=pipe,format=ctagsorformat=tagmanagerrespectively, these are case-sensitive. This helps Geany to read the file properly. If this line is missing, Geany tries to auto-detect the used format but this might fail.The Tagmanager format is a bit more complex and is used for files created by thegeany-gcommand. There is one tag per line. Different tag attributes like the return value or the argument list are separated with different characters indicating the type of the following argument. This is the more complete and recommended tag format.Pipe-separated formatThe Pipe-separated format is easier to read and write. There is one tag per line and different tag attributes are separated by the pipe character (|). A line looks like:basename|string|(string path [, string suffix])|The first field is the tag name (usually a function name).The second field is the type of the return value.The third field is the argument list for this tag.The fourth field is the description for this tag but currently unused and should be left empty.Except for the first field (tag name), all other field can be left empty but the pipe separator must appear for them.You can easily write your own global tag files using this format. Just save them in your tags directory, as described earlier in the sectionGlobal tags.CTags formatThis is the format that ctags generates, and that is used by Vim. This format is compatible with the format historically used by Vi.The format is described athttp://ctags.sourceforge.net/FORMAT, but for the full list of existing extensions please refer to ctags. However, note that Geany may actually only honor a subset of the existing extensions.Generating a global tags fileYou can generate your own global tags files by parsing a list of source files. The command is:geany -g [-P] Tag File filename should be in the format described earlier -- see the section calledGlobal tags. File list is a list of filenames, each with a full path (unless you are generating C/C++ tags and have set the CFLAGS environment variable appropriately). -Por--no-preprocessingdisables using the C pre-processor to process#includedirectives for C/C++ source files. Use this option if you want to specify each source file on the command-line instead of using a 'master' header file. Also can be useful if you don't want to specify the CFLAGS environment variable.Example for the wxD library for the D programming language:geany -g wxd.d.tags /home/username/wxd/wx/*.dGenerating C/C++ tag filesYou may need to first setup theC ignore.tagsfile.For C/C++ tag files gcc is required by default, so that header files can be preprocessed to include any other headers they depend upon. If you do not want this, use the-Poption described above.For preprocessing, the environment variable CFLAGS should be set with appropriate-I/pathinclude paths. The following example works with the bash shell, generating tags for the GnomeUI library:CFLAGS=`pkg-config --cflags libgnomeui-2.0` geany -g gnomeui.c.tags \/usr/include/libgnomeui-2.0/gnome.hYou can adapt this command to use CFLAGS and header files appropriate for whichever libraries you want.Generating tag files on WindowsThis works basically the same as on other platforms:"c:\program files\geany\bin\geany" -g c:\mytags.php.tags c:\code\somefile.phpC ignore.tagsYou can ignore certain tags for C-based languages if they would lead to wrong parsing of the code. Use theTools->Configuration Files->ignore.tagsmenu item to open the userignore.tagsfile. See alsoConfiguration file paths.List all tag names you want to ignore in this file, separated by spaces and/or newlines.Example:G_GNUC_NULL_TERMINATEDG_GNUC_PRINTFG_GNUC_WARN_UNUSED_RESULTThis will parse code like:gchar **utils_strv_new(const gchar *first,...)G_GNUC_NULL_TERMINATED;More detailed information about ignore tags usage from the Exuberant Ctags manual page:Specifies a list of identifiers which are to be specially handled while parsing C and C++ source files. This option is specifically provided to handle special cases arising through the use of pre-processor macros. When the identifiers listed are simple identifiers, these identifiers will be ignored during parsing of the source files. If an identifier is suffixed with a '+' character, ctags will also ignore any parenthesis-enclosed argument list which may immediately follow the identifier in the source files. If two identifiers are separated with the '=' character, the first identifiers is replaced by the second identifiers for parsing purposes.For even more detailed information please read the manual page of Exuberant Ctags.Geany extends Ctags with a '*' character suffix - this means use prefix matching, e.g. G_GNUC_* will match G_GNUC_NULL_TERMINATED, etc. Note that prefix match items should be put after other items to ensure that items like G_GNUC_PRINTF+ get parsed correctly.PreferencesYou may adjust Geany's settings using the Edit --> Preferences dialog. Any changes you make there can be applied by hitting either the Apply or the OK button. These settings will persist between Geany sessions. Note that most settings here have descriptive popup bubble help -- just hover the mouse over the item in question to get help on it.You may also adjust some View settings (under the View menu) that persist between Geany sessions. The settings under the Document menu, however, are only for the current document and revert to defaults when restarting Geany.NoteIn the paragraphs that follow, the text describing a dialog tab comes after the screenshot of that tab.General Startup preferences

StartupLoad files from the last sessionOn startup, load the same files you had open the last time you used Geany.Load virtual terminal supportLoad the library for running a terminal in the message window area.Enable plugin supportAllow plugins to be used in Geany.ShutdownSave window position and geometrySave the current position and size of the main window so next time you open Geany it's in the same location.Confirm ExitHave a dialog pop up to confirm that you really want to quit Geany.PathsStartup pathPath to start in when opening or saving files. It must be an absolute path.Project filesPath to start in when opening project files.Extra plugin pathBy default Geany looks in the system installation and the user configuration - seePlugins. In addition the path entered here will be searched. Usually you do not need to set an additional path to search for plugins. It might be useful when Geany is installed on a multi-user machine and additional plugins are available in a common location for all users. Leave blank to not set an additional lookup path.General Miscellaneous preferences

MiscellaneousBeep on errors when compilation has finishedHave the computer make a beeping sound when compilation of your program has completed or any errors occurred.Switch status message list at new messageSwitch to the status message tab (in the notebook window at the bottom) once a new status message arrives.Suppress status messages in the status barRemove all messages from the status bar. The messages are still displayed in the status messages window.TipAnother option is to use theSwitch to Editorkeybinding - it reshows the document statistics on the status bar. SeeFocus keybindings.Use Windows File Open/Save dialogsDefines whether to use the native Windows File Open/Save dialogs or whether to use the GTK default dialogs.Auto-focus widgets (focus follows mouse)Give the focus automatically to widgets below the mouse cursor. This works for the main editor widget, the scribble, the toolbar search field goto line fields and the VTE.SearchAlways wrap searchAlways wrap search around the document when finding a match.Hide the Find dialogHide theFinddialog after clicking Find Next/Previous.Use the current word under the cursor for Find dialogsUse current word under the cursor when opening the Find, Find in Files or Replace dialog and there is no selection. When this option is disabled, the search term last used in the appropriate Find dialog is used.Use the current file's directory for Find in FilesWhen opening the Find in Files dialog, set the directory to search to the directory of the current active file. When this option is disabled, the directory of the last use of the Find in Files dialog is used. SeeFind in Filesfor details.ProjectsUse project-based session filesSave your current session when closing projects. You will be able to resume different project sessions, automatically opening the files you had open previously.Store project file inside the project base directoryWhen creating new projects, the default path for the project file contains the project base path. Without this option enabled, the default project file path is one level above the project base path. In either case, you can easily set the final project file path in theNew Projectdialog. This option provides the more common defaults automatically for convenience.Interface preferences

SidebarShow sidebarWhether to show the sidebar at all.Show symbol listShow the list of functions, variables, and other information in the current document you are editing.Show documents listShow all the documents you have open currently. This can be used to change between documents (seeSwitching between documents) and to perform some common operations such as saving, closing and reloading.PositionWhether to place the sidebar on the left or right of the editor window.Message windowPositionWhether to place the message window on the bottom or right of the editor window.FontsEditorChange the font used to display documents.Symbol listChange the font used for the Symbols sidebar tab.Message windowChange the font used for the message window area.MiscellaneousShow status barShow the status bar at the bottom of the main window. It gives information about the file you are editing like the line and column you are on, whether any modifications were done, the file encoding, the filetype and other information.Interface Notebook tab preferences

Editor tabsShow editor tabsShow a notebook tab for all documents so you can switch between them using the mouse (instead of using the Documents window).Show close buttonsMake each tab show a close button so you can easily close open documents.Placement of new file tabsWhether to create a document with its notebook tab to the left or right of all existing tabs.Next to currentWhether to place file tabs next to the current tab rather than at the edges of the notebook.Double-clicking hides all additional widgetsWhether to call the View->Toggle All Additional Widgets command when double-clicking on a notebook tab.Tab positionsEditorSet the positioning of the editor's notebook tabs to the right, left, top, or bottom of the editing window.SidebarSet the positioning of the sidebar's notebook tabs to the right, left, top, or bottom of the sidebar window.Message windowSet the positioning of the message window's notebook tabs to the right, left, top, or bottom of the message window.Interface Toolbar preferencesAffects the main toolbar underneath the menu bar.

ToolbarShow ToolbarWhether to show the toolbar.Append Toolbar to the MenuAllows to append the toolbar to the main menu bar instead of placing it below. This is useful to save vertical space.Customize ToolbarSeeCustomizing the toolbar.AppearanceIcon StyleSelect the toolbar icon style to use - either icons and text, just icons or just text. The choice System default uses whatever icon style is set by GTK.Icon sizeSelect the size of the icons you see (large, small or very small). The choice System default uses whatever icon size is set by GTK.Editor Features preferences

FeaturesLine wrappingShow long lines wrapped around to new display lines."Smart" home keyWhether to move the cursor to the first non-whitespace character on the line when you hit the home key on your keyboard. Pressing it again will go to the very start of the line.Disable Drag and DropDo not allow the dragging and dropping of selected text in documents.Code foldingAllow groups of lines in a document to be collapsed for easier navigation/editing.Fold/Unfold all children of a fold pointWhether to fold/unfold all child fold points when a parent line is folded.Use indicators to show compile errorsUnderline lines with compile errors using red squiggles to indicate them in the editor area.Newline strips trailing spacesRemove any whitespace at the end of the line when you hit the Enter/Return key. See alsoStrip trailing spaces. Note auto indentation is calculated before stripping, so although this setting will clear a blank line, it will not set the next line indentation back to zero.Line breaking columnThe editor column number to insert a newline at when Line Breaking is enabled for the current document.Comment toggle markerA string which is added when toggling a line comment in a source file. It is used to mark the comment as toggled.Editor Indentation preferences

Indentation groupSeeIndentationfor more information.WidthThe width of a single indent size in spaces. By default the indent size is equivalent to 4 spaces.Detect width from fileTry to detect and set the indent width based on file content, when a file is opened.TypeWhen Geany inserts indentation, whether to use: Just Tabs Just Spaces Tabs and Spaces, depending on how much indentation is on a lineTheTabs and Spacesindent type is also known asSoft tab supportin some other editors.Detect type from fileTry to detect and set the indent type based on file content, when a file is opened.Auto-indent modeThe type of auto-indentation you wish to use after pressing Enter, if any.BasicJust add the indentation of the previous line.Current charsAdd indentation based on the current filetype and any characters at the end of the line such as{,}for C,:for Python.Match bracesLikeCurrent charsbut for C-like languages, make a closing}brace line up with the matching opening brace.Tab key indentsIf set, pressing tab will indent the current line or selection, and unindent when pressing Shift-tab. Otherwise, the tab key will insert a tab character into the document (which can be different from indentation, depending on the indent type).NoteThere are also separate configurable keybindings for indent & unindent, but this preference allows the tab key to have different meanings in different contexts - e.g. for snippet completion.Editor Completions preferences

CompletionsSnippet CompletionWhether to replace special keywords after typing Tab into a pre-defined text snippet. SeeUser-definable snippets.XML/HTML tag auto-closingWhen you open an XML/HTML tag automatically generate its completion tag.Automatic continuation multi-line commentsContinue automatically multi-line comments in languages like C, C++ and Java when a new line is entered inside such a comment. With this option enabled, Geany will insert a*on every new line inside a multi-line comment, for example when you press return in the following C code:/* * This is a C multi-line comment, press then Geany would insert:*on the next line with the correct indentation based on the previous line, as long as the multi-line is not closed by*/.Autocomplete symbolsWhen you start to type a symbol name, look for the full string to allow it to be completed for you.Autocomplete all words in documentWhen you start to type a word, Geany will search the whole document for words starting with the typed part to complete it, assuming there are no tag names to show.Drop rest of word on completionRemove any word part to the right of the cursor when choosing a completion list item.Characters to type for autocompletionNumber of characters of a word to type before autocompletion is displayed.Completion list heightThe number of rows to display for the autocompletion window.Max. symbol name suggestionsThe maximum number of items in the autocompletion list.Symbol list update frequencyThe minimum delay (in milliseconds) between two symbol list updates.This option determines how frequently the tag list is updated for the current document. The smaller the delay, the more up-to-date the symbol list (and then the completions); but rebuilding the symbol list has a cost in performance, especially with large files.The default value is 250ms, which means the symbol list will be updated at most four times per second, even if the document changes continuously.A value of 0 disables automatic updates, so the symbol list will only be updated upon document saving.Auto-close quotes and bracketsGeany can automatically insert a closing bracket and quote characters when you open them. For instance, you type a(and Geany will automatically insert). With the following options, you can define for which characters this should work.Parenthesis ( )Auto-close parenthesis when typing an opening oneCurly brackets { }Auto-close curly brackets (braces) when typing an opening oneSquare brackets [ ]Auto-close square brackets when typing an opening oneSingle quotes ' 'Auto-close single quotes when typing an opening oneDouble quotes " "Auto-close double quotes when typing an opening oneEditor Display preferencesThis is for visual elements displayed in the editor window.

DisplayInvert syntax highlighting colorsInvert all colors, by default this makes white text on a black background.Show indendation guidesShow vertical lines to help show how much leading indentation there is on each line.Show whitespacesMark all tabs with an arrow "-->" symbol and spaces with dots to show which kinds of whitespace are used.Show line endingsDisplay a symbol everywhere that a carriage return or line feed is present.Show line numbersShow or hide the Line Number margin.Show markers marginShow or hide the small margin right of the line numbers, which is used to mark lines.Stop scrolling at last lineWhen enabled Geany stops scrolling when at the last line of the document. Otherwise you can scroll one more page even if there are no real lines.Long line markerThe long line marker helps to indicate overly-long lines, or as a hint to the user for when to break the line.TypeLineShow a thin vertical line in the editor window at the given column position.BackgroundChange the background color of characters after the given column position to the color set below. (This is recommended over theLinesetting if you use proportional fonts).DisabledDon't mark long lines at all.Long line markerSet this value to a value greater than zero to specify the column where it should appear.Long line marker colorSet the color of the long line marker.Virtual spacesVirtual space is space beyond the end of each line. The cursor may be moved into virtual space but no real space will be added to the document until there is some text typed or some other text insertion command is used.DisabledDo not show virtual spacesOnly for rectangular selectionsOnly show virtual spaces beyond the end of lines when drawing a rectangular selectionAlwaysAlways show virtual spaces beyond the end of linesFiles preferences

New filesOpen new documents from the command-lineWhether to create new documents when passing filenames that don't exist from the command-line.Default encoding (new files)The type of file encoding you wish to use when creating files.Used fixed encoding when opening filesAssume all files you are opening are using the type of encoding specified below.Default encoding (existing files)Opens all files with the specified encoding instead of auto-detecting it. Use this option when it's not possible for Geany to detect the exact encoding.Default end of line charactersThe end of line characters to which should be used for new files. On Windows systems, you generally want to use CR/LF which are the common characters to mark line breaks. On Unix-like systems, LF is default and CR is used on MAC systems.Saving filesPerform formatting operations when a document is saved. These can each be undone with the Undo command.Ensure newline at file endAdd a newline at the end of the document if one is missing.Ensure consistent line endingsEnsures that newline characters always get converted before saving, avoiding mixed line endings in the same file.Strip trailing spacesRemove any whitespace at the end of each document line.NoteThis does not apply to Diff documents, e.g. patch files.Replace tabs with spacesReplace all tabs in the document with the equivalent number of spaces.NoteIt is better to use spaces to indent than use this preference - seeIndentation.MiscellaneousRecent files list lengthThe number of files to remember in the recently used files list.Disk check timeoutThe number of seconds to periodically check the current document's file on disk in case it has changed. Setting it to 0 will disable this feature.NoteThese checks are only performed on local files. Remote files are not checked for changes due to performance issues (remote files are files in~/.gvfs/).Tools preferences

Tool pathsTerminalThe command to execute a script in a terminal. Occurrences of %c in the command are substituted with the run script name, seeTerminal emulators.BrowserThe location of your web browser executable.GrepThe location of the grep executable.NoteFor Windows users: at the time of writing it is recommended to use the grep.exe from the UnxUtils project (http://sourceforge.net/projects/unxutils). The grep.exe from the Mingw project for instance might not work with Geany at the moment.CommandsContext actionSet this to a command to execute on the current word. You can use the "%s" wildcard to pass the current word below the cursor to the specified command.Template preferencesThis data is used as meta data for various template text to insert into a document, such as the file header. You only need to set fields that you want to use in your template files.

Template dataDeveloperThe name of the developer who will be creating files.InitialsThe initials of the developer.Mail addressThe email address of the developer.NoteYou may wish to add anti-spam markup, e.g.namesiteext.CompanyThe company the developer is working for.Initial versionThe initial version of files you will be creating.YearSpecify a format for the {year} wildcard. You can use any conversion specifiers which can be used with the ANSI C strftime function. For details please seehttp://man.cx/strftime.DateSpecify a format for the {date} wildcard. You can use any conversion specifiers which can be used with the ANSI C strftime function. For details please seehttp://man.cx/strftime.Date & TimeSpecify a format for the {datetime} wildcard. You can use any conversion specifiers which can be used with the ANSI C strftime function. For details please seehttp://man.cx/strftime.Keybinding preferences

There are some commands listed in the keybinding dialog that are not, by default, bound to a key combination, and may not be available as a menu item.NoteFor more information see the sectionKeybindings.Printing preferences

Use external command for printingUse a system command to print your file out.Use native GTK printingLet the GTK GUI toolkit handle your print request.Print line numbersPrint the line numbers on the left of your paper.Print page numberPrint the page number on the bottom right of your paper.Print page headerPrint a header on every page that is sent to the printer.Use base name of the printed fileDon't use the entire path for the header, only the filename.Date formatHow the date should be printed. You can use the same format specifiers as in the ANSI C function strftime(). For details please seehttp://man.cx/strftime.Various preferences

Rarely used preferences, explained in the table below. A few of them require restart to take effect, and a few other will only affect newly opened or created documents before restart.KeyDescriptionDefaultApplies

Editor related

use_gtk_word_boundariesWhether to look for the end of a word when using word-boundary related Scintilla commands (seeScintilla keyboard commands).trueto new documents

brace_match_ltgtWhether to highlight angle brackets.falseimmediately

complete_snippets_whilst_editingWhether to allow completion of snippets when editing an existing line (i.e. there is some text after the current cursor position on the line). Only used when the keybindingComplete snippetis set toSpace.falseimmediately

show_editor_scrollbarsWhether to display scrollbars. If set to false, the horizontal and vertical scrollbars are hidden completely.trueimmediately

indent_hard_tab_widthThe size of a tab character. Don't change it unless you really need to; use the indentation settings instead.8immediately

Interface related

show_symbol_list_expandersWhether to show or hide the small expander icons on the symbol list treeview.trueto new documents

allow_always_saveWhether files can be saved always, even if they don't have any changes. By default, the Save button and menu item are disabled when a file is unchanged. When setting this option to true, the Save button and menu item are always active and files can be saved.falseimmediately

compiler_tab_autoscrollWhether to automatically scroll to the last line of the output in the Compiler tab.trueimmediately

statusbar_templateThe status bar statistics line format. (SeeStatusbar Templatesfor details).See below.immediately

new_document_after_closeWhether to open a new document after all documents have been closed.falseimmediately

msgwin_status_visibleWhether to show the Status tab in the Messages Windowtrueimmediately

msgwin_compiler_visibleWhether to show the Compiler tab in the Messages Windowtrueimmediately

msgwin_messages_visibleWhether to show the Messages tab in the Messages Windowtrueimmediately

msgwin_scribble_visibleWhether to show the Scribble tab in the Messages Windowtrueimmediately

VTE related

emulationTerminal emulation mode. Only change this if you have VTE termcap files other thanvte/termcap/xterm.xtermimmediately

send_selection_unsafeBy default, Geany strips any trailing newline characters from the current selection before sending it to the terminal to not execute arbitrary code. This is mainly a security feature. If, for whatever reasons, you really want it to be executed directly, set this option to true.falseimmediately

send_cmd_prefixString with which prefix the commands sent to the shell. This may be used to tell some shells (BASH withHISTCONTROLset toignorespace, ZSH withHIST_IGNORE_SPACEenabled, etc.) from putting these commands in their history by setting this to a space. Note that leading spaces must be escaped usingsin the configuration file.Emptyimmediately

File related

use_atomic_file_savingDefines the mode how Geany saves files to disk. If disabled, Geany directly writes the content of the document to disk. This might cause loss of data when there is no more free space on disk to save the file. When set to true, Geany first saves the contents into a temporary file and if this succeeded, the temporary file is moved to the real file to save. This gives better error checking in case of no more free disk space. But it also destroys hard links of the original file and its permissions (e.g. executable flags are reset). Use this with care as it can break things seriously. The better approach would be to ensure your disk won't run out of free space.falseimmediately

use_gio_unsafe_file_savingWhether to use GIO as the unsafe file saving backend. It is better on most situations but is known not to work correctly on some complex setups.trueimmediately

gio_unsafe_save_backupMake a backup when using GIO unsafe file saving. Backup is namedfilename~.falseimmediately

keep_edit_history_on_reloadWhether to maintain the edit history when reloading a file, and allow the operation to be reverted.trueimmediately

Filetype related

extract_filetype_regexRegex to extract filetype name from file via capture group one.See below.immediately

Search related

find_selection_typeSeeFind selection.0immediately

Replace related

replace_and_find_by_defaultSetReplace & Findbutton as default so it will be activated when the Enter key is pressed while one of the text fields has focus.trueimmediately

Build Menu related

number_ft_menu_itemsThe maximum number of menu items in the filetype section of the Build menu.2on restart

number_non_ft_menu_itemsThe maximum number of menu items in the independent section of the Build menu.3on restart

number_exec_menu_itemsThe maximum number of menu items in the execute section of the Build menu.2on restart

The extract_filetype_regex has the default value GEANY_DEFAULT_FILETYPE_REGEX.Statusbar TemplatesThe default statusbar template is (note\t= tab):line: %l / %L\t col: %c\t sel: %s\t %w %t %mmode: %M encoding: %e filetype: %f scope: %SSettings the preference to an empty string will also cause Geany to use this internal default.The following format characters are available for the statusbar template:PlaceholderDescription

%lThe current line number starting at 1

%LThe total number of lines

%cThe current column number starting at 0, including virtual space.

%CThe current column number starting at 1, including virtual space.

%sThe number of selected characters or if only whole lines selected, the number of selected lines.

%nThe number of selected characters, even if only whole lines are selected.

%wShowsROwhen the document is in read-only mode, otherwise shows whether the editor is in overtype (OVR) or insert (INS) mode.

%tShows the indentation mode, either tabs (TAB), spaces (SP) or both (T/S).

%mShows whether the document is modified (MOD) or nothing.

%MThe name of the document's line-endings (ex.Unix (LF))

%eThe name of the document's encoding (ex. UTF-8).

%fThe filetype of the document (ex. None, Python, C, etc).

%SThe name of the scope where the caret is located.

%pThe caret position in the entire document starting at 0.

%rShows whether the document is read-only (RO) or nothing.

%YThe Scintilla style number at the caret position. This is useful if you're debugging color schemes or related code.

Terminal (VTE) preferencesSee also:Virtual terminal emulator widget (VTE).

Terminal widgetTerminal fontSelect the font that will be used in the terminal emulation control.Foreground colorSelect the font color.Background colorSelect the background color of the terminal.Background imageSelect the background image to show behind the terminal's text.Scrollback linesThe number of lines buffered so that you can scroll though the history.ShellThe location of the shell on your system.Scroll on keystrokeScroll the terminal to the prompt line when pressing a key.Scroll on outputScroll the output down.Cursor blinksLet the terminal cursor blink.Override Geany keybindingsAllow the VTE to receive keyboard shortcuts (apart from focus commands).Disable menu shortcut key (F10 by default)Disable the menu shortcut when you are in the virtual terminal.Follow path of the current fileMake the path of the terminal change according to the path of the current file.Execute programs in VTEExecute programs in the virtual terminal instead of using the external terminal tool. Note that if you run multiple execute commands at once the output may become mixed together in the VTE.Don't use run scriptDon't use the simple run script which is usually used to display the exit status of the executed program. This can be useful if you already have a program running in the VTE like a Python console (e.g. ipython). Use this with care.Project managementProject management is optional in Geany. Currently it can be used for: Storing and opening session files on a project basis. Overriding default settings with project equivalents. Configuring the Build menu on a project basis.A list of session files can be stored and opened with the project when theUse project-based session filespreference is enabled, in theProjectsgroup of theGeneral Miscellaneous preferencestab of thePreferencesdialog.As long as a project is open, the Build menu will use the items defined in project's settings, instead of the defaults. SeeBuild Menu Configurationfor information on configuring the menu.The current project's settings are saved when it is closed, or when Geany is shutdown. When restarting Geany, the previously opened project file that was in use at the end of the last session will be reopened.The project menu items are detailed below.New projectTo create a new project, fill in theNamefield. By default this will setu