Lua Scripts

Cleanup MRU List

Detects files in the MRU listings which do not exist anymore by scanning the Geany configuration. Note you may not run it when Geany is running.

Author: Guenther Brunthaler


Geany Mktags

Solves the problem that “geany -g” can only create tag files for one language at a time, but there may be multiple source code languages present in a project. This script runs “geany -g” with the correct parameters to generate tag files for all supported languages for the source files encountered in the current directory tree.

Author: Guenther Brunthaler


Compare files

Compares the current file to any open file using an external tool (Meld, Kompare, KDiff, etc, falling back to plain diff). If the current file is unsaved, then a snapshot is saved to a temporary file, so it is possible to compare unsaved changes to other files (or even compare to the saved version of the file).

The intent of this script is to provide a replacement for the Notepad++ Compare plugin.

Author: Carl Antuar



  • Changed to use io.popen to retrieve command output, instead of piping to temporary file.


  • Show full path of current file, to assist in comparing files with the same name.

Hex edit

Allows hex editing of binary files. This creates a 'shadow' file containing the hexadecimal representation of the file, and synchronises with the original when the shadow is saved.

The intent of this script is to provide a replacement for the Notepad++ Hex Editor plugin.

Author: Carl Antuar

hexedit.lua events/saved.lua

Snap open

Quickly open files in the current project by typing all or part of the filename.

Author: Carl Antuar


Review SVN changes

Review the changes made in SVN revisions. This is intended as a companion to the GeanyVC plugin.

Author: Carl Antuar



  • Include commit comments when choosing revision;
  • Add 'quick scan' option for choosing only the most recent commits;
  • Add support for graphical diff viewers.


  • Replace 'quick scan' and 'full scan' with progressive disclosure of scan results;
  • Add 'all changes since revision' option.


  • Consolidate choices into custom preferences dialog.


  • Rearranged to show revision list before choosing the revision range type;
  • Fixed 'Show more' handling for multiline commit messages.


  • Allow selection of ending revision;
  • Fix revision list width.

Multi-clipboard support

Use multiple clipboards for copying and pasting text.

Suggested usage is to add both scripts to hotkeys.cfg, then attach the 'copy' script to Ctrl+c (because the script also copies to the regular clipboard) and the 'paste' script to Ctrl+Shift+V.

Author: Carl Antuar



  • Fixed filename matching to handle dots in filename properly.



  • Sorted clipboards by modification date (newest first);
  • Fixed retrieval of line breaks from clipboard files;
  • Add pasted text to regular clipboard to make multiple pastes easier.


Surround selected text

Surround the selected text with brackets, braces, XML tags, etc.

Author: Carl Antuar



  • Add double quotes to list of surrounds.

Delete duplicate lines

Delete duplicate lines from the current file.

Author: Carl Antuar


Vim keybindings

Provides a subset of Vim keybindings.

Author: Carl Antuar


Alternative word navigation

Geany treats all punctuation as whitespace, with the result that punctuation surrounded by whitespace is totally skipped. Often, this is too greedy. These scripts provide Vim-style word navigation instead. The idea is to bind them to the appropriate keys (Ctrl+right etc), by adding the filenames to hotkeys.cfg and then setting them via the usual Geany preferences dialog.

Author: Carl Antuar

ctrl-right.lua ctrl-shift-right.lua ctrl-left.lua ctrl-shift-left.lua

Find project file extensions

Quickly identify all file extensions used in the current project. Useful for setting the list of recognised file types in a new project.


Format document on save

This file is more a framework to write your own cli calls to format the current file upon save. There are a few hacks to get around the issue of a possible infinite loop (since the workflow is save → format document → save), but everything is heavily commented for your ease of use. Please note you will need to save this file under the reserved …/geanylua/events/saved.lua filename.