Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

btg/ is moved to betterthangrep project

  • Loading branch information...
commit f0372568c6387ac1aafae5c7042b6842fe1d77df 1 parent a1d233a
@petdance authored
View
855 btg/Changes
@@ -1,855 +0,0 @@
-History file for ack. http://betterthangrep.com/
-
-1.96 Sun Sep 18 13:33:39 CDT 2011
- [ENHANCEMENTS]
- Now ignores minified Javascript files. Anything matching -min.js
- or .min.js is ignored.
-
- Added Groovy support (--groovy).
-
- Added .pm6 as a --perl extension.
-
- Lua can now get detected from the shebang line. Thanks, Matthew Wild.
-
- Added support for version numbers in executables in shebang
- detection. Now if your Perl program's shebang refers to
- /usr/local/bin/perl-5.14.1, ack will find it.
-
-
-1.94 Mon Nov 15 22:38:48 CST 2010
- [ENHANCEMENTS]
- Added support for Go and Delphi.
-
- Ignores Monotone's _MTN directories.
-
- Added .xsl to the list of --xml files.
-
-
-1.93_02 Wed Oct 6 21:39:58 CDT 2010
- [FIXES]
- --man and --version now return with an exit code of 0. They
- used to exit with a 1. Thanks to Bo Borgerson.
-
- [ENHANCEMENTS]
- The --ignore-dir option now can ignore entire paths relative
- to your current directory. Thanks to Nick Hooey. For example:
-
- ack --ignore-dir=t/subsystem/test-data
-
- Added --invert-file-match switch to negate the sense of the
- -g/-G switches. Thanks, Lars Dieckow.
-
-
-1.93_01 Sun Sep 5 16:00:29 CDT 2010
- [FILE TYPE UPDATES]
-
- Added --verilog, --vhdl and --clojure.
-
- Files that match *.mk and *.mak as well as GNUmakefile are now included in
- the ack filetype 'make' (issue 88).
-
- Added RSpec's .spec type to the --ruby list.
-
-
- [ENHANCEMENTS]
- Updated the README to Markdown format. Thanks to Mark Szymanski
- for the idea.
-
- Added docs for -r, -R, --recurse options.
-
- Added new switch --color-lineno and environment variable ACK_COLOR_LINENO,
- which allow setting the line number color. (Marq Schneider)
-
- Added option --show-types to output the types that ack considers
- a file to have. (Torsten Blix)
-
- 'ack --count --no-filename regex' doesn't output a list of numbers but a
- sum of all occurences. This is NOT what grep does but is the more sensible
- behavior.
-
-
- [FIXES]
- Fixed ack misbehavior when using --match or not specifying a regex:
-
- ack --match Sue
- cat foo | ack --perl
-
- Fixed issue 74: analog to grep, 'ack --count regex file' now
- only outputs the number of found matches, if only one file is
- given.
-
- Fixed issue 76: Giving both --line and a regex (with --match)
- now leads to an error. The same is true for -f or -g in conjunction
- with --match. (Torsten Blix)
-
- Fixed issue 80: Piping into ack --count now works as expected.
- ack always returned 0 when piped into, no matter how many matches
- where found. (Torsten Blix)
-
- Fixed issue 81: .ackrc now ignores leading/trailing whitespace.
- (Torsten Blix)
-
-
-1.92 Fri Dec 11 11:47:56 CST 2009
-
- The source code for ack is now at github: http://github.com/petdance/ack
-
- [FIXES]
- The --pager flag would not work. Now it does. Thanks Packy
- Anderson.
-
- File matching for Emacs work files that match #*# was wrong.
- It was checking the entire path, not just the basename. This
- is fixed. (http://github.com/petdance/ack/issues/closed/#issue/101)
-
- Fixed URLs that pointed to old Google Code.
-
-
- [ENHANCEMENTS]
- Added Scala support. Thanks to Dan Sully.
-
- Added .phtml as an extension for PHP.
-
- Using -f or -g now return a proper error code. If files are
- found, ack returns 0. If none are found, ack returns 1. This
- is a change in the specification, but the code didn't match the
- specfication anyway.
-
- No man pages are created for any of the .pm files any more.
-
-
-1.90 Mon Sep 7 23:24:24 CDT 2009
-
- [ENHANCEMENTS]
- Added Ada support. Thanks to Shaun Patterson.
-
- Added -r, -R and --recurse options as in grep. They have no
- effect because directory recursion is on by default. Also added
- --no-recurse for orthoganality. Thanks to Mark Stosberg and
- Ryan Niebur.
-
- Version in --version is prettier. Thanks, Ori Avtalion.
-
- Added an updated ack.bash_completion.sh from Adam James.
-
-
- [FIXES]
- Expanded --files-without-match to --files-without-matches.
-
- Removed all the hi-bit characters, so we don't have any encoding
- problems. It's all entities now.
-
- Fixed capture-stderr to localize some globals that were obscuring
- errors. Thanks very much to Christopher Madsen.
-
- Fixed uninitialized errors in tickets #138 and #159.
-
-
- [DOCUMENTATION]
- Fixed an incorrect command line in the docs for -f.
-
- Added notes on --pager. Thanks to Mike Morearty.
-
-
- [BUILD]
- Made the squash program more robust when handling POD. Thanks
- to Kent Fredric.
-
-
-1.89_02 Wed May 13 16:20:21 CDT 2009
-
- [DISTRIBUTION]
- Updated Makefile.PL to use new ExtUtils::MakeMaker features.
- Thanks, Schwern.
-
- [FEATURES]
- --version now shows the version of Perl that ack is running
- under, and the full path to the Perl executable.
-
- Added new switches --color-match and --color-filename, which
- let you define ACK_COLOR_MATCH and ACK_COLOR_FILENAME from the
- command line.
-
- Added new switch --column to display the column of the first
- hit on the row. Thanks to Eric Van Dewoestine.
-
- Added .ss to --scheme.
-
- [FIXES]
- No longer die if you have a .tar.gz file in your tree.
-
- More tweaks to get the detection of input and output pipes
- working.
-
- Fixed an amazingly bad call to cmp_ok() in t/ack-passthru.t.
-
- [DOCUMENTATION]
- Started an ack FAQ.
-
-
-1.88 Sat Feb 7 13:51:35 CST 2009
- [BIG CHANGES]
- ack-standalone no longer exists. ack is now built from ack-base.
- What used to be called "ack-standalone" is now just "ack."
-
- ack has a new plugin system, so you can build plugins to search
- whatever filetype you want. The plugin API is not yet set in
- stone.
-
- The plugin system has not been optimized. ack is about 1/3rd
- slower than before.
-
-
- [ENHANCEMENTS]
- Added support for .hrl Erlang header files. Thanks, Richard
- Carlsson.
-
- Added support for --rake files, which are also --ruby files.
-
-
- [FIXES]
- Fixed a bug where files ending in "Makefile" were mistakenly
- identified as Makefiles.
-
- We now use the C<-p> file test operator to see if input is
- coming from a pipe, rather than than faking it with C<-t> and
- C<eof>. Thanks to Sitaram Chamarty.
-
-
- [ADDITIONS]
- Created a new etc/ directory and its first addition, a bash
- auto-completion file from Adam James.
-
-
- [DOCUMENTATION]
- Clarified the licensing information that hand-waved "under the
- same terms as Perl itself."
-
-
-1.86 Wed Jul 9 01:27:21 CDT 2008
- [ENHANCEMENTS]
- Added --smart-case option. Thanks, Leland Johnson.
-
- --shell file type now recognizes tcsh. Thanks to Chris Dolan
- and, indirectly, Perl::Critic.
-
- Added --[no]colour to go with --[no]color.
-
- [DOCUMENTATION]
- Added a Tips section.
-
- [INTERNALS]
- Tweaking in the file-finding iterator shaves of entire hundredths
- of a second in my test runs! Because everyone deserves performance.
-
-
-1.84 Sun May 25 00:17:41 CDT 2008
- [ENHANCEMENTS]
- Support color on Windows. Thanks, Jan Dubois.
-
- ack --help outputs the current version number of ack now.
-
- Added Lua support. Thanks, Ben Klaas.
-
- Added --flush to unbuffer output.
-
- [FIXES]
- t/file-permissions.t should work now running as root
-
- Fixed link in documentation to Phil Jackson's Emacs extension.
-
- Fixed documentation regarding caveats in defining your own
- types in the .ackrc file. Multiple people reported this, thanks.
-
- Added ack --man documentation for -L option.
-
-
-1.82 Sun Apr 13 11:36:56 CDT 2008
-
- [FIXES]
- Added --pager/--nopager to the --help text
-
- Redirecting output makes ack not set up the pager. The following
- does not make sense:
-
- ack foo --pager=more > save.txt
-
- so now ack will ignore the --pager and ACK_PAGER.
-
- [ENHANCEMENTS]
- Added extensions for Ruby's new Rails format and tcsh.
-
- [DOCUMENTATION]
- Added a new Debugging section to the docs.
-
- Pointed to Phil Jackson's Emacs extension and Pedro Melo's
- TextMate extension.
-
-
-1.80 Wed Mar 26 10:07:53 CDT 2008
-
- [FIXES]
- --noenv now correctly ignores ACK_PAGER.
-
- More Windows compatibility path fixes. Thanks, Jan Dubois.
-
- Fixed an install problem with t/file-permission.t.
-
-
-1.78 Mon Mar 24 00:32:36 CDT 2008
- [ENHANCEMENTS]
- ack can now feed its output to a pager. It can be specified
- with --pager on the command-line, or with the ACK_PAGER environment
- variable. The --pager differs from piping the output on the
- command line, because ack doesn't turn off coloring and grouping
- if its output goes through the --pager.
-
- Added CFMX support. Thanks, Will Coleda.
-
- Added more extensions for --asm and --tcl. Added new
- extension --batch for .bat and .cmd files. Thanks, Jan Dubois.
-
- [FIXES]
- Fighting the never-ending battle for Windows compatibility.
- Thanks to Jan Dubois and Christoper J. Madsen.
-
- [INTERNALS]
- I removed t/pod-coverage.t, because I don't care about the
- documentation. The user-servicable parts are only for hardcore
- ack hacks.
-
-
-1.77_04 Fri Mar 14 00:23:46 CDT 2008
- [FIXES]
- --[no]ignore-dir option now works also with trailing slash
- in the directory name.
-
- A match on the last line of a file where the newline is
- missing gets the newline added by ack for free!
-
- [ENHANCEMENTS]
- Added --break and --heading options. --group is the same as
- --break --heading.
-
- Ack gives a better error message when running with an illegal
- regex.
-
- Added Actionscript support. Thanks, Yuichi Tateno.
-
- Added XML Entity file (.ent) support. Thanks, Tim Jenness.
-
-
- [INTERNALS TESTING]
- Fixed test count in case of skipped tests for ack-types.t.
-
- Fixed test in run_ack for stderr output, again. This should no
- longer report unexpected succeeds for TODO tests - and now really
- work.
-
- Changed method of capturing stderr in tests, should now work on
- Windows. Thanks, Christopher J. Madsen!
-
- Changed quoting of command line arguments and adjusted tests to
- it. Thanks also for the idea this, Christopher J. Madsen!
-
- And more stuff spotted by Christopher: ack-standalone is no longer
- set to readonly on Windows.
-
- More test fixes on Windows provided by Christopher J. Madsen and
- Jan Dubois.
-
-
-1.77_03 Wed Feb 20 11:16:43 CST 2008
- [CHANGED FUNCTIONALITY]
- ack -i -g=regex no longer treats the regex as case-insensitive.
- This was changed for added consistency. Now -i, -w, -v and -Q
- only apply to normal ack PATTERN while -g and -G are not affected
- by these regex modifiers at all.
-
- [ENHANCEMENTS]
- Added option -G REGEX to search only files whose path+filename
- matches REGEX. Thanks go to Michael Hendricks for providing a
- patch!
-
- Added option --[no]env to ignore all environment settings
- including .ackrc.
-
- Added a --[no]ignore-dir option, to include/exclude additional
- directories. Many thanks for this patch go to Matthew Wickline!
-
- Added option --match REGEX to specify a regex explicitly.
-
- [FIXES]
- Fixed bug with -v not finding all files correctly (introduced
- with the performance optimizations in ack 1.75)
-
- Removed spurious new line after last match in --group output.
-
- Fixed typos in docs concerning context matching and removed
- option --rc from docs, since it was never implemented.
-
- [INTERNALS]
- Fixed some cross-platform issues in the test cases.
-
- Fixed test in run_ack for stderr output. This should no longer
- report unexpected succeeds for TODO tests.
-
-
-1.77_02 Mon Jan 28 16:19:30 CST 2008
- [ENHANCEMENTS]
- Added .lsp for --lisp, .st for --smalltalk.
-
- Added testing for spurious output in the test suite.
-
-
-1.77_01 Sun Jan 27 20:52:27 CST 2008
- [CHANGED FUNCTIONALITY]
- ack now always searches files given on the command line, even
- if they are of the wrong type or not recognized or normally
- skipped.
-
- .bak files are now automatically skipped. I don't know how I
- missed this before.
-
- [FIXES]
- Added a test for the Perl 5.10 regex bug fixed in 1.76.
-
- Made the regex for --thppptttt a little more robust. It used
- to have to end with a single "t", but now it's more flexible.
-
- Changed year in copyright note to 2008.
-
- Updated references in README (removed link to CPAN RT Queue).
-
- Fixed a problem with files with non-native line-ending (DOS or
- MacOS on Unix). Instead of the matching line an empty line was
- output. This was reported by multiple people, thanks!
-
- Rewrote a test to work around a bug in old versions of
- Test::More (before 0.48_2).
-
- Fixed ack failure when encountering unreadable files. Reported
- by David Dyck, thank you!
-
- [ENHANCEMENTS]
- Ack warns now when the files/directories given on the command
- line don't exist.
-
- Finally ack allows you to define your own types! See options
- --type-set and --type-add. There are some restrictions left,
- but it should suffice for most things.
-
-1.76 Wed Dec 19 23:23:05 CST 2007
- [FIXES]
- Now runs correctly under Perl 5.10. ack had been relying on a
- mistaken regex behavior of Perl 5.8, and Perl 5.10 fixed it.
-
- [ENHANCEMENTS]
- Add .xhtml to --html
-
- Added types --objc (.m .h) and -objcpp (.mm .h) for Objective-C
- and Objective-C++. Thanks, Jjgod Jiang.
-
- Added type --plone (.pt .cpt .metadata .cpy .py). Thanks, Jason
- Porritt.
-
- Skips Module::Build's _build directory. Thanks, Elliot Shank.
-
- Added a --print0 option: When outputting filenames (-f, -g, -l,
- -L, -c) separate them by null bytes instead of new lines.
- Useful e.g. in conjunction with 'xargs -0' and spaces in
- filenames.
-
- [FIXES]
- Fixed problem with coloring and pattern with backreferences,
- spotted by Jason Porritt.
-
- [DOCUMENTATION]
- Removed some old references to rt.cpan.org.
-
-
-1.75_01 Thu Dec 6 20:37:57 CST 2007
- [ENHANCEMENTS]
- Optimized the usually-common case where you're searching through
- a lot of source files and finding relatively few strings. ack
- now slurps up the entire file at once and scans it quickly to
- decide if it needs to do so line-by-line. This cuts run-time
- by about 40% in my test cases, and 70% if context is on. Thanks
- to Uri Guttman for the idea.
-
- Excludes backup directories for Mac Interface Builder: ~.dep,
- ~.dot, ~.nib, ~.plst. Thanks, Peter Lewis.
-
- [FIXES]
- XML sniffing now is case-insensitive.
-
-
-1.74 Wed Nov 28 22:08:16 CST 2007
- [ENHANCEMENTS]
- Added -u, --unrestricted options that search absolutely all
- files and directories, just like grep.
-
- Ignores Codeville's .cdv directories.
-
- Ignores SourceGear's _sgbak directories.
-
- [THINGS THAT HAVE CHANGED]
- ack -o emulates grep now and shows filenames unless explicitly
- suppressed with -h.
-
- [FIXES]
- Added workaround for older Getopt::Long.
-
- Fixed some testcases so that they are more robust (order of
- files, forward/backward slashes and shellquoting).
-
- Fixed a test that would fail if the files weren't sorted.
-
-
-1.72 Wed Nov 7 23:16:46 CST 2007
- Please note that I have moved the bug/issue queue to Google
- Code at http://code.google.com/p/ack/issues/list. The RT queue
- at rt.cpan.org will no longer be maintained.
-
- [FIXES]
- The test suite will now run with a TTY, and as part of the
- Debian packaging process.
-
- Fixed some grouping bugs. Thanks, Torsten Blix.
-
- [ENHANCEMENTS]
- Skips Mercurial's .hg and Bazaar's .bzr directories. Thanks,
- Ori Avtalion.
-
- Added .cc, .hpp, and .hh for C++. Thanks, Kevin Riggle.
-
-
-1.70 Sun Nov 4 21:13:55 CST 2007
- [ENHANCEMENTS]
- Added --lines argument.
-
- [FIXES]
- Added -1 to the --help output. Thanks Elliot Shank.
-
- Added sanity checks for -m, --after_context and --before_context.
-
- -m and -C didn't play nicely together. Now they do.
-
-
-1.69_01 Fri Oct 26 2007
- [ENHANCEMENTS]
- Added -A, -B and -C options for showing context after, before
- and around your match, respectively. Thanks very much to Torsten
- Blix for writing code and tests for this most popular request.
-
- Skips directory autom4te.cache, a cache for autoconf tools, and
- cover_db, used by Devel::Cover.
-
-
- [FEATURES REMOVED]
- ack used to check for options that didn't make sense together,
- like "ack -l --group", and wouldn't run. Now, with the ability
- to have options in the environment, and in your .ackrc file, I
- was getting a lot of conflicts that didn't make sense. If I
- specify "ack -l --group" on the command line, I should get an
- error, but if I do "ack -l" and I have "--group" in my .ackrc,
- that shouldn't throw an error.
-
- So I know what I want the behavior to be, but I don't know how
- I want to code it. So, in the meantime, I'm removing the
- feature.
-
-
-1.68 Tue Oct 16 14:58:27 CDT 2007
- [FIXES]
- Implemented --with-filename and --no-filename, which were
- documented but never implemented. Thanks to Nigel Metheringham
- for the heads-up.
-
- [ENHANCEMENTS]
- Added Erlang support.
-
- [INTERNALS]
- Added tests for ack -h and -H.
-
-
-1.67_02 Sun Oct 7 14:50:38 CDT 2007
- [FIXES]
- ack no longer uses -T, but the tests still use it.
-
- Check for ~/_ackrc, too.
-
- --passthru would highlight every single zero-width space between
- characters. Oops. The effect would be to have your output be
- 15x larger than necessary.
-
- [ENHANCEMENTS]
- Added still more sanity checks on option conflicts.
-
- The output for -v negative searching now matches regular searching.
-
-
-1.67_01 Wed Sep 26 13:36:18 CDT 2007
- [FIXES]
- Color coding no longer "smears" the following line if the colored
- part of the match wraps to the next line.
-
- [ENHANCEMENTS]
- Support for an .ackrc file.
-
- Little bitty speed enhancements inside. Nothing major, but it
- all adds up, especially on something as commonly-used as ack.
-
- ack now runs under -T (taint mode). This is just a good idea,
- although there's nothing that ack does that executes code. Thanks to
- Bill Ricker for bringing this up via what turns out to be a non-issue,
- but still nudged me to do this.
-
-
-1.66 Fri Aug 24 00:04:02 CDT 2007
- [FIXES]
- New Macs are shipping with Test::Harness 1.85, and ack's test
- confuse it. I added a requirement of Test::Harness 2.50. The
- specific version is somewhat arbitrary.
-
- The -o and --output switches now properly show all matches on
- a line, not just the first one.
-
- [ENHANCEMENTS]
- Added the -1 switch, which makes ack only give one match of
- whatever it is you're looking for, and stop searching after it
- finds it. Say that you know there's a Perl file with "foo" in
- the name, you can do
-
- ack -1 --perl -g foo
-
- and ack will show the first file matching "foo", and stop once
- it finds the file.
-
- [INTERNALS]
- Split up more of the code into functions in App::Ack. This is
- to make things easier for Gabor Szabo's wack project.
-
-
-1.65_01 Fri Aug 10 00:28:55 CDT 2007
-
- [ENHANCEMENTS]
- Added --passthru switch, to print all lines, whether or not they
- match. This is something that could potentially get used a lot,
- so I'm not sure that --passthru is the best name. I'm open to
- suggestions.
-
- Added FORTRAN support. Thanks, Tod Hagan.
-
- Now ignores .pc directories for the Quilt patch management
- system. Thanks, Dirk Jagdmann.
-
- The -i switch now works with the -g switch. Thanks, Leland Johnson.
-
-
-1.64 Tue Jul 17 10:51:47 CDT 2007
-
- [ENHANCEMENTS]
- Sped up searching by using the /o flag. Duh!
-
- Added --hh for C header files.
-
- Specifically excluding a type with --no-whatever trumps its
- inclusion in --something-else. For example, if you want to
- search .c files, but excluding .h files, you can use --cc
- --no-hh. (In fact, that's the very reason I wrote this feature.)
-
- Added -g=regex to let you do -f listings, but filter out only
- those files matching the regex. This is exactly the same as
- "ack -f | ack regex".
-
- The standalone version of ack gets unused functions pruned out
- from it.
-
- Removed the discussion of -A, -B and -C which doesn't work yet.
-
-
-1.63_03 Thu Jun 14 09:47:39 CDT 2007
-
- [FIXES]
- The tests didn't clear ACK_OPTIONS before running, so if you
- set this useful environment variable, your tests would fail.
- Thanks, Michael Hendricks.
-
- [ENHANCEMENTS]
- Added a filetype of "--text", which matches any text file. This
- is off by default, just as --binary is.
-
- Added a filetype of "--skipped", which matches any file that
- ack skips, like core dumps and backup files. It will NOT
- include files that are in ignored directories like blib/ and
- .svn/
-
-
-1.63_02 Thu Jun 14 09:39:23 CDT 2007
- Buggy release. Ignore.
-
-
-1.63_01 Tue Jun 5 2007
- [THINGS THAT MAY BREAK FOR YOU]
- The changes I made to detect if ack is outputting to the screen
- may break some automated build tools. If so, please contact
- me. That's why this is a dev release.
-
- [FIXES]
- Colorized output to the screen is now the default, correctly.
- I got rid of the is_interactive() I took from IO::Interactive
- and just checked for C<-t *STDOUT>, because that's what we're
- really checking for: Is the output going to the screen?
-
-
-1.62 Mon May 21 15:22:19 CDT 2007
-
- [THINGS THAT MAY BREAK FOR YOU]
- The extensions .tt and .ttml are no longer part of the --perl
- type. They are now only in the --tt type.
-
- [FIXES]
- RT #26953: Util.pm was in the wrong directory, but only the
- Perl from Darwinports complained, because apparently most other
- Perl installs have "." in @INC.
-
- RT #25391: Fixed test failures under Win32.
-
- Spelled Slaven Rezić's name properly. Look, my first utf-8 string!
-
- [ENHANCEMENTS]
- Added .properties extension for --java.
-
- Added -L as a negation to -l. This is equivalent to -l -v.
-
- Added more GNU-style long opts. Thanks to Ævar Arnfjörð Bjarmason,
- my second utf-8 string.
-
-
-1.60 Fri Mar 9 22:34:15 CST 2007
-
- [FIXES]
- ack should behave better when running under a shell now.
-
- [ENHANCEMENTS]
- ack now recognizes makefiles and Visual Basic files.
-
- Added new extensions for Mason per
- http://masonhq.com/?FAQ:ServerConfiguration#h-what_filename_extensions_should_i_use_for_mason_components_
- Thanks, Elias Lutfallah.
-
- Added .rxml to --ruby. Thanks, Ian Langworth.
-
- Added .php3, .php4 and .php5 to --php5. Added --jsp extensions.
- Thanks, Stephen Steneker.
-
- Teeny speed optimizations on some regexes.
-
- Changed App::Ack::should_ignore to ::is_searchable() (and
- reversed the meaning).
-
- Added error checking on file closes.
-
- Improved how it knows if it's running interactive by stealing
- is_interactive() from IO::Interactive.
-
- [DOCUMENTATION]
- Added example of using with vim. Thanks, Mark Stosberg.
-
-
-1.58 Thu Jan 18 22:46:36 CST 2007
-
- [THINGS THAT MAY BREAK FOR YOU]
- The PHP list of extensions no longer includes .htm and .html.
-
- [FIXES]
- Directories with a file named "0" would stop ack's searching.
-
- [ENHANCEMENTS]
- Added a --tcl flag. Thanks, Matt Diephouse.
-
-
-1.56 Wed Jan 17 12:55:38 CST 2007
-
- [FIXES]
- Now correctly handles filetypes of files with multiple periods.
-
- [ENHANCEMENTS]
- Added .xs to the list of --cc files.
-
- Warning messages now include the name "ack" at the beginning
- of them.
-
- Now skips .git directories.
-
-
-1.54 Sun Jan 7 22:34:57 CST 2007
-
- [THINGS THAT MAY BREAK FOR YOU]
- ack no longer follows symlinks by default, except for starting
- points specified on the command line.
-
- [ENHANCEMENTS]
- Added the --follow/--nofollow switches for following symlinks.
-
- Added .sty and .cls to the --tex files. Thanks, Uwe Voelker.
-
- [FIXES]
- t/filetypes.t would fail sometimes based on hash order.
-
-
-1.52 Fri Dec 22 00:41:45 CST 2006
-
- [FIXES]
- In 1.51_01, I changed how we check the -B of a file, but it's
- not reliable. Perl's -B operator acts differently if you call
- -B $filename vs. -B $fh.
-
- [ENHANCEMENTS]
- I changed some internal code to figure out a file's extension.
- By using my own, instead of File::Basename, I cut out over 50%
- of the run time on my test of acking through a large tree.
-
- When using -a, it's not necessary to determine the filetype
- before searching, only if we should ignore the file or not.
- This cut out an additional 10% or so of execution time when
- doing -a searces.
-
- [INTERNALS]
- We no longer need to build a list of all used suffixes. This
- makes startup quicker.
-
-
-1.51_01 Mon Dec 18 12:59:28 CST 2006
-
- Development version. I'm putting this out so hardcore ack users
- can test out some new features.
-
- [FIXES]
- Tests now pass under Windows.
-
- [FEATURES]
- You can now set the colors for display with the ACK_COLOR_MATCH
- and ACK_COLOR_FILENAME environment variables.
-
- [ENHANCEMENTS]
- ack-standalone now builds with a shebang line of "#!/usr/bin/env
- perl", which is more compatible. Of course, you're welcome to
- change it to whatever you like.
-
- I now check for binaryness on the already-open file, rather
- than reopening it from the filesystem. This gave me about a
- 1% speedup in my tests.
-
- Started adding sanity checks to the options. For instance, it
- doesn't make sense to use -l and -C together, so ack will
- complain about that.
-
- Added a --sort-files option.
-
- [INTERNALS]
- More testing on XML and PHP detection courtesy Bill Ricker.
-
- Lots of refactoring of search() in preparation for showing
- context around matches.
View
62 btg/ack-help-types.txt
@@ -1,62 +0,0 @@
-Usage: ack [OPTION]... PATTERN [FILES]
-
-The following is the list of filetypes supported by ack. You can
-specify a file type with the --type=TYPE format, or the --TYPE
-format. For example, both --type=perl and --perl work.
-
-Note that some extensions may appear in multiple types. For example,
-.pod files are both Perl and Parrot.
-
- --[no]actionscript .as .mxml
- --[no]ada .ada .adb .ads
- --[no]asm .asm .s
- --[no]batch .bat .cmd
- --[no]binary Binary files, as defined by Perl's -B op (default: off)
- --[no]cc .c .h .xs
- --[no]cfmx .cfc .cfm .cfml
- --[no]clojure .clj
- --[no]cpp .cpp .cc .cxx .m .hpp .hh .h .hxx
- --[no]csharp .cs
- --[no]css .css
- --[no]delphi .pas .int .dfm .nfm .dof .dpk .dproj .groupproj .bdsgroup .bdsproj
- --[no]elisp .el
- --[no]erlang .erl .hrl
- --[no]fortran .f .f77 .f90 .f95 .f03 .for .ftn .fpp
- --[no]go .go
- --[no]groovy .groovy .gtmpl .gpp .grunit
- --[no]haskell .hs .lhs
- --[no]hh .h
- --[no]html .htm .html .shtml .xhtml
- --[no]java .java .properties
- --[no]js .js
- --[no]jsp .jsp .jspx .jhtm .jhtml
- --[no]lisp .lisp .lsp
- --[no]lua .lua
- --[no]make Makefiles (including *.mk and *.mak)
- --[no]mason .mas .mhtml .mpl .mtxt
- --[no]objc .m .h
- --[no]objcpp .mm .h
- --[no]ocaml .ml .mli
- --[no]parrot .pir .pasm .pmc .ops .pod .pg .tg
- --[no]perl .pl .pm .pod .t
- --[no]php .php .phpt .php3 .php4 .php5 .phtml
- --[no]plone .pt .cpt .metadata .cpy .py
- --[no]python .py
- --[no]rake Rakefiles
- --[no]ruby .rb .rhtml .rjs .rxml .erb .rake .spec
- --[no]scala .scala
- --[no]scheme .scm .ss
- --[no]shell .sh .bash .csh .tcsh .ksh .zsh
- --[no]skipped Files, but not directories, normally skipped by ack (default: off)
- --[no]smalltalk .st
- --[no]sql .sql .ctl
- --[no]tcl .tcl .itcl .itk
- --[no]tex .tex .cls .sty
- --[no]text Text files, as defined by Perl's -T op (default: off)
- --[no]tt .tt .tt2 .ttml
- --[no]vb .bas .cls .frm .ctl .vb .resx
- --[no]verilog .v .vh .sv
- --[no]vhdl .vhd .vhdl
- --[no]vim .vim
- --[no]xml .xml .dtd .xsl .xslt .ent
- --[no]yaml .yaml .yml
View
128 btg/ack-help.txt
@@ -1,128 +0,0 @@
-Usage: ack [OPTION]... PATTERN [FILE]
-
-Search for PATTERN in each source file in the tree from cwd on down.
-If [FILES] is specified, then only those files/directories are checked.
-ack may also search STDIN, but only if no FILE are specified, or if
-one of FILES is "-".
-
-Default switches may be specified in ACK_OPTIONS environment variable or
-an .ackrc file. If you want no dependency on the environment, turn it
-off with --noenv.
-
-Example: ack -i select
-
-Searching:
- -i, --ignore-case Ignore case distinctions in PATTERN
- --[no]smart-case Ignore case distinctions in PATTERN,
- only if PATTERN contains no upper case
- Ignored if -i is specified
- -v, --invert-match Invert match: select non-matching lines
- -w, --word-regexp Force PATTERN to match only whole words
- -Q, --literal Quote all metacharacters; PATTERN is literal
-
-Search output:
- --line=NUM Only print line(s) NUM of each file
- -l, --files-with-matches
- Only print filenames containing matches
- -L, --files-without-matches
- Only print filenames with no matches
- -o Show only the part of a line matching PATTERN
- (turns off text highlighting)
- --passthru Print all lines, whether matching or not
- --output=expr Output the evaluation of expr for each line
- (turns off text highlighting)
- --match PATTERN Specify PATTERN explicitly.
- -m, --max-count=NUM Stop searching in each file after NUM matches
- -1 Stop searching after one match of any kind
- -H, --with-filename Print the filename for each match
- -h, --no-filename Suppress the prefixing filename on output
- -c, --count Show number of lines matching per file
- --column Show the column number of the first match
-
- -A NUM, --after-context=NUM
- Print NUM lines of trailing context after matching
- lines.
- -B NUM, --before-context=NUM
- Print NUM lines of leading context before matching
- lines.
- -C [NUM], --context[=NUM]
- Print NUM lines (default 2) of output context.
-
- --print0 Print null byte as separator between filenames,
- only works with -f, -g, -l, -L or -c.
-
-File presentation:
- --pager=COMMAND Pipes all ack output through COMMAND. For example,
- --pager="less -R". Ignored if output is redirected.
- --nopager Do not send output through a pager. Cancels any
- setting in ~/.ackrc, ACK_PAGER or ACK_PAGER_COLOR.
- --[no]heading Print a filename heading above each file's results.
- (default: on when used interactively)
- --[no]break Print a break between results from different files.
- (default: on when used interactively)
- --group Same as --heading --break
- --nogroup Same as --noheading --nobreak
- --[no]color Highlight the matching text (default: on unless
- output is redirected, or on Windows)
- --[no]colour Same as --[no]color
- --color-filename=COLOR
- --color-match=COLOR
- --color-lineno=COLOR Set the color for filenames, matches, and line numbers.
- --flush Flush output immediately, even when ack is used
- non-interactively (when output goes to a pipe or
- file).
-
-File finding:
- -f Only print the files found, without searching.
- The PATTERN must not be specified.
- -g REGEX Same as -f, but only print files matching REGEX.
- --sort-files Sort the found files lexically.
- --invert-file-match Print/search handle files that do not match -g/-G.
- --show-types Show which types each file has.
-
-File inclusion/exclusion:
- -a, --all-types All file types searched;
- Ignores CVS, .svn and other ignored directories
- -u, --unrestricted All files and directories searched
- --[no]ignore-dir=name Add/Remove directory from the list of ignored dirs
- -r, -R, --recurse Recurse into subdirectories (ack's default behavior)
- -n, --no-recurse No descending into subdirectories
- -G REGEX Only search files that match REGEX
-
- --perl Include only Perl files.
- --type=perl Include only Perl files.
- --noperl Exclude Perl files.
- --type=noperl Exclude Perl files.
- See "ack --help type" for supported filetypes.
-
- --type-set TYPE=.EXTENSION[,.EXT2[,...]]
- Files with the given EXTENSION(s) are recognized as
- being of type TYPE. This replaces an existing
- definition for type TYPE.
- --type-add TYPE=.EXTENSION[,.EXT2[,...]]
- Files with the given EXTENSION(s) are recognized as
- being of (the existing) type TYPE
-
- --[no]follow Follow symlinks. Default is off.
-
- Directories ignored by default:
- autom4te.cache, blib, _build, .bzr, .cdv, cover_db, CVS, _darcs, ~.dep,
- ~.dot, .git, .hg, _MTN, ~.nib, .pc, ~.plst, RCS, SCCS, _sgbak and .svn
-
- Files not checked for type:
- /~$/ - Unix backup files
- /#.+#$/ - Emacs swap files
- /[._].*\.swp$/ - Vi(m) swap files
- /core\.\d+$/ - core dumps
- /[.-]min\.js$/ - Minified javascript files
-
-Miscellaneous:
- --noenv Ignore environment variables and ~/.ackrc
- --help This help
- --man Man page
- --version Display version & copyright
- --thpppt Bill the Cat
-
-Exit status is 0 if match, 1 if no match.
-
-This is version 1.96 of ack.
View
77 btg/ack-lists.php
@@ -1,77 +0,0 @@
-<table style="border:1px solid #aa0033; font-size:small" align=right>
- <tr>
- <td colspan=2 align=center>
- <img src="http://groups.google.com/groups/img/groups_medium.gif" height=58 width=150 alt="Google Groups">
- </td>
-</tr>
-
-<tr>
- <td colspan=2 align=center><b>Subscribe to ack announcements</b></td>
- </tr>
- <form action="http://groups.google.com/group/ack-announce/boxsubscribe">
- <tr>
- <td>Email: <input type=text name=email></td>
- <td>
- <table
- style="background-color:#ffcc33;padding:2px;border:2px outset #ffcc33;">
- <tr>
- <td>
- <input type=submit name="sub" value="Subscribe">
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </form>
- <tr><td colspan=2 align=center>
- <a href="http://groups.google.com/group/ack-announce">Browse Archives</a> at <a href="http://groups.google.com/">groups.google.com</a>
- </td></tr>
- <tr><td colspan=2><hr></td></tr>
-
-
-<tr>
- <td colspan=2 align=center><b>Subscribe to ack dev/users</b></td>
- </tr>
- <form action="http://groups.google.com/group/ack-users/boxsubscribe">
- <tr>
- <td>Email: <input type=text name=email></td>
- <td>
- <table
- style="background-color:#ffcc33;padding:2px;border:2px outset #ffcc33;">
- <tr>
- <td>
- <input type=submit name="sub" value="Subscribe">
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </form>
- <tr><td colspan=2 align=center>
- <a href="http://groups.google.com/group/ack-users">Browse Archives</a> at <a href="http://groups.google.com/">groups.google.com</a>
- </td></tr>
- <tr><td colspan=2><hr></td></tr>
-
-
- <tr>
- <td colspan=2 align=center><b>Subscribe to ack commits</b></td>
- </tr>
- <form action="http://groups.google.com/group/ack-commits/boxsubscribe">
- <tr>
- <td>Email: <input type=text name=email></td>
- <td>
- <table
- style="background-color:#ffcc33;padding:2px;border:2px outset #ffcc33;">
- <tr>
- <td>
- <input type=submit name="sub" value="Subscribe">
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </form>
- <tr><td colspan=2 align=center>
- <a href="http://groups.google.com/group/ack-commits">Browse Archives</a> at <a href="http://groups.google.com/">groups.google.com</a>
- </td></tr>
-</table>
View
2,783 btg/ack-standalone
@@ -1,2783 +0,0 @@
-#!/usr/bin/env perl
-#
-# This file, ack, is generated code.
-# Please DO NOT EDIT or send patches for it.
-#
-# Please take a look at the source from
-# https://github.com/petdance/ack
-# and submit patches against the individual files
-# that build ack.
-#
-
-use warnings;
-use strict;
-
-our $VERSION = '1.96';
-# Check http://betterthangrep.com/ for updates
-
-# These are all our globals.
-
-
-MAIN: {
- if ( $App::Ack::VERSION ne $main::VERSION ) {
- App::Ack::die( "Program/library version mismatch\n\t$0 is $main::VERSION\n\t$INC{'App/Ack.pm'} is $App::Ack::VERSION" );
- }
-
- # Do preliminary arg checking;
- my $env_is_usable = 1;
- for ( @ARGV ) {
- last if ( $_ eq '--' );
-
- # Priorities! Get the --thpppt checking out of the way.
- /^--th[pt]+t+$/ && App::Ack::_thpppt($_);
-
- # See if we want to ignore the environment. (Don't tell Al Gore.)
- if ( /^--(no)?env$/ ) {
- $env_is_usable = defined $1 ? 0 : 1;
- }
- }
- if ( $env_is_usable ) {
- unshift( @ARGV, App::Ack::read_ackrc() );
- }
- else {
- my @keys = ( 'ACKRC', grep { /^ACK_/ } keys %ENV );
- delete @ENV{@keys};
- }
- App::Ack::load_colors();
-
- if ( exists $ENV{ACK_SWITCHES} ) {
- App::Ack::warn( 'ACK_SWITCHES is no longer supported. Use ACK_OPTIONS.' );
- }
-
- if ( !@ARGV ) {
- App::Ack::show_help();
- exit 1;
- }
-
- main();
-}
-
-sub main {
- my $opt = App::Ack::get_command_line_options();
-
- $| = 1 if $opt->{flush}; # Unbuffer the output if flush mode
-
- if ( App::Ack::input_from_pipe() ) {
- # We're going into filter mode
- for ( qw( f g l ) ) {
- $opt->{$_} and App::Ack::die( "Can't use -$_ when acting as a filter." );
- }
- $opt->{show_filename} = 0;
- $opt->{regex} = App::Ack::build_regex( defined $opt->{regex} ? $opt->{regex} : shift @ARGV, $opt );
- if ( my $nargs = @ARGV ) {
- my $s = $nargs == 1 ? '' : 's';
- App::Ack::warn( "Ignoring $nargs argument$s on the command-line while acting as a filter." );
- }
-
- my $res = App::Ack::Resource::Basic->new( '-' );
- my $nmatches;
- if ( $opt->{count} ) {
- $nmatches = App::Ack::search_and_list( $res, $opt );
- }
- else {
- # normal searching
- $nmatches = App::Ack::search_resource( $res, $opt );
- }
- $res->close();
- App::Ack::exit_from_ack( $nmatches );
- }
-
- my $file_matching = $opt->{f} || $opt->{lines};
- if ( $file_matching ) {
- App::Ack::die( "Can't specify both a regex ($opt->{regex}) and use one of --line, -f or -g." ) if $opt->{regex};
- }
- else {
- $opt->{regex} = App::Ack::build_regex( defined $opt->{regex} ? $opt->{regex} : shift @ARGV, $opt );
- }
-
- # check that all regexes do compile fine
- App::Ack::check_regex( $_ ) for ( $opt->{regex}, $opt->{G} );
-
- my $what = App::Ack::get_starting_points( \@ARGV, $opt );
- my $iter = App::Ack::get_iterator( $what, $opt );
- App::Ack::filetype_setup();
-
- my $nmatches = 0;
-
- App::Ack::set_up_pager( $opt->{pager} ) if defined $opt->{pager};
- if ( $opt->{f} ) {
- $nmatches = App::Ack::print_files( $iter, $opt );
- }
- elsif ( $opt->{l} || $opt->{count} ) {
- $nmatches = App::Ack::print_files_with_matches( $iter, $opt );
- }
- else {
- $nmatches = App::Ack::print_matches( $iter, $opt );
- }
- close $App::Ack::fh;
- App::Ack::exit_from_ack( $nmatches );
-}
-
-=head1 NAME
-
-ack - grep-like text finder
-
-=head1 SYNOPSIS
-
- ack [options] PATTERN [FILE...]
- ack -f [options] [DIRECTORY...]
-
-=head1 DESCRIPTION
-
-Ack is designed as a replacement for 99% of the uses of F<grep>.
-
-Ack searches the named input FILEs (or standard input if no files are
-named, or the file name - is given) for lines containing a match to the
-given PATTERN. By default, ack prints the matching lines.
-
-Ack can also list files that would be searched, without actually searching
-them, to let you take advantage of ack's file-type filtering capabilities.
-
-=head1 FILE SELECTION
-
-I<ack> is intelligent about the files it searches. It knows about
-certain file types, based on both the extension on the file and,
-in some cases, the contents of the file. These selections can be
-made with the B<--type> option.
-
-With no file selections, I<ack> only searches files of types that
-it recognizes. If you have a file called F<foo.wango>, and I<ack>
-doesn't know what a .wango file is, I<ack> won't search it.
-
-The B<-a> option tells I<ack> to select all files, regardless of
-type.
-
-Some files will never be selected by I<ack>, even with B<-a>,
-including:
-
-=over 4
-
-=item * Backup files: Files matching F<#*#> or ending with F<~>.
-
-=item * Coredumps: Files matching F<core.\d+>
-
-=back
-
-However, I<ack> always searches the files given on the command line,
-no matter what type. Furthermore, by specifying the B<-u> option all
-files will be searched.
-
-=head1 DIRECTORY SELECTION
-
-I<ack> descends through the directory tree of the starting directories
-specified. However, it will ignore the shadow directories used by
-many version control systems, and the build directories used by the
-Perl MakeMaker system. You may add or remove a directory from this
-list with the B<--[no]ignore-dir> option. The option may be repeated
-to add/remove multiple directories from the ignore list.
-
-For a complete list of directories that do not get searched, run
-F<ack --help>.
-
-=head1 WHEN TO USE GREP
-
-I<ack> trumps I<grep> as an everyday tool 99% of the time, but don't
-throw I<grep> away, because there are times you'll still need it.
-
-E.g., searching through huge files looking for regexes that can be
-expressed with I<grep> syntax should be quicker with I<grep>.
-
-If your script or parent program uses I<grep> C<--quiet> or
-C<--silent> or needs exit 2 on IO error, use I<grep>.
-
-=head1 OPTIONS
-
-=over 4
-
-=item B<-a>, B<--all>
-
-Operate on all files, regardless of type (but still skip directories
-like F<blib>, F<CVS>, etc.)
-
-=item B<-A I<NUM>>, B<--after-context=I<NUM>>
-
-Print I<NUM> lines of trailing context after matching lines.
-
-=item B<-B I<NUM>>, B<--before-context=I<NUM>>
-
-Print I<NUM> lines of leading context before matching lines.
-
-=item B<-C [I<NUM>]>, B<--context[=I<NUM>]>
-
-Print I<NUM> lines (default 2) of context around matching lines.
-
-=item B<-c>, B<--count>
-
-Suppress normal output; instead print a count of matching lines for
-each input file. If B<-l> is in effect, it will only show the
-number of lines for each file that has lines matching. Without
-B<-l>, some line counts may be zeroes.
-
-If combined with B<-h> (B<--no-filename>) ack outputs only one total count.
-
-=item B<--color>, B<--nocolor>
-
-B<--color> highlights the matching text. B<--nocolor> supresses
-the color. This is on by default unless the output is redirected.
-
-On Windows, this option is off by default unless the
-L<Win32::Console::ANSI> module is installed or the C<ACK_PAGER_COLOR>
-environment variable is used.
-
-=item B<--color-filename=I<color>>
-
-Sets the color to be used for filenames.
-
-=item B<--color-match=I<color>>
-
-Sets the color to be used for matches.
-
-=item B<--color-lineno=I<color>>
-
-Sets the color to be used for line numbers.
-
-=item B<--column>
-
-Show the column number of the first match. This is helpful for editors
-that can place your cursor at a given position.
-
-=item B<--env>, B<--noenv>
-
-B<--noenv> disables all environment processing. No F<.ackrc> is read
-and all environment variables are ignored. By default, F<ack> considers
-F<.ackrc> and settings in the environment.
-
-=item B<--flush>
-
-B<--flush> flushes output immediately. This is off by default
-unless ack is running interactively (when output goes to a pipe
-or file).
-
-=item B<-f>
-
-Only print the files that would be searched, without actually doing
-any searching. PATTERN must not be specified, or it will be taken as
-a path to search.
-
-=item B<--follow>, B<--nofollow>
-
-Follow or don't follow symlinks, other than whatever starting files
-or directories were specified on the command line.
-
-This is off by default.
-
-=item B<-G I<REGEX>>
-
-Only paths matching I<REGEX> are included in the search. The entire
-path and filename are matched against I<REGEX>, and I<REGEX> is a
-Perl regular expression, not a shell glob.
-
-The options B<-i>, B<-w>, B<-v>, and B<-Q> do not apply to this I<REGEX>.
-
-=item B<-g I<REGEX>>
-
-Print files where the relative path + filename matches I<REGEX>. This option is
-a convenience shortcut for B<-f> B<-G I<REGEX>>.
-
-The options B<-i>, B<-w>, B<-v>, and B<-Q> do not apply to this I<REGEX>.
-
-=item B<--group>, B<--nogroup>
-
-B<--group> groups matches by file name with. This is the default when
-used interactively.
-
-B<--nogroup> prints one result per line, like grep. This is the default
-when output is redirected.
-
-=item B<-H>, B<--with-filename>
-
-Print the filename for each match.
-
-=item B<-h>, B<--no-filename>
-
-Suppress the prefixing of filenames on output when multiple files are
-searched.
-
-=item B<--help>
-
-Print a short help statement.
-
-=item B<-i>, B<--ignore-case>
-
-Ignore case in the search strings.
-
-This applies only to the PATTERN, not to the regexes given for the B<-g>
-and B<-G> options.
-
-=item B<--[no]ignore-dir=I<DIRNAME>>
-
-Ignore directory (as CVS, .svn, etc are ignored). May be used multiple times
-to ignore multiple directories. For example, mason users may wish to include
-B<--ignore-dir=data>. The B<--noignore-dir> option allows users to search
-directories which would normally be ignored (perhaps to research the contents
-of F<.svn/props> directories).
-
-The I<DIRNAME> must always be a simple directory name. Nested directories like
-F<foo/bar> are NOT supported. You would need to specify B<--ignore-dir=foo> and
-then no files from any foo directory are taken into account by ack unless given
-explicitly on the command line.
-
-=item B<--line=I<NUM>>
-
-Only print line I<NUM> of each file. Multiple lines can be given with multiple
-B<--line> options or as a comma separated list (B<--line=3,5,7>). B<--line=4-7>
-also works. The lines are always output in ascending order, no matter the
-order given on the command line.
-
-=item B<-l>, B<--files-with-matches>
-
-Only print the filenames of matching files, instead of the matching text.
-
-=item B<-L>, B<--files-without-matches>
-
-Only print the filenames of files that do I<NOT> match. This is equivalent
-to specifying B<-l> and B<-v>.
-
-=item B<--match I<REGEX>>
-
-Specify the I<REGEX> explicitly. This is helpful if you don't want to put the
-regex as your first argument, e.g. when executing multiple searches over the
-same set of files.
-
- # search for foo and bar in given files
- ack file1 t/file* --match foo
- ack file1 t/file* --match bar
-
-=item B<-m=I<NUM>>, B<--max-count=I<NUM>>
-
-Stop reading a file after I<NUM> matches.
-
-=item B<--man>
-
-Print this manual page.
-
-=item B<-n>, B<--no-recurse>
-
-No descending into subdirectories.
-
-=item B<-o>
-
-Show only the part of each line matching PATTERN (turns off text
-highlighting)
-
-=item B<--output=I<expr>>
-
-Output the evaluation of I<expr> for each line (turns off text
-highlighting)
-
-=item B<--pager=I<program>>
-
-Direct ack's output through I<program>. This can also be specified
-via the C<ACK_PAGER> and C<ACK_PAGER_COLOR> environment variables.
-
-Using --pager does not suppress grouping and coloring like piping
-output on the command-line does.
-
-=item B<--passthru>
-
-Prints all lines, whether or not they match the expression. Highlighting
-will still work, though, so it can be used to highlight matches while
-still seeing the entire file, as in:
-
- # Watch a log file, and highlight a certain IP address
- $ tail -f ~/access.log | ack --passthru 123.45.67.89
-
-=item B<--print0>
-
-Only works in conjunction with -f, -g, -l or -c (filename output). The filenames
-are output separated with a null byte instead of the usual newline. This is
-helpful when dealing with filenames that contain whitespace, e.g.
-
- # remove all files of type html
- ack -f --html --print0 | xargs -0 rm -f
-
-=item B<-Q>, B<--literal>
-
-Quote all metacharacters in PATTERN, it is treated as a literal.
-
-This applies only to the PATTERN, not to the regexes given for the B<-g>
-and B<-G> options.
-
-=item B<-r>, B<-R>, B<--recurse>
-
-Recurse into sub-directories. This is the default and just here for
-compatibility with grep. You can also use it for turning B<--no-recurse> off.
-
-=item B<--smart-case>, B<--no-smart-case>
-
-Ignore case in the search strings if PATTERN contains no uppercase
-characters. This is similar to C<smartcase> in vim. This option is
-off by default.
-
-B<-i> always overrides this option.
-
-This applies only to the PATTERN, not to the regexes given for the
-B<-g> and B<-G> options.
-
-=item B<--sort-files>
-
-Sorts the found files lexically. Use this if you want your file
-listings to be deterministic between runs of I<ack>.
-
-=item B<--show-types>
-
-Outputs the filetypes that ack associates with each file.
-
-Works with B<-f> and B<-g> options.
-
-=item B<--thpppt>
-
-Display the all-important Bill The Cat logo. Note that the exact
-spelling of B<--thpppppt> is not important. It's checked against
-a regular expression.
-
-=item B<--type=TYPE>, B<--type=noTYPE>
-
-Specify the types of files to include or exclude from a search.
-TYPE is a filetype, like I<perl> or I<xml>. B<--type=perl> can
-also be specified as B<--perl>, and B<--type=noperl> can be done
-as B<--noperl>.
-
-If a file is of both type "foo" and "bar", specifying --foo and
---nobar will exclude the file, because an exclusion takes precedence
-over an inclusion.
-
-Type specifications can be repeated and are ORed together.
-
-See I<ack --help=types> for a list of valid types.
-
-=item B<--type-add I<TYPE>=I<.EXTENSION>[,I<.EXT2>[,...]]>
-
-Files with the given EXTENSION(s) are recognized as being of (the
-existing) type TYPE. See also L</"Defining your own types">.
-
-
-=item B<--type-set I<TYPE>=I<.EXTENSION>[,I<.EXT2>[,...]]>
-
-Files with the given EXTENSION(s) are recognized as being of type
-TYPE. This replaces an existing definition for type TYPE. See also
-L</"Defining your own types">.
-
-=item B<-u>, B<--unrestricted>
-
-All files and directories (including blib/, core.*, ...) are searched,
-nothing is skipped. When both B<-u> and B<--ignore-dir> are used, the
-B<--ignore-dir> option has no effect.
-
-=item B<-v>, B<--invert-match>
-
-Invert match: select non-matching lines
-
-This applies only to the PATTERN, not to the regexes given for the B<-g>
-and B<-G> options.
-
-=item B<--version>
-
-Display version and copyright information.
-
-=item B<-w>, B<--word-regexp>
-
-Force PATTERN to match only whole words. The PATTERN is wrapped with
-C<\b> metacharacters.
-
-This applies only to the PATTERN, not to the regexes given for the B<-g>
-and B<-G> options.
-
-=item B<-1>
-
-Stops after reporting first match of any kind. This is different
-from B<--max-count=1> or B<-m1>, where only one match per file is
-shown. Also, B<-1> works with B<-f> and B<-g>, where B<-m> does
-not.
-
-=back
-
-=head1 THE .ackrc FILE
-
-The F<.ackrc> file contains command-line options that are prepended
-to the command line before processing. Multiple options may live
-on multiple lines. Lines beginning with a # are ignored. A F<.ackrc>
-might look like this:
-
- # Always sort the files
- --sort-files
-
- # Always color, even if piping to a another program
- --color
-
- # Use "less -r" as my pager
- --pager=less -r
-
-Note that arguments with spaces in them do not need to be quoted,
-as they are not interpreted by the shell. Basically, each I<line>
-in the F<.ackrc> file is interpreted as one element of C<@ARGV>.
-
-F<ack> looks in your home directory for the F<.ackrc>. You can
-specify another location with the F<ACKRC> variable, below.
-
-If B<--noenv> is specified on the command line, the F<.ackrc> file
-is ignored.
-
-=head1 Defining your own types
-
-ack allows you to define your own types in addition to the predefined
-types. This is done with command line options that are best put into
-an F<.ackrc> file - then you do not have to define your types over and
-over again. In the following examples the options will always be shown
-on one command line so that they can be easily copy & pasted.
-
-I<ack --perl foo> searches for foo in all perl files. I<ack --help=types>
-tells you, that perl files are files ending
-in .pl, .pm, .pod or .t. So what if you would like to include .xs
-files as well when searching for --perl files? I<ack --type-add perl=.xs --perl foo>
-does this for you. B<--type-add> appends
-additional extensions to an existing type.
-
-If you want to define a new type, or completely redefine an existing
-type, then use B<--type-set>. I<ack --type-set
-eiffel=.e,.eiffel> defines the type I<eiffel> to include files with
-the extensions .e or .eiffel. So to search for all eiffel files
-containing the word Bertrand use I<ack --type-set eiffel=.e,.eiffel --eiffel Bertrand>.
-As usual, you can also write B<--type=eiffel>
-instead of B<--eiffel>. Negation also works, so B<--noeiffel> excludes
-all eiffel files from a search. Redefining also works: I<ack --type-set cc=.c,.h>
-and I<.xs> files no longer belong to the type I<cc>.
-
-When defining your own types in the F<.ackrc> file you have to use
-the following:
-
- --type-set=eiffel=.e,.eiffel
-
-or writing on separate lines
-
- --type-set
- eiffel=.e,.eiffel
-
-The following does B<NOT> work in the F<.ackrc> file:
-
- --type-set eiffel=.e,.eiffel
-
-
-In order to see all currently defined types, use I<--help types>, e.g.
-I<ack --type-set backup=.bak --type-add perl=.perl --help types>
-
-Restrictions:
-
-=over 4
-
-=item
-
-The types 'skipped', 'make', 'binary' and 'text' are considered "builtin" and
-cannot be altered.
-
-=item
-
-The shebang line recognition of the types 'perl', 'ruby', 'php', 'python',
-'shell' and 'xml' cannot be redefined by I<--type-set>, it is always
-active. However, the shebang line is only examined for files where the
-extension is not recognised. Therefore it is possible to say
-I<ack --type-set perl=.perl --type-set foo=.pl,.pm,.pod,.t --perl --nofoo> and
-only find your shiny new I<.perl> files (and all files with unrecognized extension
-and perl on the shebang line).
-
-=back
-
-=head1 ENVIRONMENT VARIABLES
-
-For commonly-used ack options, environment variables can make life much easier.
-These variables are ignored if B<--noenv> is specified on the command line.
-
-=over 4
-
-=item ACKRC
-
-Specifies the location of the F<.ackrc> file. If this file doesn't
-exist, F<ack> looks in the default location.
-
-=item ACK_OPTIONS
-
-This variable specifies default options to be placed in front of
-any explicit options on the command line.
-
-=item ACK_COLOR_FILENAME
-
-Specifies the color of the filename when it's printed in B<--group>
-mode. By default, it's "bold green".
-
-The recognized attributes are clear, reset, dark, bold, underline,
-underscore, blink, reverse, concealed black, red, green, yellow,
-blue, magenta, on_black, on_red, on_green, on_yellow, on_blue,
-on_magenta, on_cyan, and on_white. Case is not significant.
-Underline and underscore are equivalent, as are clear and reset.
-The color alone sets the foreground color, and on_color sets the
-background color.
-
-This option can also be set with B<--color-filename>.
-
-=item ACK_COLOR_MATCH
-
-Specifies the color of the matching text when printed in B<--color>
-mode. By default, it's "black on_yellow".
-
-This option can also be set with B<--color-match>.
-
-See B<ACK_COLOR_FILENAME> for the color specifications.
-
-=item ACK_COLOR_LINENO
-
-Specifies the color of the line number when printed in B<--color>
-mode. By default, it's "bold yellow".
-
-This option can also be set with B<--color-lineno>.
-
-See B<ACK_COLOR_FILENAME> for the color specifications.
-
-=item ACK_PAGER
-
-Specifies a pager program, such as C<more>, C<less> or C<most>, to which
-ack will send its output.
-
-Using C<ACK_PAGER> does not suppress grouping and coloring like
-piping output on the command-line does, except that on Windows
-ack will assume that C<ACK_PAGER> does not support color.
-
-C<ACK_PAGER_COLOR> overrides C<ACK_PAGER> if both are specified.
-
-=item ACK_PAGER_COLOR
-
-Specifies a pager program that understands ANSI color sequences.
-Using C<ACK_PAGER_COLOR> does not suppress grouping and coloring
-like piping output on the command-line does.
-
-If you are not on Windows, you never need to use C<ACK_PAGER_COLOR>.
-
-=back
-
-=head1 ACK & OTHER TOOLS
-
-=head2 Vim integration
-
-F<ack> integrates easily with the Vim text editor. Set this in your
-F<.vimrc> to use F<ack> instead of F<grep>:
-
- set grepprg=ack\ -a
-
-That examples uses C<-a> to search through all files, but you may
-use other default flags. Now you can search with F<ack> and easily
-step through the results in Vim:
-
- :grep Dumper perllib
-
-=head2 Emacs integration
-
-Phil Jackson put together an F<ack.el> extension that "provides a
-simple compilation mode ... has the ability to guess what files you
-want to search for based on the major-mode."
-
-L<http://www.shellarchive.co.uk/content/emacs.html>
-
-=head2 TextMate integration
-
-Pedro Melo is a TextMate user who writes "I spend my day mostly
-inside TextMate, and the built-in find-in-project sucks with large
-projects. So I hacked a TextMate command that was using find +
-grep to use ack. The result is the Search in Project with ack, and
-you can find it here:
-L<http://www.simplicidade.org/notes/archives/2008/03/search_in_proje.html>"
-
-=head2 Shell and Return Code
-
-For greater compatibility with I<grep>, I<ack> in normal use returns
-shell return or exit code of 0 only if something is found and 1 if
-no match is found.
-
-(Shell exit code 1 is C<$?=256> in perl with C<system> or backticks.)
-
-The I<grep> code 2 for errors is not used.
-
-If C<-f> or C<-g> are specified, then 0 is returned if at least one
-file is found. If no files are found, then 1 is returned.
-
-=cut
-
-=head1 DEBUGGING ACK PROBLEMS
-
-If ack gives you output you're not expecting, start with a few simple steps.
-
-=head2 Use B<--noenv>
-
-Your environment variables and F<.ackrc> may be doing things you're
-not expecting, or forgotten you specified. Use B<--noenv> to ignore
-your environment and F<.ackrc>.
-
-=head2 Use B<-f> to see what files you're scanning
-
-The reason I created B<-f> in the first place was as a debugging
-tool. If ack is not finding matches you think it should find, run
-F<ack -f> to see what files are being checked.
-
-=head1 TIPS
-
-=head2 Use the F<.ackrc> file.
-
-The F<.ackrc> is the place to put all your options you use most of
-the time but don't want to remember. Put all your --type-add and
---type-set definitions in it. If you like --smart-case, set it
-there, too. I also set --sort-files there.
-
-=head2 Use F<-f> for working with big codesets
-
-Ack does more than search files. C<ack -f --perl> will create a
-list of all the Perl files in a tree, ideal for sending into F<xargs>.
-For example:
-
- # Change all "this" to "that" in all Perl files in a tree.
- ack -f --perl | xargs perl -p -i -e's/this/that/g'
-
-or if you prefer:
-
- perl -p -i -e's/this/thatg/' $(ack -f --perl)
-
-=head2 Use F<-Q> when in doubt about metacharacters
-
-If you're searching for something with a regular expression
-metacharacter, most often a period in a filename or IP address, add
-the -Q to avoid false positives without all the backslashing. See
-the following example for more...
-
-=head2 Use ack to watch log files
-
-Here's one I used the other day to find trouble spots for a website
-visitor. The user had a problem loading F<troublesome.gif>, so I
-took the access log and scanned it with ack twice.
-
- ack -Q aa.bb.cc.dd /path/to/access.log | ack -Q -B5 troublesome.gif
-
-The first ack finds only the lines in the Apache log for the given
-IP. The second finds the match on my troublesome GIF, and shows
-the previous five lines from the log in each case.
-
-=head2 Share your knowledge
-
-Join the ack-users mailing list. Send me your tips and I may add
-them here.
-
-=head1 FAQ
-
-=head2 Why isn't ack finding a match in (some file)?
-
-Probably because it's of a type that ack doesn't recognize. ack's
-searching behavior is driven by filetype. B<If ack doesn't know
-what kind of file it is, ack ignores the file.>
-
-Use the C<-f> switch to see a list of files that ack will search
-for you.
-
-If you want ack to search files that it doesn't recognize, use the
-C<-a> switch.
-
-If you want ack to search every file, even ones that it always
-ignores like coredumps and backup files, use the C<-u> switch.
-
-=head2 Why does ack ignore unknown files by default?
-
-ack is designed by a programmer, for programmers, for searching
-large trees of code. Most codebases have a lot files in them which
-aren't source files (like compiled object files, source control
-metadata, etc), and grep wastes a lot of time searching through all
-of those as well and returning matches from those files.
-
-That's why ack's behavior of not searching things it doesn't recognize
-is one of its greatest strengths: the speed you get from only
-searching the things that you want to be looking at.
-
-=head2 Wouldn't it be great if F<ack> did search & replace?
-
-No, ack will always be read-only. Perl has a perfectly good way
-to do search & replace in files, using the C<-i>, C<-p> and C<-n>
-switches.
-
-You can certainly use ack to select your files to update. For
-example, to change all "foo" to "bar" in all PHP files, you can do
-this from the Unix shell:
-
- $ perl -i -p -e's/foo/bar/g' $(ack -f --php)
-
-=head2 Can you make ack recognize F<.xyz> files?
-
-That's an enhancement. Please see the section in the manual about
-enhancements.
-
-=head2 There's already a program/package called ack.
-
-Yes, I know.
-
-=head2 Why is it called ack if it's called ack-grep?
-
-The name of the program is "ack". Some packagers have called it
-"ack-grep" when creating packages because there's already a package
-out there called "ack" that has nothing to do with this ack.
-
-I suggest you make a symlink named F<ack> that points to F<ack-grep>
-because one of the crucial benefits of ack is having a name that's
-so short and simple to type.
-
-To do that, run this with F<sudo> or as root:
-
- ln -s /usr/bin/ack-grep /usr/bin/ack
-
-=head2 What does F<ack> mean?
-
-Nothing. I wanted a name that was easy to type and that you could
-pronounce as a single syllable.
-
-=head2 Can I do multi-line regexes?
-
-No, ack does not support regexes that match multiple lines. Doing
-so would require reading in the entire file at a time.
-
-If you want to see lines near your match, use the C<--A>, C<--B>
-and C<--C> switches for displaying context.
-
-=head1 AUTHOR
-
-Andy Lester, C<< <andy at petdance.com> >>
-
-=head1 BUGS
-
-Please report any bugs or feature requests to the issues list at
-Github: L<https://github.com/petdance/ack/issues>
-
-=head1 ENHANCEMENTS
-
-All enhancement requests MUST first be posted to the ack-users
-mailing list at L<http://groups.google.com/group/ack-users>. I
-will not consider a request without it first getting seen by other
-ack users. This includes requests for new filetypes.
-
-There is a list of enhancements I want to make to F<ack> in the ack
-issues list at Github: L<https://github.com/petdance/ack/issues>
-
-Patches are always welcome, but patches with tests get the most
-attention.
-
-=head1 SUPPORT
-
-Support for and information about F<ack> can be found at:
-
-=over 4
-
-=item * The ack homepage
-
-L<http://betterthangrep.com/>
-
-=item * The ack issues list at Github
-
-L<https://github.com/petdance/ack/issues>
-
-=item * AnnoCPAN: Annotated CPAN documentation
-
-L<http://annocpan.org/dist/ack>
-
-=item * CPAN Ratings
-
-L<http://cpanratings.perl.org/d/ack>
-
-=item * Search CPAN
-
-L<http://search.cpan.org/dist/ack>
-
-=item * Git source repository
-
-L<https://github.com/petdance/ack>
-
-=back
-
-=head1 ACKNOWLEDGEMENTS
-
-How appropriate to have I<ack>nowledgements!
-
-Thanks to everyone who has contributed to ack in any way, including
-Matthew Wild,
-Scott Kyle,
-Nick Hooey,
-Bo Borgerson,
-Mark Szymanski,
-Marq Schneider,
-Packy Anderson,
-JR Boyens,
-Dan Sully,
-Ryan Niebur,
-Kent Fredric,
-Mike Morearty,
-Ingmar Vanhassel,
-Eric Van Dewoestine,
-Sitaram Chamarty,
-Adam James,
-Richard Carlsson,
-Pedro Melo,
-AJ Schuster,
-Phil Jackson,
-Michael Schwern,
-Jan Dubois,
-Christopher J. Madsen,
-Matthew Wickline,
-David Dyck,
-Jason Porritt,
-Jjgod Jiang,
-Thomas Klausner,
-Uri Guttman,
-Peter Lewis,
-Kevin Riggle,
-Ori Avtalion,
-Torsten Blix,
-Nigel Metheringham,
-GE<aacute>bor SzabE<oacute>,
-Tod Hagan,
-Michael Hendricks,
-E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason,
-Piers Cawley,
-Stephen Steneker,
-Elias Lutfallah,
-Mark Leighton Fisher,
-Matt Diephouse,
-Christian Jaeger,
-Bill Sully,
-Bill Ricker,
-David Golden,
-Nilson Santos F. Jr,
-Elliot Shank,
-Merijn Broeren,
-Uwe Voelker,
-Rick Scott,
-Ask BjE<oslash>rn Hansen,
-Jerry Gay,
-Will Coleda,
-Mike O'Regan,
-Slaven ReziE<0x107>,
-Mark Stosberg,
-David Alan Pisoni,
-Adriano Ferreira,
-James Keenan,
-Leland Johnson,
-Ricardo Signes
-and Pete Krawczyk.
-
-=head1 COPYRIGHT & LICENSE
-
-Copyright 2005-2011 Andy Lester.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the Artistic License v2.0.
-
-=cut
-package File::Next;
-
-use strict;
-use warnings;
-
-
-our $VERSION = '1.06';
-
-
-
-use File::Spec ();
-
-
-our $name; # name of the current file
-our $dir; # dir of the current file
-
-our %files_defaults;
-our %skip_dirs;
-
-BEGIN {
- %files_defaults = (
- file_filter => undef,
- descend_filter => undef,
- error_handler => sub { CORE::die @_ },
- sort_files => undef,
- follow_symlinks => 1,
- );
- %skip_dirs = map {($_,1)} (File::Spec->curdir, File::Spec->updir);
-}
-
-
-sub files {
- ($_[0] eq __PACKAGE__) && die 'File::Next::files must not be invoked as File::Next->files';
-
- my ($parms,@queue) = _setup( \%files_defaults, @_ );
- my $filter = $parms->{file_filter};
-
- return sub {
- while (@queue) {
- my ($dir,$file,$fullpath) = splice( @queue, 0, 3 );
- if ( -f $fullpath ) {
- if ( $filter ) {
- local $_ = $file;
- local $File::Next::dir = $dir;
- local $File::Next::name = $fullpath;
- next if not $filter->();
- }
- return wantarray ? ($dir,$file,$fullpath) : $fullpath;
- }
- elsif ( -d _ ) {
- unshift( @queue, _candidate_files( $parms, $fullpath ) );
- }
- } # while
-
- return;
- }; # iterator
-}
-
-
-
-
-
-
-
-sub sort_standard($$) { return $_[0]->[1] cmp $_[1]->[1] }
-sub sort_reverse($$) { return $_[1]->[1] cmp $_[0]->[1] }
-
-sub reslash {
- my $path = shift;
-
- my @parts = split( /\//, $path );
-
- return $path if @parts < 2;
-
- return File::Spec->catfile( @parts );
-}
-
-
-
-sub _setup {
- my $defaults = shift;
- my $passed_parms = ref $_[0] eq 'HASH' ? {%{+shift}} : {}; # copy parm hash
-
- my %passed_parms = %{$passed_parms};
-
- my $parms = {};
- for my $key ( keys %{$defaults} ) {
- $parms->{$key} =
- exists $passed_parms{$key}
- ? delete $passed_parms{$key}
- : $defaults->{$key};
- }
-
- # Any leftover keys are bogus
- for my $badkey ( keys %passed_parms ) {
- my $sub = (caller(1))[3];
- $parms->{error_handler}->( "Invalid option passed to $sub(): $badkey" );
- }
-
- # If it's not a code ref, assume standard sort
- if ( $parms->{sort_files} && ( ref($parms->{sort_files}) ne 'CODE' ) ) {
- $parms->{sort_files} = \&sort_standard;
- }
- my @queue;
-
- for ( @_ ) {
- my $start = reslash( $_ );
- if (-d $start) {
- push @queue, ($start,undef,$start);
- }
- else {
- push @queue, (undef,$start,$start);
- }
- }
-
- return ($parms,@queue);
-}
-
-
-sub _candidate_files {
- my $parms = shift;
- my $dir = shift;
-
- my $dh;
- if ( !opendir $dh, $dir ) {
- $parms->{error_handler}->( "$dir: $!" );
- return;
- }
-
- my @newfiles;
- my $descend_filter = $parms->{descend_filter};
- my $follow_symlinks = $parms->{follow_symlinks};
- my $sort_sub = $parms->{sort_files};
-
- for my $file ( grep { !exists $skip_dirs{$_} } readdir $dh ) {
- my $has_stat;
-
- # Only do directory checking if we have a descend_filter
- my $fullpath = File::Spec->catdir( $dir, $file );
- if ( !$follow_symlinks ) {
- next if -l $fullpath;
- $has_stat = 1;
- }
-
- if ( $descend_filter ) {
- if ( $has_stat ? (-d _) : (-d $fullpath) ) {
- local $File::Next::dir = $fullpath;
- local $_ = $file;
- next if not $descend_filter->();
- }
- }
- if ( $sort_sub ) {
- push( @newfiles, [ $dir, $file, $fullpath ] );
- }
- else {
- push( @newfiles, $dir, $file, $fullpath );
- }
- }
- closedir $dh;
-
- if ( $sort_sub ) {
- return map { @{$_} } sort $sort_sub @newfiles;
- }
-
- return @newfiles;
-}
-
-
-1; # End of File::Next
-package App::Ack;
-
-use warnings;
-use strict;
-
-
-
-
-our $VERSION;
-our $COPYRIGHT;
-BEGIN {
- $VERSION = '1.96';
- $COPYRIGHT = 'Copyright 2005-2011 Andy Lester.';
-}
-
-our $fh;
-
-BEGIN {
- $fh = *STDOUT;
-}
-
-
-our %types;
-our %type_wanted;
-our %mappings;
-our %ignore_dirs;
-
-our $input_from_pipe;
-our $output_to_pipe;
-
-our $dir_sep_chars;
-our $is_cygwin;
-our $is_windows;
-
-use File::Spec ();
-use File::Glob ':glob';
-use Getopt::Long ();
-
-BEGIN {
- %ignore_dirs = (
- '.bzr' => 'Bazaar',
- '.cdv' => 'Codeville',
- '~.dep' => 'Interface Builder',
- '~.dot' => 'Interface Builder',
- '~.nib' => 'Interface Builder',
- '~.plst' => 'Interface Builder',
- '.git' => 'Git',
- '.hg' => 'Mercurial',
- '.pc' => 'quilt',
- '.svn' => 'Subversion',
- _MTN => 'Monotone',
- blib => 'Perl module building',
- CVS => 'CVS',
- RCS => 'RCS',
- SCCS => 'SCCS',
- _darcs => 'darcs',
- _sgbak => 'Vault/Fortress',
- 'autom4te.cache' => 'autoconf',
- 'cover_db' => 'Devel::Cover',
- _build => 'Module::Build',
- );
-
- %mappings = (
- actionscript => [qw( as mxml )],
- ada => [qw( ada adb ads )],
- asm => [qw( asm s )],
- batch => [qw( bat cmd )],
- binary => q{Binary files, as defined by Perl's -B op (default: off)},
- cc => [qw( c h xs )],
- cfmx => [qw( cfc cfm cfml )],
- clojure => [qw( clj )],
- cpp => [qw( cpp cc cxx m hpp hh h hxx )],
- csharp => [qw( cs )],
- css => [qw( css )],
- delphi => [qw( pas int dfm nfm dof dpk dproj groupproj bdsgroup bdsproj )],
- elisp => [qw( el )],
- erlang => [qw( erl hrl )],
- fortran => [qw( f f77 f90 f95 f03 for ftn fpp )],
- go => [qw( go )],
- groovy => [qw( groovy gtmpl gpp grunit )],
- haskell => [qw( hs lhs )],
- hh => [qw( h )],
- html => [qw( htm html shtml xhtml )],
- java => [qw( java properties )],
- js => [qw( js )],
- jsp => [qw( jsp jspx jhtm jhtml )],
- lisp => [qw( lisp lsp )],
- lua => [qw( lua )],
- make => q{Makefiles (including *.mk and *.mak)},
- mason => [qw( mas mhtml mpl mtxt )],
- objc => [qw( m h )],
- objcpp => [qw( mm h )],
- ocaml => [qw( ml mli )],
- parrot => [qw( pir pasm pmc ops pod pg tg )],
- perl => [qw( pl pm pm6 pod t )],
- php => [qw( php phpt php3 php4 php5 phtml)],
- plone => [qw( pt cpt metadata cpy py )],
- python => [qw( py )],
- rake => q{Rakefiles},
- ruby => [qw( rb rhtml rjs rxml erb rake spec )],
- scala => [qw( scala )],
- scheme => [qw( scm ss )],
- shell => [qw( sh bash csh tcsh ksh zsh )],
- skipped => q{Files, but not directories, normally skipped by ack (default: off)},
- smalltalk => [qw( st )],
- sql => [qw( sql ctl )],
- tcl => [qw( tcl itcl itk )],
- tex => [qw( tex cls sty )],
- text => q{Text files, as defined by Perl's -T op (default: off)},
- tt => [qw( tt tt2 ttml )],
- vb => [qw( bas cls frm ctl vb resx )],
- verilog => [qw( v vh sv )],
- vhdl => [qw( vhd vhdl )],
- vim => [qw( vim )],
- yaml => [qw( yaml yml )],
- xml => [qw( xml dtd xsl xslt ent )],
- );
-
- while ( my ($type,$exts) = each %mappings ) {
- if ( ref $exts ) {
- for my $ext ( @{$exts} ) {
- push( @{$types{$ext}}, $type );
- }
- }
- }
- # add manually Makefile extensions
- push @{$types{$_}}, 'make' for qw{ mk mak };
-
- # These have to be checked before any filehandle diddling.
- $output_to_pipe = not -t *STDOUT;
- $input_from_pipe = -p STDIN;
-
- $is_cygwin = ($^O eq 'cygwin');
- $is_windows = ($^O =~ /MSWin32/);
- $dir_sep_chars = $is_windows ? quotemeta( '\\/' ) : quotemeta( File::Spec->catfile( '', '' ) );
-}
-
-
-sub read_ackrc {
- my @files = ( $ENV{ACKRC} );
- my @dirs =
- $is_windows
- ? ( $ENV{HOME}, $ENV{USERPROFILE} )
- : ( '~', $ENV{HOME} );
- for my $dir ( grep { defined } @dirs ) {
- for my $file ( '.ackrc', '_ackrc' ) {
- push( @files, bsd_glob( "$dir/$file", GLOB_TILDE ) );
- }
- }
- for my $filename ( @files ) {
- if ( defined $filename && -e $filename ) {
- open( my $fh, '<', $filename ) or App::Ack::die( "$filename: $!\n" );
- my @lines = grep { /./ && !/^\s*#/ } <$fh>;
- chomp @lines;
- close $fh or App::Ack::die( "$filename: $!\n" );
-
- # get rid of leading and trailing whitespaces
- for ( @lines ) {
- s/^\s+//;
- s/\s+$//;
- }
-
- return @lines;
- }
- }
-
- return;
-}
-
-
-sub get_command_line_options {
- my %opt = (
- pager => $ENV{ACK_PAGER_COLOR} || $ENV{ACK_PAGER},
- );
-
- my $getopt_specs = {
- 1 => sub { $opt{1} = $opt{m} = 1 },
- 'A|after-context=i' => \$opt{after_context},
- 'B|before-context=i' => \$opt{before_context},
- 'C|context:i' => sub { shift; my $val = shift; $opt{before_context} = $opt{after_context} = ($val || 2) },
- 'a|all-types' => \$opt{all},
- 'break!' => \$opt{break},
- c => \$opt{count},
- 'color|colour!' => \$opt{color},
- 'color-match=s' => \$ENV{ACK_COLOR_MATCH},
- 'color-filename=s' => \$ENV{ACK_COLOR_FILENAME},
- 'color-lineno=s' => \$ENV{ACK_COLOR_LINENO},
- 'column!' => \$opt{column},
- count => \$opt{count},
- 'env!' => sub { }, # ignore this option, it is handled beforehand
- f => \$opt{f},
- flush => \$opt{flush},
- 'follow!' => \$opt{follow},
- 'g=s' => sub { shift; $opt{G} = shift; $opt{f} = 1 },
- 'G=s' => \$opt{G},
- 'group!' => sub { shift; $opt{heading} = $opt{break} = shift },
- 'heading!' => \$opt{heading},
- 'h|no-filename' => \$opt{h},
- 'H|with-filename' => \$opt{H},
- 'i|ignore-case' => \$opt{i},
- 'invert-file-match' => \$opt{invert_file_match},
- 'lines=s' => sub { shift; my $val = shift; push @{$opt{lines}}, $val },
- 'l|files-with-matches' => \$opt{l},
- 'L|files-without-matches' => sub { $opt{l} = $opt{v} = 1 },
- 'm|max-count=i' => \$opt{m},
- 'match=s' => \$opt{regex},
- 'n|no-recurse' => \$opt{n},
- o => sub { $opt{output} = '$&' },
- 'output=s' => \$opt{output},
- 'pager=s' => \$opt{pager},
- 'nopager' => sub { $opt{pager} = undef },
- 'passthru' => \$opt{passthru},
- 'print0' => \$opt{print0},
- 'Q|literal' => \$opt{Q},
- 'r|R|recurse' => sub { $opt{n} = 0 },
- 'show-types' => \$opt{show_types},
- 'smart-case!' => \$opt{smart_case},
- 'sort-files' => \$opt{sort_files},
- 'u|unrestricted' => \$opt{u},
- 'v|invert-match' => \$opt{v},
- 'w|word-regexp' => \$opt{w},
-
- 'ignore-dirs=s' => sub { shift; my $dir = remove_dir_sep( shift ); $ignore_dirs{$dir} = '--ignore-dirs' },
- 'noignore-dirs=s' => sub { shift; my $dir = remove_dir_sep( shift ); delete $ignore_dirs{$dir} },
-
- 'version' => sub { print_version_statement(); exit; },
- 'help|?:s' => sub { shift; show_help(@_); exit; },
- 'help-types'=> sub { show_help_types(); exit; },
- 'man' => sub {
- require Pod::Usage;
- Pod::Usage::pod2usage({
- -verbose => 2,
- -exitval => 0,
- });
- },
-
- 'type=s' => sub {
- # Whatever --type=xxx they specify, set it manually in the hash
- my $dummy = shift;
- my $type = shift;
- my $wanted = ($type =~ s/^no//) ? 0 : 1; # must not be undef later
-
- if ( exists $type_wanted{ $type } ) {
- $type_wanted{ $type } = $wanted;
- }
- else {
- App::Ack::die( qq{Unknown --type "$type"} );
- }
- }, # type sub
- };
-
- # Stick any default switches at the beginning, so they can be overridden
- # by the command line switches.
- unshift @ARGV, split( ' ', $ENV{ACK_OPTIONS} ) if defined $ENV{ACK_OPTIONS};
-
- # first pass through options, looking for type definitions
- def_types_from_ARGV();
-
- for my $i ( filetypes_supported() ) {
- $getopt_specs->{ "$i!" } = \$type_wanted{ $i };
- }
-
-
- my $parser = Getopt::Long::Parser->new();
- $parser->configure( 'bundling', 'no_ignore_case', );
- $parser->getoptions( %{$getopt_specs} ) or
- App::Ack::die( 'See ack --help, ack --help-types or ack --man for options.' );
-
- my $to_screen = not output_to_pipe();
- my %defaults = (
- all => 0,
- color => $to_screen,
- follow => 0,
- break => $to_screen,
- heading => $to_screen,
- before_context => 0,
- after_context => 0,
- );
- if ( $is_windows && $defaults{color} && not $ENV{ACK_PAGER_COLOR} ) {
- if ( $ENV{ACK_PAGER} || not eval { require Win32::Console::ANSI } ) {
- $defaults{color} = 0;
- }
- }
- if ( $to_screen && $ENV{ACK_PAGER_COLOR} ) {
- $defaults{color} = 1;
- }
-
- while ( my ($key,$value) = each %defaults ) {
- if ( not defined $opt{$key} ) {
- $opt{$key} = $value;
- }
- }
-
- if ( defined $opt{m} && $opt{m} <= 0 ) {
- App::Ack::die( '-m must be greater than zero' );
- }
-
- for ( qw( before_context after_context ) ) {
- if ( defined $opt{$_} && $opt{$_} < 0 ) {
- App::Ack::die( "--$_ may not be negative" );
- }
- }
-
- if ( defined( my $val = $opt{output} ) ) {
- $opt{output} = eval qq[ sub { "$val" } ];
- }
- if ( defined( my $l = $opt{lines} ) ) {
- # --line=1 --line=5 is equivalent to --line=1,5
- my @lines = split( /,/, join( ',', @{$l} ) );
-
- # --line=1-3 is equivalent to --line=1,2,3
- @lines = map {
- my @ret;
- if ( /-/ ) {
- my ($from, $to) = split /-/, $_;
- if ( $from > $to ) {
- App::Ack::