Version 3.1 ("Recovering inertia") - 2017/06/25:

  + New features
    - support for new compression programs: lzip, lz4

  + Changes & improvements:
    - Improved resources files (docs, default keys and theme) installation
      and loading at runtime

  + Fixes:
    - when installing data files with pip >7.0 & wheel.
      Thanks to Jean-François Bercher
    - PowerCLI: error message is always shown when command finishes.
      Thanks to Jean Terrier for the report
    - filters: glob when parent dir contains special chars (BB issue #5).
      Thanks to Viktor Vad for the report
    - lfm crashes when terminal is too narrow (BB issue #4).
      Thanks to Wayne Tan for the report


Version 3.0 ("Only you") - 2015/10/23:

  + About the code
    - almost completely rewritten from scratch
      . it hasn't been tested as much as lfm v2.x series on non-linux OS
    - requires Python v3.4+
    - pyview, the file viewer, has been removed from lfm package
    - configuration location has changed to a new directory and files:
      ~/.config/lfm/{lfm.ini, lfm.keys, lfm.theme, lfm.history}

  + New features
    - fully customizable themes (colors)
    - fully customizable key bindings
      . allow Alt-key shorcuts (A-)
      . only for main window (not for dialogs)
    - files filters (using globs)
      . information in pane frame: ".F" => show dotfiles, active filters
      . filters are a property of a tab, they remain active even when chdir
      . Ctrl-f: edit current filter
      . Some examples:
        . "*.png,*.jpg" => hide all PNG and JPEG files
        . "*.jpg,!*shot*" => hide all JPEG files except those with 'shot'
                             in the name
        . "*,!*py" => hide all except python source files
    - up to 35 bookmarks (0-9, a-z)
      . b: go to bookmark, B: set bookmark, C-d: select bookmark
      . fix: don't delete bookmark at start if path does not exist
    - nested archive handling (vfs inside vfs) works now
    - added optional support for filenames with wide chars, f.e. East Asian
      . to enable, set 'use_wide_chars' flag in configuration or use -w
        command line flag
      . it's disabled by default for performance
      . it's not perfect, but it mostly works
    - there are 2 different versions of move_file to chose from in the key
      bindings file:
      . move_file: old implementation
      . move_file2: alternative version using shtutil.move instead of
                    copy & delete. Faster but less control of errors
    - new action: redraw screen (default key A-r)

  + Changes & improvements (vs v2.x):
    - chmod & chown/chgrp are 2 different actions now
    - cursor_goto_file (C-s): find text pattern (no regex or glob) in the whole
                              file name, not at the beginning as v2.x
    - cursor_goto_file_1char (A-s): go to file by 1st letter of name
                                    (old C-s behaviour)
    - bookmarks have new key bindings:
      b: go to bookmark, B: set bookmark, C-d: select bookmark
    - PowerCLI:
      . ending command with % must be $ now
      . added new date variables: dm, dc, da, dn
      . old $d variable is $p now
    - find/grep: panelize = create vfs with matched files
      . if rebuild: all files modifications or deletions are translated to
                    original directory so be careful!
    - pyview, the file viewer, has been removed from lfm package

  + Fixes in v3.0 (vs v2.x):
    - nested archive handling (vfs inside vfs) works now
    - find & grep with spaces in file name
    - wide chars file names support (f.e. Eastern languages) => lfm -w
    - sort by size after show dirs size
    - move_file: not overwritten files in destination are not deleted


Version 2.3 ("Wow, less than a year!") - 2011/05/21:

  + About the code
    - lfm needs python version 2.5 or upper now

  + New features
    - PowerCLI, an advanced command line interface with completion, persistent
      history, variable substitution and many other useful features.
      As this is a very powerful tool, read the documentation for examples
    - history
      . use different types of history lists: path, file, glob, grep, exec, cli
        for the different forms and actions
      . persistent history between sessions => ~/.lfm_history
        . controlled by a flag in configuration
    - find/grep
      . configuration options for ignorecase and regex
      . sort results
      . show results as FILE:lineno
      . much faster
    - show diff between xxx.orig and xxx files
    - tar files compress/uncompress
    - messages.EntryLine has been rewritten, with many new key shorcuts. This is
      the core behind most of the forms lfm shows when asking for anything.
      Consult the documentation

  + Minor changes
    - reorganize "un/compress file" and "compress directory xxx" in file_menu
    - config: sort entries when saving
    - improve lad/save handling of new options not present in ~/.lfmrc
    - added new extensions
    - messages.error rewritten to offer better messages
    - added some new key shortcuts messages.SelectItem

  + Documentation
    - added a note about python v2.5+ is needed from now on
    - 'lfm' shell function: change "$*" to "$@" to properly handle paths
      containg spaces
    - FAQ: added information about fuse to mount ssh, ftp, smb and webdav
    - reorganized and fixed key bindings section
    - documented .lfmrc contents
    - added link to public BitBucket repository

  + lots of bugs fixed:
    - pyview:
      . last char is not shown if file size is small
      . last line and wrap: cursor_down or page_next
      . when number of lines == window height
    - ncurses v5.8 doesn't accept 0 as width or height
    - UI crashes:
      . time string could contain non-ascii characters (reported by Martin Steigerwald)
      . when filenane length is large in full pane mode
      . MenuWin, SelectItem: ellipsize entries if bigger than screen width
    - find or find&grep:
      . pass "-type f" to find  as ".#filename" are temporary emacs files/links
        that break search
      . show wrong matches if results contain directories or files with spaces
      . file->goto_file: move to correct page
    - copy/move "/file" to "/anydir/anyplace" fails, trying to copy/move to "/"
    - executing non-ascii programname or args
    - convoluted issue with link to directory in corner cases (reported by Xin Wang)
    - rename/backup ".." crashes
    - we should not compress ".."
    - create_link, edit_link: don't show error if canceled
    - only store one copy of the same entry in history
    - tree: "disable" colors of active panel, "enable" at end
    - Config.save: work with unicode, only convert to encoding when saving


Version 2.2 ("Approaching perfection") - 2010/05/22:

  + New features
    - use 2 progress bars in copy/move/delete dialog, one for files count
      and other for files size
    - added recursive chmod chown chgrp
    - faster cursor movement
      . Ctrl-l: center cursor in panel, so now edit-link is in 'L'
      . Ctrl-cursor_up, Ctrl-P: move cursor 1/4th of page up
      . Ctrl-cursor_down, Ctrl-N: move cursor 1/4th of page down
      . P: move cursor 1/4th of page up in other panel
      . N: move cursor 1/4th of page down in other panel
    - file_menu new feature: a -> backup file. You can specify the extension
      to use in .lfmrc
    - added support for .xz compressed files
    - Unicode & Encodings
      . rewrite all internals to use unicode strings, but employ terminal
        encoding (f.e. utf-8) to interact with the user or to display contents
        in ncurses functions or to run commands in shell
      . when lfm detects a file with invalid encoding name it asks the user to
        convert it (can be automatic with the proper option in the
        configuration, automatic_file_encoding_conversion, default 0 (ask)).
        If not converted, lfm will display the file but won't operate on it.
      . try more encodings when we get a filename with strange characters
      . lfm will check and require a valid encoding before running
    - Pyview:
      . completely rewritten. Code is shorter and more beautiful now
        Uses a new FileCache class to accelerate the retrieving of file lines
      . displays contents between 2 and 4 times faster
      . new command line flag -s/--stdin to force reading from stdin.
        Now pyview doesn't wait for stdin input by default, so it starts much
        faster. eg. $ ps efax | pyview -s

  + Minor changes
    - add color entries for directories and exe_files
    - expand ~ to user home
    - make Tree follow .dotfiles behaviour, new keybinding Ctrl-H
    - dialogs are bigger now
    - show filesystem info rewritten
    - show file info rewritten, now it shows correctly information
      from fuse-mounted volumes
    - added new "ebook" category, filetypes and formats

  + About the code
    - since python v2.6+, popen* is deprecated, so make lfm check python
      version and use popen* or subprocess accordingly
    - correct some python idioms
    - clean code

  + Documentation
    - Added "Files Name Encoding" and "FAQ" sections
    - Added information about keybindings in permissions window
    - Updated some other minor changes: wide char support, vfs, thanks

  + lots of bugs fixed:
    - file system information was not showed correctly sometimes
    - devices major and minor numbers were not showed correctly
    - crash in goto_dir if there aren't any historic entries
    - crash in a void EntryLine after pressing BACKSPACE on some platforms
    - unzip => overwrite files without prompting ("unzip -o" option) to avoid
      ethernal waiting, as messages can not be seen by user
    - fix make_dir error message
    - recompressing a vfs compressed file leave some garbage on temporary dir
    - don't try to copy fifo/socket/block-dev/char-dev files
    - crash when we don't have enough permissions to write to dest
    - show_dirs_size: don't show in stderr if we don't have perms for a dir
    - can't browse /home/<user> as root if .gvfs is present
    - EntryLine: non-ascii chars are not showed correctly
    - lfm crashes with invalid encoding filenames
    - increment owner and group space to avoid ugly look in 1-pane view
    - when moving files, don't delete source if some error or if we don't
      overwrite destination


Version 2.1 ("What do you want for Christimas?") - 2008/12/21:

  + Ctrl-H now show/hide dot files
  + Ctrl-Y display directories history
  + It's now posible to move the cursor in the non-active pane
    Consult the documentation for available keys and actions
    This behaviour is de/activated with Ctrl-W
  + added support for .7z compressed files
  + swapped F2 and F12 keys, now F2 rename files and F12 show file menu
  + new key shortcuts in dialogs. Read docs
  + speed up cursor movement
  + lots of code cleaning and refactoring
  + and fixed lot of bugs, some of them:
    - setup.py: change Iñigo for Inigo to avoid problems when installing
    - sorting by None doesn't crash anymore
	- MenuWin dialog crashed when title length was greater than length of
      entries to show


Version 2.0 ("Nine 1/2 weeks... ok, ok, and 3 years") - 2007/09/03:

  + tabs implemented
  + color files by extension [Andrey Skvortsov]
  + new IPC code and API; more flexible, powerful and stable
  + new un/compress vfs API, added support for .zip and .rar files
  + make sort mode per tab, not globally
  + support locale [Andrey Skvortsov]
  + speed up loading directory contents
  + speed cursor movement, don't waste much CPU
  + use logging module in lfm and pyview for debugging
  + overwrite_all_none: yes, all, no  => new options: "none", "skip all""
  + rewrite/refactor most of code to make lfm more robust and clean
  + preferences:
    - change file name preferences.py => config.py
    - use ConfigParser
  + use tempfile secure versions mkdtemp() and mkstemp()
  + added man pages [Sebastien Bacher]
  + use reST for documentation
  + check for python version 2.3 or higher in lfm and pyview
  + upgraded to GPL v3 license
  + and fixed lot of bugs, some of them:
    - general:
      . delete garbage if user stops action
      . run 'do_special_view_file' as dettached from lfm window
      . path expand in bookmarks ("~/") [Andrey Skvortsov]
      . an ugly traceback crash appears when user starts "lfm path" and has
        no permissions to enter. Show error message and default to current
        directory
      . lfm crashes when filename is not encoded with same codec than
        g_encoding utils.{decode|encode}. Needs curses module linked against
        ncursesw to work properly
      . sort_mix_cases = 1 performance degrades on larger dirs.
        Reported by Andrey Skvortsov
      . escape filenames with chars $ ". Reported by Andrey Skvortsov
    - user interface:
      . maximize/minimize window don't crash lfm anymore
      . dialogs appear at bad position after terminal is resized
      . handle window resize in Tree mode
      . refresh display after canceling completion dialog
      . "the size of the right pane does not fill the last column in
        terminal if their number is odd" [Andrey Skvortsov]
      . fix crash when "df" shows entries in two different lines (device
        name is too large, f.e. in linux lvm2 volumes)
      . if you try to enter a directory with insufficient permissions, after
        the error message is closed the cursorline refreshes to the first line
    - compress:
      . added -i flag (--ignore-zeros) flag to tar [Andrey Skvortsov]
      . standard tar needs - for flags
    - vfs:
      . vfs.py: regenerate_file, if user stops process, tempfile can't be
        deleted
    - find/grep:
      . escape special chars (- \ ( ) [ ]) in patterns
      . don't crash when find/grep returns no results
      . bug when matches occur in binary files
    - pyview:
      . goto line 0 in pyview showed a blank screen
      . crash in file info if filename is too long


Version 1.0 was never publically released - 2006


Version 0.92 was never publically released - 2005


Version 0.91 ("It rocks... yeah!") - 2004/06/30:

  + quite stable and robust, doesn't crash
  + faster
  + new option: show_dotfiles flag
  + new option: detach_terminal_at_exec flag: useful f.e. if you
    want to run elinks as web browser attached to lfm terminal
  + file associations and applications can be configured in preferences
  + now each application has only 1 associated program, *breaking old .lfmrc*
  + perms dialog: users & groups sorted alphabetically
  + uncompress in other panel
  + resizing terminal works in lfm, pyview. Be careful with dialogs
  + columns size eliminated from preferences
  + 1-panel view redesigned
  + ESC closes dialogs, not lfm or pyview
  + Ctrl-D: select bookmark dialog
  + code reorganized: actions.py, vfs.py
  + added classifiers to setup.py script


Version 0.90 was never publically released


Version 0.9 ("...and the day arrived") - 2002/09/05:

  + ZIP files can be un/compressed now. ZIP vfs works too
  + added 'rebuild vfs' and 'rebuild_vfs' question / option. Configurable.
    There is no need to wait until vfs file is rebuilt
  + Applied some good patches from Bartosz Oler (liar AT furrynet DOT org):
    1. colors customization: Now you can customize the colors lfm use in
       the configuration file, 'colors' section. Each color is defined by
       a string with its name. It looks like this:
	      element foreground_color background_color
    2. Allow preferences values to contain colons in the configuration file.
    3. Lack of a bookmark's definition shouldn't be an error.
  + pyview: new features:
      - read from stdin
      - go to / set bookmarks
      - open shell
  + pyview doesn't show blank screen a the end of the file, now it shows last
    line
  + lfm works now with "from __future__ import division", prepared for Python 3.0
  + set python2 as default interpreter for setup.py, lfm, lfm.py, pyview and
    pyview.py
  + my email address has changed <inigoserna AT telefonica DOT net>
  + Bugs fixes. See ChangeLog for complete list
      - lfm:
          * create temporary files with mask 0066 and directories with perms
            0700, so only owner can read/write them
          * avoid zombie processes when using 'fork' (now fork twice or threads)
          * show correct filename when an error occurs while uncompressing file
          * don't compress '..' directory
          * when lfm exits after checking command line options, make 'lfm' shell
            script don't show path error
          * when un/compressing files cursorbar must remain in the same file
          * when, at start, lfm can't enter into a dir due to directory permissions
          * crash if len(line) == width of cursorbar window
		  * don't append '*' to historic in entries
		  * fix cursor bar position after sorting
      - pyview:
          * when user hasn't permissions to read file, exit gracefully instead
            of crashing
          * last char in file is not showed


Version 0.8 ("Close to Paradise") - 2002/03/04:

  + Implemented VFS feature to enter into .tar.gz and .tar.bz2 files
  + Panelize vfs option in find/grep implemented
  + Tree panel implemented
  + 'lfm' and 'pyview' are simple scripts now, not just a copy of the .py files.
    __init__.py contains global variables now
  + A new message window is used to show  work in progress, in place of a
    message in status bar. 'run_thread' function has been cleaned too
  + Copy / move features now use my own function to walk trees, instead of
    'shutil.copytree' which originates some problems and bugs
  + In ChangePermissions window, the cursor movement is circular now
  + Change copyright date to years 2001-2
  + I don't need a crypt / uncrypt feature, so eliminated from TODO list
  + Many bugs fixes and functions rewrites. See ChangeLog for complete list
      - lfm:
          * if panel2 shows 'a' file in panel, and in panel1 'a' is moved or
            deleted, lfm crashes
          * after moving a file cursor goes to next directory as deletion does
          * catching an exception after not been able to copy => it crashed
            when trying to delete copied files
          * "messages.SelectItem, messages.FindfilesWin, messages.MenuWin,
            messages.ChangePerms: upperleft corner disappears"
          * findgrep: fix bug: if selected file has a ':' in name
      - pyview:
          * changing 'addch' by 'addstr' shows individual chars >= 0xA0 (meta
            chars) correctly, neither in reversed video or as 2 chars
          * "if wrap mode => fix prev/next page & up/down cursor". Now
            they move to screen lines, not to physical lines


Version 0.7 ("Hello Darling, I'm here") - 2001/11/30:

  + 'pyview', a new pager/viewer for use with lfm or standalone,
    internally or externally. It is used as default pager too.
    Some features: Text / Hex view, backwards & forwards search,
                   goto line/byte, un/wrap mode, documentation, ...
  + Rewrite 'show filesystems info' to use internal viewer
  + New 'run_thread' function in which almost every proccess is executed,
    so they can be stopped and there is a working signal too.
    'do_something_on_file' does not use it
  + Implemented 'show file info'
  + Check errors when un/compressing
  + Support for .bz2
  + Removed tar 'v' flag in un/compressing
  + Fixed completition, it should work perfectly now
  + Added Ctrl-D key to delete the whole content of the EntryLine
  + Implemented help: README, NEWS, TODO, ChangeLog or COPYING files
  + Added new function to show special files: html, graphics, ...,
    so we have defined new programs and file types too
  + Added new preference: show_output_after_exec, defaults to yes
  + Fix cursor position after deleting files
  + Default configuration is now saved inmediately
  + Many other bugs fixed again (see ChangeLog)


Version 0.6 was never publically released


Version 0.5 ("Last call to London") - 2001/08/07:

  + F2 file menu, added many functions
  + F9 general menu, added many functions
  + Implemented find and grep
  + File permissions, owner and group has a window now
  + Implemented preferences, edition has to be improved, of course,
    but loading and saving works
  + Added 'show filesystems info' feature
  + Now 'q' or F10 exits to current path, see proper README section
  + Default pager changed to 'less'
  + Documentation has been improved
  + 'setup.py' now installs docs
  + Many bug fixes and functions rewrites:
      - home and end keys work ok now
      - not all people use bash-type shells, so don't use 2>&1
      - use popen2.popen3 instead of os.popen to catch messages
      - manage problems with move while files don't fit into destination
      - option 'b' does not exist in Solaris' 'du -s' command
      - fix a problem while moving files if destination has no enough space
      - many others


Version 0.4 - 2001/07/19:

  + First public release
