                               hsh Introduction

Copyright (C) 2010 Alexander Taler (dissent@0--0.org)

This file is part of hsh.

hsh is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

hsh is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with hsh.  If not, see 
http://www.gnu.org/licenses/

    Overview
    --------

hsh is the {Happy|Human|History} shell, a replacement for your traditional
shell (bash, csh, etc.) intended to be more usable for humans.  It is a curses
app, which means full screen interaction and a small ugly palette of colours.
Currently it's usable and stable, although lightly tested and with plenty of
features still to come.

The purposes of hsh compared to traditional shells are:

  Make job output easier to work with by allowing each job's output to be
  viewed and manipulated independently.

  Syntax designed for human use, not a programming language.

  Dynamic configurable interface making useful information accessible.

  Better job control and backgrounding features.

  Protection from terminal-trashing processes.

  Extensibility for new features.

This document is purely introductory, there is much more documentation in the
user manual and developer manual.

    hsh Usage Basics
    ----------------

The hsh interface is split into two areas, the bottom few lines are for input,
and the rest of the screen is the main area, which shows one of a number of
different views.  Both areas can accept input, and the focus can be moved from
one to the other.  (Alt-o and Alt-Tab switch focus.)

Commands are entered into the input area, which displays information about the
command as it is typed, and are submitted for execution using the enter key,
just like a traditional shell.  When a command is submitted a job is created
and its output is displayed in the main area.  The command-line syntax is
inspired by that of the Bourne shell, but shares only its most basic features.

The main area shows a welcome message and brief help on startup.  When a job is
created it switches to a session list view that includes all of the jobs
executed along with their output, similar to the appearance of a traditional
shell.  However, each job can be manipulated independtly, their output can be
hidden temporarily, it is never intermingled even for jobs running
simultaneously, and they can be removed entirely from list.  Other main views
can be accessed using the Fn keys, including output for individual jobs, lists
of running jobs and history.  When a main view has focus, its contents can be
moved with the arrow keys, PageDown and PageUp, amongst others.

Most jobs run in the background in hsh, the interface is still available while
they are running, and output is accumalted in the natural place in the session
list and job output views.  The job's stdout, stderr and any interactive input
are drawn together, but distinguished by colour.

    Feature Status
    --------------

The major features which are already implemented are:

  Syntax and basic experience similar to traditional shells.
  Isolation of job output so it's easy to see and manipulate.
  Basic command-line features: globbing, environment variables, tilde expansion.
  Ability to do manual interactive input.
  Support for fullscreen terminal apps including curses apps.
  Use output from previous jobs as input for new jobs.
  Job backgrounding.
  Ability to modify the environment.
  Command aliases.
  Traditional shell fallback, either interactive or a single command.

High priority features for next releases:

  More obvious cues that a job is running or not.
  More movement keys - including word movement.
  Output search
  Execution context list and switching, like the directory stack.
  Deleting jobs won't delete command history.  Jobs from other instances won't
  be (easily?) deletable (unless they are old?)  True session list vs. full job
  history list.

A handful of the more important features for future releases:

  Workspaces - a way to group related command history items, jobs, and
  execution contexts which are used together.
  No echo mode for entering passwords.
  Handling of multi-line input commands.
  Better configuration mechanisms.
  Directory naming feature like zsh.
  Directory list view, made visible via an ls builtin.
  "Remote" execution using ssh and sudo.
  Annotations on stored output: time, line num and ways to show the info.
  Support for non-ASCII character sets.

