He visto este tema:
http://forums.fivetechsupport.com/viewt ... =3&t=28213
En el que parece que se puede llamar a la definición de una función que se encuentra en otro prg.
He intentado hacer pruebas, pero no consigo que "ctags" cargue las funciones de todos los prgs del proyecto.
¿Alguien me puede guiar un poco, sobre como conseguirlo?
Gracias.
uestudio y ctag
uestudio y ctag
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
Fernando González Diez
ALSIS GHE Sistemas Informáticos
Re: uestudio y ctag
Hello,
F11 SearchFindSymbol seek a Function in file CTAG
You have to set the path of the file CTAG in Projet -> Option CTAG
The problem is how to create the file
This is a sample of the CTAG file
instead
F12 IntellitipFindSymbolDef automatically seek the functions in the project file
Regards Maurizio
www.nipeservice.com
F11 SearchFindSymbol seek a Function in file CTAG
You have to set the path of the file CTAG in Projet -> Option CTAG
The problem is how to create the file
This is a sample of the CTAG file
Code: Select all
!_TAG_FILE_FORMAT 1 /extended format; --format=1 will not append ; to lines/
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/
!_TAG_PROGRAM_NAME Exuberant Ctags //
!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
!_TAG_PROGRAM_VERSION 5.6
//--------------------------------------------------------------------------------------------------
//CCODICE=CODICEDARICERCARE
//NCORTO=CORTODELL'ARTICOLOATTUALE
VEDISECODICELIBERO d:\prgwin\Mastro\cl_ArBrw.prg 363
RICALCOLALISTINIARTICOLI d:\prgwin\Mastro\cl_ArBrw.prg 453
::OBRW:UPSTABLE d:\prgwin\Mastro\cl_ArBrw.prg 57
F12 IntellitipFindSymbolDef automatically seek the functions in the project file
Regards Maurizio
www.nipeservice.com
Re: uestudio y ctag
Hello,
thanks for replying,
How do I file ctag?
Do I have to create the file manually every time?
UEStudio indicates that the file can be automatically created.
thanks for replying,
How do I file ctag?
Do I have to create the file manually every time?
UEStudio indicates that the file can be automatically created.
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
Fernando González Diez
ALSIS GHE Sistemas Informáticos
Re: uestudio y ctag
I create the file
I use DIRE.DBF where I put the list of the directory _
Regards MAurizio
http://www.nipeservice.com
I use DIRE.DBF where I put the list of the directory _
Regards MAurizio
http://www.nipeservice.com
Code: Select all
#include "FiveWin.ch"
static oMeter2
Static lAuto
static aKey ,aDatiW
//-----------------------------------------------------------------------------------------
function Main(cStart)
LOcal bAction := { | oMeter, oText, oDlg, lEnd | CreaTag( oMeter, oText, oDlg, @lEnd ) }
lAuto := .F.
IF cStart # nil .AND. upper(cStart) == 'AUTO'
lAuto := .T.
endif
MyMsgMeter( bAction,,"Wait" )
return nil
Static function CreaTag(oMeter, oText, oDlg, lEnd)
Local aDir := {}
Local aFile := {}
Local cSubDir := ""
Local cFile := ""
Local cString := ""
Local nX ,nY := 1
local nT := 1
Local aDAti := {}
Local lOk := .F.
Local cFileExt := ""
Local cRiga := ""
Local cText := + ;
'!_TAG_FILE_FORMAT 1 /extended format; --format=1 will not append ; to lines/' + CRLF + ;
'!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/' + CRLF + ;
'!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/'+ CRLF + ;
'!_TAG_PROGRAM_NAME Exuberant Ctags //'+ CRLF + ;
'!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/'+ CRLF + ;
'!_TAG_PROGRAM_VERSION 5.6 //' + CRLF
Local cDati := cText
Local cFileDat := "c:\FWMY\prova.tag"
Local cDir := "d:\prgwin\" + space(20)
* Local cFileDat := "c:\temp\list.tag"
* Local cDir := "c:\fwh\"
Local nOutFile := 0
Local nTot := 0
Local aDbf := {}
Local lNew := .f.
Local cChiave := ""
lOCAL nKey := 1
aKey := {}
aDatiW := {}
REQUEST DBFCDX
rddsetdefault( "dbfcdx" )
IF ! lAuto
MsgGet("", "Name file cTags ", @cFileDat )
MsgGet("", "Folder _ (include subdirectoris) ", @cDir )
IF MsgNoYes( "Re-read the directory ?", "" )
ferase("DIRE.DBF")
lNew := .T.
ENDIF
endif
if ! file("DIRE.DBF")
AADD (aDbf, {"RIGA", "C", 50, 0 })
dbcreate("DIRE", aDbf , "DBFCDX")
ENDIF
USE ("DIRE") VIA "DBFCDX"
cDir := trim(cDir)
aDir := DIRECTORY(cDir,"D")
IF lNew
ZAP
FOR nX := 1 to len(aDir)
IF aDir[nX,5] == "D"
cSubDir := cDir + aDir[nX,1] + "\"
dbappend()
field->RIGA := cSubDir
ENDIF
NEXT
ENDIF
IF ! lAuto
BROWSE()
ENDIF
dbgotop()
nOutfile := FCREATE(cFileDat, 0)
FWRITE(nOutfile, cText, len(cText))
do while ! eof()
aFile := DIRECTORY((trim(field->RIGA)))
FOR nY := 1 to len(aFile)
cFile := aFile[nY,1]
IF cFileExt(cFile) == "PRG"
nTot++
ENDIF
NEXT
dbskip()
enddo
oMeter2:nTotal:= nTot
nTot := 1
*For nX := 1 to len(aDir)
dbgotop()
nX := 0
do while ! eof()
nX++
cSubdir := trim(field->RIGA)
aFile := DIRECTORY(cSubDir)
for nY := 1 to len(aFile)
cFile := aFile[nY,1]
IF cFileExt(cFile) == "PRG"
oMeter:cText := cSubDir + "\" + cFile + " " + str(nX) + str(len(aDir))
cDati := ScriviFile(cSubdir + cFile,oMeter,@cChiave)
IF ! empty(cDAti)
nKey++
ENDIF
nTot++
oMeter2:Set(nTot )
oMeter2:cText := str(nTot)+ "/" + str(oMeter2:nTotal)
endif
IF lEnd
exit
endIF
NEXT
dbskip()
enddo
ASort( aKey ,,, {|x,y| x[1] > y[1] } )
ASort(aDatiW)
FOR nX := 1 to len(aDatiW)
FWRITE(nOutfile, aDAtiW[nX], len(aDAtiW[nX]))
NEXT
FCLOSE(nOutfile)
return .t.
//---------------------------------------------------------------------------------------------
Static function ScriviFile(cFileExt,oMeter,cChiave)
Local cFile := ""
Local nX := 0
Local nT := 1
Local cString := ""
Local lOk := .F.
Local cDati := ""
cChiave := ""
cString := MEMOREAD(cFileExt)
nT := MLCOUNT(cString,254)
oMeter:nTotal := nT // CARICAVERIFICHe
for nX := 1 TO nT
lOk := .F.
cFile := UPPER(memoline(cString,254,nX))
IF at("FUNCTION",cFile) > 0
cFile := STRTRAN(cFile, "FUNCTION", "")
cFile := STRTRAN(cFile, "STATIC", "")
lOk := .T.
ENDIF
if Lok ==.f.
IF at("METHOD",cFile) > 0
IF at("CLASS",cFile) > 0
cFile := STRTRAN(cFile, "METHOD", "")
lOk := .T.
endIF
ENDIF
ENDIF // RECNO
IF lOk
cFile := STRTRAN(cFile, " ", "")
cFile := SUBSTR(cFile,1,AT("(",cFile)-1)
cFile := trim(cFile)
IF substr(cFile,1,1) == "*"
cFile := ""
ENDIF
IF ! empty(cFile)
cChiave := alltrim(cFile)
cFile += chr(9) + cFileExt + chr(9) + alltrim(str(nX))
cDati += cFile + CRLF
aadd(aDAtiW,cFile + CRLF)
ENDIF
endif
oMeter:Set(nX )
next
Return cDati
//======================================================================================================
function MyMsgMeter( bAction, cMsg, cTitle )
local oDlg, oMeter, oText, oBtn, oFont
local lEnd := .f., lCancel := .f.
local nVal,nVal2 := 0
DEFAULT bAction := { || nil },;
cMsg := "Processing...", cTitle := "Please, wait"
DEFINE FONT oFont NAME GetSysFont() SIZE 0, -8
DEFINE DIALOG oDlg FROM 5, 5 TO 13, 45 TITLE cTitle FONT oFont
@ 0.2, 0.5 SAY oText VAR cMsg SIZE 130, 10 OF oDlg
@ 1, 0.5 METER oMeter VAR nVal TOTAL 10 SIZE 150, 10 OF oDlg
@ 2, 0.5 METER oMeter2 VAR nVal2 TOTAL 10 SIZE 150, 10 OF oDlg
@ 2.2, 10.4 BUTTON oBtn PROMPT "&Cancel" OF oDlg ;
ACTION ( lEnd:= .t., lCancel:= .t. ) SIZE 32, 11
oDlg:bStart = { || Eval( bAction, oMeter, oText, oDlg, @lEnd, oBtn ),;
lEnd := .t., oDlg:End() }
ACTIVATE DIALOG oDlg CENTERED ;
VALID lEnd
oFont:End()
return lCancel
Re: uestudio y ctag
Ok,
thank you very much for your help
I will use that code.
On this website, as I found ctags to include new programming languages.
http://ctags.sourceforge.net/EXTENDING.html
I will investigate.
thank you very much for your help
I will use that code.
On this website, as I found ctags to include new programming languages.
http://ctags.sourceforge.net/EXTENDING.html
I will investigate.
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
Fernando González Diez
ALSIS GHE Sistemas Informáticos
Re: uestudio y ctag
He conseguido que uEstudio cree el fichero tags con todas las funciones del proyecto.
1º He creado un fichero (con nombre Harbour.ctags) con el siguiente código:
2º "Parametros del CTAG" que se encuentra en Proyecto -> Configurar opciones de CTAG lo he cambiado con lo siguiente:
Siendo "D:\Google_Drive\Descargas\Uestudio\Instalacion FWH\ctags" la ruta donde esta almacenado el fichero del punto 1 (Harbour.ctags)
3º En la configuración del proyecto, pestaña opciones lo he cambiado a:
He activado "Soporte CTAG heredado"
He introducido la ruta del archivo ctag que quiero que se cree en el proyecto
He activado "Crear archivo CTAG al cargar el proyecto"
Listo.
Con esto cada vez que entro en el proyecto, se crea el archivo ctag del proyecto y puedo pulsar F11 para acceder a la definición de la función
1º He creado un fichero (con nombre Harbour.ctags) con el siguiente código:
Code: Select all
--langdef=Harbour
--langmap=Harbour:.prg.ch
--regex-Harbour=/^FUNCTION [\t]*([a-zA-Z0-9_]+)/\1/f,function/
--regex-Harbour=/^[Ff]unction [\t]*([a-zA-Z0-9_]+)/\1/f,function/
--regex-Harbour=/^FUNC [\t]*([a-zA-Z0-9_]+)/\1/f,function/
--regex-Harbour=/^[Ff]unc [\t]*([a-zA-Z0-9_]+)/\1/f,function/
--regex-Harbour=/^PROCEDURE [\t]*([a-zA-Z0-9_]+)/\1/p,procedure/
--regex-Harbour=/^[Pp]rocedure [\t]*([a-zA-Z0-9_]+)/\1/p,procedure/
--regex-Harbour=/^PROC [\t]*([a-zA-Z0-9_]+)/\1/p,procedure/
--regex-Harbour=/^[Pp]roc [\t]*([a-zA-Z0-9_]+)/\1/p,procedure/
--regex-Harbour=/^#DEFINE [\t]*([a-zA-Z0-9_]+)/\1/d,define/
--regex-Harbour=/^#[Dd]efine [\t]*([a-zA-Z0-9_]+)/\1/d,define/
--regex-Harbour=/CLASS [\t]*([a-zA-Z0-9_]+)/\1/c,class/
--regex-Harbour=/[Cc]lass [\t]*([a-zA-Z0-9_]+)/\1/c,class/
--regex-Harbour=/DATA [\t]*([a-zA-Z0-9_]+)/\1/m,data/
--regex-Harbour=/[Dd]ata [\t]*([a-zA-Z0-9_]+)/\1/m,data/
--regex-Harbour=/METHOD [\t]*([a-zA-Z0-9_]+)/\1/m,method/
--regex-Harbour=/[Mm]ethod [\t]*([a-zA-Z0-9_]+)/\1/m,method/
--regex-Harbour=/MESSAGE [\t]*([a-zA-Z0-9_]+)/\1/m,method/
--regex-Harbour=/[Mm]essage [\t]*([a-zA-Z0-9_]+)/\1/m,method/
Code: Select all
--options="D:\Google_Drive\Descargas\Uestudio\Instalacion FWH\ctags\Harbour.ctags" --language-force=Harbour -L %fi -f %fo
3º En la configuración del proyecto, pestaña opciones lo he cambiado a:
He activado "Soporte CTAG heredado"
He introducido la ruta del archivo ctag que quiero que se cree en el proyecto
He activado "Crear archivo CTAG al cargar el proyecto"
Listo.
Con esto cada vez que entro en el proyecto, se crea el archivo ctag del proyecto y puedo pulsar F11 para acceder a la definición de la función
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
Fernando González Diez
ALSIS GHE Sistemas Informáticos