Change Log
==========

Version 2.4.0 *(2026-07-20)*
----------------------------

 * Fix: Clicking a line with no filter active was recentering the view instead of doing
   nothing; it's now a no-op until you actually have something to unfilter.
 * Fix: Click-to-line row math was off whenever the log hadn't filled the screen yet
   (e.g. right after startup), so clicks could land on the wrong entry or miss entirely.
 * New: Hovering over a line highlights it while a filter is active, hinting that it's
   clickable.
 * New: The line you click stays highlighted after the filter clears, so you can find
   it in the full scrollback; the highlight clears once you start another search.
 * New: Process create/death separators now stay visible even while a filter is active,
   so you can tell separate app runs apart in filtered results.

Version 2.3.0 *(2026-07-20)*
----------------------------

 * New: Esc quits the interactive UI. A bare Escape keypress exits; Escape sequences
   (arrow keys, mouse reports) are still parsed normally.
 * Fix: Scrolling the interactive UI now works. Up/Down, Page Up/Down, Home/End, and
   the mouse wheel scroll the retained scrollback; new lines no longer yank you back
   to the tail while you're scrolled up.
 * New: Clicking a line in the interactive UI clears the filter, unfilters the log,
   and scrolls to that line in the full history.


Version 2.2.0 *(2026-07-20)*
----------------------------

 * New: Interactive full-screen filter UI, on by default when both stdin and stdout are a
   terminal. Logs render above a bottom prompt line; typing live-filters the scrollback to
   lines containing every typed word, case-insensitively. `--plain` restores the previous
   streaming output; piped usage is unaffected.
 * Fix: `print(linebuf.encode('utf-8'))` printed the Python 3 bytes repr of every line
   instead of the line itself.
 * Fix: `named_processes` was still a lazily-exhausted `map()` object after the Python 3
   port wrapped `catchall_package` in `list()`.
 * Fix: piping `adb logcat` into `pidcat` crashed under Python 3, since `FakeStdinProcess`
   read `sys.stdin` (str) where the rest of the script expected bytes.
 * Fix: `indent_wrap` could hang given a non-positive wrap area, e.g. an unsized terminal.
 * Fix: shebang invoked `python`, which no longer exists on systems that only ship `python3`.


Version 2.1.0 *(2016-09-07)*
----------------------------

 * New: Explicitly run `adb` in 'brief' mode to ensure proper parsing.
 * New: `-a` / `--all` flag shows all logs.
 * Fix: Setting a tag width to 0 now correctly removes tags.


Version 2.0.0 *(2015-05-25)*
----------------------------

 * New: Display package and process name in birth & death messages.
 * New: Process can be matched in addition to package. For example `com.android.chrome` will match
   all of Chrome's processes, `com.android.chrome:` will match only its main process, and
   `com.android.chrome:sandboxed_process1` will match that specific process name.
 * New: `-c` option clears log before reading logs.
 * New: If data is piped to `pidcat` it will be used as the log source instead of `adb`.
 * New: `-t` / `--tag` option allows filtering by tag name (regex supported).
 * New: `-i` / `--ignore-tag` option allows filtering out tags from the logs by name (regex supported).
 * New: `--version` option reports Pidcat's version.
 * New: Obtain unknown process IDs of currently-running apps.
 * New: `--current` option uses the package of the currently visible app for filtering.
 * New: Bash completion support for package names and device names. Requires manual installation of
   file in `bash_completion.d/`.
 * Fix: Properly match process birth & death from secondary processes.
 * Fix: Support leading spaces in PID numbers.
 * Fix: Default maximum tag length is now 23 (Android's maximum length).
 * Fix: Properly parse Android 5.1+ birth & death messages.


Version 1.4.1 *(2014-01-09)*
----------------------------

 * Fix: Ignore manufacturer-added invalid tag levels.


Version 1.4.0 *(2013-10-12)*
----------------------------

 * Add '--always-display-tags' argument for improved grepping.
 * Ignore bad UTF-8 data.
 * Replace tab characters in log message with four spaces.
 * Package name is now optional.


Version 1.3.1 *(2013-07-12)*
----------------------------

 * Add fatal to log level filtering.
 * Add '-e' and '-d' arguments for quickly selecting the emulator or device.
 * Improve removal of 'nativeGetEnabledTags' log spam.


Version 1.3.0 *(2013-06-19)*
----------------------------

 * Add support for Python 3.
 * Add '-s' argument for specifying device serial.
 * UTF-8 decode log messages.


Version 1.2.1 *(2013-06-14)*
----------------------------

 * Add support for 'fatal' log level.


Version 1.2.0 *(2013-06-13)*
----------------------------

 * Allow multiple packages to be specified.
 * Add argument to filter output based on log level.


Version 1.1.0 *(2013-06-12)*
----------------------------

 * De-duplicate tag name in output.
 * Color strict mode violations and optionally GC messages.
 * Support multiple processes for a package.


Version 1.0.0 *(2013-06-11)*
----------------------------

Initial version.
