Provided by: xd_3.29.02-1_amd64 bug

NAME

       xd - eXtra fast Directory changer

SYNOPSIS

       xd [OPTIONS] arguments

DESCRIPTION

       The program xd is used to perform eXtra fast Directory changes. Usually to change a directory the user is
       required  to enter a command like, e.g., cd /usr/local/bin, possibly with the aid of shell completion. In
       many cases this is a tedious task: shell completion shows all entries, including files, when  we’re  only
       interested  in  directories  and  the full specification of our intented directory may eventually require
       many keyboard actions.

       Xd was designed a long time ago (in the early 90s) to reduce the effort of  changing  directories.  Often
       we’re  well  aware  to  which directory we want to change, and it’s easy to produce the initial directory
       characters of that directory. E.g., if the intent is to cd to /usr/local/bin, it’s quite easy to  produce
       the letters ulb.

       Xd  capitalizes  on  this  capability.  By  providing  the initial directory characters of directories xd
       determines the proper expansion allowing you to change directories fast. So, entering the command xd  ulb
       results in the expansion /usr/local/bin.

       Often  life is not that easy. Often there are multiple expansions from a given set of initial characters.
       E.g., when entering xd ulb xd may find several alternatives. E.g.,

        1: /usr/lib/base-config
        2: /usr/lib/bonobo
        3: /usr/lib/bonobo-activation
        4: /usr/local/bin

       If these are the alternatives, this is exactly what xd will show you. Then, by simply pressing the 3  key
       (no Enter key required) xd will produce the required /usr/local/bin.

       Commands to xd can be specified so as to fine-tune xd’s behavior:

       o      By  default (as specified by the configuration file, see below) expansions may start at the user’s
              home directory or at the system’s root directory.

       o      Initial character /: If the first character of the command is / then all expansions are  performed
              from the system’s root directory. E.g., xd /t results in /tmp but not in /home/user/tmp.

       o      Initial character .: If the first character of the command is . then by default all expansions are
              performed  from  the user’s home directory. E.g., xd .t results in /home/user/tmp but not in /tmp.
              The home directory recognition character can be altered using the --homedir-char option, see below
              (section OPTIONS).

       o      Initial character 0: If the first character of the command is 0, then all expansions start at  the
              current working directory. In fact, this is a specialization of the following, more general form:

       o      Initial  character 1..9: If the first character of the command is a digit between 1 and 9 then all
              expansions start at that parent directory level of  the  current  working  directory  (up  to  the
              system’s  root  directory).  E.g.,  if the current working directory is /usr/share/doc then xd 2lb
              will offer the alternative /usr/local/bin: two steps up, then look for directories starting with l
              and therein directories starting with b.

       o      Separators (space, and the forward slash (`/’)):  sometimes  it  is  clear  that  there  are  many
              alternatives  and  the intention is to reduce that number. By using separators subsequently nested
              directories must start with the characters between the separators. E.g., xd u l bi never  produces
              the  alternative  /usr/lib/base-config  anymore, since base-config does not start with bi. In this
              case only /usr/local/bin is produced. When used as initial character  in  a  pattern  the  forward
              slash always indicates the root-directory.

       o      Search  patterns  may contain dots (like .s). In such cases the dot represents hidden directories.
              However, xd usually also finds patterns containing /./, as the current directory matches the  dot.
              Such patterns are considered spurious and are not reported.

       If  there’s  only  one  solution,  Xd  writes  that directory to its standard output stream. If there are
       multiple solutions, then a list of at most 62 alternatives (10 for the numbers 0..9, 26 for  the  letters
       a..z  and 26 for the letters A..Z) is written to the standard error stream from which the user may select
       an alternative by simply pressing the key associated with the selection of choice.  If  no  selection  is
       requested  any  other key may be pressed (e.g., the space bar or the Enter key). If there is no solutioon
       xd writes the text No Solutions to the standard error stream.

       When xd is given at least one argument, all its output is sent to the standard error stream, but for  the
       selected directory name which is written to the standard output stream. If no selection is made or if the
       selection  process  is  aborted a single dot is written to the standard output stream. Usually xd will be
       called by a shell alias, providing the cd command with xd’s  output  (see  below  at  the  SHELL  SCRIPTS
       section) executing cd `xd $*`. The default dot produced by xd prevents an unintended change of directory.

       When  xd  is  merely given an initial directory specification, like a single dot (.) or digit (a digit in
       the set [0..9]) then xd returns the implied path. Specifying a parent before  the  root-directory  (E.g.,
       entering `xd 5’ when the current working directory is `/tmp’) results in writing the root directory (`/’)
       to the standard output stream.

       If xd is called without arguments then usage information is written to the standard error stream.

       Xd  may  be  further  configured  using  options  and  a configuration file, discussed in the OPTIONS and
       CONFIGURATION FILE sections below.

GENERALIZED DIRECTORY SEARCH

       Starting with version 3.10.0 xd also supports generalized directory search command processing (GDS). When
       GDS is requested separators are no longer required, and xd will find all possible alternatives  resulting
       from  all  possible  sequential  combinations  of  the initial search command. GDS is activated either by
       specifying the -g command line flag  or  by  entering  generalized-search  in  xd’s  configuration  file.
       Alternatively, when the latter is specified then the --traditional command line option will suppress GDS.

       When  using  GDS each initial substring of the command to xd is considered as the initial characters of a
       directory. E.g., if the command xd tmps is entered using GDS  then  directories  matching  the  following
       search patterns will be found;

       o      /t*/m*/p*/s*/

       o      /t*/m*/ps*/

       o      /t*/mp*/s*/

       o      /t*/mps*/

       o      /tm*/p*/s*/

       o      /tm*/ps*/

       o      /tmp*/s*/

       o      /tmps*/  Using the traditional processing mode only the first one of these alternative patterns is
              considered.

       Multiple command line arguments, the slash and the underscore can still be used with GDS  in  which  case
       they  force  a directory change in the considered patterns. E.g., with the command xd tm/ps the following
       patterns will be considered:

       o      /t*/m*/p*/s*/

       o      /t*/m*/ps*/

       o      /tm*/p*/s*/

       o      /tm*/ps*/ In this set all of the previous patterns showing the ...mp...  combination were dropped,
              as a directory change is forced between the m and p characters.

RETURN VALUE

       Xd returns 0 to the operating system unless an error occurs (e.g., when a non-existing configuration file
       is specified), or xd’s version or usage info is shown or requested.

OPTIONS

       If available, single letter options are listed between parentheses following their associated long-option
       variants. Single letter options require arguments if their associated long options require  arguments  as
       well.

       o      --add-root condition
              If  the  search  starts at the user’s home directory an additional search starting at the system’s
              root directory may be performed as well, depending on the value specified for the add-root option.
              Alternatives are never (no additional search is performed);  if-empty  (an  additional  search  is
              performed  if  the initial search did not yield any directory); or always (an additional search is
              always performed).  There is also a configuration file directive add-root (see below).

       o      --all -a
              If the configuration file (see below) contains ignore directives then these directives are ignored
              when computing the alternatives from which the user may select a directory to change to.

       o      --config-file=filename (-c)
              The name of an xd configuration file. By default xd looks for the file .xdrc in  the  user’s  home
              directory. The existence of the default file is optional.

       o      --directories inclusion
              Directories  may be also be reached via symbolic links. The inclusion type all adds these symbolic
              links to the list of alternatives. The inclusion type unique prevents symbolic  links  from  being
              added  to  the list of alternatives. There is also a configuration file directive directories (see
              below).

       o      --homedir-char ch
              By default an initial dot character (`.’) initiates a search from the user’s home directory. There
              is a slight disadvantage to using the dot, as it is also be  the  initial  character  of  `hidden’
              directories.  Assuming  that  you have a directory ~/.ssh then the command to xd to that directory
              would be xd ..s, the first dot being the home directory indicator, after which .s is used to  find
              .ssh.  The  option  --homedir-char  can  be  used to specify another character. Homedir characters
              cannot be digits or a slash (`/’) as these are used to specify, respectively,  parent  directories
              and  the  computer’s  root  directory.  Characters like ``, @ % ^’’ or maybe `H’ (assuming that it
              doesn’t  interfere  with  an  existing  directory   beginning   with   H)   could   be   used   as
              homedir-characters, other than the default dot character.

              Caveat:  command  shells  by  default  interpret characters like ``~ $ \  " ` < > |’’ etc., which
              therefore should probably not be specified as home directory specifiers.

              There is also a configuration file directive homedir-char (see below).

       o      --generalized-search -g
              When this option is specified xd uses GDS unless the directive traditional  is  specified  in  the
              configuration file.

       o      --help (-h)
              Basic usage information is written to the standard error stream.

       o      --history [filename]
              A  history of previously made choices is kept in the file filename. If --history is specified, but
              the filename is left empty the history file $HOME/.xd.his  is  used.  This  file  should  only  be
              modified  by  xd itself. If you can’t resist editing it then use the following example showing the
              format of the lines in the history file.

                  1292596154 1 /home/frank/svn/xd/

              The first field is the time (in seconds since the epoch) the entry was written, the  second  field
              is the number of times the entry has been selected and the third field is the associated path.

       o      --history-lifetime spec
              The  lifetime  of the entries in the history file. The specification consists of a number followed
              by D, W, M or Y, representing, resp. days, weeks, months, or years. A month is considered a period
              of 30 days, a year a period of 365 days. If the specification is omitted a  lifetime  of  1M  (one
              month)  is  used.  Entries  older  than  history-lifetime are disregarded as history-items and are
              removed from the history file.

       o      --history-maxsize nr
              The maximum number of entries the history file may contain. By default there  is  no  limit.  When
              history-maxsize  is  specified  and more than the maximum number of history items are found in the
              history file then the nr most popular  choices  are  kept.  Usually  the  cut-off  point  will  be
              somewhere  within  a  popularity  category.  In  that case the most recently selected alternatives
              within that category are kept.

       o      --history-position [top|bottom]
              When this option is specified then previously found alternatives are displayed either at  the  top
              of  the  list  or  at  the  bottom of the list. If this option is omitted then the elements in the
              history will be intermixed with new alternatives. The next option history-separate  is  only  used
              when  this  option  is also specified. By merely specifying history-position the history items are
              shown at the top of the list.

       o      --history-separate
              When specified, a blank line is written between the items in the history and new alternatives (not
              previously selected). This option is only interpreted when the previous option is also specified.

       o      --icase -i
              This option is used to specify case-insensitive pattern matching. E.g., specifying xd /ub  returns
              the  directory /usr/bin, but not a directory like /UnSpecified/Books, which is returned by xd /UB.
              However, xd -i /ub (using any letter casing for the specification) returns both  directories.  The
              option  icase  could  of  course  be  specified  in  the  configuration  file,  which  which  case
              case-insensitive matching is used by default. In the latter case specifying -i as a  command  line
              option  reverts  the  matching procedure to case-sensitive directory matching. In general, when an
              even number of icase specifications is provided xd uses case-sensitive directory  matching,  while
              an odd number of icase specifications results in case-insensitive directory matching.

       o      --start-at origin
              Defines  the  default  start  location  of  directory searches. Origin home results in all default
              searches to start at the user’s home directory. Origin root results in searches to  begin  at  the
              disk’s root (/) directory. There is also a configuration file directive start-at (see below).

       o      --traditional
              When  this option is specified xd will not use GDS but will use its traditional mode. It overrules
              a generalized-search directive specified in the configuration file as well as the -g option.

       o      --verbose (-V)
              More extensive information about the actions taken by the xd program is written  to  the  standard
              error stream.

       o      --version (-v)
              Xd’s version number is written to the standard error stream.

CONFGURATION FILE

       The  default  configuration  file  is  .xdrc  in  the  user’s  home directory. It may be overruled by the
       program’s --config-file option.

       Empty lines are ignored. Information at and beyond #-characters is interpreted as comment and is  ignored
       as well.

       All directives in xd configuration files follow the pattern

           directive value

       but for some directives value is optional.

       A  line  may at most contain one directive, but white space (including comment at the end of the line) is
       OK. The same directive may be specified multiple times, in which case the last  directive  will  be  used
       (with  the  exception  of  the  ignore  directive,  see  below).  All  directives   are  interpreted case
       sensitively.  Non-empty lines not beginning with a recognized directive are silently ignored.

       The following directives can be used  in  the  configuration  file.  Default  values  are  shown  between
       parentheses.

       o      add-root when (if-empty)
              If  the  search  starts at the user’s home directory an additional search starting at the system’s
              root directory may be performed as well,  depending  on  the  value  specified  for  the  add-root
              directive.
              If when is specified as always then an additional search is always performed.
              If  it  is  specified  as  if-empty  then  an additional search is performed if the initial search
              (starting at the user’s home directory) did not yield any directory.
              If it is specified as never no additional search is performed.

              This directive is overruled by the ---add-root command line option.

       o      directories which (all)
              Directories may be also be reached via symbolic  links.  The  specification  all  will  add  these
              symbolic  links  to  the  list of alternatives. The specification unique will prevent the symbolic
              links from being added to the list of alternatives.

              This directive is overruled by the ---directories command line option.

       o      homedir-char ch
              By default an initial dot character (`.’) initiates a search from the user’s home directory. There
              is a slight disadvantage to using the dot, as it is also be  the  initial  character  of  `hidden’
              directories.  Assuming  that  you have a directory ~/.ssh then the command to xd to that directory
              would be xd ..s, the first dot being the home directory indicator, after which .s is used to  find
              .ssh.  The  specification homedir-char ch can be used to specify another home directory indicating
              character ch, as in:

               homedir-char ,

              Homedir characters cannot be digits or a slash (`/’) as these are used to  specify,  respectively,
              parent  directories  and  the  computer’s root directory. Characters like ``, @ % ^’’ or maybe `H’
              (assuming that it doesn’t interfere with an existing directory beginning with H) could be used  as
              homedir-characters, other than the default dot character.

              Caveat:  command  shells  by  default  interpret characters like ``~ $ \  " ` < > |’’ etc., which
              therefore should probably not be specified as home directory specifiers.

              This directive is overruled by the ---homedir-char command line option.

       o      generalized-search
              When this directive is specified xd will use GDS by default.

       o      history [filename]
              A history of previously made choices is kept in the file filename. If history  is  specified,  but
              the  filename  is  left  empty  the  history  file $HOME/.xd.his is used. This file should only be
              modified by xd itself. If you can’t resist editing it then use the following example  showing  the
              format of the lines in the history file.

                  1292596154 1 /home/frank/svn/xd/

              The  first  field is the time (in seconds since the epoch) the entry was written, the second field
              is the number of times the entry has been selected and the third field is the associated path.

       o      history-lifetime spec
              The lifetime of the entries in the history file. The specification consists of a  number  followed
              by D, W, M or Y, representing, resp. days, weeks, months, or years. A month is considered a period
              of  30  days,  a  year a period of 365 days. If the specification is omitted a lifetime of 1M (one
              month) is used. Entries older than history-lifetime  are  disregarded  as  history-items  and  are
              removed from the history file.

       o      history-maxsize nr
              The  maximum  number  of  entries the history file may contain. By default there is no limit. When
              history-maxsize is specified and more than the maximum number of history items are  found  in  the
              history  file  then  the nr latest choices are kept. Each previously made selection counts as one.
              If a new alternative is selected it always becomes an element in the history list.

       o      history-position [top|bottom]
              When specified alternatives found in the history will be displayed either at the top of  the  list
              or  at  the bottom of the list. If this option is omitted then the elements in the history will be
              intermixed with new alternatives. The next directive  history-separate  is  only  used  when  this
              directive  is also specified. By merely specifying history-position the history items are shown at
              the top of the list.

       o      history-separate
              When specified, a blank line is written between the items in the history and new alternatives (not
              previously selected). This directive is only interpreted  when  the  previous  directive  is  also
              specified.

       o      --icase -i
              This specification is used to request case-insensitive pattern matching. If this option is entered
              in  the  configuration  file  then  specifying xd /ub returns the directory /usr/bin as welll as a
              directory like (assuming it exists) /UnSpecified/Books. When specified in the configuration  file,
              the  command-line  option  -i  reverts  the  matching  procedure  back to case-sensitive directory
              matching.  In  general,  when  an  even  number  of  icase  specifications  is  provided  xd  uses
              case-sensitive  directory  matching,  while  an  odd  number  of  icase  specifications results in
              case-insensitive directory matching.

       o      ignore path
              The configuration file may contain multiple ignore directives which are --different from  the  way
              other  directives  are  handled--  all  interpreted.  Each  ignore directive is followed by a path
              specification as shown in a list of alternatives produced by xd or an initial substring of such  a
              path terminating in a * character. When xd encounters a path matching any of the ignore directives
              (with  the  *  interpreted as `any further directory name’ specification) it will not display that
              path in its list of alternatives.

              This directive is overruled by the ---all command line option.

       o      start-at value (home)
              Defines the default start location of directory searches. Values are home and root. When  home  is
              specified  all  searches start at the user’s home directory. When root is specified searches start
              at the disk’s root (/) directory. If the directory is omitted or if  another  value  is  specified
              then the default is used, which is home.

              This directive is overruled by the ---start-at command line option.

       o      traditional
              This  directive  may  be  used  to  request  the use of xd’s traditional mode. It overrules the -g
              command line option and the generalized-search directive.

SHELL SCRIPTS

       Assuming xd is installed in /usr/bin scripts can be defined around xd for various  shell  programs.  This
       allows the shell to change directories under control of xd.

       To  use  xd  with  the  bash(1)-shell, the following function can be used (which could be added to, e.g.,
       .bash_login):

         xd()                    # function to do `cd` using `xd`
         {
             cd "`/usr/bin/xd $*`"
         }

       To use xd with the tcsh(1)-shell, the following alias can be added to, e.g., the ~/.alias file:

         alias  xd  ’cd `\xd \!*`’

       If your system uses blanks in directory names, the above tcsh-alias cannot be  used  as  the  blanks  are
       interpreted as argument-separaters. In that case the following alias can be defined:

         alias  xd  ’setenv XD "`\xd \!*`";cd "$XD"’

       Having  defined  the  xd alias or script xd ... commands results in the automatic (or optional) change of
       the current working directory

EXAMPLES

           xd ulb      - all directories starting subsequently,
                         with u, l and b origin is default, or
                         specified in .xdrc as  home or root

           xd 0t       - all directories starting with t below the cwd

           xd 2t       - all directories starting at the `grandparent’
                         (2 steps up) of the cwd

           xd --start-at root t
                       - all directories at the root starting with t

           xd ..       - all directories starting with a dot in the cwd

           xd .        - the user’s home directory

           xd 0        - the current working directory

           xd 1        - the current directory’s parent directory

       Assuming the following directories exist:

         /usr/lib/bonobo
         /usr/lib/bonobo-activation
         /usr/local/bin

       then the following two ignore specifications in xd’s configuration  file  will  result  in  ignoring  the
       bonobo directory alternatives:

       First specification:

         ignore /usr/lib/bonobo
         ignore /usr/lib/bonobo-activation

       Second specification:

         ignore /usr/lib/bonobo*

FILES

       o      $HOME/.xdrc: Default location of the configuration file

       o      https://fbb-git.gitlab.io/xd/: Home directory

BUGS

       None reported

ABOUT xd

       The  program xd was initially (before 1994) written for the MS-DOS platform. In 1994 it was redesigned to
       work under Unix (Linux, AIX) and it was converted to C++. The original C++ code is still  available  from
       tag  start  (https://gitlab.com/fbb-git/xd/tags, find the start tag and download) and is funny to look at
       as it is a remarkable illustration of C++ code written by C programmers who had just learned  about  C++.
       Versions  2.x  were  used until 2008, and in late August 2008 I rewrote xd completely, reflecting my then
       views about C++, eventually resulting in  versions  3.x.y  and  beyond.  The  3.x.y  and  later  versions
       extensively use the facilities offered by the bobcat(7) library.

ACKNOWLEDGEMENTS

       GDS was added to xd following a suggestion by Bram Neijt (bram at neijt dot nl).

AUTHOR

       Frank B. Brokken (f.b.brokken@rug.nl).

xd.3.29.02                                          1994-2021                                              xd(1)