Annotation of src/usr.bin/ctags/ctags.1, Revision 1.31
1.31 ! schwarze 1: .\" $OpenBSD: ctags.1,v 1.30 2015/08/22 06:46:00 jmc Exp $
1.1 deraadt 2: .\" $NetBSD: ctags.1,v 1.4 1995/03/26 20:14:04 glass Exp $
3: .\"
4: .\" Copyright (c) 1987, 1990, 1993
5: .\" The Regents of the University of California. All rights reserved.
6: .\"
7: .\" Redistribution and use in source and binary forms, with or without
8: .\" modification, are permitted provided that the following conditions
9: .\" are met:
10: .\" 1. Redistributions of source code must retain the above copyright
11: .\" notice, this list of conditions and the following disclaimer.
12: .\" 2. Redistributions in binary form must reproduce the above copyright
13: .\" notice, this list of conditions and the following disclaimer in the
14: .\" documentation and/or other materials provided with the distribution.
1.12 millert 15: .\" 3. Neither the name of the University nor the names of its contributors
1.1 deraadt 16: .\" may be used to endorse or promote products derived from this software
17: .\" without specific prior written permission.
18: .\"
19: .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20: .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21: .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22: .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23: .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24: .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25: .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26: .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27: .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28: .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29: .\" SUCH DAMAGE.
30: .\"
31: .\" @(#)ctags.1 8.1 (Berkeley) 6/6/93
32: .\"
1.30 jmc 33: .Dd $Mdocdate: August 22 2015 $
1.1 deraadt 34: .Dt CTAGS 1
1.5 aaron 35: .Os
1.1 deraadt 36: .Sh NAME
37: .Nm ctags
38: .Nd create a tags file
39: .Sh SYNOPSIS
40: .Nm ctags
1.23 millert 41: .Op Fl aBdFuvwx
1.1 deraadt 42: .Op Fl f Ar tagsfile
1.14 jmc 43: .Ar
1.1 deraadt 44: .Sh DESCRIPTION
1.6 aaron 45: .Nm
1.24 jmc 46: makes a tags file from the specified C, Pascal, Fortran,
47: YACC, lex, and Lisp sources.
1.1 deraadt 48: A tags file gives the locations of specified objects in a group of files.
49: Each line of the tags file contains the object name, the file in which it
50: is defined, and a search pattern for the object definition, separated by
1.8 aaron 51: whitespace.
1.9 aaron 52: .Pp
1.1 deraadt 53: Using the
54: .Ar tags
55: file,
1.23 millert 56: a text editor such as
1.1 deraadt 57: .Xr ex 1
1.23 millert 58: or
59: .Xr vi 1
1.1 deraadt 60: can quickly locate these object definitions.
1.23 millert 61: Indexed objects include subroutines, typedefs, defines, structs,
1.3 aaron 62: enums, and unions.
1.9 aaron 63: .Pp
64: The options are as follows:
1.1 deraadt 65: .Bl -tag -width Ds
66: .It Fl a
1.3 aaron 67: Append to
1.1 deraadt 68: .Ar tags
69: file.
1.14 jmc 70: .It Fl B
71: Use backward searching patterns
72: .Pq Li ?...? .
1.1 deraadt 73: .It Fl d
1.3 aaron 74: Create tags for
1.1 deraadt 75: .Li #defines
76: that don't take arguments;
77: .Li #defines
78: that take arguments are tagged automatically.
1.14 jmc 79: .It Fl F
80: Use forward searching patterns
81: .Pq Li /.../
82: (the default).
1.7 deraadt 83: .It Fl f Ar tagsfile
1.1 deraadt 84: Places the tag descriptions in a file called
85: .Ar tagsfile .
86: The default behaviour is to place them in a file called
87: .Ar tags .
88: .It Fl u
1.3 aaron 89: Update the specified files in the
1.1 deraadt 90: .Ar tags
1.30 jmc 91: file; that is, all
92: references to them are regenerated, keeping only the other values in the
1.9 aaron 93: file.
1.1 deraadt 94: .It Fl v
1.22 jmc 95: An index of the form expected by vgrind
1.9 aaron 96: is produced on the standard output.
97: This listing contains the object name, file name, and page number (assuming
98: 64 line pages).
99: Since the output will be sorted into lexicographic order,
1.1 deraadt 100: it may be desired to run the output through
101: .Xr sort 1 .
102: Sample use:
103: .Bd -literal -offset indent
1.25 jmc 104: $ ctags -v files | sort -f > index
105: $ vgrind -x index
1.1 deraadt 106: .Ed
107: .It Fl w
1.3 aaron 108: Suppress warning diagnostics.
1.1 deraadt 109: .It Fl x
1.6 aaron 110: .Nm
1.1 deraadt 111: produces a list of object
112: names, the line number and file name on which each is defined, as well
1.9 aaron 113: as the text of that line and prints this on the standard output.
114: This is a simple index which can be printed out as an off-line readable
1.1 deraadt 115: function index.
116: .El
117: .Pp
118: Files whose names end in
1.9 aaron 119: .Dq \&.c
1.1 deraadt 120: or
1.9 aaron 121: .Dq \&.h
1.1 deraadt 122: are assumed to be C
123: source files and are searched for C style routine and macro definitions.
124: Files whose names end in
1.9 aaron 125: .Dq \&.y
1.1 deraadt 126: are assumed to be
1.31 ! schwarze 127: .Xr yacc 1
1.1 deraadt 128: source files.
129: Files whose names end in
1.9 aaron 130: .Dq \&.l
1.23 millert 131: are assumed to be Lisp files if their
1.9 aaron 132: first non-blank character is
133: .Ql \&; ,
1.19 schwarze 134: .Ql \&( ,
1.9 aaron 135: or
1.19 schwarze 136: .Ql \&[ ,
1.1 deraadt 137: otherwise, they are
1.9 aaron 138: treated as lex files.
139: Other files are first examined to see if they
1.28 jmc 140: contain any Pascal or Fortran routine definitions and, if not, are
1.1 deraadt 141: searched for C style definitions.
142: .Pp
143: The tag
144: .Li main
1.9 aaron 145: is treated specially in C programs.
146: The tag formed is created by prepending
147: .Sq M
1.1 deraadt 148: to the name of the file, with the
149: trailing
1.9 aaron 150: .Dq \&.c
151: and any leading pathname components removed.
152: This makes use of
1.6 aaron 153: .Nm
1.9 aaron 154: practical in directories with more than one program.
1.1 deraadt 155: .Pp
156: Yacc and lex files each have a special tag.
157: .Ar Yyparse
158: is the start
159: of the second section of the yacc file, and
160: .Ar yylex
161: is the start of
162: the second section of the lex file.
163: .Sh FILES
164: .Bl -tag -width tags -compact
165: .It Pa tags
166: default output tags file
167: .El
1.20 jmc 168: .Sh EXIT STATUS
169: .Ex -std ctags
1.21 jmc 170: .Pp
171: Duplicate objects are not considered errors.
1.1 deraadt 172: .Sh SEE ALSO
173: .Xr vi 1
1.15 jmc 174: .Sh STANDARDS
175: The
176: .Nm
177: utility is compliant with the
1.17 jmc 178: .St -p1003.1-2008
1.18 jmc 179: specification,
180: though its presence is optional.
1.15 jmc 181: .Pp
182: The flags
1.23 millert 183: .Op Fl BdFuvw
1.15 jmc 184: are extensions to that specification.
1.27 jmc 185: .Pp
186: Support for Pascal, YACC, lex, and Lisp source files
187: is an
188: .St -p1003.1-2008
189: extension.
190: The standard notes that
191: .Nm
192: is
193: .Qo
194: not required to accommodate these languages,
195: although implementors are encouraged to do so
196: .Qc .
1.10 aaron 197: .Sh HISTORY
198: The
199: .Nm
200: command appeared in
1.26 schwarze 201: .Bx 2 .
1.1 deraadt 202: .Sh BUGS
1.31 ! schwarze 203: Recognition of functions, subroutines, and procedures for FORTRAN
1.9 aaron 204: and Pascal is done in a very simple-minded way.
205: No attempt
1.1 deraadt 206: is made to deal with block structure; if you have two Pascal procedures
207: in different blocks with the same name you lose.
1.6 aaron 208: .Nm
1.1 deraadt 209: doesn't
210: understand about Pascal types.
211: .Pp
1.31 ! schwarze 212: The method of deciding whether to look for C, Pascal or FORTRAN
1.1 deraadt 213: functions is a hack.
214: .Pp
1.6 aaron 215: .Nm
1.1 deraadt 216: relies on the input being well formed, and any syntactical
1.9 aaron 217: errors will completely confuse it.
218: It also finds some legal syntax confusing; for example,
219: since it doesn't understand
1.1 deraadt 220: .Li #ifdef Ns 's
221: (incidentally, that's a feature, not a bug), any code with unbalanced
222: braces inside
223: .Li #ifdef Ns 's
224: will cause it to become somewhat disoriented.
225: In a similar fashion, multiple line changes within a definition will
226: cause it to enter the last line of the object, rather than the first, as
1.9 aaron 227: the searching pattern.
228: The last line of multiple line
1.1 deraadt 229: .Li typedef Ns 's
230: will similarly be noted.