From my Notebook >

Seed7 Programming Language Configuration for the Geany Text Editor

If you’re working with Seed7 and like to keep your development environment lean, here’s a quick setup for using Geany as your IDE, with basic syntax highlighting, compile/run commands, and clickable errors for debugging.

(Please note that this is considered suitable at a basic level. It may be improved in the future, but for now it’s way better than not having Geany support the language at all.)

Files to Install

filetypes.Seed7.conf

This file (filetypes.Seed7.conf) usually goes in `~/.config/geany/filedefs/` in Linux:

# Seed7 Geany Conf - Marc Carson 2025 - Public Domain - Very hastily created 0.1
# https://www.friendlyskies.net/
# This usually goes in ~/.config/geany/filedefs/
# 
# NOTE: Error Regex feature
# In case the error_regex below doesn't automatically work...
# If you want more of a first-class experience in Geany, add this:
# In: Build > Set Build Commands > Seed7 Commands > Error regular expression:
# ([^\s()]+)\((\d+)\):(\d+):
# (Remove the pound sign / hash tag and space at the start!!)
# ...that should give you clickable errors and arrows in the margins.
# Note that Geany will also update the below config automatically with that regex if this file is in your user conf folder.

[settings]
extension=sd7
lexer_filetype=Python
comment_single=#
comment_use_indent=true
preprocessor_symbol=$

[keywords]
keywords=if then else elsif case when of for while repeat until loop break next return procedure function type var const begin end is do in out ref mod div and or not xor func proc
keywords2=boolean integer bigInteger rational bigRational float complex char string array hash set struct enumeration bin64 bin32 bstring color time duration file text fileSys database sqlStatement process category reference ref_list structElement program ptr func varfunc void proc type object expr TRUE FALSE NIL
identifiers=writeln write readln read input flush truncToSecond await getch putch open close seek tell eof SECONDS NOW OUT KEYBOARD $include include

[styling]
default=default
comment=comment
string=string
character=character
number=number
operator=operator
identifier=identifier_1
word=keyword_1
word2=keyword_2
word3=keyword_3
preprocessor=preprocessor
error=error

[indentation]
width=2
type=0

[build-menu]
# %f = full filename, %e = filename without extension

FT_00_LB=_Compile
FT_00_CM=s7c "%f"
FT_00_WD=

EX_00_LB=_Run
EX_00_CM="./%e"
EX_00_WD=
FT_02_LB=
FT_02_CM=
FT_02_WD=
# error_regex is wild to try to guess at, UNLESS you first enter it in the Set build commands GUI area...it will then update this file by itself. lmao. 2 hours later...
error_regex=([^\\s()]+)\\((\\d+)\\):

# Optional: if you have a linter or syntax checker...
# IDK if Seed7 has that...
# FT_01_LB=_Check
# FT_01_CM=s7c --check "%f"
# FT_01_WD=

filetype_extensions.conf

filetype_extensions.conf (goes in `~/.config/geany/`):

[Extensions]
Seed7=*.sd7;*.s7i;

[Groups]
Programming=Seed7;

mcshades.conf

MC Shades color scheme, mcshades.conf (goes in `~/.config/geany/colorschemes/`):

[theme_info]
name=MC Shades
description=The future is so cyberpunk that you'll still need plain text
version=1337
author=Marc Carson <marcc@friendlyskies.net>
url=https://www.friendlyskies.net/
compat=1.22;1.23;1.23.1;1.24;1.33;2.0

[named_styles]

# Base text colors
default=#fefefe;#2B2B45;false;false
error=#ffffff;#cc0000

# Editor UX
selection=#fce8e8;#4f3b80;true;true
current_line=#eeeeee;#12126d;false
brace_good=#eeeeee;#303080;true;false
brace_bad=#ffffff;#ff0033;true;false
margin_line_number=#888;#1e1e2e
margin_folding=#eee;#1a1a2a
fold_symbol_highlight=#442255
indent_guide=#31316a
caret=#ffe700;#000;false
marker_line=#000;#ff0
marker_search=#000;#00f
marker_mark=#000;#b8f4b8
call_tips=#dddddd;#2b2b2b;false;false
white_space=#3636a3;#2b2b45;true;false

comment=#87cfdc
comment_doc=#73ffd2
comment_line=comment
comment_line_doc=comment_doc
comment_doc_keyword=comment_doc,bold
comment_doc_keyword_error=comment_doc,italic

keyword=#f093bb
keyword_1=keyword
keyword_2=#ffbb66
keyword_3=#ffeeaa
keyword_4=#cfa6ff

number=#ff8844
number_1=number
number_2=#ffaa88

string=#aabbff
string_1=string
string_2=#ffcc88
string_3=#aaaacc
string_4=#aaffaa
string_eol=#000000;#e0c0e0
character=#ffcc88

identifier=#e0ffe0
identifier_1=#eeaaff
identifier_2=#fbe09e
identifier_3=#e6ffe6
identifier_4=#e0cfff

operator=#ffbb88
label=#ff99ff,bold
preprocessor=#ffb400
asm=type
function=#c3e8f5
class=#e9fffc
parameter=#f99
regex=#2f7f7f
decorator=#a0ffb0,bold
other=#ffbb88

attribute=#c1ffff
attribute_unknown=#ffcccc
value=string_1
entity=default

line_added=#008b8b
line_removed=#6a5acd
line_changed=preprocessor

Confirmed Working

  • Auto-recognize file type of Seed7 programs & libraries
  • Basic syntax highlighting
  • Compile from within Geany (F8 key)
  • Click an error to get interactive debugging (screenshot-worthy)
  • Run compiled code from within Geany (F5 key)

—-

My Konsole Terminal Config

If you want a cleaner run window when hitting F5, you can use Konsole instead of `x11term`.
Go to: Edit → Preferences → Tools → Terminal and set:

konsole --noclose -e bash %c

—-

Not Tested / Working

  • Linting / beautify
  • Snippets: These could be easy to add (e.g., typing `mf` + tab for a const proc/local/begin/end func block)
  • Other enhancements

This is pretty basic for now, but it’s on par with my FreeBASIC Geany setup, and that’s practically first-class support in Geany.