Provided by: xd_3.29.00-2_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).