NAME
    wcd - Wherever Change Directory

    chdir for DOS and Unix

SYNOPSIS
        wcd [options] [directory]

DESCRIPTION
  Overview
    Wcd is a command-line program to change directory fast. It saves time
    typing at the keyboard. One needs to type only a part of a directory
    name and wcd will jump to it. Wcd has a fast selection method in case of
    multiple matches and allows aliasing and banning of directories. Wcd
    also includes a full screen interactive directory tree browser with
    speed search.

    Wcd was modeled after Norton Change Directory (NCD). NCD appeared first
    in *The Norton Utilities, Release 4*, for DOS in 1987, published by
    Peter Norton.

    Wcd has been ported to different command-line shells: DOS command.com,
    Windows cmd.exe and PowerShell, OS/2 cmd.exe, and Unix shells such as
    Bourne (sh), Bourne Again (bash), Korn (ksh), Z (zsh), and C (csh) shell
    and others running on any operating system.

    Wcd supports 8 bit character sets on all systems, and has optional
    support for Unicode. See section LOCALIZATION.

    See section INSTALLATION how to setup wcd for personal use.

  Basic use
    By default (if no wildcards are used) wcd searches for a directory with
    a name that begins with the typed name.

    For instance this command will change to directory to the current user's
    "/home/user/Desktop":

        wcd Desk

    When there are multiple matches, wcd will present the user a list of all
    matches. The user can then make a selection with a few keystrokes (most
    of the times only one).

  Wildcards
    Wcd supports following wildcards:

        *       matches any sequence of characters (zero or more)
        ?       matches any character
        [SET]   matches any character in the specified set,
        [!SET]  or [^SET] matches any character not in the specified set.

    A set is composed of characters or ranges; a range looks like *character
    hyphen character* as in "0-9" or "A-Z". The "[0-9a-zA-Z_]" is the
    minimal set of characters allowed in the "[..]" pattern construct.
    International characters (i.e. 8 bit characters) are allowed if the
    system supports them. To suppress the special syntactic significance of
    any of "[]*?!^-\" inside or outside a "[..]" construct and match the
    character exactly, precede the character with a backslash ("\") marker.

    Using wildcards makes powerful searching possible. For instance this
    matches any directory name that ends with "top":

        wcd *top

    Match directories that have "top" anywhere in the name:

        wcd *top*

    Match any directory name that begins with "a", "b" or "c":

        wcd [a-c]*

    It is also possible to give a part of a directory path. Here Wcd
    searches for directory that begins with "Desk" and which path matches
    **me/Desk**.

        wcd me/Desk

    It is allowed to type any kind of expression with slashes and wildcards.
    E.g.:

        wcd src*/*1?/a*2

  Other uses
    If no wildcards are used and wcd finds a perfect match, wcd will ignore
    all wild matches by default. This behaviour can be changed with the -w
    option.

    The interactive directory tree browser can be started by using option
    -g.

        wcd -g

    Wcd generates a treedata file where it searches the directory. On Unix
    and Windows systems wcd does add symbolic links to the treedata file
    while scanning the disk, but does not follow them. While following links
    wcd could end up scanning infinite loops, or scan very large portions of
    a network.

    Wcd can also change to directories that are not in the treedata file.
    E.g.:

        wcd ..

    If wcd found a match but can't change to the directory it tries to
    remove it from the default treedata file. Not from the extra treedata
    file. See also option -k.

    Wcd keeps a directory stack which is stored on disk. The stack has a
    default size of 10 and is cyclic. See options -z, -, + and =.

    In multi-user environments option -u can be used to change to
    directories of other users.

    On DOS and Windows systems it does not matter if you use a slash "/" or
    a backslash "\" as a directory separator.

    It is possible on DOS and Windows systems to change drive and directory
    in one go by preceding the directory name with the drive name.

        wcd d:games

  Windows UNC paths
    The Windows versions (Command Prompt, PowerShell, MSYS, zsh, cygwin)
    support Windows SMB LAN UNC paths without drive letter such as
    "\\servername\sharename". Wcd for Windows Command Prompt makes use of
    the "pushd" command to automatically map a UNC path to a drive letter.
    In Windows PowerShell, MSYS, zsh and Cygwin UNC paths are fully
    supported. The current working directory can be a UNC path.

  Console resizing on Windows
    Wcd supports console resizing in Windows 10 console and ConEmu (see
    <https://conemu.github.io/>) since version 6.0.3. The Windows 10 console
    must not be in legacy mode (check the console's properties). The screen
    may not refresh when the console Layout property "Wrap text output on
    resize" is disabled. The screen can be refreshed manually by pressing
    the F5 key.

  Interfaces
    Wcd has three different interfaces to choose from a list of matches. The
    interface can be chosen at compile time.

    The first interface uses plain stdin/stdout. A numbered list is printed
    in the terminal. The user has to choose from the list by typing a number
    followed by <Enter>. This interface does not provide scroll back
    functionality in case of a long list. The scroll back capability of the
    terminal/console has to be used. It is very small and portable.

    The second interface is built with the conio library. It provides a
    builtin scroll back capability. The user is presented a list numbered
    with letters. Choosing from a list can be done by pressing just one
    letter. This interface is fast because it saves keystrokes. If possible
    the screen will be restored after exiting. One who prefers to type
    numbers can use the -N option.

    The third interface is built with the curses library. It is similar to
    the conio interface. The curses version of wcd has also an additional
    'graphical' interface. It lets the user select a directory via a full
    screen interactive directory tree browser. It has a vim(1) like
    navigation and search method. It can be activated with option -g.

    By using the -o option one can always fall back to the stdin/stdout
    interface.

OPTIONS
    -a  Add current path to the default treedata file.

        Use this option to quickly add the current path to the default
        treedata file. Re-scanning the complete disk can take a long time in
        some cases.

    -aa Add current and all parent paths to the default treedata file.

    -A PATH
        Scan directory tree from *PATH* and append to the default treedata
        file. Examples:

            wcd -A .
            wcd -A /home -A /etc
            wcd -A d: -A e: -A \\server\share

        On Windows one can scan all shared directories of a Windows LAN
        server by typing something like: "wcd -A \\servername".

        See also option -S and -s and -E.

    -b  Ban current path.

        Wcd places the current path in the ban file. This means that wcd
        ignores all matches of this directory and its sub directories.

        The ban file can be edited with a text editor. Use of wildcards is
        supported and names are matched against the absolute path.

        Banned paths are not excluded from scanning the disk. To do that use
        option -xf.

    -c, --direct-cd
        Direct CD mode. By default wcd works as follows:

            1. Try to find a match in the treedata file(s)
            2. If no match, try to open the directory you typed.

        In direct CD mode wcd works in reversed order.

            1. Try to open the directory you typed.
            2. If not, try to find a match in the treedata file(s).

    -d DRIVE
        Set drive for stack and go file (DOS only).

        The stack file and the go-script are by default stored on drive C:
        if environment variable *HOME* is not set. Use this option if drive
        C: is a read-only drive. This option must be used in front of the
        stack options -, + and =.

    -e  Add current path to the extra treedata file.

        Use this option to quickly add the current path to the extra
        treedata file.

    -ee Add current and all parent paths to extra treedata file.

    -E PATH
        Scan directory tree from *PATH* and append to Extra treedata file.
        See also options -A and -S.

    -f FILE
        Read treedata file *FILE*. Do not read the default treedata file.

    +f FILE
        Read treedata file *FILE* in addition to the default treedata file.

    -g  Graphical interface (only in version with curses interface).

        Wcd starts a textual curses based 'graphical' interface. The user
        can select a directory via a full-screen interactive directory tree
        browser. It has a vim(1) like navigation and search method.

        If no search string is given wcd presents the whole tree which is in
        the default treedata file and the extra treedata files.

        If a search string is given the match list is presented as a
        directory tree.

        The default tree layout is similar to the tree layout of the
        original NCD on DOS. The difference in layout is that in NCD all
        directories of a same depth level were vertically aligned over the
        whole tree. This was possible in NCD, because the maximum width of a
        directory name in DOS was 12 (8.3) characters. On modern operating
        systems directory names can be very long, so also the differences in
        length can be large. Therefore folders with a same depth are not
        vertically aligned over the whole tree in wcd, but only in
        sub-branches. So there is some sideways movement when moving
        straight up and down from one sub-branch to another sub-branch.

        The navigation behaviour in Wcd is exactly the same as in the
        original NCD. For instance if you push the Down key you go down to
        the next directory with the same depth level, jumping over branches.
        This enables fast navigation through the tree.

        See options -Ta, -TC, and -Tc to change the navigation behaviour.

    -gd Dump the treedata files as a tree to stdout.

    -G PATH
        Write go-script in directory *PATH*. For instance on Unix, "wcd -G
        PATH" will write a go-script PATH/wcd.go.

    -GN, --no-go-script
        Do not create go-script. This option can be used in combination with
        the option -j if one does not want wcd to create a go-script.

    -h, --help
        Show help and exit.

    -i, --ignore-case
        Ignore case. Dos and Windows versions of wcd ignore case default.
        Unix/Cygwin versions regard case by default.

    +i, --no-ignore-case
        Regard case. See also option -i.

    -I, --ignore-diacritics
        Ignore diacritics for Latin-based scripts. Letters with diacritical
        marks match their base letter without diacritical mark. The
        following Latin encodings are supported: CP437, CP850, CP852,
        CP1250, CP1252, ISO-8859-1, ISO-8859-2, and Unicode Latin-1, Latin
        Extended-A, and Latin Extended-B. See also
        <https://en.wikipedia.org/wiki/Diacritic>

    +I, --no-ignore-diacritics
        Regard diacritics (default). See also option -I.

    -j, --just-go
        Just go mode.

        In this mode wcd will not present a list when there is more than one
        directory that matches the given directory. Wcd will just change to
        the first option. When wcd is invoked again with the same arguments
        it will change to the next option, and so on.

        Wcd will print the directory to go to to stdout. So a different
        installation method can be used. One could make the following
        function for a POSIX compatible shell:

            wcd ()
            {
                cd "$($HOME/bin/wcd.exe -j $@)"
            }

        When you are using an old shell that doesn't support "$()" command
        substitution you have to use old style command substitution with
        back-quotes.

            wcd ()
            {
                cd "`$HOME/bin/wcd.exe -j $@`"
            }

        On Windows systems, if one is running 4NT shell, one could make the
        following alias:

            alias wcd `cd %@execstr[wcdwin32.exe -z 0 -j %1]`

        This method eliminates the need of the go-script, so one can use
        option -GN in combination with -j.

    -k, --keep-paths
        Keep paths.

        Keep paths in the treedata file when wcd can't change to them. The
        default behaviour of wcd is that it tries to remove paths from the
        treedata when wcd can't change to them. With this option this
        behavior is turned off.

    -K, --color
        Use colors in graphical mode.

    -l ALIAS
        Name the current path with *ALIAS*. Wcd places the current path with
        alias *ALIAS* in the alias file. Aliases are case sensitive.

    -ls Show the name of the alias file, and list all the aliases.

    -m DIR
        Make directory and add to treedata file.

    -L, --license
        Print the distribution license.

    -M DIR
        Make directory and add to extra treedata file.

    -n PATH
        Read relative treedata file from *PATH*.

        Do not read the default treedata file. The relative treedata file
        should already have been created using the wcd +S option. *PATH* may
        also point to a file directly.

        An example. Suppose another system has been mounted to mount point
        "/mnt/network":

            wcd -n /mnt/network src

        Wcd opens the relative treedata file in "/mnt/network/". The file
        contains the paths relative from that point.

    +n PATH
        Read relative treedata file in addition to the default treedata
        file. See option -n.

    -N, --numbers
        Use numbers instead of letters.

        Wcd with a conio or curses based interface (see section Interfaces)
        presents a match list by default numbered with letters. When the -N
        option is used the match list is numbered with numbers. Regardless
        of the -N option one can type a letter or numbers to make a
        selection from the list of matches.

    -o  Use stdin/stdout interface.

        When for some kind of reason the conio or curses interface of wcd
        does not work one can fall back to the stdin/stdout interface of wcd
        by using the -o option.

    -od, --to-stdout
        Dump all matches to stdout.

    -q, --quiet
        Quieter operation. Printing of the final match is suppressed.

    -r DIR
        Remove directory and remove from the treedata file.

        If the directory is empty, wcd will remove it, and try to remove it
        from the treedata file.

    -rmtree DIR
        Recursively remove directory and remove from the treedata file.

        Wcd will remove the directory and all its sub directories and files,
        and remove the directories from the treedata file.

    -s  (re)Scan disk from $HOME directory. If *HOME* is not defined the
        disk is scanned from root directory /.

        The existing default treedata file is overwritten.

        The default scan directory can be overruled with environment
        variable "WCDSCAN". See section ENVIRONMENT VARIABLES.

    -S PATH
        Scan directory tree from *PATH* and overwrite the default treedata
        file. See also options -A, -s and -E. E.g. with option -A you can
        create a default treedata file of your choice. Examples:

        Unix:

            wcd -S /
            wcd -S /home -A /etc -A /usr

        DOS/Windows:

            wcd -S c:/
            wcd -S c: -A d: -A \\server\share

        With the Windows versions one can scan all shared directories of a
        Windows LAN server by typing something like: "wcd -S \\servername".

    +S PATH
        Scan disk from *PATH* and place relative paths in a relative
        treedata file. This file is used by the -n and +n options of wcd.
        E.g. "wcd -n PATH src".

    -t  Do not strip tmp mount dir "/tmp_mnt" (Unix only)

        Wcd strips by default "/tmp_mnt/" from the match. Directory
        "/tmp_mnt" is used by the auto-mounter. This behaviour can be turned
        off with the -t option.

    -T, --ascii-tree
        Draw tree with ASCII characters. Use this option if line drawing
        characters are not displayed properly in your terminal.

    -Ta, --alt-tree-nav
        Alternative way of navigation in the graphical tree.

        In the default NCD style tree layout the -Ta option disables jumping
        to unrelated directories.

        In compact tree mode the alternative mode makes navigation similar
        to navigation in GUI file managers such as Windows Explorer or Linux
        KDE Konqueror. Pressing Up and Down moves the selected folder one
        line up or down. Pressing Left first folds the sub-folders and the
        next move left moves really left.

        You can switch on-the-fly between default and alternative navigation
        by pressing <Shift-A>.

        When alternative navigation mode is on, you will see an "A" in the
        lower right corner.

    -TC, --center-tree
        Centered view in the graphical tree. The selected directory stays in
        the middle of the screen. The centered mode can also be switched on
        and off with key <t> in the graphical tree.

        The standard non-centered behaviour, which minimises tree movement,
        is the same as in the original NCD.

    -Tc, --compact-tree
        By default the 'graphical' tree is drawn the same way as the
        original NCD on DOS did it. On DOS a directory path could only be 66
        characters in total. With the deep directory structures of today the
        tree can become very wide. To overcome this wcd can draw the tree in
        a compact way, similar to most GUI file managers, with only one
        folder per line. Use option -Tc or switch on-the-fly with the <m>
        key.

    -Td, --cjk-width
        Legacy East-Asian CJK (Chinese, Japanese, and Korean) fonts have
        certain characters and line drawing symbols with a column width of
        2, while the normal Unicode width for these characters is 1 column.
        For instance the Chinese CP936 raster font on Windows and the Simsun
        font. Use this option for a correct outlining of the graphical tree
        when a legacy CJK font is used.

        When CJK mode is on, you will see a "C" in the lower right corner.

    -u USER
        Scan treedata file of another user based on *USER*, do not scan your
        own default treedata file. See also section ENVIRONMENT VARIABLES
        for *WCDUSERSHOME*.

        On Unix/Cygwin the base directory for user home directories is
        assumed to be "/home". Wcd will look for "/home/USER/.treedata.wcd"
        and "/home/USER/.wcd/.treedata.wcd", in that order, and read the
        first one that exists and is readable. On DOS/Windows the base
        directory for user home directories is assumed to be "\\users", so
        wcd tries to read "\\users\USER\treedata.wcd" and
        "\\users\USER\.wcd\treedata.wcd".

    +u USER
        Read default treedata file of USER in addition to your own treedata
        file.

    -v, --verbose
        Display verbose messages. With this option wcd prints all filters,
        bans and excludes.

    -V, --version
        Print version information and exit.

    -w, --wild-match-only
        Wild matching only. Treat all matches as wild matches.

    -x PATH
        Exclude *PATH* from scanning.

        When this option is used wcd will exclude *PATH* and all its
        subdirectories when wcd is scanning a disk. Wildcards are supported
        and matched against absolute paths. Option -x can be used multiple
        times.

            wcd -x <path1> -x <path2> -s

        Option -x must be used in front of any scan option (-s, -S, +S, -A,
        -E).

        On DOS/Windows systems one must specify the drive letter depending
        on if environment variable *HOME* or *WCDHOME* is set. If *HOME* or
        *WCDHOME* is set one needs to specify the drive letter. An example:

            wcd -x c:/temp -S c:

        Otherwise do not specify drive letter.

            wcd -x /temp -s

    -xf FILE
        Exclude all paths listed in *FILE* from scanning.

        When this option is used wcd will exclude all paths listed in *FILE*
        and all their subdirectories when wcd is scanning a disk. Wildcards
        are supported and they are matched against absolute paths; one path
        per line. Be aware that wcd will not ignore leading or trailing
        blanks on a line, because they are legal characters in a directory
        name. Option -xf can be used multiple times. When one wants to
        exclude all banned paths from scanning one can do the following
        (example for wcd on unix):

            wcd -xf ~/.ban.wcd -s

        Wildcards are supported. For instance to exclude all your Subversion
        directories with administrative files add a line with "*/.svn".

        Option -xf must be used in front of any scan option (-s, -S, +S, -A,
        -E).

    -y, --assume-yes
        Assume Yes on all queries.

        Wcd will not prompt the user with yes/no questions, but assumes the
        user answers yes on all questions. This can be used in combination
        with option -rmtree. This option must be used in front of options
        that can lead to yes/no questions.

    -z NUMBER
        Set maximum stack size to NUMBER.

        The default size of the stack is 10. Stack operation can be turned
        off by setting the size to 0. This option must be used in front of
        any other stack operations (-,+,=). Otherwise the size of the stack
        will be set back to the default 10.

        A correct command is:

            wcd -z 50 -

        The new stack size will be 50, wcd will go one directory back. A
        wrong command is:

            wcd - -z 50

        Wcd goes one directory back, the stack gets the default size 10. The
        -z 50 is ignored.

        Add this option as the first option to your wcd alias or function.
        E.g. for the a POSIX compatible shell this would be:

            wcd ()
            {
                wcd.exe -z 50 "$@"
                . ${WCDHOME:-${HOME}}/bin/wcd.go
            }

    -[NUMBER]
        Push dir NUMBER of times. Default is one.

        Go back a directory. Command "wcd -" goes one directory back. To go
        more directories back add a number to it. E.g. command "wcd -3". The
        stack is cyclic.

    +[NUMBER]
        Pop dir NUMBER of times. Default is one.

        Go forward a directory. Command "wcd +" goes one directory forward.
        To go more directories forward add a number to it. E.g. command "wcd
        +2". The stack is cyclic.

    =   Show stack.

        Use this option if you do not know anymore how many times to push or
        pop. The stack is printed and you can choose a number. The current
        place in the stack is marked with an asterisk "*".

INSTALLATION
    The current working directory of a Unix shell can only be changed by the
    builtin cd(1) command. Therefore the program is always called by a
    function or an alias. The function or alias sources a shell script
    (go-script) which is generated by the wcd program. Wcd can only work
    after the function or alias is defined.

    Another important influence on your installation is the definition of
    environment variables *HOME* and *WCDHOME*. See section ENVIRONMENT
    VARIABLES.

  Install for POSIX type shells
    If wcd was installed with a package manager the wcd function may be
    installed in /etc/profile.d and automatically sourced. In this case it
    is not needed to define a function yourself.

    For a POSIX shell (ksh, bash, zsh, etc.) on Unix, Linux, Cygwin, or
    native MSYS add the following function to the shell startup file (e.g.
    Bash uses "$HOME/.bashrc"):

        wcd ()
        {
            typeset go="${WCDHOME:-${HOME}}/bin/wcd.go"
            rm -f "$go" 2> /dev/null
            PATH/wcd.exe "$@"
            [ -f "$go" ] && . "$go"
        }

    Replace *PATH* with the location where the wcd executable has been
    installed. Reload the shell initialization files or start new shell.

    The location of the go-script "wcd.go" differs per shell.

    Wcd for DJGPP DOS bash and OS/2 bash require a different function. The
    go script is not written in a directory "bin", and if *WCDHOME* and
    *HOME* are both not defined the go-script is written on c:/.

    DOS bash:

        wcd ()
        {
            PATH/wcdbash.exe "$@"
            . ${WCDHOME:-${HOME:-"c:"}}/wcd.go
        }

    OS/2 bash:

        wcd ()
        {
            PATH/wcdos2bash.exe "$@"
            . ${WCDHOME:-${HOME:-"c:"}}/wcd.go
        }

    The WinZsh version of wcd requires a bit different function. The
    go-script will never be written in c:/.

        wcd ()
        {
            PATH/wcdwin32zsh.exe "$@"
            . ${WCDHOME:-${HOME}}/wcd.go
        }

    See section FILES for more information.

  Install for C-alike shells (csh, tcsh)
    Add the following alias to the shell startup file "$HOME/.cshrc" or
    "$HOME/.tcshrc" :

        if ( ${?WCDHOME} ) then
            alias wcd "PATH/wcd.exe \!* ; source $WCDHOME/bin/wcd.go"
        else
            alias wcd "PATH/wcd.exe \!* ; source $HOME/bin/wcd.go"
        endif

    Replace *PATH* with the location where the wcd executable has been
    installed. Reload the shell initialization files or start a new shell.

  Windows Command Prompt version
    Unpack the zip file and add directory "bin" to your environment variable
    *PATH*.

    In Windows Command Prompt a Windows program cannot change the current
    work directory, but a .bat file can. The batch script "wcd.bat" runs the
    wcd program which generates a new batch script "wcdgo.bat". Then
    "wcd.bat" runs "wcdgo.bat" which actually changes the directory.

  Windows VISTA and higher
    In a Windows VISTA and higher Command Prompt you may have limited access
    to directories. To get access to more directories you need administrator
    rights. You can get a Command Prompt with administrator rights if you
    right click on the Command Prompt icon and select *Run as
    administrator*.

  Windows PowerShell version
    Add the following function to your PowerShell user profile. The location
    of this profile is stored in the $profile variable. It is required that
    one of the environment variables *HOME* or *WCDHOME* is defined.

        function wcd
        {
            PATH\wcdwin32psh.exe $args
            & $env:HOME\wcdgo.ps1
        }

    Replace *PATH* with the location where the wcd executable has been
    installed. Start a new PowerShell. Wcd for PowerShell supports only the
    file system provider. No other providers.

  OS/2 Command Prompt version
    In an OS/2 Command Prompt (cmd.exe) an OS/2-program can't change the
    current work directory. That is why wcd generates a command script
    "wcdgo.cmd" which must be executed in the current shell. The script
    "wcd.cmd" first executes "wcdos2.exe", which creates the "wcdgo.cmd"
    script. Then "wcd.cmd" executes the "wcdgo.cmd" script.

LOCALIZATION
    LANG
        The primary language is selected with the environment variable
        *LANG*. The *LANG* variable consists out of several parts. The first
        part is in small letters the language code. The second one is
        optional and is the country code in capital letters, preceded with
        an underscore. There is also an optional third part: character
        encoding, preceded with a dot. A few examples for POSIX standard
        type shells:

            export LANG=nl               Dutch
            export LANG=nl_NL            Dutch, The Netherlands
            export LANG=nl_BE            Dutch, Belgium
            export LANG=es_ES            Spanish, Spain
            export LANG=es_MX            Spanish, Mexico
            export LANG=en_US.iso88591   English, USA, Latin-1 encoding

        For a complete list of language and country codes see the gettext(1)
        manual:
        <https://www.gnu.org/software/gettext/manual/gettext.html#Language-C
        odes> On Unix systems you can use to command locale(1) to get locale
        specific information.

    LANGUAGE
        With the *LANGUAGE* environment variable you can specify a priority
        list of languages, separated by colons. Wcd gives preference to
        *LANGUAGE* over *LANG*. For instance, first Dutch and then German:
        "LANGUAGE=nl:de". You have to first enable localization, by setting
        *LANG* or *LC_ALL* to a value other than *C*, before you can use a
        language priority list through the *LANGUAGE* variable. See also the
        gettext(1) manual:
        <https://www.gnu.org/software/gettext/manual/gettext.html#The-LANGUA
        GE-variable>

        If you select a language which is not available you will get the
        standard English messages.

    WCDLOCALEDIR
        With the environment variable *WCDLOCALEDIR* the *LOCALEDIR* used
        during compilation and installation of wcd can be overruled.
        *LOCALEDIR* is used by wcd with native language support to find the
        language files. The GNU default value is "/usr/local/share/locale".
        By typing "wcd -V" wcd will print the *LOCALEDIR* that is used.

        If you have installed wcd in a different directory than the default
        directory you may need to set the environment variable
        *WCDLOCALEDIR* to point to the locale directory.

        An example for Windows cmd:

            set WCDLOCALEDIR=c:/my_prefix/share/locale

        An example for a POSIX shell:

            export WCDLOCALEDIR=$HOME/share/locale

    LC_COLLATE
        When there are multiple directory matches wcd presents a sorted
        list. The sorting depends on the locale settings. If the environment
        *LANG* has been set the matches are sorted like dictionaries or
        phone books are sorted in that language. For instance dots and
        dashes are ignored, or letters e with and without accent are equal,
        or upper and lower case is ignored.

        The sorting gives preference to environment variable *LC_COLLATE*
        over *LANG*. If you make *LC_COLLATE* equal to "C" or "POSIX",
        locale sorting is turned off. For instance if you want Dutch
        language, but not Dutch sorting, you can do something like this:

            export LANG=nl_NL
            export LC_COLLATE=C

    LC_CTYPE
        With regard to character encoding Wcd will give preference to
        variable *LC_CTYPE* over *LANG*. For instance to set character
        encoding to UTF-8 the following environment setting can be done.

            export LC_CTYPE=en_US.UTF-8

    LC_ALL
        All locale environment variables that start with *LC_* are overruled
        by the environment variable *LC_ALL* if it is defined. Wcd gives
        preference to *LC_ALL* over *LC_COLLATE* and *LC_CTYPE*.

  WINDOWS CODE PAGES
    There are two groups of code pages: DOS code pages (OEM) and Windows
    code pages (ANSI). The default encoding for Windows, when configured
    with Western regional settings, is ANSI CP1252. Windows programs, for
    instance notepad, use this default system ANSI code page. The Windows
    console uses by default an OEM code page (CP437 or CP850) for
    compatibility with DOS programs. If you use a DOS version of wcd in a
    Windows console it will work, because of the DOS code page. But the DOS
    version of wcd lacks support for long directory names and network drives
    on Windows.

    The Windows version of wcd is a native Windows program and will use the
    Windows system ANSI code page. So on a Western regional Windows it will
    use code page CP1252 for directory names and messages. In order to get
    consistent output, independent of the active code page, all Windows
    versions of Wcd translate ANSI output to Unicode output in the Command
    Prompt and PowerShell.

    The console raster font only supports the original OEM code page
    installed with Windows, so you have to change the console's font to true
    type Lucida Console to make Unicode (and ANSI) letters appear correctly.

    Non-Unicode versions of Wcd *prior to version 5.2.0* use plain ANSI
    output. For these older versions the code page of the console has to be
    made equal to the system code page (changed to 1252) to make wcd for
    Windows work properly with special characters such as accented
    characters or the Euro symbol.

    The Windows system code page can be changed via the Control Panel
    regional options. The Windows console code page is changed with the
    "chcp" command.

    When you type "wcd -V", the actual character encoding used by wcd is
    shown. Type the command "chcp" to display the active code page of the
    Windows console.

  UNICODE
    Wcd has optional support for Unicode. To see if wcd was built with
    Unicode support type "wcd -V". If your terminal/console and font
    supports it, you should see the Euro symbol and Chinese characters
    (meaning: "Chinese").

    Wcd has been *soft* converted to Unicode. In its core wcd handles all
    data as a stream of bytes. Only the lines printed to screen are on the
    fly converted to Unicode wide characters. Wcd fully relies on libc
    functions and has no UTF-8 specific code. See also
    <https://www.cl.cam.ac.uk/~mgk25/unicode.html>

    Wcd has optional support for Unicode matching with normalisation. To
    find out whether Wcd has normalisation support type "wcd -V". Wcd with
    Unicode normalization support will match Unicode names based on
    *compatible* equivalence. Without Unicode normalization support, names
    are matched when they are binary equivalent. See also
    <https://en.wikipedia.org/wiki/Unicode_normalization>

   UTF-8 on Unix/Linux
    In order to view UTF-8 characters your console/terminal also needs to
    support UTF-8. The xterm version that comes with XFree86 4.0 or higher
    includes UTF-8 support. To activate it, start xterm(1) in a UTF-8 locale
    and use a font with iso10646-1 encoding, for instance with

        LC_CTYPE=en_GB.UTF-8 xterm -u8 -fn '-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO10646-1'

    Modern distributions of GNU/Linux support UTF-8 by default. Other
    multi-byte character encodings should also work, but that has not been
    tested.

    Wcd assumes that the treedata files are encoded in the locale character
    encoding. There are no Byte Order Marks written to treedata files.

   UTF-16 on Windows
    On Windows Unicode is supported in all versions of PowerShell, and in
    Windows Command Prompt on Windows 7 (or higher). Unicode also works in
    Take Command or TCC/LE made by JP Software, which can be used on older
    Windows versions (XP/Vista).

    On Windows all the directory names on disk are encoded in UTF-16
    Unicode. For non-Unicode Windows programs the Unicode characters are
    translated to the default ANSI code page. For characters that are not
    part of the regional setting this translation is not possible and
    non-Unicode programs print a question mark or a wrong character instead.

    Wcd with Unicode support will read the UTF-16 encoded directory names
    and converts them internally to UTF-8. All treedata files are encoded in
    UTF-8 and not compatible with the non-Unicode version of Wcd. Wcd will
    create a go-script encoded in UTF-8.

    All versions of Windows PowerShell are able to run scripts encoded in
    UTF-8, provided there is an UTF-8 BOM in the script.

    Since Windows 7 it is possible in Windows Command Prompt to change
    directory with a batch script to a directory with Unicode letters in the
    name. The directory name needs to be encoded in UTF-8, and the batch
    script must *not* have a BOM. The active code page of the Command Prompt
    needs to be set to 65001 (UTF-8) prior to the cd command. Wcd for
    Command Prompt will create such a go script "wcdgo.bat". It first
    changes the code page to 65001, then changes directory, and finally sets
    the code page back to the original code page.

    You need to set the font to True Type Lucida Console (not raster font)
    when letters don't appear correctly.

    The non-Unicode Windows version of Wcd can read Unicode treedata files
    since version 5.2.0, provided there is a Byte Order Mark (BOM) in the
    file (see <https://en.wikipedia.org/wiki/Byte_order_mark>), but it can't
    change to directories with Unicode letters in the name that are not part
    of the default system ANSI code page. The Unicode Windows version of wcd
    writes a BOM in the UTF-8 encoded treedata files since version 5.2.0,
    which makes them also readable by notepad.

   UTF-8 on Cygwin
    Cygwin supports Unicode since version 1.7. The Cygwin layer takes care
    that the Windows UTF-16 Unicode names are converted to UTF-8. So
    programs, like wcd, do not need to be aware of this and can operate
    using UTF-8 encoding as on Unix/Linux. Set character encoding to UTF-8
    with the *LANG* or *LC_CTYPE* environment variable. You may need to
    rescan your drives. You need to set the font to True Type Lucida Console
    (not raster font) if you use the default Cygwin console.

    The Cygwin version behaves exactly as the Unix version of wcd. There is
    no BOM written in the treedata files, and it is assumed they are encoded
    in the Cygwin locale character encoding.

FILES
    If the environment variable *WCDHOME* is set wcd will use *WCDHOME*
    instead of *HOME*. All "*.wcd" files are text files. They can be edited
    with a text editor. The Windows Command Prompt version of wcd behaves as
    the DOS version. The Cygwin version of wcd behaves as the Unix version.

    wcd.exe
        The program. In Unix shells the program is always called by a
        function or alias, because the current working directory of a Unix
        shell can only be changed by the builtin cd command. See also
        section INSTALLATION.

    default treedata file
        This is the default treedata file where wcd searches for matches. If
        it is not readable wcd will create a new one.

            DOS: \treedata.wcd or %HOME%\treedata.wcd
            Unix: $HOME/.treedata.wcd

    extra treedata file
        An optional extra treedata file. If it exists and is readable wcd
        will try to find matches in this file also.

            DOS: \extra.wcd or %HOME%\extra.wcd
            Unix: $HOME/.extra.wcd

    ban file
        In this optional file wcd places banned paths. See option -b.
        Wildcards are supported.

            DOS: \ban.wcd or %HOME%\ban.wcd
            Unix: $HOME/.ban.wcd

    alias file
        Optional file with wcd aliases. See option -l.

            DOS: \alias.wcd or %HOME%\alias.wcd
            Unix: $HOME/.alias.wcd

    stack file
        In this file wcd stores its stack. The drive letter can be changed
        with the -d option.

            DOS: c:\stack.wcd or %HOME%\stack.wcd
            Unix: $HOME/.stack.wcd

        The name of the stack file can be changed with environment variable
        *WCDSTACKFILE*. See section ENVIRONMENT VARIABLES.

    go-script
        This is the shell script which wcd.exe creates each time. It is
        sourced via a function or an alias. The drive letter can be changed
        with the -d option. For history reasons it is placed by default in
        "$HOME/bin" on Unix systems. The directory of this file can be
        changed with the option -G.

            DOS bash: c:/wcd.go or $HOME/wcd.go
            Windows Command Prompt: c:\wcdgo.bat or %HOME%\wcdgo.bat
            Windows PowerShell: $env:HOME\wcdgo.ps1
            WinZsh: $HOME/wcd.go
            Cygwin/MSYS: $HOME/bin/wcd.go
            OS/2 Command Prompt: c:\wcdgo.cmd or %HOME%\wcdgo.cmd
            OS/2 bash: c:/wcd.go or $HOME/wcd.go
            Unix: $HOME/bin/wcd.go

    relative treedata file
        Text file with relative paths from *DIR*. See options +S, -n and +n.

            DOS: PATH\rtdata.wcd
            Unix: PATH/.rtdata.wcd

ENVIRONMENT VARIABLES
    HOME
        Wcd uses by default environment variable *HOME* to determine where
        to store its files. See also section FILES. This can be overruled
        with environment variable *WCDHOME*.

        *HOME* also defines where to start scanning the disk when option -s
        is used. This can be overruled with the environment variable
        *WCDSCAN*.

        For the Unix, Cygwin, Windows PowerShell, WinZsh and MSYS version it
        is required that *HOME* or *WCDHOME* is set. For the other versions
        of wcd the use of these variables is optional.

        If *HOME* is set on DOS/Windows, wcd will place all its files
        (treedata.wcd, extra.wcd, alias.wcd, ban.wcd, wcd.go) in directory
        *HOME*. The behaviour of wcd is then equal to the Unix version of
        wcd. Wcd will scan the disk default from *HOME*. Drives will not be
        automatically scanned by changing to them. You need to tell wcd
        explicitly. E.g.:

            wcd -S c: -A d: -A e:

        Matching of directories is now global over all scanned drives.

    WCDHOME
        Environment variable *WCDHOME* can be used to change the location of
        wcd's files. If both *HOME* and *WCDHOME* are set, *WCDHOME* will be
        used instead of *HOME*.

        In wcd versions prior to 5.1.5 *WCDHOME* also changed the default
        scan directory. This has changed. Since version 5.1.5 *WCDHOME* does
        not change the default scan directory. See option -s. From version
        5.1.5, use environment *WCDSCAN* to overrule the default scan
        directory.

        Example for DOS, Windows, OS/2 Command Prompt:

            set WCDHOME=C:\Users\erwin\wcd

        An example for POSIX type shells:

            export WCDHOME="$HOME/.wcd"

        An example for Csh type shells:

            setenv WCDHOME "$HOME/.wcd"

    WCDSCAN
        Use environment variable *WCDSCAN* to overrule the default scan
        directory *HOME*. Define a colon separated list (Unix) to define
        more than one directory. On DOS/Windows make the list semi-colon
        separated.

        Examples for DOS, Windows, OS/2 Command Prompt:

            set WCDSCAN=C:\Users\erwin;D:\data

            set WCDSCAN=%HOMEDRIVE%%HOMEPATH%;\\projectdrive\projectX

        An example for POSIX type shells:

            export WCDSCAN="$HOME:/projectdisk/projectX"

        An example for Csh type shells:

            setenv WCDSCAN "$HOME:/projectdisk/projectX"

    WCDFILTER
        Specify filters with environment variable *WCDFILTER*. All
        directories that do not match the filter(s) are ignored. A list can
        be specified by separating filters by the shell path separator.
        Similar as specifying the *PATH* variable. The case sensitivity is
        mandated by the Operating system.

        An example for DOS, Windows, OS/2 Command Prompt:

            set WCDFILTER=projects;doc

        An example for POSIX type shells:

            export WCDFILTER="projects:doc"

        An example for Csh type shells:

            setenv WCDFILTER "projects:doc"

    WCDBAN
        The paths specified with environment *WCDBAN* will be banned by wcd.
        See also option -b. Specify a list of paths separated by shell
        *PATH* separator.

    WCDEXCLUDE
        The paths specified with environment *WCDEXCLUDE* will be excluded
        by wcd. See also options -x and -xf. Specify a list of paths
        separated by shell *PATH* separator.

        An example for DOS, Windows, OS/2 Command Prompt:

            set WCDEXCLUDE=*/windows;*/temp;*CVS

        An example for POSIX type shells:

            export WCDEXCLUDE="/dev:/tmp:*CVS"

        An example for Csh type shells:

            setenv WCDEXCLUDE "/dev:/tmp:*CVS"

    WCDUSERSHOME
        Set the base of user's home directories. On DOS/Windows the default
        value is "\\users". On Unix/Cygwin the default value is "/home".
        This variable is used to scan treedata files of other users. See
        also options -u and +u. In verbose mode wcd will print all filters,
        bans and excludes. See option -v.

    WCDSTACKFILE
        Wcd gives preference to *WCDSTACKFILE* over the default stack file
        name (see section FILES). With this variable each shell (or used
        terminal emulator) can have its private stack of used directories.

        To use a unique time based YYYYMMDD-HHMMSS file for each opened
        interactive shell.

            export WCDSTACKFILE=$HOME/.wcd/stack.$(date +%Y%m%d-%H%M%S)

        For a stack per xterm(1), use the xterm *WINDOWID* environment
        variable:

            export WCDSTACKFILE=$HOME/.wcd/stack.$WINDOWID

        For GNU screen(1), to use stack per screen:

            export WCDSTACKFILE=$HOME/.wcd/stack.$WINDOW

    TERMINFO
        If the environment variable *TERMINFO* is defined, wcd with ncurses
        interface checks for a local terminal definition before checking in
        the standard place. This is useful if terminal definitions are not
        on a standard place. Often used standard places are
        "/usr/lib/terminfo" and "/usr/share/terminfo".

    PDC_RESTORE_SCREEN
        Wcd with PDCurses interface recognizes the environment variable
        *PDC_RESTORE_SCREEN*. If this environment variable is set, PDCurses
        will take a copy of the contents of the screen at the time that wcd
        is started; when wcd exits, the screen will be restored. An example
        for Windows Command Prompt:

            set PDC_RESTORE_SCREEN=1

        Windows allows only a small buffer to be saved. So it is not always
        possible to restore everything. Some garbage data may be printed in
        the console after wcd exits if you have set a large buffer width.

    SHELL
        Printing of "#!$SHELL" on the first line of the go-script for POSIX
        type shell or C shell is needed for 8 bit characters. Some shells
        otherwise think that the go-script is a binary file and will not
        source it. In Cygwin Bash the variable *SHELL* must be set in
        environment using the "export" command, otherwise wcd can't read the
        variable.

    BASH
        Wcd for DOS bash uses $BASH instead of $SHELL, because $SHELL points
        to the DOS command shell. One may need to define $BASH with an
        "export" command, otherwise wcd can't read the variable.

SEE ALSO
    sh(1), bash(1), csh(1), ksh(1), zsh(1), locale(1), ncurses(1),

AUTHORS
    Wcd was written by Erwin Waterlander <waterlan@xs4all.nl>

    Project homepage: <https://waterlander.net/wcd/>

    SourceForge: <https://sourceforge.net/projects/wcd/>

    The manual page formatting was provided by Jari Aalto
    <jari.aalto@cante.net>.

    NCD was originally written by Brad Kingsbury for Peter Norton's "Norton
    Utilities" around 1987. See also
    <https://www.softpanorama.org/OFM/norton_change_directory_clones.shtml>

