
What's new in version 0.9

* Add support for "steal"/guest CPU time measurement
  in virtualization environments
* Expand and collapse subtrees using '+' and '-' when in tree-view
* Support for cgroups
  (thanks to Guillaume Zitta and Daniel Lezcano)
* Show custom thread names
  (thanks to Anders Torger)
* Add support for STARTTIME field
* Upgrade PLPA to version 1.3.2
* Fix license terms with regard to PLPA
  (thanks to Tom Callaway)
* getopt-based long options and --no-color
  (thanks to Vincent Launchbury)
* BUGFIX: Fix display of nan% in CPU meters
  (thanks to Steven Hampson)
* BUGFIX: Fix memory leak
  (thanks to Pavol Rusnak)
* Add Bash/emacs style navigation keys
  (thanks to Daniel Schuler)
* Improve battery meter support
  (thanks to Richard W.)
* BUGFIX: Fix IO-wait color in "Black on White" scheme
* BUGFIX: Fix search by process name when list is filtered by user.
  (thanks to Sergej Pupykin for the report.)
* BUGFIX: Fix alignment for display of memory values above 100G (sign of the times!)
  (thanks to Jan van Haarst for the report.)

What's new in version 0.8.3

* BUGFIX: Fix crash on F6 key
  (thanks to Rainer Suhm)
* BUGFIX: Fix a minor bug which affected the build process.

What's new in version 0.8.2

* Integrated lsof (press 'l')
* Fix display of gigabyte-sized values
  (thanks to Andika Triwidada)
* Option to display hostname in the meters area
* Rename VEID to CTID in OpenVZ systems
  (thanks to Thorsten Schifferdecker)
* Corrections to the desktop entry file
  (thanks by Samuli Suominen)
* BUGFIX: Correct page size calculation for FreeBSD systems
  (thanks to Andrew Paulsen)
* Allow compilation without PLPA on systems that don't support it
  (thanks to Timothy Redaelli)
* BUGFIX: Fix missing tree view when userland threads are hidden
  (thanks to Josh Stone)
* BUGFIX: Fix for VPID on OpenVZ systems
  (thanks to Wolfgang Frisch)

What's new in version 0.8.1

* Linux-VServer support
  (thanks to Jonathan Sambrook and Benedikt Bohm)
* Battery meter
  (thanks to Ian Page Hands)
* BUGFIX: Fix collection of IO stats in multithreaded processes
  (thanks to Gerhard Heift)
* Remove assertion that fails on hardened kernels
  (thanks to Wolfram Schlich for the report)

What's new in version 0.8

* Ability to change sort column with the mouse by
  clicking column titles (click again to invert order)
* Add support for Linux per-process IO statistics,
  enabled with the --enable-taskstats flag, which
  requires a kernel compiled with taskstats support.
  (thanks to Tobias Oetiker)
* Add Unicode support, enabled with the --enable-unicode
  flag, which requires libncursesw.
  (thanks to Sergej Pupykin)
* BUGFIX: Fix display of CPU count for threaded processes.
  When user threads are hidden, process now shows the
  sum of processor usage for all processors. When user
  threads are displayed, each thread shows its own
  processor usage, including the root thread.
  (thanks to Bert Wesarg for the report)
* BUGFIX: avoid crashing when using many meters
  (thanks to David Cho for the report)

What's new in version 0.7

* CPU affinity configuration ('a' key)
* Improve display of tree view, properly nesting
  threads of the same app based on TGID.
* IO-wait time now counts as idle time, which is a more
  accurate description. It is still available in
  split time, now called detailed CPU time.
  (thanks to Samuel Thibault for the report)
* BUGFIX: Correct display of TPGID field
* Add TGID field
* BUGFIX: Don't crash with invalid command-line flags
  (thanks to Nico Golde for the report)
* Fix GCC 4.3 compilation issues
  (thanks to Martin Michlmayr for the report)
* OpenVZ support, enabled at compile-time with
  the --enable-openvz flag.
  (thanks to Sergey Lychko)

What's new in version 0.6.6

* Add support of NLWP field
  (thanks to Bert Wesarg)
* BUGFIX: Fix use of configurable /proc location
  (thanks to Florent Thoumie)
* Fix memory percentage calculation and make it saner
  (thanks to Olev Kartau for the report)
* Added display of DRS, DT, LRS and TRS
  (thanks to Matthias Lederhofer)
* BUGFIX: LRS and DRS memory values were flipped
  (thanks to Matthias Lederhofer)
* BUGFIX: Don't crash on very high UIDs
  (thanks to Egmont Koblinger)

What's new in version 0.6.5

* Add hardened-debug flags for debugging with Hardened GCC
* BUGFIX: Handle error condition when a directory vanishes
  from /proc
* BUGFIX: Fix leak of process command line
* BUGFIX: Collect orphaned items when arranging the tree view.
  (thanks to Wolfram Schlich for assistance with debugging)
* Separate proc and memory debugging into separate #defines.
* BUGFIX: Fix message when configure fails due to
  missing libraries
  (thanks to Jon)
* BUGFIX: Don't truncate value when displaying a very large
  process
  (thanks to Bo Liu)

What's new in version 0.6.4

* Add an option to split the display of kernel time
  in the CPU meter into system, IO-wait, IRQ and soft-IRQ.
  (thanks to Philipp Richter)
* --sort-key flag in the command-line, overriding the
  saved setting in .htoprc for the session.
  (thanks to Rodolfo Borges)
* BUGFIX: Fixed string overflow on uptime display.
  (thanks to Marc Cahalan)

What's new in version 0.6.3

* Performance improvements: uses much less CPU than the
  previous release with the default setup.
* Use 64-bit values when storing processor times to
  avoid overflow.
* Memory consumption improvements, compensating storage
  of 64-bit values.
* Internal change: rename TypedVector to Vector and
  ListBox (and related classes) to Panel.
* Have configure actually fail when needed libraries or
  headers are not found.
* Horizontally scroll in larger increments when on the
  Linux console because of slow update of unaccelerated fb
* No longer untag processes after sending a signal
  (useful for when SIGTERM fails and one wants to try again
  with SIGKILL). All processes can be untagged at once with 'U'.
  (thanks to A. Costa for the suggestion)

What's new in version 0.6.2

* BUGFIX: Fixed crash when using some .htoprc files from 0.6
  (thanks to Wolfram Schlich and John Thomas for the reports)
* BUGFIX: Ensure changes to color scheme are saved
* BUGFIX: Make configure behave correctly with --with-proc
* Minor addition to .desktop file.

What's new in version 0.6.1

* New meter type: "All CPUs", which dynamically adjusts
  to the number of CPUs present in the machine. Note that
  because of this, older versions of htop may crash when
  using an .htoprc file modified my the newer version.
* Accept --with-proc=<dir> in configure, to specify
  alternative procfs locations (making htop friendlier
  to the Linux compatibility layer in FreeBSD)
* Included icon .desktop and desktop entry
  (thanks to Peter Hyman)
* Added a check to make sure that a root-user htop closes
  when its parent non-root terminal is closed.
  (thanks to Ilya Evseev for the report)
* BUGFIX: does not crash anymore when $HOME is not set
  (thanks to Henning Schild for the report)
* Wait for strace child process to die properly.
  (thanks to Marcus Fritzsch)
* Support $HTOPRC
  (thanks to Luis Limon)

What's new in version 0.6

* Configuration of columns merged into the Setup screen
* Integrated strace (press 's')
  (thanks to Marinho Barcellos for the help)
* BUGFIX: some fixes, aided by Valgrind
  (thanks to Wolfram Schlich for the report)
* BUGFIX: fixed bug when switching meter modes
  (thanks to Eduardo Righes for the report)
* Show processes of a single user
* "SortBy" function now menu-based
* Improved mouse handling
* ...and on top of that reduced memory consumption!

What's new in version 0.5.4

* Color schemes
* -d flag, to configure delay between updates.
  Note that the delay value is saved in ~/.htoprc.
* BUGFIX: Update of meters was halting after help screen.
  (thanks to Matt Moore)
* BUGFIX: No longer display incorrect information
  in first frame.
* BUGFIX: Fix auto-detection of /proc/stat,
  correcting CPU usage information on multiprocessor
  systems.

What's new in version 0.5.3

* Read new field "steal" on newer /proc/stat files
* Auto-detects format of /proc/stat, to cope
  with patched 2.4 kernels which display 2.6-style
  information (most notably those on RHEL 3)
  (thanks to Fernando Dotta for the report)
* Support $HOME_ETC initiative
  (see http://www.pld-linux.org/Docs/home-etc)
  (thanks to Roman Barczynski for the tip)
* The configure script now tests for /proc, so
  that it fails early on unsupported platforms
  instead of during compilation/execution.
* Made presentation of the function keys in the
  status bar consistent across views
  (thanks to David Mathog for the report)
* Minor changes to make the codebase more friendly
  to possible future ports
  (thanks to Jari Aalto and David Mathog for the reports)

What's new in version 0.5.2

* BUGFIX: Correct display of user field
  (thanks to Marcin Miroslaw for the report)
* Keyboard support improvements
  (thanks to Aury Fink Filho for the report)

What's new in version 0.5.1

* BUGFIX: Correctly displays NPTL threads from
  /proc/<pid>/task subdirectories
  (thanks to Mike Pot for the report)
* BUGFIX: Fixes key handling on Signals listbox
  (thanks to Ondrej Vlach)
* Renicing no longer displays temporary illegal values
  (thanks to Ondrej Vlach)
* 'Hide userland threads' feature for NPTL threads

What's new in version 0.5

* Tree view
* New column, TIME (user + system time,
  like in top, 'T' switches to "sort by time")
* Major reorganization of the underlying code of the
  setup screen, to manage setup pages
* New setup page: Display options
* Hide kernel threads ('K' key)
* Colorized memory numbers
* Vastly improved support for monochromatic terminals
* Shadow processes that do not belong to user ('U' key)
* Header margin configuration accessible via setup screen
* Visual feedback on failing incremental search
* BUGFIX: fixed keyboard input issues on 64-bit machines
* BUGFIX: hopefully fixed the incorrect values
  that show on status bars in some systems
* BUGFIX: doesn't mess with fields list anymore when
  canceling after changing the number of items
* Uptime meter no longer says "1 days" ;)

What's new in version 0.4.1

* BUGFIX: compiles on 64-bit architectures again
  (thanks to Bartosz Fenski for the report)
* BUGFIX: multi-processor support fixed on kernels 2.6
  (thanks to Wolfram Schlich for the report)

What's new in version 0.4

* Support for multiple processors!
* Basic mouse support
* Modular header based on configurable meters;
  supports 4 view modes: bar, text, LED, graph
* Uptime, load average meters
  (thanks to Marc Calahan)
* Meters setup screen; should eventually evolve into a
  general setup screen, with column setup, keybindings, etc.
* Thread hiding toggleable
  (press 'T' to hide the nonstandard dotfiles in /proc)
* BUGFIX: Do not flicker screen on column configuration screen
* Clock and load average meters
  (thanks to Marc Calahan)
* BUGFIX: numeric swap indicator was printing bogus value
* BUGFIX: internal fixes on Panel widget
* Clear the bottom line when exiting
* Press "F3" during search to walk through the results
* Improved navigation on column configuration screen
* BUGFIX: fix segfault on kernels with restricted /proc
  enabled
* BUGFIX: a few last-minute bugfixes in the setup UI
  (thanks to Gaspare Bruno for the reports)


What's new in version 0.3.3

* Saves column and sorting configuration in ~/.htoprc
* Displays "hidden" threads on RedHat 9
  (Thanks to Leonardo Godinho)
* BUGFIX: supports process names with spaces
  (Thanks to Marc Calahan)
* BUGFIX: ...and parentheses :)
* BUGFIX: long process names overflowed RichString
  (Thanks to Marc Calahan)

What's new in version 0.3.2

* Performance and memory usage improvements, aided by gprof
* BUGFIX: quite a few fixes, aided by Valgrind
* Header preview on column configuration screen
  (Thanks to Marc Calahan)

What's new in version 0.3.1

* BUGFIX: crash fixes related to process list handling
  (thanks to Marc Calahan)
* Man page
  (thanks to Bartosz Fenski)
* Tag processes with the space bar
* Kill multiple process based on tag
* BUGFIX: corrected processing order of updates in list
* Screen refresh function on Ctrl-L
* Large numbers are shown in MB/GB notation in order to fit screen
  (thanks to Marc Calahan)
* Realtime priority is correctly displayed
  (thanks to Marc Calahan)
* Preliminary support for configurable columns, with 'C'
  (thanks to Marc Calahan)
  -- not all columns display properly yet

What's new in version 0.3

* BUGFIX: no dirt left on screen on horizontal scrolling 
* Signal selection on "kill" command
* Color-coding for users, nice and process status
* "Follow" function
* Fully selectable sort order
* Function bar on last line
* Build system now uses autotools

What's new in version 0.2.1

* Sorting by process or memory usage ('P' and 'M', like top)
* Quicker default update (1.5 second, not yet configurable)
* Now the order of the elements in the process list stay
  'locked' for a while after you move the cursor to ease
  selecting a process
* Corrected the installation instructions in README
  (Thanks to Jeremy Eglen)
* Should now compile cleanly on Conectiva 9 and similar systems
  (Thanks to Adriano Frare for the report)
* Friendlier Makefile
* Help screen ('h')

What's new in version 0.2

* Memory indicators in header now show used and total, in MB
* Preliminary support for sorting (CPU% only)
* Memory percentage field (resident memory / used memory)
* BUGFIX: identified source of spurious crashes
* Can search names containing numbers
  (Thanks to Rafael Jeffman)
* Correctly calculates memory page size
  (Thanks to Rafael Jeffman)

What's new in version 0.13

* Handles terminal resize
* Display all user names (not only those in /etc/passwd)
  (Thanks to Julio Biason)

What's new in version 0.12

* Support for 2.6 kernels
* Uses terminal default colors as a background

What's new in version 0.11

* BUGFIX: does not crash when UID is not in /etc/passwd

What's new in version 0.1

* Everything!
