S铆mbolos y etiquetas¶
Al abrir un archivo, Geany determina su tipo en base al sufijo que lleve el nombre. Por ejemplo, los programas en lenguaje C son detectados porque llevan la extensi贸n .c
Si se trata de un fichero cuyo tipo est谩 contemplado por el editor, se analizar谩 su contenido para extraer la informaci贸n de s铆mbolos, que luego se muestran en el panel lateral, en la pesta帽a S铆mbolos.
La informaci贸n sobre s铆mbolos tambi茅n se usa para el autocompletado y para mostrar informaci贸n emergente:

Otra utilidad de los s铆mbolos son los comandos Buscar > Ir a la definici贸n/declaraci贸n del s铆mbolo. Estos comandos se pueden usar con todos los s铆mbolos de los documentos abiertos.
Pero esto plantea un problema. 驴Que pasa si queremos ayuda sobre una funci贸n de biblioteca?. Por ejemplo, en un programa Python:
print("Hola")
... la palabra print no es un s铆mbolo que hayamos definido en nuestro programa, sino que forma parte de la biblioteca Python. Necesitar铆amos que Geany abra el texto fuente de esa biblioteca, analice las funciones est谩ndar, como print() y prepare informaci贸n sobre esos s铆mbolos.
La soluci贸n es poner dicha informaci贸n en un archivo especial que contenga definiciones de s铆mbolos (tambi茅n conocido como "archivos de etiquetas globales"). Estos archivos se pueden configurar para que se carguen manualmente, o de forma autom谩tica, al iniciar Geany.
Archivos de etiquetas globales¶
Los archivos de etiquetas globales se utilizan para proporcionar s铆mbolos para el autocompletado y consejos de llamada sin tener que abrir los archivos fuente que contienen estos s铆mbolos. Podemos abrir un archivo de etiquetas globales personalizado de dos maneras:
- Usando el comando Cargar archivo de etiquetas en el men煤 Herramientas.
- Moviendo (o creando un enlace) nuestros archivos de etiquetas al subdirectorio donde se guardan los archivos de configuraci贸n de Geany.
Podemos descargar estos archivos o generar los nuestros propios. Se identifican porque su nombre sigue el formato:
nombre.lenguaje.tags
...siendo "lenguaje" una de las extensiones establecidas. Algunos archivos de etiquetas globales se distribuyen con Geany y se cargar谩n autom谩ticamente cuando se utilice por primera vez el tipo de archivo correspondiente.
驴Como localizar estos archivos? Vamos a averiguarlo. Comenzamos por pulsar en el men煤 Ayuda > Mensajes de depuraci贸n. Al comienzo de la lista de mensajes tenemos algo as铆 como:
Geany INFO : Geany 2.0
Geany INFO : GTK 3.24.49, GLib 2.84.1
Geany INFO : OS: Ubuntu 25.04
Geany INFO : System data dir: /usr/share/geany
Geany INFO : User config dir: /home/usuario/.config
Con esto, ya sabemos donde se encuentran los directorios con ficheros de configuraci贸n de Geany. Seguidamente acudimos a un terminal de comandos del sistema operativo (o a la emulaci贸n VTE de Geany) y ejecutamos un comando para buscar ficheros con extensi贸n .tags:
$ ls /usr/share/geany/tags/*.tags -1
/usr/share/geany/tags/entities.html.tags
/usr/share/geany/tags/std99.c.tags
/usr/share/geany/tags/std.pas.tags
/usr/share/geany/tags/std.php.tags
/usr/share/geany/tags/std.py.tags
Vemos que tenemos archivos de etiquetas para los lenguajes:
- HTML
- C99
- Pascal
- PHP
- Python
Si abrimos alguno de esos ficheros (por ejemplo, el de Python, std.py.tags) veremos que contiene cientos (e incluso miles) de definiciones de funciones y otros s铆mbolos. Supongamos que buscamos la definici贸n de la funci贸n print():
print /unknown 1;" kind:function signature:(*args, sep=' ', end='\n', file=None, flush=False)
Cada l铆nea es la definici贸n de un s铆mbolo. 驴Como es la sintaxis de esos archivos? Geany utiliza un planteamiento similar a ctags, una herramienta de programaci贸n originaria del sistema operativo Unix, que genera un archivo de 铆ndice con los nombres que se encuentran en el texto de los programas.
Dependiendo del lenguaje de programaci贸n, podemos crear un 铆ndice de nombres de funciones, variables, miembros de la clase, macros, etc. Estas etiquetas facilitan la navegaci贸n cuando usamos un editor de texto.
Formato de archivo de etiquetas globales¶
Geany tiene su propio formato de archivo de etiquetas, similar al que usa ctags (pero incompatible con este). En realidad, puede usar tres formatos diferentes:
- Formato del tipo CTags
- Formato separado por caracteres '|' (pipes)
- Formato de administrador de etiquetas (tagmanager)
Creando nuestros propios archivos de etiquetas¶
El manual de Geany tiene un apartado que describe la creaci贸n de archivos de etiquetas.
Sin entrar en detalles, podemos generar nuestros propios archivos de etiquetas analizando una lista de archivos fuente. Podemos utilizar un comando ctags o incluso con el propio geany. El comando en este caso es:
geany -g -P Archivo_de_etiquetas Lista_de_archivos
-
Archivo_de_etiquetases el nombre del fichero a crear, y debe estar en el formato descrito anteriormente,nombre.lenguaje.tags -
La lista de archivos es una lista de nombres de archivo fuente, cada uno de ellos con su ruta completa (a menos que est茅 generando archivos de etiquetas C/C++ y haya establecido la variable de entorno CFLAGS).
Si tenemos varios archivos fuente en lenguaje C/C++, podemos crear uno maestro con sentencias #include y mencionarlo en el comando. Se har谩 un preproceso para incluir los textos de los archivos incluidos. La opci贸n -P, o en su lugar --no-preprocessing, es opcional, y deshabilita el preproceso de directivas #include. Podemos utilizar esta opci贸n si deseamos especificar cada archivo fuente en la l铆nea de comandos en lugar de usar un archivo maestro de cabeceras. Tambi茅n puede ser 煤til si no se desea especificar la variable de entorno CFLAGS.
Como ejemplo, supongamos la biblioteca "wxD" para el lenguaje de programaci贸n D:
$ geany -g wxd.d.tags /home/username/wxd/wx/*.d
O por ejemplo, en Windows:
> c:\archivos de programa\geany\bin\geany -g c:\misetiquetas.php.tags c:\programa.php
Archivo ignore.tags¶
Podemos ignorar ciertos s铆mbolos para los lenguajes basados en C si conducen a un an谩lisis incorrecto del c贸digo. Pulsar en el men煤 Herramientas > Archivos de configuraci贸n > ignore.tags para abrir el archivo ignore.tags del usuario.
En este archivo, podemos enumerar todos los nombres de s铆mbolos que deseamos ignorar, separados por espacios y/o saltos de l铆nea.
Ejemplo:
G_GNUC_NULL_TERMINATED
G_GNUC_PRINTF
G_GNUC_WARN_UNUSED_RESULT
BAR
Esto ignorar谩 las macros indicadas y detectar谩 correctamente 'Foo' como un tipo en lugar de 'BAR' en una sentencia como la siguiente:
struct Foo BAR { int i; };