#!/bin/sh # IMPORTANTE: Si quieres tener información de depuración (algo no funciona bien) # dale a la siguiente variable cualquier valor DEP= # Recuperación de variables importantes titulo=`dcop kate kate-mainwindow\#1 caption` guion=`basename $0` ruta=${titulo:5} ruta=${ruta/ */} fichero=${ruta/\/*\/} nombre=${fichero/.*} extension=${fichero/$nombre} ruta=${ruta/\/$fichero} ferrores=${fichero}_errors flinea=${fichero}_errors_n # Control de extensión del fichero [ "$extension" != ".md" -a "$extension" != ".mi" ] && exit 1 # Trabajo en mismo directorio en que reside el módulo cd $ruta # Recuperar línea, columna y mensaje del error a mostrar # Controlar límites: línea de error mayor que el total o menor que 1 if [ ! -f $ferrores -o ! -f $flinea ] ; then let linea=0 mensaje="$fichero: No hubo errores de compilación" [ -f $flinea ] && rm $flinea else linea=`cat $flinea` if [ $guion == mocka_sigerror.sh ] ; then # ¡Maldita asignación! Sólo funciona así. A no ser que sepas lo que # haces, no lo toques o dejará de funcionar let totlineas=$(echo `wc -l < $ferrores`) if [ $linea -ge $totlineas ] ; then let linea=$totlineas+1 echo $linea > $flinea mensaje="$fichero: No hay más errores" else let linea=$linea+1 fi else if [ $linea -le 1 ] ; then let linea=0 echo $linea > $flinea mensaje="$fichero: No hay más errores" else let linea=$linea-1 fi fi if [ "$mensaje" == "" ] ; then echo $linea > $flinea let l=`echo $linea | ed -s $ferrores | cut -f1 -d" " | cut -f1 -d,`-1 let c=`echo $linea | ed -s $ferrores | cut -f1 -d" " | cut -f2 -d,`-1 mensaje=`echo $linea | ed -s $ferrores | cut -f2- -d" "` fi fi # Información de depuración [ -n "$DEP" ] && echo "Título : $titulo" > $ruta/mocka_error.log [ -n "$DEP" ] && echo "Guión : $guion" >> $ruta/mocka_error.log [ -n "$DEP" ] && echo "Ruta : $ruta" >> $ruta/mocka_error.log [ -n "$DEP" ] && echo "Fichero : $fichero" >> $ruta/mocka_error.log [ -n "$DEP" ] && echo "Nombre : $nombre" >> $ruta/mocka_error.log [ -n "$DEP" ] && echo "Extensión: $extension" >> $ruta/mocka_error.log [ -n "$DEP" ] && echo "F.línea : $flinea" >> $ruta/mocka_error.log [ -n "$DEP" ] && echo "F.errores: $ferrores" >> $ruta/mocka_error.log [ -n "$DEP" ] && echo "Línea : $linea" >> $ruta/mocka_error.log [ -n "$DEP" ] && echo "Error en : $l,$c" >> $ruta/mocka_error.log [ -n "$DEP" ] && echo "Men.error: $mensaje" >> $ruta/mocka_error.log # Averiguar qué documento y método usar para colocar el cursor ifdoc=`dcop kate KateMainWindow0 currentDocumentIfaceNumber` vci=`dcop kate | grep ViewCursorInterface\#$ifdoc | head -1` # Preparar una ventana debajo de la de edición para el mensaje de error # siempre y cuando no esté divida ya la ventana principal dcop kate kate-mainwindow\#1 activateAction go_next titulo=`dcop kate kate-mainwindow\#1 caption` if [ "$titulo" == "${titulo/\/Mensaje}" ] ; then dcop kate kate-mainwindow\#1 activateAction view_split_horiz dcop kate KateMainWindow0 openURL "file:$ruta/Mensaje" fi # Poner el mensaje de error en la ventana recién creada iferr=`dcop kate KateMainWindow0 currentDocumentIfaceNumber` dcop kate EditInterface\#$iferr setText "$mensaje" # Devolver el cursor a la ventana principal de edición dcop kate kate-mainwindow\#1 activateAction go_prev # Colocar el cursor [ $l. != . -a $c. != . ] && dcop kate $vci setCursorPositionReal $l $c