NAME
viewglob - convenience wrapper script for the Viewglob package
SYNOPSIS
viewglob [options]
DESCRIPTION
Viewglob supervises interactive shell activity and tracks file
selections and globs in a graphical display showing the contents of
relevant directories.
The viewglob command is a convenience wrapper for two other programs in
the Viewglob package which do the actual work, vgseer(1) and vgd(1).
You will want to use those programs directly to do things that are
non-simple.
If this script is run from a terminal, that terminal will be used.
Otherwise the default terminal program will be determined using
gconftool-2(1), with xterm as the fallback.
General information about using Viewglob can be found on this manpage
under USAGE.
OPTIONS
This program follows the usual GNU command line syntax, with long
options starting with two dashes. A summary is included below.
-h, --host=<name>
Connect a new vgseer process to a vgd process on the given host.
You should only specify this if you are not connecting to your
local machine.
-p, --port=<number>
Connect a new vgseer process to a vgd process on the given port.
If it is a local connection and there is no vgd active on the
port, one will be started. The default port for Viewglob is
16108 (1-GLOB). By default Viewglob will communicate over a
Unix-domain socket for a local vgd instance, but will still
listen on the specified port for remote connections.
-c, --shell-mode=<name>
Shell to be used. name can be “bash” or “zsh” (default is
bash).
-t, --shell-star=<on/off>
Show or hide the asterisk character which is usually at the
beginning of a vgseer shell prompt.
-d, --display=<vgmini|vgclassic|[path]>
Display program. The Viewglob package comes with vgclassic and
vgmini (the newer display). Though there aren’t any other
displays in existence at this point, one could be used by
passing its path. The default is vgmini.
-s, --sort-style=<windows|ls>
In the display, sort files with directories first (Windows) or
purely by name (ls). ls mode is the default.
-r, --dir-order=<descending|ascending|ascending-pwd-first>
In the display, list directories in descending order (the
default), ascending (last referenced directory has the top
listing), or ascending with the current directory always first.
-z, --font-size-modifier=<+/-##>
Increase or decrease the base font size in the display by the
given number. E.g. “-z +2” increases the window manager’s
default by 2, while “-z -2” decreases the default by 2.
-i, --file-icons=<on/off>
Show or hide the file type icons in the display.
-H, --help
Show summary of options.
-V, --version
Show the version of the package.
Note that vgseer and vgd have further options when used directly.
USAGE
When you start Viewglob, you’ll be presented with your familiar prompt
and a new window showing the file layout of the current directory. As
you begin to type a command, the display window will highlight to show
potential filename completions (dull highlight) and file selections and
globs/expansions (vibrant highlight). Also, as you reference other
directories (e.g. ../ or /usr/local/), their layouts will appear as
well.
At the bottom of the display is the command line. This is what
Viewglob is actually basing its results on; if you find the display is
not showing what you expected, check to make sure the display’s command
line is the same as the one in the shell, as they can be different (see
NOTES below).
With a few exceptions, any text you type into the display is passed to
the terminal as input. So if you wished, you could use the display as
your interface to the shell -- this actually works quite well if you’re
doing a lot of file management. Arrow keys, Page Up, Page Down, Home,
and End are interpreted by the display and not passed to the terminal.
If you start other Viewglob-supervised shells, they will share the
display if they connect to the same vgd process (default). Whichever
terminal is currently active (i.e. has window focus or is being typed
in) will have its environment shown.
Display Navigation
You can navigate the display from the terminal by pressing C-g
(Ctrl-G) followed by a direction character. They are:
Up: C-k, C-p, or <Up Arrow>
Down: C-j, C-n, or <Down Arrow>
Page Up: C-b, C-u, or <Page Up>
Page Down: C-f, C-d, or <Page Down>
To enter a real C-g to the shell, type it twice. Navigation
commands can be chained together - for example, typing C-g C-f C-f
C-k will page down twice and then move up once. The chain is
broken when a non-navigation character is typed.
In vgmini, the default display program, Up and Down are used to
switch between viewable directories, while Page Up and Page Down
are used to navigate the currently viewed directory.
Commands
There are four Viewglob commands in addition to display navigation.
After typing C-g:
Set or clear mask: <ENTER>
Toggle on/off: C-<SPACE>
Refocus window: <TAB>
Disable: C-q
Toggling will close the display if it’s active or open it if not.
It’s completely safe to open and close the display multiple times.
The behaviour of the refocus command is affected by the following:
- The display program used.
- The vgd execution options.
- The location of the display in relation to the active
terminal.
Generally it tries to ensure that both the terminal and the display
are viewable at the same time, and if they already are, it switches
the focus between the display and the active terminal (sort-of like
an internal Alt-<TAB>).
If the display did not automatically update to the current shell
after a window shuffle (i.e. it’s showing the environment of a
different shell), refocusing will wake it up. This is often
necessary for tabbed terminals like gnome-terminal and konsole.
Disabling Viewglob functionality disconnects the terminal from vgd
and turns vgseer off, resulting in an almost regular shell. There
is no way to re-enable Viewglob in a shell which has been disabled.
Filename Masking
File masking is a way to control the number and types of files
shown in the display. The default mask is "*", which shows all
non-hidden files. To show ALL files, an appropriate mask would be
".* *". To show only C source files, the mask could be "*.[ch]" or
"*.c *.h". To just display directory file types, the mask would be
"*/".
A mask can be set with the key sequence C-g [mask] <ENTER>. The
mask string will print in the display as it’s being typed. Typing
a non-printable character (such as <ESC> or C-c) while creating a
new mask will cancel it. The mask can be set back to the default
"*" with a simple C-g <ENTER>.
File masking is done on the client level. Therefore, when using
Viewglob with a remote machine, a conservative file mask could
improve response time a little.
File/Directory Name Insertion
The name of any file or directory can be passed to the terminal by
double left-clicking. If shift is held, the full path of the file
or directory is passed. Insertion works as follows:
If you are currently at the command line (i.e. the shell has
control of the terminal):
- Special characters (*, ?, !, etc.) are escaped.
- If there is no whitespace to the left of the cursor, a space
is prepended to the inserted text.
- If there is no whitespace to the right of the cursor, a space
is appended to the inserted text.
If you are executing another program in the terminal (say a
text editor or something):
- The text is inserted as-is, without any escaping or spacing.
Note that insertion of file names works pretty much the same as
just pasting text into the terminal -- it’s interpreted only as a
series of keystrokes. This means it’s your responsibility to be
sure that the shell is in a state cooperative to the reception of
text. For example, if you use vi-mode in your shell, and you
insert a file name while you’re in command mode, the shell will
receive the data as a series of commands - probably not what you
wanted to do.
FILES
~/viewglob/vgseer.conf
~/viewglob/vgd.conf
If present, these file specify a default configuration for
Viewglob. See the manuals for vgseer(1) and vgd(1) for more
information.
NOTES
First of all, when I say below “such-and-such feature of bash/zsh
doesn’t work in Viewglob”, I just mean that the display will not show
expansion information for that feature. The functionality of both
shells is UNCHANGED by running Viewglob. Anyhow.
Unfortunately, I haven’t found a good way to predict history expansion
(stuff involving the special char “!”). The Viewglob display will
pretend any construction starting with an unescaped ! does not exist.
Exceptions: a ! by itself, or the !(foo) pattern match.
A Viewglob’d shell session will not extend to subshells. That is, if
while in a Viewglob session you run, say, “bash” or “su”, Viewglob will
probably be temporarily disabled until you exit the new shell. This is
a consequence of Viewglob’s implementation, but I’d probably keep this
behaviour even if I could get around it.
Since Viewglob doesn’t track changes in shell variables, I’ve decided
to take out variable interpretation entirely. If Viewglob sees what it
thinks is a variable in its command line, it’ll stop processing it
until it’s removed. The variables will of course work fine in the
shell itself.
While running Viewglob, don’t unset or change the following variables
and functions.
In bash: PS1, PROMPT_COMMAND, histchars;
In zsh: PROMPT (or PS1), RPROMPT, precmd, TRAPHUP;
Viewglob would probably become confused. Note that if you do change
one of these (maybe you were curious, or you just forgot), it won’t
affect the shell you were using, just the display.
If you want to modify these variables, do so outside of a Viewglob
session, or put your changes in the shell’s run control file.
Only the first command in a compound command will be interpreted by
Viewglob. For example, as you type:
$ mv *.jp{e,}g ~/photos/ && rm *
Viewglob will stop listening when it sees “&&”, and the display will
only register *.jp{e,}g. This isn’t an implementation problem - it’s
just that showing globbing for the subsequent commands could be
deceptive, as the filesystem could be changed by executing the first
command (as it is in this case).
Command substitution (stuff with backticks (‘) or $(command)) is
ignored by Viewglob for the reason given above. Works fine in your
shell though.
The display will not interpret aliases in zsh.
For more information, please visit:
http://viewglob.sourceforge.net/
BUGS
Tabbed terminal programs such as gnome-terminal and konsole confuse the
active-terminal-tracking functionality (use the refocus command to tell
Viewglob you’ve changed shells).
Command line tracking seems to be pretty good for general use, but is
far from perfect.
Resizing the terminal window after you’ve typed a multi-line command
will often cause Viewglob’s command line to become temporarily out of
sync with the true command line, though it tries really hard to keep
up. No big deal if this happens -- Viewglob should be in sync by the
start of the next command.
And there are certainly others. If you spot any bugs (and they aren’t
explained by NOTES above), send me a message, okay? Ideas and code
contributions are also very welcome.
AUTHORS
Stephen Bach <sjbach@users.sourceforge.net>
SEE ALSO
bash(1), zsh(1), ls(1), glob(7), dir_colors(5).
April 26, 2006