[comp.emacs] Navigator - Directory Hierarchy Manager

sane@m.cs.uiuc.edu (Aamod Sane) (04/10/91)

Navigator is a directory manager. I work in large directory hierarchies,
and it is very useful in this situation.

Navigator works with Epoch as well as Emacs. 

Sources for Navigator are posted tar'd, compressed and uuencoded on
gnu.emacs.sources.


		From the intro message:
----------

Navigator creates and manages directory hierarchies. Navigator is similiar
in spirit to OpenLook/Macintosh and PCTOOLS. It has proven to be very useful 
when working in large directory hierarchies. 

Navigator provides 
* A directory tree to move in
* Tree creation and in place expansions.
  Depth of the tree can be specified. After expansion, the tree can be
  edited in text-mode.
  The tree can be saved in a file.
* Shells cd'ed to a directory. Compiles and Debugs can then
  take place in that directory. 
* Shell+ Directory Listing pair. Current directory for this pair can be 
  changed from the navigator. It is also possible to continuosly track the 
  Navigator current directory.
* A shell command on current directory.
* Current directory listing (ls). From the listing, 
    - file find.
    - shell command on directory.
    - shell command with current file as last argument.
* Tracking-Shell and Multi-Shell (in the file multishell.el)
      - Multi-Shell creates multiple instances of shells.
      - Tracking-Shell cd's to the current directory of the buffer from 
      which it is invoked. Thus to do something in the current directory of 
      a buffer,pop up a tracking-shell, do whatever, and close the shell. 
      Automatic cd'ing allows direct usage of shell commands; complicated 
      key sequences are not neccessary for file manipulation.
      - *These are independent of Navigator*. Navigator uses Multi-Shell for 
      its shells. Navigator shells are based on CMU Shell; the distribution 
      contains copies of cmushell.el and comint.el.
* Dired invocations from Shell or Directory listing. Dired is actually not
  necessary for file manipulations -- you can create a shell and use standard
  shell commands. No arcane keystrokes need be remembered for doing file 
  manipulations.

Navigator presents the tree as:
	root
	   child
               grandchild
           child
etc.
Currently, there must be one and only one root.

The cursor points to the current navigator directory. At the current directory:

Type f or C-xC-f   find file in current directory.
	( Dired can be popped by f RET ).
Type s to pop up a shell with cd set to the current directory.
Type t to pop up a shell + directory listing which can track the current directory.
Type t again on a different directory to track further.
Type c to run a shell command on the current directory.
Type d to get a quick directory listing.
Type C-xd to pop up dired.
Type x to expand the current directory in place.
Type e to edit the navigator buffer to quickly insert directories.
Type C-xC-s to save the navigator data structure in a file

Type j to traverse sibling upward .
Type k to traverse sibling downward.
Type h to go to children.
Type l to go to parent.

Type ? to get this message.

In a directory window:
	Type f or C-xC-f to find file
	Type c to run a shell command on the current directory.
	Type k to run shell command on current directory with current file arg.
	Type C-xd to get dired window on current directory.

If running epoch:
	Control-mouse-left to in navigator get quick directory listing.
	Control-mouse-middle in navigator to get tracked shell and ls
	Control-mouse-left in directory window to find that file.

Customisation variables: (default in parens)
navigator-mode-hook   (nil)
nav-indent-value      (4)
nav-hierarchy-dir     (~/emacs/hierarchy) ;; must set after (load \"navigator\")
nav-track-ls-and-sh   (t) ;; track directory listing and shell or just shell
nav-track-continually (nil) ;; track with every key movement
nav-ls-new-screen     (t) ;; separate screen for ls (epoch only)
nav-ls-file-separators ( \\t\\n@/*) ;; Unix specific

Creating hierarchies:
     
     You will be asked for the root directory of the tree, the depth
     and a file to save the hierarchy in. Unless you have changed the
     nav-hierarchy-dir variable, the hierarchy file will be put in
     ~/emacs/hierarchy. 
     
     The first time is determined by the existence of nav-hierarchy-dir.
     
Problem areas:
* The directory hierarchy is created using find + awk. 'find' does
  not go through symlinks. The root, however, may be a symlink.
  This script is defined in nav-read-dir-tree-command.

Bug reports and fixes:
  Aamod Sane (sane@cs.uiuc.edu)

-------------

Navigator depends on two modifications of cmushell. These are included
in the file multishell.el. The distribution also contains cmushell.el
and comint.el for those who do not have it.

At present, Navigator has mouse bindings only for Epoch. I do not
know how to set up Emacs mouse bindings. I will be very happy to get
these from people on the net.

Enjoy,

Aamod Sane
sane@cs.uiuc.edu

sane@m.cs.uiuc.edu (Aamod Sane) (04/11/91)

This is a repost - the news here was scrogged and mutilated
some parts of my earlier post. Hope this one makes it in one piece.

------------------

Navigator is a *Directory Hierarchy* manager. I work in large directory 
hierarchies, and it is very useful in this situation.

*Navigator is NOT yet another Dired.*

The intention of Navigator is to help coordinate your activities in
a directory hierarchy, not edit the directories. Dired does that.
In fact, Dired can be invoked from Navigator. Dired works on single
directories - Navigator coordinates across directory trees.

Navigator is especially nice with Epoch.

Sources for Navigator are posted tar'd, compressed and uuencoded on
gnu.emacs.sources.


		From the intro message:
----------

Navigator creates and manages directory hierarchies. Navigator is similiar
in spirit to OpenLook/Macintosh and PCTOOLS. It has proven to be very useful 
when working in *Large Directory Hierarchies*. 

Navigator provides 
* A directory tree to move in
* Tree creation and in place expansions.
  Depth of the tree can be specified. After expansion, the tree can be
  edited in text-mode.
  The tree can be saved in a file.
* Shells cd'ed to a directory. Compiles and Debugs can then
  take place in that directory. 
* Shell+ Directory Listing pair. Current directory for this pair can be 
  changed from the navigator. It is also possible to continuosly track the 
  Navigator current directory.
* A shell command on current directory.
* Current directory listing (ls). From the listing, 
    - file find.
    - shell command on directory.
    - shell command with current file as last argument.
* Tracking-Shell and Multi-Shell (in the file multishell.el)
      - Multi-Shell creates multiple instances of shells.
      - Tracking-Shell cd's to the current directory of the buffer from 
      which it is invoked. Thus to do something in the current directory of 
      a buffer,pop up a tracking-shell, do whatever, and close the shell. 
      Automatic cd'ing allows direct usage of shell commands; complicated 
      key sequences are not neccessary for file manipulation.
      - *These are independent of Navigator*. Navigator uses Multi-Shell for 
      its shells. Navigator shells are based on CMU Shell; the distribution 
      contains copies of cmushell.el and comint.el.
* Dired invocations from Shell or Directory listing. Dired is actually not
  necessary for file manipulations -- you can create a shell and use standard
  shell commands. No arcane keystrokes need be remembered for doing file 
  manipulations.

Navigator presents the tree as:
       root
           child
               grandchild
           child
etc.
Currently, there must be one and only one root.

The cursor points to the current navigator directory. At the current directory:

Type f or C-xC-f   find file in current directory.
	( Dired can be popped by f RET ).
Type s to pop up a shell with cd set to the current directory.
Type t to pop up a shell + directory listing which can track the current directory.
Type t again on a different directory to track further.
Type c to run a shell command on the current directory.
Type d to get a quick directory listing.
Type C-xd to pop up dired.
Type x to expand the current directory in place.
Type e to edit the navigator buffer to quickly insert directories.
Type C-xC-s to save the navigator data structure in a file

Type j to traverse sibling upward .
Type k to traverse sibling downward.
Type h to go to children.
Type l to go to parent.

Type ? to get this message.

In a directory window:
	Type f or C-xC-f to find file
	Type c to run a shell command on the current directory.
	Type k to run shell command on current directory with current file arg.
	Type C-xd to get dired window on current directory.

If running epoch:
	Control-mouse-left to in navigator get quick directory listing.
	Control-mouse-middle in navigator to get tracked shell and ls
	Control-mouse-left in directory window to find that file.

Customisation variables: (default in parens)
navigator-mode-hook   (nil)
nav-indent-value      (4)
nav-hierarchy-dir     (~/emacs/hierarchy) ;; must set after (load \"navigator\")
nav-track-ls-and-sh   (t) ;; track directory listing and shell or just shell
nav-track-continually (nil) ;; track with every key movement
nav-ls-new-screen     (t) ;; separate screen for ls (epoch only)
nav-ls-file-separators ( \\t\\n@/*) ;; Unix specific

Creating hierarchies:
     
     You will be asked for the root directory of the tree, the depth
     and a file to save the hierarchy in. Unless you have changed the
     nav-hierarchy-dir variable, the hierarchy file will be put in
     ~/emacs/hierarchy. 
     
     The first time is determined by the existence of nav-hierarchy-dir.
     
Problem areas:
* The directory hierarchy is created using find + awk. 'find' does
  not go through symlinks. The root, however, may be a symlink.
  This script is defined in nav-read-dir-tree-command.

Bug reports and fixes:
  Aamod Sane (sane@cs.uiuc.edu)

-------------

Navigator depends on two modifications of cmushell. These are included
in the file multishell.el. The distribution also contains cmushell.el
and comint.el for those who do not have it.

At present, Navigator has mouse bindings only for Epoch. I do not
know how to set up Emacs mouse bindings. I will be very happy to get
these from people on the net.


After  you have read intro - M-x navigator-introduction
you might like to try this example out. 
Then create your own hierarchy.

----- example tree
Here is a subset of the /usr on my sparc.
Put this in a file in the hierarchy directory alluded to above.
(default ~/emacs/hierarchy).

Try it out with Navigator for those directories that exist on your
system. esp. the include sys ones. Try adding new directories etc.,

(Directory expansion does a find, and then edits out the unwanted ones.
So expansion is slow.
But it is typically done once for a hierarchy, so that is ok
The usual method to add few new directories is edit the navigator display 
using "e".)

---- cut and put in ~/emacs/hierarchy/usr.el -----
(setq nav-hierarchy
'(("/usr"(
    ("bin")
    ("lib"(
	 ("term")
	 ("lint")))
    ("include"(
	 ("sys")))))))
--------------------

Enjoy,

Aamod Sane
sane@cs.uiuc.edu

src@scuzzy.in-berlin.de (Heiko Blume) (04/13/91)

looks like the package lacks some hints, i.e. that
one has to 'M-x navigator' to actually invoke it, that
you probably have to (setq max-lisp-eval-depth 4000),
and that it takes about 15 cpu HOURS [on my 386/33] to
build the hierarchy file for a filesystem with 600 directories.
it'll probably take several cpu YEARS when i attempt to
use it on all my filesystems :-)

i also get "Buffer is read-only: #<buffer Navigator-src>
when i try to eXpand a directory.
-- 
   Heiko Blume <-+-> src@scuzzy.in-berlin.de <-+-> (+49 30) 691 88 93 [voice!]
                  public UNIX source archive [HST V.42bis]:
        scuzzy Any ACU,f 38400 6919520 gin:--gin: nuucp sword: nuucp
                     uucp scuzzy!/src/README /your/home