TermClui
index
./free/TermClui.py

a Python3 module offering a Command-Line User Interface
 
 from TermClui import *
 chosen = choose("A Title", a_list);  # single choice
 chosen = choose("A Title", a_list, multichoice=True)  # multiple choice
 x = choose("Which ?\n(Mouse, or Arrow-keys and Return)", w) # multi-line q
 x = choose("Which ?\n"+help_text(), w)    # built-in help_text
 confirm(text) and do_something()
 answer = ask(question)
 answer = ask(question, suggestion)
 password = ask_password("Enter password : ")
 filename = ask_filename("Which file ?")
 newtext = edit(title, oldtext)
 edit(filename)
 view(title, text)  # if title is not a filename
 view(textfile)    # if textfile _is_ a filename
 edit(choose("Edit which file ?", list_of_files))
 file  = select_file(Readable=True, TopDir="/home", FPat="*.html")
 files = select_file(Chdir=False, multichoice=True, FPat="*.mp3")
 os.chdir(select_file(Directory=True, Path=os.getcwd()))
 
TermClui.py offers a high-level user interface to give the user
of command-line applications a consistent "look and feel".  Its
metaphor for the computer is as a human-like conversation-partner;
as each question/response is completed, it is summarised to one line
and remains on screen, so that the history of the session gradually
accumulates on the screen, available for review or for cut/paste.
This user-interface can be intermixed with standard applications
which write to STDOUT or STDERR, such as make, pgp, rcs etc.
 
For the user, choose() uses either (since 1.50) the mouse; or arrow
keys (or hjkl) and Return or q; also SpaceBar for multiple choices.
confirm() expects y, Y, n or N.  In general, ctrl-L redraws the
(currently active bit of the) screen.  edit() and view() use the
default EDITOR and PAGER if possible.  Window-size-changes are handled,
though the screen only gets redrawn after the next keystroke (e.g. ctrl-L)
 
choose(), ask() and confirm() all accept multi-line questions:
the first line should be the core question (typically it will
end in a question-mark) and will remain on the screen together
with the user's answer.  The subsequent lines appear beneath the
dialogue, and will disappear when the user has given the answer.
 
TermClui.py does not use curses (a whole-of-screen interface), it uses
a small and portable subset of vt100 sequences.  Also (since 1.50) the
SET_ANY_EVENT_MOUSE and kmous (terminfo) sequences, which are supported
by all xterm, rxvt, konsole, screen, linux, gnome and putty terminals.
 
Since version 1.60, a speaking interface is provided for the visually
impaired user; it employs  eflite  or  espeak.  Speech is turned on
if the CLUI_SPEAK environment variable is set to any non-empty string.
Since version 1.62, if  speakup  is running, it is silenced while
TermClui runs, and then restored.  Because TermClui's metaphor for
the computer is a human-like conversation-partner, this works very
naturally.  The application needs no modification.
 
Download TermClui.py from  www.pjb.com.au/midi/free/TermClui.py  or
from http://cpansearch.perl.org/src/PJB/Term-Clui-1.67/py/TermClui.py
and put it in your PYTHONPATH.  TermClui.py depends on Python3.
 
TermClui.py is a translation into Python3 of the Perl CPAN Modules
Term::Clui and Term::Clui::FileSelect.  This is version 1.67

 
Modules
       
dbm
fcntl
os
random
re
select
signal
stat
struct
subprocess
sys
termios
time

 
Functions
       
ask(question, default='')
ask_filename(question)
Uses the readline module to provide filename-completion with the Tab
key, but also displays multi-line questions in the same way as ask()
and choose() do.  This function was introduced in version 1.65.
ask_password(question)
Like ask, but with no echo. Use it for passwords.
back_up()
Moves the cursor up one line, to the beginning of the line,
and clears the line.  Useful if your application is validating
the results of an ask() and wishes to re-pose the question.
choose(question, a_list, multichoice=False)
confirm(question)
Print the question, and the user replies Yes or No using
"y", "Y", "n" or "N".  confirm() returns True or False.
edit(title='', text='')
If there's no text and the "title" is a filename that exists
and is writeable, then the user's default EDITOR is invoked on
that file.  If the file is only readable, the user's default
PAGER is used.  If there is text, the editor is invoked on that
text, and the title is displayed within the temporary file-name.
In either case, the resulting text is returned.
get_default(question)
Returns (what the dbm database remembers as) the choice the
user made the last time they were asked this question.
help_text(mode='')
This returns a short help message for the user.  If mode is "ask" then
the text describes the keys the user has available when responding to an
ask() question;  If mode is "multi" then the text describes the keys and
mouse actions the user has available when responding to a multiple-choice
choose() question;  otherwise, it describes the keys and mouse actions
the user has available when responding to a single-choice choose().
inform(msg)
Prints the message to /dev/tty or to stderr.
select_file(Chdir=True, Create=False, ShowAll=False, DisableShowAll=False, SelDir=False, FPat='*', File='', Path='', Title='', TopDir='/', TextFile=False, Readable=False, Writeable=False, Executable=False, Owned=False, Directory=False, multichoice=False)
This function asks the user to select a file from the filesystem.
It offers Rescan and ShowAll buttons.  The options are modelled
on those of Tk::FileDialog but with various new options: TopDir,
TextFile, Readable, Writeable, Executable, Owned and Directory
 
Multiple choice is possible in a limited circumstance; when
select_file() is invoked with multichoice=True, with Chdir=False
and without Create.  It is not possible to select multiple files
lying in different directories.
 
Three problem filenames: 'Create New File', 'Show DotFiles' and
'Hide DotFiles' will, if present in your filesystem, cause confusion.
 
Chdir
 
Enable the user to change directories. The default is True.
If it is set to False, and multichoice to True, and Create is
not set, then the user can select multiple files.
 
Create
 
Enables the user to specify a file that does not exist.
The default is False.
 
ShowAll
 
Determines whether hidden files (.*) are displayed.
The default is False.
 
DisableShowAll
 
Disables the ability of the user to change the status of the
ShowAll flag. By default the user is allowed to change the status).
 
SelDir
 
If True, enables selection of a directory rather than a file.
The default is False.  To _enforce_ selection of a directory,
use the Directory option.
 
FPat
 
Sets the default file selection pattern, in glob format, e.g.
'*.html'.  Only files matching this pattern will be displayed.
If you want multiple patterns, you can use formats like
'*.[ch]' or see glob.glob for details.  The default is '*'.
 
File
 
The file selected, or the default file.  The default default
is whatever the user selected last time in this directory.
 
Path
 
The path of the selected file, or the initial path.
The default is $HOME.
 
Title
 
The Title of the dialog box.  If Title is specified, then
select_file() dynamically appends "in </where/ever>" to it.
The default title is "in directory /where/ever".
 
TopDir
 
Restricts the user to remain within a directory or its
subdirectories.  The default is "/".
 
TextFile
 
Only text files will be displayed. The default is False.
 
Readable
 
Only readable files will be displayed. The default is False.
 
Writeable
 
Only writeable files will be displayed. The default is False.
 
Executable
 
Only executable files will be displayed.  The default is False.
 
Owned
 
Only files owned by the current user will be displayed.  This is
useful if the user is being asked to choose a file for a os.chmod()
or chgrp operation, for example.  The default is False.
 
Directory
 
Only directories will be displayed.  The default is False.
set_default(question, answer)
Overwrites the choice the user made the last time they
were confronted with this question. This can be useful in
an application where one task typically follows another,
to set the next default choice.
sorry(msg)
Prints the message to stderr preceded by the word "Sorry, "
view(title='', text='')
If there's no text and the "title" is a filename that exists
and is readable, then a pager is invoked on that file.  Else,
a pager is invoked on the text, and the title is displayed
somewhere as a title.  If the text covers 60% or more of the
screen, the user's default PAGER is used; if the text is two lines
or less, it is just printed; in between, a built-in tiny pager is
used which offers the user the choices "q" to clear the text and
continue, or Enter to leave the text on the screen and continue.

 
Data
        SpeakMode = set([])
VERSION = '1.67'