History file for ack.  https://beyondgrep.com/

2.18    Fri Mar 24 14:53:19 CDT 2017
ack 2.18 will probably be the final release in the ack 2.x series.
I'm going to be starting work on ack 3.000 in earnest.  Still,
if you discover problems with ack 2, please report them to

If you're interested in ack 3 development, please sign up
for the ack-dev mailing list and/or join the ack Slack.  See
https://beyondgrep.com/community/ for details.

Removed the abstraction of App::Ack::Resource and its subclass
App::Ack::Resource::Basic.  We are abandoning the idea that we'll have

2.17_02 Thu Mar 23 22:25:13 CDT 2017
ack no longer throws an undefined variable warning if it's called
from a directory that doesn't exist. (GH #634)

Explain that filetypes must be two characters or longer. (GH #389)

Removed dependency on File::Glob which isn't used.

2.17_01 Wed Mar 15 23:25:28 CDT 2017
--context=0 (and its short counterpart -C 0) did not set to context
of 0.  This means that a command-line --context=0 couldn't override
a --context=5 in your ackrc.  Thanks, Ed Avis.  (GH #595)

t/ack-s.t would fail in non-English locales.  Thanks, Olivier Mengué.
(GH #485, GH #515)

--after-context and --before-context (and their short counterparts
-A and -B) no longer require a value to be passed.  If no value is
set, they default to 2. (GH #351)

Added .xhtml to the --html filetype.  Added .wsdl to the --xml filetype.
Thanks, H.Merijn Brand.  (GH #456)

Updated incorrect docs about how ack works.  Thanks, Gerhard Poul.
(GH #543)

2.16    Fri Mar 10 13:32:39 CST 2017
No changes since 2.15_03.

The -w has a confusing behavior that it's had since back to ack 1.x
that will be changing in the future.  It's not changing in this
version, but this is a heads-up that it's coming.

ack -w is "match a whole word", and ack does this by putting turning
your PATTERN into \bPATTERN\b.  So "ack -w foo" effectively becomes
"ack \bfoo\b".  Handy.

The problem is that ack doesn't put a \b before PATTERN if it begins
with a non-word character, and won't put a \b after PATTERN if it
ends with a non-word character.

The problem is that if you're searching for "fool" or "foot", but
only as a word, and you do "ack -w foo[lt]" or "ack -w (fool|foot)",
you'll get matches for "football and foolish" which certainly should
not match if you're using -w.

2.15_03 Sun Feb 26 23:07:35 CST 2017
Include .cljs, .cljc and .edn files with the --clojure filetype.  Thanks,
Austin Chamberlin.

Added .xsd to the --xml filetype.  Thanks, Nick Morrott.

Added support for Swift language.  Thanks, Nikolaj Schumacher. (GH #512)

The MSYS2 project is now seen as Windows.  Thanks, Ray Donnelly. (GH #450)

Expand the definition of OCaml files.  Thanks, Marek Kubica. (GH #511)

Add support for Groovy Server Pages.  Thanks, Ethan Mallove. (GH #469)

Added test to test --output. Thanks, Varadinsky! (GH #587, GH #590)

Expanded the explanation of how the -w flag works.  Thanks, Ed Avis.
(GH #585)

2.15_02 Thu Dec 17 15:51:15 CST 2015
This is the first dev version in nine months.  Many changes have gone
into this, probably more than have been listed here.  We need to update
this list, but for now these are fixes we know are in here.  My apologies
for not having this changelog accurate.

Reverted an optimization to make \s work properly again. (GH #572,
GH #571, GH #562, GH #491, GH #498)

Fixed an out-of-date FAQ entry.  Thanks, Jakub Wilk.  (GH #580)

The JSP filetype (--jsp) now recognizes .jspf files.  Thanks, Sebastien
Feugere.  (GH #586)

Added test to make sure subdirs of target subdirs are ignored if
--ignore-dir applies to them.  Thanks, Pete Houston. (GH #570)

2.15_01 Fri Feb 13 16:23:54 CST 2015
The -l and -c flags would sometimes return inaccurate results due to
a bug introduced in 2.14.  Thanks to Elliot Shank for the report! (GH #491)

Behavior when using newlines in a search was inconsistent.  Thanks to Yves Chevallier
for the report! (GH #522)

Add minimal requirement of Getopt::Long 2.38, not 2.35, for GetOptionsFromString.

Don't ignore directories that are specified as command line targets (GH #524)

Fix a bug where a regular expression that matches the empty string could cause ack
to go into an infinite loop (GH #542)

Many optimizations and code cleanups.  Thanks, Stephan Hohe.

Added --hpp option for C++ header files.  Thankis, Steffen Jaeckel.

ack now supports --ignore-dir=match:....  Thanks, Ailin Nemui! (GitHub ticket #42)

ack also supports --ignore-dir=ext:..., and --noignore-dir supports match/ext as well

2.14    Wed Sep  3 22:48:00 CDT 2014
The -s flag would fail to suppress certain warnings.  Thanks, Kassio
Borges. (GitHub ticket #439)

The -w flag would fail to work properly with regex features such as
alternation.  Thanks to Ed Avis for the report (GitHub ticket #443)

The -g flag should now work faster on larger codebases.  Thanks to
Manuel Meurer for the report (GitHub ticket #458)

ack now ignores JavaScript and CSS source maps.  Thanks, Chris

ack now ships with customized shell completion scripts for bash and zsh.

2.13_06 Sat Jan 25 23:36:09 CST 2014
More fixes for Windows tests.  Thanks to GitHub user @ispedals.


Add docs for available colors in ack.

2.13_05 Thu Jan  9 22:41:33 CST 2014
More whack-a-mole with Windows failures.  This time, it's POSIX::mkfifo
dying on Windows instead of returning undef like the docs implied,
or at least that I inferred.

--create-ackrc keeps the comments that describe each of the options,
and it shows the ack version number.

2.13_04 Sat Jan  4 11:17:28 CST 2014
Fixed incorrect deduping of config files under Windows.  Thanks,
Denis Howe.

2.13_03 Thu Jan  2 22:23:03 CST 2014
More build fixes for Windows.  Windows config finder fixes from
James McCoy.

t/ack-named-pipes.t uses POSIX::mkfifo instead of the external
command, which should be more portable.  Thanks, Pete Krawczyk.

Now ignores Cabal (Haskell) sandboxes.  Thanks, Fraser Tweedale.

Added filetypes for Jade, Smarty and Stylus.  Thanks, Raúl Gundín.

2.13_02 Fri Dec 27 12:54:27 CST 2013
The building of ack-standalone relied on the output of `perldoc
-l`, which I apparently can't rely on having been installed.  I've
changed the way that the squash program finds File::Next.

2.13_01 Wed Dec 25 13:36:08 CST 2013
So this is Christmas
And what have you done
I'm sitting here hacking
On ack 2.13_01
   -- via Pete Krawczyk

Issue #313: ack would fail when trying to check files for readability
on some networked filesystems, or on Mac OS X with ACLs.  Now it
uses the filetest pragma.  Thanks, Jonathan Perret.

ack's entire test suite now runs under Perl's -T taint flag.  We'll
build more security tests on top of this.

Added some checks to the squash program that I hope will turn up
errors in the Windows builds.

2.12    Tue Dec  3 07:05:02 CST 2013
This version of ack prevents the --pager, --regex and --output
options from being used from project-level ackrc files.  It is
possible to execute malicious code with these options, and we want
to prevent the security risk of acking through a potentially malicious
codebase, such as one downloaded from an Internet site or checked
out from a code repository.

The --pager, --regex and --output options may still be used from
the global /etc/ackrc, your own private ~/.ackrc, the ACK_OPTIONS
environment variable, and of course from the command line.

Now ignores Eclipse .metadata directory.  Thanks, Steffen Jaeckel.

Removed the Git revision tracking in the --version.

2.11_02 Sun Oct  6 12:39:21 CDT 2013
2.11_01 was mispackaged.  This fixes that.

2.11_01 Sun Sep 29 13:15:41 CDT 2013
Fixed a race condition in t/file-permission.t that was causing
failures if tests were run in parallel.

2.10    Tue Sep 24 16:24:11 CDT 2013
Add --perltest for *.t files.

Added Matlab support.  Thanks, Zertrin.

Fix the test suite for Win32.  Many thanks to Christian Walde for
bringing the severity of this issue to our attention, as well as
providing a Win32 development environment for us to work with.

Fixed Win32-detection in the Makefile.PL.  Thanks, Michael Beijen
and Alexandr Ciornii.

More compatibility fixes for Perl 5.8.8.

2.08    Thu Aug 22 23:11:45 CDT 2013
ack now ignores CMake's build/cache directories by default.  Thanks,
Volodymyr Medvid.

Add shebang matching for --lua files.

Add documentation for --ackrc.

Add Elixir filetype.

Add --cathy option.  Thanks to Joe McMahon.

Add some helpful debugging tips when an invalid option is found.
Thanks to Charles Lee.

Ignore PDF files by default, because Perl will detect them as text.

Ignore .gif, .jpg, .jpeg and .png files.  They won't normally be
selected, but this is an optimization so that ack doesn't have to
open them to know.

Ack's colorizing of output would get confused with multiple sets
of parentheses.  This has been fixed.  (Issue #276)

Ack would get confused when trying to colorize the output in
DOS-format files.  This has been fixed.  (Issue #145)

This mistake of an upload lived for only about 15 minutes.

2.05_01 Tue May 28 10:12:04 CDT 2013
We now ignore the node_modules directories created by npm.  Thanks,
Konrad Borowski.

--pager without an argument implies --pager=$PAGER.

--perl now recognizes Plack-style .psgi files.  Thanks, Ron Savage.

Added filetypes for Coffescript, JSON, LESS, and Sass.

Command-line options now override options set in ackrc files.

ACK_PAGER and ACK_PAGER_COLOR now work as advertised.

Fix a bug resulting in uninitialized variable warnings when more
than one capture group was specified in the search pattern.

Make sure ack is happy to build and test under cron and other
console-less environments.

Colored output is now supported and on by default on Windows.

2.04    Fri Apr 26 22:47:55 CDT 2013
ack now runs on a standard Perl 5.8.8 install with no module updates.
The minimum Perl requirement for ack is now explicitly 5.8.8.  Anything
before 5.8.8 will not work, and we've added checks.  Thanks, Michael

ack was colorizing captured groups even if --nocolor was given.
Thanks, Dale Sedivic.

The --shell file type now recognizes the fish shell.

We now ignore minified CSS or Javascript, in the form of either *.css.min
or *.min.css, or *.js.min or *.min.js.

Added support for the Dart language.

ack 2.02 was much slower than ack 1.96, up to 8x slower in some cases.
These slowdowns have been mostly eliminated, and in some cases ack 2.04
is now faster than 1.96.

2.02    Thu Apr 18 23:51:52 CDT 2013
The firstlinematch file type detection option now only searches the
first 250 characters of the first line of the file.  Otherwise, ack
would read entire text files that were only one line long, such as
minified JavaScript, and that would be slow.  Thanks, Michael

Many clarifications and cleanups.  Thanks, Michael McClimon.

2.00    Wed Apr 17 22:49:41 CDT 2013

The first version of ack 2.0.

# Incompatibilities with ack 1.x

ack 2 makes some big changes in its behaviors that could trip up
users who are used to the idiosyncracies of ack 1.x.  These changes
could affect your searching happiness, so please read them.

* ack's default behavior is now to search all files that it identifies
as being text.  ack 1.x would only search files that were of a file
type that it recognized.

* Removed the `-a` and `-u` options since the default is to search
all text files.

* Removed the `--binary` option.  ack 2.0 will not find and search
through binary files.

* Removed the `--skipped` option.

* Removed the `--invert-file-match` option.  `-v` now works with
`-g`.  To list files that do not match `/foo/`

    ack -g foo -v

* `-g` now obeys all regex options: `-i`, `-w`, `-Q`, `-v`

* Removed the `-G` switch, because it was too confusing to have two
regexes specified on the command line.  Now you use the `-x` switch
to pipe filenames from one `ack` invocation into another.

To search files with filename matching "sales" for the string "foo":

    ack -g sales | ack -x foo

# New features in ack 2.0

ack 2.0 will:

* By default searches all text files, as identified by Perl's `-T` operator
    * We will no longer have a `-a` switch.

* improved flexibility in defining filetype selectors
    * name equality ($filename eq 'Makefile')
    * glob-style matching (`*.pl` identifies a Perl file)
    * regex-style matching (`/\.pl$/i` identifies a Perl file)
    * shebang-line matching (shebang line matching `/usr/bin/perl/`
    identifies a Perl file)

* support for multiple ackrc files
    * global ackrc (/etc/ackrc)
        * https://github.com/petdance/ack/issues/#issue/79
    * user-specific ackrc (~/.ackrc)
    * per-project ackrc files (~/myproject/.ackrc)

* you can use --dump to figure which options are set where

* all inclusion/exclusion rules will be in the ackrc files
    * ack 2.0 has a set of definitions for filetypes, directories to
      include or exclude, etc, *but* these are only included so you don't
      need to ship an ackrc file to a new machine.  You may tell ack to
      disregard these defaults if you like.

* In addition to the classic `--thpppt` option to draw Bill the
Cat, `ack --bar` will draw (of course) Admiral Ackbar.