Man Linux: Main Page and Category List

NAME

       xzgv - picture viewer for X, with thumbnail-based file selector

SYNOPSIS

       xzgv [options] [dir | file ...]

DESCRIPTION

       (NB: This man page is automagically generated from xzgv’s texinfo file,
       and so may look a bit odd.  We apologise for the inconvenience. :-))

       xzgv is a picture viewer for X, with a thumbnail-based  file  selector.
       The  thumbnails  used (thumbnails being small ‘preview’ versions of the
       pictures) are compatible with xv, zgv,  and  the  Gimp.  The  kinds  of
       pictures xzgv allows to be viewed are raster-format pictures (sometimes
       called ‘bitmaps’ and/or ‘pixmaps’); things like GIF files, JPEG  files,
       PNG files, and so on.

       Most  of  the  time, you will probably want to use xzgv’s file selector
       (see The File Selector) to pick which file(s) to  view.  This  is  what
       appears on the left-hand side of the window when you start xzgv as just
       ‘xzgv’ (see Options). It displays a list of subdirectories and  picture
       files  in  the current directory, along with small ‘thumbnail’ versions
       of the pictures if they exist. (If no  thumbnails  appear  in  a  given
       directory, or if they are missing for some files, you can create/update
       them by pressing ‘u’. See Updating Thumbnails.)

       When you’ve picked a file to view, you can view it by clicking  on  it,
       or  pressing  ‘Enter’.  This  reads  the picture and displays it in the
       right-hand part of the window, the viewer (see  The  Viewer).  You  can
       then  move  around  the  picture  (if  it  is  larger than will fit) by
       dragging it with the mouse, or using  the  scrollbars,  or  the  cursor
       keys.  You can then select another image with the file selector (though
       you need to press ‘Esc’ or ‘Tab’ first if using the keyboard),  or  you
       can quit xzgv by pressing ‘q’.

       While xzgv works much like any other X program, and is certainly mouse-
       friendly :-), it’s also designed to be  keyboard-friendly.   Everything
       in  xzgv  can be done entirely from the keyboard. Much of this keyboard
       support works like the original zgv (a  similar  console-based  picture
       viewer for Linux).

       This  overview  is,  as  you  might  expect,  only the very simplest of
       introductions to what xzgv can do, and describes only a very basic  use
       of xzgv. xzgv can do a lot more; read on to find out what.

ACKNOWLEDGEMENTS

       xzgv  was  primarily  written by Russell Marks, also the author of this
       manual. It is maintained by Reuben Thomas.

       Costa Sapuntzakis contributed  code  for  much  faster  JPEG  thumbnail
       generation (to zgv, which I adapted for xzgv).

       The  directory/file  icons  used  were  loosely  based  on  gmc’s  dir-
       close.xpm. I think Tuomas Kuosmanen was responsible for  that,  judging
       from the change log.

       ‘mkinstalldirs’ is straight from the ‘texinfo’ package, and was written
       by Noah Friedman. (This is also used during installation.)

       Huge thanks go to the many people responsible for GTK+,  without  which
       xzgv  would  almost  certainly  not  have  happened. (But no thanks for
       Electric Eyes, which was nearly nice enough for me not to  bother  with
       xzgv at all! :-))

       getopt*.[ch] are from the GNU libc.

OPTIONS

       Normally  you’d  invoke  xzgv  as  plain  ‘xzgv’  (perhaps via a window
       manager menu, or GNOME/KDE  menu,  etc.).  However,  you  can  directly
       specify  files  to  view, or a start directory, on the command-line. In
       addition, there are various options.

       (If you’re new to xzgv, you should  probably  skip  the  rest  of  this
       section for now and come back to it later.)

       The general format of the xzgv command-line goes roughly like this:

       xzgv [options] [dir | file ...]

       Two  types  of  options  are supported --- the traditional Unix single-
       letter options, and GNU-style long options. Most options can be used in
       either way, and both forms are listed in the table below.

       Note  that  all  options are processed after any configuration file(s).
       Config file settings are just like the long-option  names  below  minus
       the  ‘--’ (see Configuring xzgv), though a few command-line options are
       not permitted as config file settings (e.g. ‘help’), and vice versa.

       Here’s what the options do:

       ‘-a’
       ‘--auto-hide’
              Automatically hide selector when a picture is selected, allowing
              the viewer to use the whole window.

       ‘--careful-jpeg’
              Enable  libjpeg  ‘fancy  upsampling’. xzgv defaults to using the
              faster method; as  the  libjpeg  documentation  puts  it,  ‘‘The
              visual impact of the sloppier method is often very small.’’

       ‘--delete-single-prompt’
              (Note  that  this  is  normally  enabled;  use ‘--delete-single-
              prompt=off’ to disable it.) If disabled, xzgv  will  immediately
              delete  a file when told to, without prompting for confirmation.
              (It’s ‘single’ because deleting multiple files at once  will  be
              supported  in  future,  and  that  will  have  a separate prompt
              override.)

       ‘--dither-hicol’
              Use dithering in 15/16-bit, whatever  the  default  setting  is.
              See  Viewer Options, for a discussion of benefits/drawbacks. You
              can also use ‘--dither-hicol=off’ to disable this.

       ‘--exif-orient’
              In JPEG files, use  Exif  orientation  tags  (inserted  by  e.g.
              digital  cameras)  to  correct image orientation before display.
              See Viewer Options, for details.

       ‘--fast-recursive-update’
              When doing a recursive thumbnail  update,  don’t  read  existing
              thumbnails  before  updating. This is pretty much obsolete as of
              xzgv 0.7, as the speed increase is now negligible. But,  it  may
              still  be  useful  if  you want to update a huge number of small
              directories for which few if any updates are needed.

       ‘-f’
       ‘--fullscreen’
              Run fullscreen, using  the  entire  screen  for  xzgv’s  window,
              without even any window-manager decorations (window frame, title
              bar, etc.) if possible.

       ‘-G val’
       ‘--gamma val’
              [Not supported in 0.9.] Set the gamma adjustment used (see Gamma
              Adjustment).  The  default  is  1.0. This also sets the ‘initial
              value’ used when resetting the gamma adjustment.

       ‘-g geom’
       ‘--geometry geom’
              Set the xzgv window’s geometry (position and/or size)  to  geom.
              The  geometry  string  should be in the usual X format, with the
              extension that positions/sizes may have  a  ‘%’  suffix  meaning
              that they are treated as percentages of the screen width/height.
              The default geometry is ‘92%x85%’.

              For those unfamiliar with the way  ‘geometry’  works,  here’s  a
              brief  description  of  the  syntax.  It’s  ‘WxH’, or ‘+X+Y’, or
              ‘WxH+X+Y’, where ‘W’ is width, ‘H’ height, ‘X’ the  x  position,
              and  ‘Y’ the y position. The first form specifies only the size,
              the second only the position --- the  ‘WxH+X+Y’  form  specifies
              both.

              Now, the ‘+X+Y’ bit normally specifies where the top-left of the
              window is. But you can use ‘-’ instead of ‘+’ for the x and/or y
              position,  in  which  case  it  specifies  the  gap  between the
              right/bottom of the window and the right/bottom of  the  screen.
              (Note,  however,  that any window frame your window manager adds
              to the window is disregarded in this  calculation,  so  you  may
              need  to  experiment  somewhat to get the desired position.) You
              can also use negative numbers with  both  ‘+’  and  ‘-’  ---  so
              ‘+-50+0’  puts the window partly off the left of the screen, and
              ‘+0--50’ puts it partly off the bottom of  the  screen  ---  but
              this is of questionable value. :-)

              Finally,  as  mentioned  above,  xzgv  extends  this  syntax  by
              allowing you to use ‘%’ to specify  percentages  of  the  screen
              width/height rather than pixels, e.g. ‘50%x30%-30%-20%’. It also
              allows you to use real numbers such as  ‘12.34’,  which  can  be
              useful with ‘%’.

       ‘-h’
       ‘--help’
              Display  a  list  of options and a terse description of what the
              options do.

       ‘--image-bigness-threshold numpix’
              Set the boundary numpix after which images are considered ‘big’,
              and  are  no longer rendered all-at-once (which gives much nicer
              scrolling, but is harder on memory  and  can  be  slow  for  big
              images)  but  are  instead  rendered  piece-by-piece.  Units are
              number of pixels in image (i.e. width  times  height),  and  the
              default is 2000000 pixels.

       ‘--interpolate’
              Interpolate  between  the  picture’s pixels when scaling up (see
              Scaling). This usually looks nicer, but it’s rather slow.

       ‘--mouse-scale-x’
              If enabled, control-clicking on the viewer  scales  only  the  X
              axis. (The default is to scale only the Y axis.)

       ‘--revert-orient’
              (Note  that  this is normally enabled; use ‘--revert-orient=off’
              to disable it.) If  disabled,  orientation  (flip/mirror/rotate)
              state is retained between pictures (see Viewer Options).

       ‘--revert-scale’
              (Note that this is normally enabled; use ‘--revert-scale=off’ to
              disable it.) If disabled, scaling is retained  between  pictures
              (see Viewer Options).

       ‘--selector-width’
              Set  the  default/initial  size  of  the selector in pixels. The
              normal setting is 200.

       ‘-T’
       ‘--show-tagged’
              Show names of currently-tagged files on exiting  xzgv.  (They’re
              listed  to  stdout,  one  per line.) This can be useful when you
              want to select multiple files graphically and work on them  with
              something else.

       ‘--show-thumbnail-messages’
              Show  on  the  status  bar  when  thumbnails are being read. The
              status bar must be enabled for these messages to be visible,  of
              course. :-)

       ‘-k’
       ‘--skip-parent’
              For  the  first  directory  shown,  skip the cursor past .. (the
              parent dir). This can be useful when you’d like  to  immediately
              use space to ‘page’ through the dir.

       ‘-o order’
       ‘--sort-order order’
              Set  the  initial  sorting  order used in the selector. Possible
              settings are ‘name’, ‘ext’, ‘size’, and ‘date’ (or ‘time’); only
              the  first  char  of  the  setting (‘n’/‘e’/‘s’/‘d’/‘t’) need be
              given. The default is name order.

       ‘--sort-timestamp-type type’
              Set the timestamp type  to  use  when  using  time/date  sorting
              order.   Possible  settings  are ‘mtime’ (default), ‘ctime’, and
              ‘atime’; only the first char of the setting  (‘m’/‘c’/‘a’)  need
              be given.

       ‘--statusbar’
              Show  a  status  bar below the selector; this, for example, says
              when a picture is being read.

       ‘-t’
       ‘--thin-rows’
              Use rows a third the normal height in the selector. This can  be
              very  useful  on  lower-resolution  screens, or if you’re really
              interested in filenames, not thumbnails.

       ‘-v’
       ‘--version’
              Show version number.

       ‘--version-gtk’
              Show version number of GTK+ xzgv is using.

       ‘-z’
       ‘--zoom’
              Fit picture to viewer window, whatever its actual size (see Zoom
              Mode).

       ‘-r’
       ‘--zoom-reduce-only’
              When  in  zoom  mode, only reduce pictures to fit; i.e. make big
              pictures  viewable  all-at-once  while  leaving  small   picures
              intact.

       If  started  with ‘xzgv files’, xzgv hides the file selector and treats
       the file or files as if they were the sole contents of a directory. (It
       also automatically loads the first file.) As such, you can use the Next
       Image and Previous Image commands to navigate between the images, or do
       Exit to Selector and use the selector directly.

       If started with ‘xzgv start-dir’, xzgv starts up as usual, but with the
       selector starting on the directory specified (rather than  the  current
       directory).

       Settings which are either on or off (boolean) are, as you might expect,
       enabled by using e.g. ‘-z’ or ‘--zoom’. However, there’s an alternative
       long-option  form  for  setting  these,  resembling  how they’re set in
       config files  ---  the  syntax  is  ‘--option=state’,  where  state  is
       ‘on’/‘y’/‘yes’/‘1’  to  enable  the  option,  or  ‘off’/‘n’/‘no’/‘0’ to
       disable it. The most useful thing about this is that it allows  you  to
       disable   options   which   were  previously  enabled,  by  using  e.g.
       ‘--zoom=off’.

       (Readers used to the way GNU-style long options work should note  that,
       since this ‘on’/‘off’/etc. arg is optional, you can’t use the ‘--option
       arg’ form in this case; it must be ‘--option=arg’ for it to work.)

A NOTE ON NOTATION

       Much of this manual is taken up by  a  description  of  xzgv’s  various
       commands  in  its file selector and viewer. Most of these are available
       both from the keyboard, and from popup menus.  (A  popup  menu  appears
       when  you  press ‘F10’ or ‘Menu’, or right-click on the selector or the
       viewer; each has its own menu.) So in the manual, you  will  often  see
       things rather like this:

       ‘key’
       ‘Selector menu, Menu the item is in, Menu item’
              Description of what the key/menu item does.

       Sometimes  the  key given has a ‘(Selector)’ or ‘(Viewer)’ suffix; this
       is because some keypresses in xzgv are specific to the selector or  the
       viewer,  and  won’t  work  unless  the  relevant  part  of xzgv has the
       keyboard focus.

THE FILE SELECTOR

       Usually, on starting up xzgv, you’ll want to use the file selector  ---
       the  list  of files on the left. (The other subwindow (on the right) is
       the viewer.) The selector lets you pick  files  to  view  (among  other
       things).  It  lists the subdirectories and picture files in the current
       directory, along with small ‘thumbnail’ versions  of  the  pictures  if
       they exist.

THE SELECTOR MENU

       Almost  all  selector commands are available from the selector’s pop-up
       menu, which appears when you right-click anywhere on the selector. (You
       can  also  press ‘F10’ or ‘Menu’ to bring up the menu, but as there are
       keyboard shortcuts for just about everything in xzgv, this isn’t  often
       that useful. :-))

       Usually,  it  doesn’t  matter  where  on  the selector you right-click.
       However, a few commands on the File menu operate on a single file,  the
       one  selected  by  the keyboard cursor. A problem when using the mouse,
       you might think --- but when you right-click on the selector,  as  well
       as  popping  up the menu, xzgv moves this cursor to the file you right-
       clicked on (if any). (You can see this by the way a hollow box is drawn
       around  the file.) So to use e.g. Details on the File menu, you need to
       right-click on the file you want details on.

       Both the selector and viewer have ‘Help’ menus,  most  items  of  which
       refer you to this manual:

       ‘F1’
       ‘Selector menu, Help, Contents’
       ‘Viewer menu, Help, Contents’
              View the manual’s overall contents.

       ‘Selector menu, Help, The File Selector’
              View the manual’s section on the file selector.

       ‘Viewer menu, Help, The Viewer’
              View the manual’s section on the viewer.

       ‘Selector menu, Help, Index’
       ‘Viewer menu, Help, Index’
              View the manual’s concept index.

       ‘Selector menu, Help, About’
       ‘Viewer menu, Help, About’
              Give  some  brief  information about xzgv, including the version
              number and homepage.

       Currently, the way xzgv lets you read the manual is  a  bit  crude;  it
       runs  the  ‘info’  program  (see  Top in the info-stnd info file) in an
       ‘xterm’.

EXITING XZGV

       You can exit xzgv either by using one of two  exit  keypresses,  or  by
       selecting the appropriate option from the selector’s popup menu:

       ‘q’
       ‘Ctrl-q’
       ‘Selector menu, Exit xzgv’
              Quit xzgv.

       (There’s  also  an  exit  option on the selector’s File menu (‘Selector
       menu, File, Exit’), as ‘Exit’ is generally on any File menu.)

THUMBNAILS

       (This section is deliberately early on in the manual, as thumbnails are
       probably  the most important feature of the file selector, so it’s best
       that you know how to create/update them sooner rather than later.)

       Thumbnails are small versions of the pictures they represent,  and  are
       displayed  by  the file selector if they exist. xzgv uses xv-compatible
       thumbnails --- if you create thumbnails with xv  they  will  work  with
       xzgv,  and  vice  versa. xzgv’s thumbnails are also compatible with the
       Gimp, and zgv.

       If no thumbnail exists for a file,  a  small  ‘document’  icon  appears
       instead (similar to the ‘folder’ icon used for directories).

   Updating Thumbnails
       While  thumbnails  can  be made relatively quickly, it’s by no means an
       instant process. For this reason, thumbnails  have  to  be  created  in
       advance,  and  are stored as files in their own right in a subdirectory
       .xvpics.

       xzgv never creates/updates thumbnails without you telling it to. So, if
       you   enter  a  directory  where  the  picture  files  don’t  have  any
       thumbnails, or where the thumbnails seem to be out of date, you  should
       press ‘u’, or select Update Thumbnails from the selector’s menu.  (Even
       if the thumbnails can’t be written (say, if you don’t  have  permission
       to  write  them),  the  selector will still show the updated thumbnails
       until you leave the directory.)

       Alternatively,  you  can  create/update  thumbnails  for  the   current
       directory  and all subdirectories by using ‘Alt-u’ or Recursive Update.
       But be warned that a recursive update can take some time!

       ‘u’
       ‘Selector menu, Update Thumbnails’
              Create thumbnails for any  files  which  don’t  have  them,  and
              update  thumbnails  which are older than the corresponding file.
              While this is going on, a window appears showing how far through
              the process xzgv is.

              While the update is in progress, you can abort it by clicking on
              the Cancel button, or pressing ‘Esc’ or ‘Enter’, or by  clicking
              the  delete-window  button (if your window manager provides one)
              on the title bar. xzgv  will  stop  once  it  has  finished  the
              thumbnail it is currently working on (if any).

       ‘Alt-u’
       ‘Selector menu, Recursive Update’
              Create/update  thumbnails for all files in the current directory
              and all subdirectories. This can take  some  time,  so  you  are
              prompted  to  confirm  you  really  want  to do this (see Dialog
              Boxes). Progress is indicated in much the  same  way  as  for  a
              normal  update,  but  only  for  the  directory  currently being
              updated --- the overall progress is not indicated, other than by
              the  current  dir being (as ever) displayed in the main window’s
              title. You can abort a recursive thumbnail update  in  the  same
              ways as for a normal update (see above).

              By  default,  xzgv behaves a little oddly when doing a recursive
              update, to give some consistency with  the  normal  update.  See
              Thumbnail Issues, for details.

   Thumbnail Issues
       Dealing  with thumbnails can be ‘interesting’ at times, and there are a
       few ways this influences things:

       - xzgv doesn’t read the thumbnails in a directory all at once. Instead,
       it   just  reads  the  directory  contents,  then  starts  up  what  is
       effectively a kind of background task to read  in  the  thumbnails.  So
       xzgv  may  not  be  quite as responsive as usual for a short time after
       entering a directory with many thumbnails (say, a few hundred) ---  but
       on the other hand, at least it is responding. :-)

       -  The  ‘background task’ makes a special effort to show thumbnails for
       the files currently visible in the selector first, no matter  how  much
       you move around the list, but it reads them all in eventually.

       -  The thumbnails used in xzgv require 256 colours to display. This can
       be a problem if you’re running X in 256 colours or  less  as,  even  if
       you’re  running  an  8-bit  (256  colour)  server,  there  will  almost
       inevitably be  fewer  colours  available.  Currently,  xzgv  just  uses
       whatever  gdk  reports  as  the closest match to each individual colour
       used in thumbnails. This gives a tolerable  result  on  8-bit  servers,
       assuming  gdk  was able to allocate a large number of colours; however,
       it gives terrible results if it couldn’t, or if  running  on  4-bit  or
       1-bit  servers.  Sorry  about  this  ---  it  should be fixed in future
       (either by using gdk to draw the thumbnail  pixmaps,  or  by  dithering
       them ‘by hand’ to suit the colours available).

       -  Finally,  when doing a recursive thumbnail update, xzgv (by default)
       reads existing thumbnails  in  a  directory  before  updating  any.  Or
       rather,  it  reads  thumbnails for those files currently visible in the
       selector.  This can slow things down very slightly, but keeps the ‘look
       and  feel’  consistent  with the normal update. (Still, you can disable
       this  with  the  ‘--fast-recursive-update’  command-line  option   (see
       Invoking xzgv) or equivalent config file entry (see Configuring xzgv).)

SELECTOR LAYOUT AND RESIZING

       The file selector is simply a list  of  subdirectories  and  filenames,
       along  with any thumbnails that exist for them. The list is normally in
       asciibetical order (but you can change this; see Changing  the  Sorting
       Order).  Names  of  directories  are shown first, and they are shown in
       order at the beginning of the list, before all the picture files.  Long
       filenames may not fit in the visible part of the file selector display;
       if so, there will be a horizontal scrollbar you can use to see the rest
       of  the  name(s)  (you  can  use  cursor left/right to do this from the
       keyboard).

       The list is very often larger than can fit on the screen  at  once.  If
       this is the case, only part is shown at a time, but you can move around
       the list using the (vertical) scrollbar, or with cursor up/down and the
       like.

       If  you  find the selector window to be too small vertically, and would
       like to see more files at once, you can start xzgv fullscreen by  using
       the  -f  option  (see  Options),  and/or use ‘thin rows’ mode (see File
       Selector Options).

       If you find the selector too small (or too big) horizontally,  you  can
       change  this  by  moving  the  splitter line’s ‘handle’ (a small square
       button between the selector and viewer, near the bottom of the window),
       which  changes  the  relative sizes of the selector and viewer. You can
       move it by dragging it with the mouse, or with these keys:

       ‘[’
              Move the window split left.

       ‘Ctrl-[’
              Move the window split left more slowly.

       ‘]’
              Move the window split right.

       ‘Ctrl-]’
              Move the window split right more slowly.

       ‘~’
              Reset the window split to its default position.

       You can also set the  initial/default  size  of  the  selector  ---  in
       effect,  the  position of the window split --- using ‘--selector-width’
       (see Options) or the config file option ‘selector-width’.

MOVING AROUND THE LIST

       This section is mainly for those of us more inclined  to  the  keyboard
       side of the force. :-) Mouse-happy types can freely skip it.

       When  the  selector  has  the  keyboard  focus,  the cursor (or in GTK+
       jargon, the ‘focus row’) is normally shown as a hollow box  around  one
       of the list’s rows. This serves the following functions:

       - It selects a file for view commands to operate on.

       -  It  determines  which  part of the list is shown, as the part of the
       list shown onscreen always contains the cursor (unless you move  around
       using the mouse).

       There  are  several  commands  for  moving the cursor. In summary, most
       ‘special’ keys like the cursors do what you’d imagine they do,  but  in
       more detail:

       ‘Cursor Up’
       ‘k’
              Move up.

       ‘Cursor Down’
       ‘j’
              Move down.

       ‘Page Up’
       ‘Ctrl-u’
              Move the cursor back roughly a page.

       ‘Page Down’
       ‘Ctrl-v’
              Move the cursor forward roughly a page.

       ‘Ctrl-Home’
       ‘Ctrl-a’
              Move the cursor to the start of the list.

       ‘Ctrl-End’
       ‘Ctrl-e’
              Move the cursor to the end of the list.

       ‘g’
       ‘’’
              Move the cursor to the first filename starting with the next key
              pressed, which would generally be a letter or  number.  Case  is
              significant;  ‘a’  and  ‘A’  are different. If no key is pressed
              within 2 seconds, the command is cancelled.

              If no files start with the specified character, it moves to  the
              first  file  which  starts  with  a  later char (in asciibetical
              order). If there are none for which this is the case,  it  moves
              to   the   last  file  ---  unless  there  are  no  files  (just
              directories), in which case it has no effect.

VIEWING A FILE

       To view a file from the selector, you can click on it, or press ‘Enter’
       after  moving  the  cursor  to the relevant file, or right-click on the
       file and choose ‘File’ then ‘Open’.

       ‘Enter’
       ‘Left-click-on-file’
       ‘Selector menu, File, Open’
              View the chosen picture file, or if a  subdirectory  is  chosen,
              make that the current directory.

DIALOG BOXES

       See  The  Viewer,  for  details of how the viewer works.  If xzgv has a
       serious problem reading a file, it will  give  an  error.   Errors  are
       shown in dialogs which appear in the middle of the screen --- they stay
       there until you click Ok (or press ‘Enter’ or ‘Esc’).

       xzgv also uses similar dialog boxes for other things:

       - Getting confirmation that you want to do something.  ‘Enter’  or  ‘y’
       picks  ‘yes’;  ‘Esc’  or  ‘n’  picks  no.  (Again, you can click on the
       relevant button with the mouse to do the same.)

       - Showing progress when  updating  a  thumbnail.  This  is  a  slightly
       unusual  dialog, in that it automatically disappears when the update is
       complete.  However, it does provide a Cancel button which you can click
       to abort the update (pressing ‘Enter’ or ‘Esc’ does the same).

       -  Reading  a  directory  name. Here you should type the directory name
       then click Ok (or press ‘Enter’), or click Cancel (or press  ‘Esc’)  to
       abort. The text-input ‘widget’ used allows a certain amount of editing,
       including these keys:

       ‘Cursor Left’
       ‘Ctrl-b’
              Move  the  cursor  left.  (A  vertical  bar  shows  the   cursor
              position.)

       ‘Cursor Right’
       ‘Ctrl-f’
              Move the cursor right.

       ‘Home’
       ‘Ctrl-a’
              Move the cursor to the start of the line.

       ‘End’
       ‘Ctrl-e’
              Move the cursor to the end of the line.

       ‘Backspace’
       ‘Ctrl-h’
              Delete char to the left of the cursor. (Note that ‘Backspace’ is
              (usually) the key above  the  main  ‘Enter’  key;  it  is  often
              labelled simply as an arrow.)

       ‘Delete’
       ‘Ctrl-d’
              Delete the char the cursor is on.

       You  can also set the X selection (by selecting text with the mouse, or
       holding ‘Shift’ while moving the cursor) to  allow  pasting  text  into
       other programs, and you can cut/copy/paste text in the usual ways:

       ‘Shift-Delete’
       ‘Ctrl-x’
              Cut text.

       ‘Ctrl-Insert’
       ‘Ctrl-c’
              Copy text.

       ‘Shift-Insert’
       ‘Ctrl-v’
              Paste text.

       You can paste text from (some) other programs using the latter command,
       too.

CLOSING A FILE

       Usually, when you view a file, the viewer subwindow keeps displaying it
       until  you view a different file. However, if you ‘close’ the file, the
       viewer stops displaying the file and returns to its initial state.

       ‘Ctrl-w’
       ‘Selector menu, File, Close’
              ‘Close’  the  currently-viewed   file,   clearing   the   viewer
              subwindow.

FILE DETAILS

       The listing the selector gives for a file is pretty sparse --- just the
       filename and (if the file has one) the  accompanying  thumbnail.  While
       this does keep things simple, you sometimes want to know how much space
       a file takes up, when it was  last  modified,  the  dimensions  of  the
       image,  that  kind  of thing. So, you can show details of a single file
       using the ‘file details’ command:

       ‘:’
       ‘;’
       ‘Selector menu, File, Details’
              Show various details about the file pointed to by  the  keyboard
              cursor.   See  The  Selector  Menu,  for  how to choose the file
              details are given for when  using  the  mouse.  (Basically,  you
              right-click on the file when popping up the menu.)

       Most  of  the  details  shown  come from the OS (by using the ‘stat(2)’
       system call), and should always be available unless  you  have  limited
       permissions  for  the  directory  the  file  is in. The file dimensions
       (width/height), however, come from the file’s thumbnail. If it  doesn’t
       have one, or if it’s unreadable, or if it has one and it’s readable but
       it doesn’t mention the original image’s width/height, then the  Details
       from thumbnail area is greyed out.

       (In explanation of the latter point --- pre-5.0 versions of zgv did not
       generate  width/height  comments  in  thumbnails,  so  zgv   users   in
       particular  may find the width/height details missing. (xzgv has always
       been ok, though, it’s just zgv which  had  this  problem.)  Worse  yet,
       versions  5.0  and  5.1  generated  them  with incorrect sizes for most
       JPEGs. To fix either problem for a given directory, do ‘rm -fr .xvpics’
       in  that  dir  from a shell prompt and recreate the thumbnails with zgv
       5.2 or later, or xzgv/xv/Gimp.)

TAGGING

       The file selector is not restricted to working on one file at  a  time.
       You  can  ‘tag’  as  many  (or  as  few) files as you wish, and certain
       commands described in this section will act on them.

       Initially, all files are untagged, and the filenames usually appear  in
       black  (though  this  depends  on  the GTK+ theme you’re using). Tagged
       files appear in red.

   Tag and Untag Commands
       There are several ways to tag or untag files. The  keyboard-based  ones
       which  work  on  individual  files (also available on the Tagging menu)
       move the cursor down one row afterwards, to make tagging  or  untagging
       multiple files easier.

       To  tag or untag a single file with the mouse, control-click (i.e. hold
       down the control key and click) on the relevant filename  or  thumbnail
       in  the  selector. It’s true that you could use Tag and/or Untag on the
       Tagging menu (see The  Selector  Menu,  for  how  to  choose  the  file
       tagged/untagged  when doing it this way), but this is usually much less
       convenient than using control-click. (The menu entries  for  those  are
       really just for completeness.)

       There  is  also a command available in the viewer to tag the currently-
       viewed file. See Changing Picture, for details.

       ‘=’
       ‘+’
       ‘Keypad +’
       ‘0’
       ‘Selector menu, Tagging, Tag’
              Tag file.

       ‘-’
       ‘Keypad -’
       ‘9’
       ‘Selector menu, Tagging, Untag’
              Untag file.

       ‘Alt =’
       ‘Alt-Keypad +’
       ‘Alt-0’
       ‘Selector menu, Tagging, Tag All’
              Tag all files.

       ‘Alt -’
       ‘Alt-Keypad -’
       ‘Alt-9’
       ‘Selector menu, Tagging, Untag All’
              Untag all files.

       ‘Alt-o’
       ‘Selector menu, Tagging, Toggle All’
              Toggle all tags. This inverts the  tagged  state,  so  that  all
              previously  tagged  files  become  untagged,  and all previously
              untagged files become tagged.

       Currently there is no way to toggle a (single) file’s  tag  state  from
       the keyboard.

   Moving Between Tagged Files
       These commands let you search for (move to) the next or previous tagged
       file (if any). Note that ‘next’ and ‘previous’ here are relative to the
       keyboard  cursor’s position; if you use these from the menu, be careful
       to right-click on the file you want to start the search from.

       ‘/’
       ‘Selector menu, Tagging, Next Tagged’
              Move to next tagged file in dir.

       ‘?’
       ‘Selector menu, Tagging, Previous Tagged’
              Move to previous tagged file in dir.

       Equivalent commands are also available  in  the  viewer  (see  Changing
       Picture).

   Copying/Moving Files
       You  can  copy  or  move tagged files to a directory you specify. If no
       files are tagged, xzgv copies/moves the file the cursor is currently on
       ---  unless  the cursor is on a subdirectory, in which case it gives an
       error.

       ‘C (Shift-c)’
       ‘Selector menu, File, Copy’
              Copy tagged files (or the current file) to  a  given  directory.
              xzgv  asks  for  the  destination  directory using a dialog (see
              Dialog Boxes) and copies the files there. If it comes to copy  a
              file  but  there  is  an  existing file in the dir with the same
              name, the file is not copied and nor are any  of  the  remaining
              files.

       ‘M (Shift-m)’
       ‘Selector menu, File, Move’
              Move tagged files (or the current file) similarly.

RENAMING A FILE

       As well as copying/moving files, you can rename them:

       ‘Ctrl-n’
       ‘Selector menu, File, Rename file’
              Rename  the  current  file  or directory --- xzgv will refuse to
              overwrite any existing  files/directories.  The  new  name  must
              remain  in the current directory. (See Copying/Moving Files, for
              how to move a file to a different directory (albeit keeping  the
              same  name).)  See The Selector Menu, for how to choose the file
              renamed when using the mouse.  (Basically,  you  right-click  on
              the file when popping up the menu.)

       I know ‘Ctrl-n’ isn’t the most mnemonic keypress possible for ‘rename’,
       but all the good ones were taken. :-/

DELETING A FILE

       Deleting a file is pretty straightforward:

       ‘Ctrl-d’
       ‘Selector menu, File, Delete file’
              Delete the file pointed to  by  the  keyboard  cursor  (and  any
              accompanying  thumbnail).  See  The  Selector  Menu,  for how to
              choose the file deleted when using the  mouse.  (Basically,  you
              right-click on the file when popping up the menu.)

       Note  that  only  one  file  is deleted (hence ‘Delete file’); there is
       currently no way to delete all tagged files.

CHANGING DIRECTORY

       The easiest way to change the current directory in xzgv is  usually  to
       click  on  a directory entry in the file list (or move the cursor to it
       and press ‘Enter’). Selecting  the  ‘..’  entry  moves  to  the  parent
       directory of the current one.

       There is an alternative though:

       (Note that the key for this command is shift-‘g’, not ‘g’.)

       ‘G’
       ‘Selector menu, Directory, Change’
              Go  to  a  specified  directory.  xzgv  asks for the destination
              directory using a dialog box which you  should  type  the  dir’s
              name  into (see Dialog Boxes), and moves to that directory if it
              exists.

RESCANNING THE DIRECTORY

       Normally, xzgv reads a directory once (on starting up, or  when  a  new
       directory is selected). So if the contents of the directory are changed
       by another program, this  is  not  automatically  reflected.  You  can,
       however,  explicitly  tell  xzgv  to ‘rescan’ the directory (reread the
       contents), which will update xzgv’s notion of what’s in it:

       ‘Ctrl-r’
       ‘Selector menu, Directory, Rescan’
              Rescan the current directory.

CHANGING THE SORTING ORDER

       Normally, the files are listed in asciibetical order by name.  However,
       you  can  instead  have  the  file  list  sorted by size, last-modified
       date/time, or by ‘extension’ (the file type).

       (Only the order of files can be altered; directories are always  listed
       first, and always in name order.)

       ‘Alt-n’
       ‘Selector menu, Directory, Sort by Name’
              Sort by name. This is the default.

       ‘Alt-e’
       ‘Selector menu, Directory, Sort by Extension’
              Sort by extension.

       ‘Alt-s’
       ‘Selector menu, Directory, Sort by Size’
              Sort by size. The biggest files are listed last.

       ‘Alt-d’
       ‘Selector menu, Directory, Sort by Time & Date’
              Sort by time/date. The newest files are listed last.

       You  can  set the default sort order via the command-line (see Invoking
       xzgv) or a config file (see Configuring xzgv).

       There are three possible timestamps you can use for the ‘Time  &  Date’
       sorting order:

       ‘Alt-Shift-m’
       ‘Selector menu, Directory, Time & Date Type, Modification Time (mtime)’
              Use the last-modified time (‘mtime’). This is the default.

       ‘Alt-Shift-c’
       ‘Selector menu, Directory, Time &  Date  Type,  Attribute  Change  Time
       (ctime)’
              Use  the last-attribute-change time (‘ctime’). Note that this is
              not always the time the file was created, which  it’s  sometimes
              mistaken  for; for example, moving a file with ‘mv’ will usually
              change the ctime.

       ‘Alt-Shift-a’
       ‘Selector menu, Directory, Time & Date Type, Access Time (atime)’
              Use the last-accessed time (‘mtime’). The selector order is  not
              automatically  updated  when  xzgv reads files, since this would
              probably be annoying; do a manual rescan if need be.

FILE SELECTOR OPTIONS

       Various aspects of the file  selector’s  behaviour  can  be  configured
       while xzgv is running, by using these toggle commands (which enable the
       feature if it was previously disabled, and vice versa).

       These settings can also be  altered  using  command-line  options  (see
       Options) and/or config file settings (see Configuring xzgv).

       ‘Alt-a’
       ‘Selector menu, Options, Auto Hide’
              Toggle  the auto-hiding of the selector when a picture is viewed
              (off by default). This is handy for  small  screens/windows,  or
              for old-time zgv users who just dig that groovy modal interface,
              er, man. :-)

       ‘Alt-b’
       ‘Selector menu, Options, Status Bar’
              Toggle status  bar  at  the  bottom  of  the  selector  (off  by
              default).  This  displays  messages in certain circumstances ---
              normally, it just says when a picture is being read.

       ‘Selector menu, Options, Thumbnail Msgs’
              Toggle  reading-thumbnails  messages  (default  is  off),   only
              visible  if  the  status  bar is enabled. These messages make it
              clear when all thumbnails have been read, but  having  something
              flash  up  every  time  you  change  directory is generally just
              annoying.

       ‘v’
       ‘Selector menu, Options, Thin Rows’
              Toggle ‘thin rows’ mode (off by default),  in  which  thumbnails
              are  shown  at a third their normal size so that many more files
              can be shown at once. (The odd keyboard  shortcut  for  this  is
              inherited  from  zgv’s ‘visual’ mode toggle, which had a roughly
              similar effect.)

THE VIEWER

       Once you’ve selected a file to view, it’s  shown  in  the  viewer  (the
       right-hand  part of xzgv’s window). This section describes what you can
       do while viewing the picture.

       Like the selector, the viewer has its own menu --- right-click anywhere
       on  the  viewer (or press ‘F10’ or ‘Menu’) to show it --- and a similar
       help menu (see The Selector Menu).

EXITING THE VIEWER

       When using the mouse to control xzgv, it  doesn’t  matter  whether  the
       selector  or  the  viewer  has  keyboard  focus  ---  mouse  operations
       transcend such petty  boundaries.  :-)  But  keyboard  control  is  (of
       necessity)  effectively  modal, and so you need to ‘exit’ the viewer in
       order to have keyboard control over the selector again. You  also  need
       to exit the viewer if you’ve enabled auto-hide mode.

       Exiting the viewer is simple:

       ‘Esc’
       ‘Tab’
       ‘Viewer menu, Exit to Selector’
              Exit  the  viewer.  This also returns the selector to its former
              size, if it was previously ‘hidden’.

       Another way of exiting the viewer is to middle-click on  it,  but  this
       mouse-only  approach  is  really  only  of  use  when  the  selector is
       ‘hidden’.

BIG PICTURES

       A picture may well be too large to fit entirely in the  viewer  window.
       There are two main things which can help you see more of the picture at
       once:

       - Make the xzgv window larger. You could ‘maximize’ it with your window
       manager,   or   you  could  start  xzgv  with  a  larger  window  using
       ‘--geometry’ or fullscreen mode  (see  Options).  The  fullscreen  mode
       gives  xzgv  the  maximum  window size possible, but needs co-operation
       from your window manager (and alas, many are  not  as  willing  as  one
       might  like) --- in some cases you may even find ‘--geometry 100%x100%’
       to be more effective.

       - Hide the selector. To do this, either use auto-hide  mode  (see  File
       Selector  Options),  or  hide  the  selector explicitly (see Hiding the
       Selector).

       But of course, these are only partial solutions to the  problem;  there
       will  inevitably always be pictures larger than your screen can show at
       once. In general, then, there are two ways to  see  the  whole  of  the
       picture.

   Scrolling
       Scrolling  is  the  default  approach to handling big pictures in xzgv.
       When the viewer is started up, the top-left of the picture is shown ---
       you  can  either drag the picture around with the mouse (i.e. click and
       hold the  button  down,  then  move  the  mouse  around),  or  use  the
       scrollbars, or use the cursor keys (and others) to move around the rest
       of the picture:

       ‘Cursor Up’
       ‘K’
              Move up 100 pixels. ‘Ctrl-Cursor Up’ and ‘k’  both  move  up  10
              pixels.

       ‘Cursor Down’
       ‘J’
              Move  down 100 pixels. ‘Ctrl-Cursor Down’ and ‘j’ both move down
              10 pixels.

       ‘Cursor Left’
       ‘H’
              Move left 100 pixels. ‘Ctrl-Cursor Left’ and ‘h’ both move  left
              10 pixels.

       ‘Cursor Right’
       ‘L’
              Move  right  100  pixels.  ‘Ctrl-Cursor Right’ and ‘l’ both move
              right 10 pixels.

       ‘Page Up’
       ‘Shift-Cursor Up’
       ‘Ctrl-u’
              Move up (nearly) the window height. (It  moves  by  90%  of  the
              height.)

       ‘Page Down’
       ‘Shift-Cursor Down’
       ‘Ctrl-v’
              Move down (nearly) the window height.

       ‘-’
       ‘Shift-Cursor Left’
              Move left (nearly) a window-length. (It moves by 90% of it.)

       ‘=’
       ‘Shift-Cursor Right’
              Move right (nearly) a window-length.

       ‘Home’
       ‘Ctrl-a’
              Move to the top-left of the picture.

       ‘End’
       ‘Ctrl-e’
              Move to the bottom-right of the picture.

   Zoom Mode
       An alternative way of viewing the whole picture, one which lets you see
       the picture onscreen all at once no matter how big (or small) it is, is
       zoom mode.

       Zoom  mode’s name derives from the idea of ‘zooming’ a small file up to
       fit the window. But in reality, it is more often used to reduce a large
       file to fit.

       Zoom  mode  is not the default, and has to be enabled. Once enabled, it
       stays on until you turn it off again (or until you enable  scaling,  or
       select Normal (see Scaling)).

       ‘z’
       ‘Viewer menu, Options, Zoom (fit to window)’
              Toggle zoom mode.

       ‘Alt-r’
       ‘Viewer menu, Options, When Zooming Reduce Only’
              When  in  zoom  mode,  only  reduce pictures to fit. This can be
              useful when going through a lot of unpredictably-sized pictures,
              as it means that you can see all of a big picture easily without
              also meaning that tiny little icons assume a scale  of  Biblical
              proportions. :-)

       The  way  zoom  mode  reduces  a file to fit the window is (relatively)
       quick but harsh, and may make the picture look a bit  ugly.  In  future
       there  may  be  a  smoothing option like zgv’s vkludge, but for now I’m
       afraid the fairly crude resize is all that’s available.

       There is in fact an alternative to zoom mode, as you can scale down  an
       image  instead.  This  is  generally only useful for very large images,
       however; zoom mode tends to be the Right Thing for the most part.

SCALING

       You can scale a picture --- this makes it appear  larger  (or  smaller)
       onscreen.  xzgv  acts  much  as  if  the  scaled  picture were the real
       picture; for example, the cursor keys scroll around  in  steps  of  100
       scaled pixels, even if this means moving a fraction of a pixel (or many
       pixels) in the original picture (and similarly for  movement  with  the
       mouse).

       The  main  limitation  of  scaling (other than how much it slows things
       down :-), at least when scaling up) is  that  you  can  only  scale  by
       integer  values,  so you can only make each pixel in the image twice as
       wide/high, or three times as wide/high, or four times, and so on.

       (It may seem odd saying e.g. ‘twice as wide/high’  rather  than  ‘twice
       the  size’,  but  technically  ‘twice  the  size’ would be referring to
       scaling up the width (and height) by about 1.414...)

       Normally, xzgv does no scaling, which could be considered  a  ratio  of
       1:1.   Scaling  up increases that ratio. How it is increased depends on
       which option/key you use:

       ‘d’
       ‘Viewer menu, Scaling, Double Scaling’
              Increase the ratio by doubling it --- this leads  to  ratios  of
              2:1, 4:1, 8:1...

       ‘s’
       ‘Viewer menu, Scaling, Add 1 to Scaling’
              Increase  the  ratio  by  adding one --- leads to ratios of 2:1,
              3:1, 4:1...

       There are similar commands to decrease the ratio:

       ‘D (Shift-d)’
       ‘Viewer menu, Scaling, Halve Scaling’
              Decrease the ratio by halving it.

       ‘S (Shift-s)’
       ‘Viewer menu, Scaling, Sub 1 from Scaling’
              Decrease the ratio by subtracting one.

       Usually the double/halve scalings are more useful.

       Note that you can also double/halve the scaling  by  using  shift-left-
       click  on  the  viewer  to double, and shift-right-click to halve. This
       still changes scale ‘around’ the middle of the  window  though  (rather
       than  around  the  point  clicked  on, as you might expect), which is a
       little strange and may possibly be changed in future.

       When you scale ‘below’ 1:1, the above commands lead to ratios of (e.g.)
       1:2,  1:4, 1:8, etc. --- that is, the ratios work the same way, but the
       other way around. This gives you an increasingly small image.

       The scaling ratio is never decreased  below  1:32.  It  is  also  never
       increased  beyond  the  point where the overall image size would exceed
       32767x32767 --- this limit is due to the combination of  X’s  limit  on
       window sizes, and the implementation used by xzgv for scaling.

       One  problem with scaling up, given the way it’s currently implemented,
       is that it’s not well-suited to  dithered  display  ---  so  if  you’re
       running on an 8-bit server, dragging the image around slowly when using
       scaling (especially scaling with  interpolation)  may  result  in  some
       nasty, streaky, undithered-looking parts of the picture. :-(

       You can undo the effect of scaling (up or down) at any time:

       ‘n’
       ‘Viewer menu, Scaling, Normal’
              Resume ‘normal’ display --- disables scaling mode, and also zoom
              mode.

       Normally, scaling up works by simply making the pixels into larger  and
       larger  squares (in effect), which remain the same colour. However, you
       can enable a feature called ‘interpolation’  which  smoothly  graduates
       the  colour  change between the top-left corners of each pixel. This is
       very slow, but looks nice.

       ‘i’
       ‘Viewer menu, Options, Interpolate when Scaling’
              Toggle interpolation in scaling mode.

       (If you like the appearance of scaling with interpolation, you may also
       be interested in a program I wrote called pnminterp, which can scale up
       a PGM or PPM file while applying this effect. These days it’s  part  of
       the netpbm package.)

       Scaling  down,  however,  is implemented a bit like a special-case zoom
       mode, and currently there are no ways of making that look nicer. :-/

       xzgv normally ‘reverts’ scaling (returning the scale to  1:1)  back  to
       normal  when  you view a new picture. However, it’s possible to disable
       this behaviour (see Viewer Options).

       There is also support for an alternative form of scaling --- decoupled,
       or axis-specific, scaling. When you scale in this way, only one axis of
       the image  is  scaled  at  once.  For  example,  you  might  choose  to
       effectively  double  the  height  of  an  image  (with  the  width left
       unchanged). Indeed, this sort of  scaling  is  useful  for  temporarily
       correcting  pictures intended for display using pixels twice as wide or
       high as normal.

       ‘x’
       ‘Viewer menu, Scaling, X Only, Double Scaling’
              Increase the (x axis) ratio by doubling it.

       ‘X (Shift-x)’
       ‘Viewer menu, Scaling, X Only, Halve Scaling’
              Decrease the (x axis) ratio by halving it.

       ‘Alt-x’
       ‘Viewer menu, Scaling, X Only, Add 1 to Scaling’
              Increase the (x axis) ratio by adding one.

       ‘Alt-Shift-x’
       ‘Viewer menu, Scaling, X Only, Sub 1 from Scaling’
              Decrease the (x axis) ratio by subtracting one.

       ‘y’
       ‘Viewer menu, Scaling, Y Only, Double Scaling’
              Increase the (y axis) ratio by doubling it.

       ‘Y (Shift-y)’
       ‘Viewer menu, Scaling, Y Only, Halve Scaling’
              Decrease the (y axis) ratio by halving it.

       ‘Alt-y’
       ‘Viewer menu, Scaling, Y Only, Add 1 to Scaling’
              Increase the (y axis) ratio by adding one.

       ‘Alt-Shift-y’
       ‘Viewer menu, Scaling, Y Only, Sub 1 from Scaling’
              Decrease the (y axis) ratio by subtracting one.

       There are also mouse shortcuts  for  scaling  up/down  a  single  axis;
       control-left-click  scales  up, and control-right-click scales down. By
       default this acts on the y axis, but the active  axis  can  be  toggled
       with  ‘Alt-c’, or by toggling the ‘Ctl+Click Scales X Axis’ option (see
       Viewer Options).

       Interpolation is not currently supported  in  situations  where  the  x
       scaling does not match the y scaling.

MIRROR AND ROTATE

       Sometimes  when viewing a picture you will want to flip it horizontally
       or vertically, or rotate it:

       ‘m’
       ‘Viewer menu, Orientation, Mirror (horiz)’
              ‘Mirror’ the picture (flip it horizontally).

       ‘f’
       ‘Viewer menu, Orientation, Flip (vert)’
              ‘Flip’ the picture (flip it vertically).

       ‘r’
       ‘Viewer menu, Orientation, Rotate Right’
              Rotate the picture 90 degrees clockwise.

       ‘R (Shift-r)’
       ‘Viewer menu, Orientation, Rotate Left’
              Rotate the picture 90 degrees anti-clockwise.  (Any  US  readers
              surprised  and/or  annoyed  by my not saying ‘counter-clockwise’
              will realise why the menus say rotate right/left. :-))

       ‘N (Shift-n)’
       ‘Viewer menu, Orientation, Normal’
              Restore the picture  orientation  to  normal.  This  undoes  the
              effect of any mirrors, flips, and/or rotations.

       xzgv  normally  ‘reverts’  the picture orientation (the way the picture
       has been transformed by mirror/flip/rotate) back  to  normal  when  you
       view  a new picture. However, it’s possible to disable this (see Viewer
       Options), so that  any  new  pictures  are  mirrored,  flipped,  and/or
       rotated in the same way.

BRIGHTNESS AND CONTRAST

       [Brightness  and contrast changing is not supported in xzgv 0.9.]  xzgv
       provides support for changing brightness and contrast, though given the
       way it has to redraw the image to do so, it can be a little slow.

       Currently  there  is  no  way to do this with the mouse; this should be
       fixed soon.

       ‘,’
              Decrease contrast.

       ‘.’
              Increase contrast.

       ‘<’
              Decrease brightness.

       ‘>’
              Increase brightness.

       ‘:’
       ‘;’
              Reset contrast and brightness to normal. (‘*’ is also supported,
              for  hysterical  raisins.)  Note that this deliberately does not
              affect the gamma adjustment.

       Any contrast change is applied before any brightness  change,  and  any
       gamma adjustment is applied before both.

GAMMA ADJUSTMENT

       [Gamma  is  not  supported  in xzgv 0.9.]  Ah yes, gamma. What fun. The
       basic problem is this --- differing displays have  differing  intensity
       response  curves.  ‘‘This  has made a lot of people very angry and been
       widely regarded as a bad move.’’ :-)

       It means that you need some way of adjusting how brightly  you  display
       the  picture  to  compensate.  But  since  we’re  dealing with response
       curves, this isn’t just a matter of changing the brightness in a linear
       fashion.

       That  doesn’t  seem so hard to deal with, right? All you need is to get
       the gamma (a number which specifies how much the curve bends)  for  the
       image,  and  for  the  screen,  divide  one  by the other and adjust as
       appropriate. Joy.

       But, given that the problem has existed  since  we  started  displaying
       more  than  eight  colours,  you  won’t  be surprised to find that it’s
       already been fixed. And the fixes all tend to clash, and everybody  has
       a  different notion of how to fix it. The usual ‘fix’ is to assume that
       whoever made the image made it with a gamma matching the gamma of  your
       display, so you can just stuff the bits right on the screen. Since this
       is easy, it’s the most widespread approach. But it’s a bit  stupid,  so
       not everyone does it. Combine that with the lack of gamma specification
       in most image formats, and the often-bogus values specified  by  people
       in  those  that  do,  and  hey presto --- the image gamma could be just
       about anything. And the screen’s gamma also  tends  not  to  be  easily
       determined.

       So how on earth do you deal with something like that in a remotely sane
       fashion?

       The answer chosen in xzgv is to  just  live  with  the  fact  that  the
       probability  of  automatically  obtaining  correct  values for both the
       screen and image gamma is basically zero. Once  you  accept  that,  the
       sensible  thing  to do is to make it very easy and fast to change gamma
       adjustment to commonly-required values. So here’s how to do it:

       ‘1’
              Set gamma adjustment to 1.0, i.e. no  adjustment.  This  is  the
              default setting.

       ‘2’
              Set  gamma adjustment to 2.2. This is useful for viewing linear-
              gamma files (one classic example being raytracer output)  on  an
              average PC monitor.

       ‘3’
              Set  gamma  adjustment  to  1 divided by 2.2, i.e. roughly 0.45.
              This is useful for the reverse ---  viewing  average-PC-monitor-
              gamma  files  on  a linear-gamma display. Historically I believe
              the classic example would have been viewing PC files on  a  Mac,
              but I don’t know how true that is these days.

       ‘4’
              Set  gamma  adjustment  to  its initial value, as specified by a
              ‘--gamma’ command-line option (see Options) or equivalent config
              file  setting  (see Configuring xzgv). The default value used if
              none was specified is 1.0.

       A brief clarification is probably in order. The gamma adjustment  value
       which  you  set in xzgv is actually inverted from (i.e. one divided by)
       the true adjustment value  used.  This  is  (believe  it  or  not  :-))
       intended to avoid confusion by reflecting the fact that screen gamma is
       the one most widely considered/well known.

       You can also tweak the adjustment more precisely, in a similar  way  to
       brightness/contrast:

       ‘Alt-,’
              Decrease gamma adjustment (divide it by 1.05).

       ‘Alt-.’
              Increase gamma adjustment (multiply it by 1.05).

       Note  that ‘:’, and the other keys which reset the brightness/contrast,
       deliberately avoid resetting the gamma adjustment.

       As with brightness/contrast, there is currently no way to adjust  gamma
       with  the  mouse; this should be fixed soon. (But the 1/2/3/4 keyboard-
       based method is likely to still be the faster method.)

CHANGING PICTURE

       It’s possible to go directly to the previous or next  file  (or  tagged
       file)  in  the  directory, or to tag a file, without having to pick the
       file from the file selector by hand. These  commands  are  particularly
       useful  when  using  xzgv from the keyboard, but there’s also a notable
       mouse shortcut for moving to the next image.

       ‘Space’
       ‘Viewer menu, Next Image’
              Move to next file in dir, and view it. You can also click on the
              picture/viewer  to  do  this.  (If you find this interferes with
              dragging the picture around (though it shouldn’t), or just don’t
              like it, it can be disabled (see Config Variables).)

       ‘b’
       ‘Viewer menu, Previous Image’
              Move to previous file in dir, and view it.

       ‘Ctrl-Space’
       ‘Viewer menu, Tagging, Tag then Next’
              Tag current file, then move to next file in dir and view it.

       ‘/’
       ‘Viewer menu, Tagging, Next Tagged’
              Move to next tagged file in dir, and view it.

       ‘?’
       ‘Viewer menu, Tagging, Previous Tagged’
              Move to previous tagged file in dir, and view it.

HIDING THE SELECTOR

       When  running  on small screens, or in a small window, it can get a bit
       annoying to  lose  viewer  space  by  having  the  selector  constantly
       displayed  when  you don’t actually need it. The usual solution to this
       problem is to enable auto-hide mode. But what if some  pictures  you’re
       viewing  are  small  and  some  large?  It  can  sometimes be nearly as
       annoying having the selector hidden to ‘make room for’ a small  picture
       which  didn’t need it. So for that reason, or perhaps if you just don’t
       like auto-hide mode :-), you may prefer  to  leave  auto-hide  off  and
       explicitly hide the selector when necessary:

       ‘Z (shift-z)’
       ‘Viewer menu, Window, Hide Selector’
              Hide  the  selector. (This is actually a toggle, of sorts; ‘hide
              selector’ when it’s already hidden unhides it.)

       You can also hide or unhide the  selector  by  middle-clicking  on  the
       viewer.

MINIMIZING XZGV

       Generally it’s easy enough to use your window manager to change windows
       etc., but when running  fullscreen  this  can  sometimes  be  a  little
       problematic.   For   this   reason,   xzgv  has  built-in  support  for
       ‘iconifying’ itself:

       ‘Ctrl-z’
       ‘Viewer menu, Window, Minimize’
              Minimize the xzgv window.

VIEWER OPTIONS

       As with the selector, various options  can  be  disabled/enabled  which
       relate to the viewer.

       These  settings  can  also  be  altered using command-line options (see
       Options) and/or config file settings (see Configuring xzgv).

       ‘z’
       ‘Viewer menu, Options, Zoom (fit to window)’
              Toggle zoom mode, discussed in more detail elsewhere  (see  Zoom
              Mode).

       ‘Alt-r’
       ‘Viewer menu, Options, When Zooming Reduce Only’
              Toggle  reduce-only  in  zoom  mode, also covered elsewhere (see
              Zoom Mode).

       ‘i’
       ‘Viewer menu, Options, Interpolate when Scaling’
              Toggle interpolation when a picture is being  scaled-up.  Again,
              this has already been mentioned (see Scaling).

       ‘Alt-c’
       ‘Viewer menu, Options, Ctl+Click Scales X Axis’
              Toggle the axis scaled when you control-click (or control-right-
              click) on the image. The default is to scale the y axis.

       ‘F (shift-f)’
       ‘Viewer menu, Options, Dither in 15 & 16-bit’
              Toggle dithering in 15/16-bit modes. This increases the apparent
              colour depth making gradations look much better, but it’s slower
              than undithered rendering, and can (in 16-bit) slightly  distort
              a  picture’s colour balance. (The ‘F’ key was chosen for this as
              the dither toggle is functionally similar  to  zgv’s  ‘fakecols’
              toggle.)

       ‘Viewer menu, Options, Revert Scaling For New Pic’
              Normally xzgv returns the scaling back down to 1 (normal) when a
              new picture is selected.  By  disabling  this,  you  can  retain
              scaling   across  picture  selection.  (There  is  currently  no
              keyboard shortcut for this fairly-seldom-changed option  ---  to
              toggle  it  from  the  keyboard,  you  should use the popup menu
              (press ‘F10’), and select the menu item.)

       ‘Viewer menu, Options, Revert Orient. For New Pic’
              Similarly, xzgv returns to the picture’s true  orientation  (not
              mirrored,  rotated,  etc.) on selecting a new picture. Disabling
              this option means that any mirrors/flips/rotates applied persist
              across multiple images.  (No keyboard shortcut --- see above.)

       ‘Viewer menu, Options, Use Exif Orientation’
              Toggle  support  for Exif orientation. Devices which create JPEG
              files in the Exif format (e.g. many digital cameras) may add  an
              orientation tag to the file, which says how the camera was being
              held when the picture was taken. When this tag is present,  xzgv
              can  adjust  the  image to compensate for a camera being held on
              its side. (This isn’t done by default as  it  misrepresents  the
              true  image, which could be confusing if you don’t know why it’s
              happening.) Enabling this option  may  be  useful  if  you  take
              pictures with your camera on its side, but don’t want to have to
              rotate the pictures before being able to view them properly.  Of
              course,  for  this  to  work your camera has to be inserting the
              orientation tag in the first place --- but it can’t hurt to  try
              it and see. (No keyboard shortcut --- see above.)

FILE FORMATS

       Picture  files  are  stored  in  a variety of different forms, or ‘file
       formats’. xzgv, via gdk, supports many.

FILE TYPE IDENTIFICATION

       The format a file is in is identified by its content. The  file-reading
       code  relies  on  libgdk  to  determine the file type and read the file
       correctly; generally this uses the format’s ‘magic number’ to determine
       file  type  ---  e.g.  a JPEG/JFIF file starts with the (hex) bytes ‘FF
       D8’. So if you start xzgv with xzgv foo, and  foo  is  in  a  supported
       format  (such  as  JPEG),  the  format will be figured out and the file
       loaded even though the ‘extension’ is absent.

CONFIGURING XZGV

       Many aspects of  the  way  xzgv  works  can  be  modified  by  using  a
       configuration file.

CONFIG FILES

       A  configuration  file lets you alter aspects of xzgv’s behaviour. xzgv
       supports  two  possible   config   files   ---   a   system-wide   one,
       /etc/xzgv.conf;  and  one  for  each  user  in  their  home  directory,
       $HOME/.xzgvrc. Both are optional. If $HOME/.xzgvrc exists, it  is  used
       instead of /etc/xzgv.conf.

       Before  describing  the  format of config files, it may help to give an
       example file:

       # Sample xzgv config file
       # Comment lines begin with ‘#’ and are ignored,
       #  as are blank lines.

       # make pics fit window
       zoom on
       # hog the screen :-)
       fullscreen on

       It is a line-based format. Each line (or rather, each line which is not
       a comment line and is not blank) assigns a value to a single predefined
       ‘variable’. xzgv has many such variables it lets  you  modify  in  this
       way.   For example, the fullscreen option above controls whether or not
       xzgv tries to use the whole screen for its window. If it is  given  the
       value  ‘on’/‘y’/‘yes’/‘1’  it  does; if ‘off’/‘n’/‘no’/‘0’, it doesn’t.
       Most variables are of this yes-or-no ‘boolean’ type.

       Since the variables set in a config file have a direct  effect  on  how
       xzgv  works,  it  can be easier to simply call them ‘settings’. Indeed,
       such terminology is used on occasion in this documentation.

CONFIG VARIABLE TYPES

       There are various types of variable:

       - Boolean. These are on-or-off, yes-or-no  variables.  Most  of  xzgv’s
       config file variables are of this type.

       -  Integer  (currently unused). These are whole numbers. The meaning of
       the number depends on what the variable is used for.

       - Real (floating-point). This can  be  a  whole  number  or  a  decimal
       fraction.  Only the gamma variable is of this type.

       -  Geometry.  This  window size-and/or-position specification format is
       only used for the ‘geometry’ setting. See Options, for a description of
       how this type works.

CONFIG VARIABLES

       Currently,  most configuration variables (settings) in xzgv can also be
       set by command-line options; indeed, the name of  the  setting  in  all
       such  cases  is  identical  to  that for the long version of the option
       (e.g. ‘fullscreen’, ‘auto-hide’). As such, they’re  documented  in  the
       section   which  discusses  command-line  options  and  the  like  (see
       Options).

       However, there are some settings only available in the config file:

       click-for-next
              This is enabled by default, allowing you to click on the  viewer
              to  skip  to the next image. If disabled, clicking on the viewer
              does nothing.

RATIONALE

       Here I (RJM) attempt to explain why I did things the way I did. This is
       presented in a question-and-answer format of sorts.

WHY YET ANOTHER VIEWER?

       Previously,  this  section concentrated on xv; that may have made sense
       when I originally wrote it, and still makes a certain limited amount of
       sense  for  zgv, but for xzgv it was looking increasingly dated. And so
       here I am writing an update. :-)

       I originally wrote xzgv as I simply wasn’t happy with the viewers for X
       that  I  was  aware  of  at the time (mid-1999). At the time of writing
       (late 2000), other key things about xzgv are becoming apparent,  partly
       through responses I’ve been getting to it:

       o  It’s  ‘fast’. No, it doesn’t do any particular operation faster than
       other viewers as far as I know (well,  maybe  thumbnail  updates  :-));
       rather,  the  interface  tries  not  to  get  in  your  way. Click on a
       filename, and the picture  appears.  No  multiplicity  of  toolbars  or
       windows, it’s just there.

       o  As  with  zgv,  it  tries to do one thing well, viewing pictures. It
       isn’t perfect in this regard, I’ll admit, but at least  it  stays  well
       clear of picture editing.

       o It’s, er, quite a lot like zgv. Some of us old fogies like this. :-)

       I  won’t  pretend xzgv is The Ultimate Viewer For Everyone. Some people
       will prefer other approaches, or  just  simply  prefer  other  viewers.
       (Some  people  may  even  still  use  xv, ghod forbid.) There are a few
       viewers which you may like to try if you don’t think much of xzgv:

       o gqview. This seems to be well-regarded. I find it a bit gimmicky  and
       kitchen-sink-ish; not quite as ‘pure’ or focused as xzgv, IMHO. I think
       more people use it than xzgv though.

       o xli. I’m not sure if this is maintained these days, but it’s not  too
       bad  a  viewer.  No  thumbnails  or file selector though. (These days I
       mostly use this for setting the root window pixmap, something  I  dont
       think  belongs  in a viewer, but which xli does happen to be quite good
       at.)

       o qiv. If I read between the lines correctly,  this  is  essentially  a
       modern replacement for xli.

       o  gtksee.  I’ve  not  tried this, but I think the idea is that it’s an
       ACDSee clone, and there seem to be an awful lot of people  who  want  a
       clone of that. Which is their problem. :^)

       o  Electric  Eyes.  To  be  honest, I think this has been outclassed by
       other viewers these days, which shows how far we’ve come.

       Ah, you say, what of xv? Well, we’ve  emphatically  reached  the  point
       where  no-one  need  use xv any more. Anyone using xv these days really
       should drop that pile of ill-conceived non-Free crap and use one of the
       better viewers now available. It’s that simple.

WHY NO IMAGE-EDITING CAPABILITIES?

       It’s  a  fscking  viewer, dammit. If you want xv you know where to find
       it.

       (OTOH, if you want a decent image editor, use the Gimp.)

WHY A TEXINFO MANUAL?

       For years, I maintained a conventional ‘man page’ for zgv  (which  xzgv
       was  loosely  based  on). But over time, I realised just how impossibly
       confusing the zgv man page had become.

       So I wanted to rewrite zgv’s documentation in a more sensible  way,  in
       some  other  format  than  a  man  page. I wanted an established, well-
       supported format with structure and cross-referencing. I felt this made
       it  a choice between HTML and texinfo. HTML seemed to me to be a moving
       target like no other, and not as well supported on text-only  terminals
       as  Info  (and  thus texinfo). (This latter point is admittedly not too
       relevant as far as xzgv is concerned.) When I noticed that a  converter
       existed  to  convert  texinfo to HTML in any case, the case was closed.
       xzgv’s documentation was then based on zgv’s --- the  documentation  is
       probably more similar than the programs are. :-)

       Don’t  get  me  wrong --- I like man pages. And even with the excellent
       Texinfo documentation and Emacs’ very  helpful  Texinfo  mode,  writing
       texinfo  is  hardly easy. (Without Texinfo mode’s node- and menu-update
       commands, I personally would find  it  near-impossible!)  But  big  man
       pages  just  aren’t  that good for reference, and this is made worse by
       the relative lack of structure.

WHY ONE-SPACE SENTENCE ENDS?

       The conventional way to write texinfo is to follow each  sentence  with
       two  spaces  after the dot (or whatever ends the sentence). Many people
       normally write this way in a non-texinfo context too.  But  a  sizeable
       proportion  of people normally write text with only one space after the
       dot --- and I’m one of them.

       The Texinfo documentation gives the impression that two-space  must  be
       used;  it  says  ‘‘it  is  important  to  put  two spaces at the end of
       sentences in Texinfo documents.’’ But the only  circumstance  in  which
       spacing  from  the texinfo file is preserved at all (in any sense other
       than ‘there is a space here’) is when the texinfo is converted to  Info
       format.  So,  in fact, the decision to use two-space depends on how the
       author wants Info output to appear --- this is  a  subjective  decision
       which  should be entirely down to the preference of the author, despite
       the Texinfo documentation’s attempt to make  two-space  sound  like  an
       objective you-must-do-this kind of thing.

       You  might wonder what the problem with using one-space is, then. Well,
       ‘makeinfo’ has to reformat paragraphs, and whenever it needs to  insert
       space  at  (what appears to it to be) the end of a sentence, it inserts
       two  spaces.  This  behaviour  cannot  be  altered,  unlike  in   Emacs
       (sentence-end-double-space;  see  Fill Commands in the emacs info file)
       and GNU fmt (-u; see fmt invocation in the textutils info file).  Also,
       attempting  to  ‘fix’  the  output  Info with sed doesn’t work properly
       because the ‘tags’ used to find nodes quickly are then incorrect. These
       could  of  course also be fixed, but this would involve a lot more work
       than a simple sed invocation.

       So realistically, anyone who writes texinfo with one-space has  to  put
       up with the occasional two-space sentence end being inserted into their
       text --- worse still, the current ‘makeinfo’ formatting algorithm seems
       to  insert  two  spaces  even  after  abbreviations (such as ‘e.g.’ and
       ‘etc.’), which breaks even two-space  texinfo.  (This  is  particularly
       ironic,  by the way, since two-space partisans’ main argument in favour
       of the practice is often the way it  makes  it  possible  to  tell  the
       difference between abbreviations and the end of a sentence.)

       One  last point may be worth noting; I am not the first person to write
       texinfo files using one-space. At the time of writing, it  is  used  in
       the  texinfo  documentation  for  BFD,  gdbm, GTK/GDK, (Linux) IPC, and
       viper, and I expect there are instances I’m not aware of.

BUGS AND RESTRICTIONS

       All (non-trivial) programs have bugs. Anyone who denies this...

       - clearly hasn’t written too many programs.

       - is wrong. ;-)

       It follows that xzgv, like  everything  else,  always  has  some  bugs.
       Usually  these  are  not  too  serious,  or  I’d have fixed them before
       releasing xzgv. But either way, bugs and other problems with  xzgv  are
       noted here.

KNOWN BUGS

       -  In  zoom  mode,  it  copes  with resizing the window as a whole, but
       doesnt when  you  change  the  size  of  the  pane  (apart  from  when
       hiding/showing selector or resizing from keyboard, but that’s only ’cos
       I kludged it :-)).

       - When scaling up and dithering,  you  end  up  with  a  crappy-looking
       picture  if  you drag the picture around slowly (since each exposed bit
       is dithered independently, with no regard given to matching up  to  any
       previous error-diffusion).

       - Scaling up is slow. Not sure if I can do much about this.

       - Using an alignment widget to centre the viewer window results in some
       annoying ‘bounce’ in certain resizing situations etc.

       - Thumbnails don’t look so great in palette-based (e.g. 8-bit) modes.

       - When dragging an image around, if you quickly move the mouse  pointer
       over  from  the  image  area  to  the selector area, the image seems to
       ‘jump’ a little. I think this may have something to do with  the  paned
       window’s  window-splitting  bit,  but I’m not sure. Also, it jumps when
       moving across scrollbar sliders and the paned window splitter handle.

       - It doesn’t apply any tranparency mask. The practical result  of  this
       seems to be purple transparent bits in thumbnails and scaled-up images,
       and black transparent bits elsewhere. This doesn’t  affect  PNG  files,
       though.

       -  If a GIF file is corrupted in such a way that the decompressed image
       has a larger number of pixels in it, the extra pixels will  be  ignored
       and no error or warning will be generated.

       -  If you look up ‘joe code’ in a dictionary, right next to ‘‘see zgv’’
       it now says ‘‘but for really in-depth insight into the joe code nature,
       see xzgv’’. :-)

SUBOPTIMAL FEATURES

       -  Thumbnails are given an accurate width/height ‘IMGINFO’ comment, but
       are always claimed to be "RGB".

       - xzgv doesnt duplicate zgv’s behaviour of generating thumbnails under
       ~/.xvpics/_foo_bar_baz     if     it    can’t    generate    them    in
       /foo/bar/baz/.xvpics. I  doubt  anything  else  supported  it,  and  it
       complicated  lots  of  things  unnecessarily.  This  isn’t particularly
       suboptimal, but as an incompatibility with zgv it merits mention.

RESTRICTIONS

       - Only the first image of a multiple-image GIF is  used.  (These  days,
       multiple-image GIFs are usually animations.)

REPORTING BUGS

       If  you  find  xzgv  does something wrong, which you suspect might be a
       fault of some sort (a bug) in the program, it is best to report it as I
       may  not  be aware of the problem. (But first, check it is not a ‘known
       bug’.  See Known Bugs. It is not usually helpful  to  report  a  bug  I
       already know about.)

       It  is  important to include as much detail in a bug report as you can.
       Here are some details you should include:

       o The version of xzgv you are running. ‘xzgv --version’ reports this.

       o The versions of GTK+ you are using. ‘xzgv --version-gtk’ reports  the
       GTK+ version being used by xzgv.

       o  The  bitdepth  your  X server is running in (common depths are 8-bit
       (256 colours), 15-bit, 16-bit, 24-bit, and 32-bit). If you  don’t  know
       what depth you’re running in, try ‘xdpyinfo|grep depth’.

       o  A  description of the bug --- what effects it has, the circumstances
       it occurs in, and so on. Does it only happen for certain types of file?
       Only  when  in  8-bit  modes?  Only  when  dithering  is  enabled? Even
       ‘irrelevant’ details can sometimes be useful.

       o Finally, if you are a programmer and believe you have managed to  fix
       the  bug  yourself,  patches  are  gratefully  accepted. :-) You should
       generate the patch using ‘diff -c’ or (preferably) ‘diff -u’.

       So, if you think you’ve found a bug in xzgv, report it by  emailing  me
       at <rrt@sc3d.org>.

REPORTING DOCUMENTATION BUGS

       Bugs  in  the documentation can sometimes cause as much trouble as bugs
       in the program; if you notice a problem in the  documentation,  it’s  a
       good idea to report it.

       For reports of documentation bugs, you should include these details:

       o The version of xzgv the documentation is for.

       o  If  it  is  a  problem in one specific section of the documentation,
       specify which part it is (by this I mean the heading  it  comes  under;
       texinfophiles should read this as ‘the node name’ :-)).

       o  The  format  of the documentation you saw the problem in (e.g. info,
       man page, HTML).

       o A description of the problem.

FUTURE CHANGES

       See Reporting Bugs, for details of where to send the  bug  report.   If
       you  want  to  suggest  a feature you’d like in xzgv, or a change to an
       existing feature, contact me at <rus@svgalib.org>.

       xzgv is rather a moving target at the moment, so for now future changes
       etc.  are  only listed in the TODO file. Normal service will be resumed
       once things settle down a bit. :-)

AUTHOR

       Russell  Marks  <rus@svgalib.org>   and   others;   see   the   section
       ACKNOWLEDGEMENTS for details.

SEE ALSO

       zgv(1), xv(1), cjpeg(1), djpeg(1), pbm(5), pgm(5), ppm(5), mrf(5)