Hints for using curses (was Re: curses - problem... NO)

Martin Weitzel martin at mwtech.UUCP
Tue Dec 12 21:16:50 AEST 1989


In order to be constructive and not to flame anybody, I think to
give some 'rules', for writing 'portable' application using curses:

1) Screen size:
   Keep attention to LINES and COLS. Your program may put a lower
   limit to the values and terminate with a message, that the screen
   is too small. Common screen sizes are at least 24x80 today, but if
   your application could run on a 20x64 screen, you give the user
   some room for "decoration", esp. if the application is run in
   a windowing environment.

2) Video Attributes:
   Use video attributes only to *emphasize* an information, not as
   the information itself. Though you may assume, todays terminals
   have (at least) modes for
        - blinking
        - underlining
        - reverse video
        - half intensity
   and that the modes can be selected in *any* combination without
   occupying space on screen, be aware, that on certain hardware
   some combinations might not work as desired.
   If you absolutely need a video attribute to *show* information
   (eg. higlighting a selected menu item) and that information is
   *not* presentable in another way (eg. putting brackets to the left
   and right), use "standout mode", because this mode can allways be
   assumed to be the "best visible" video attribute on a given screen.
   (For maximum portability, leave one space before and after the
   part you mark in this way; then it is possible to "fool" curses
   via the termcap/terminfo-entry and even have some mark on very
   old hardware, with no support for video attributes.)

3) Key codes:
   Newer versions of curses support "keypad()", a nice feature, which
   helps to detect "multi character keys" (eg. keyboards sending
   ESC-[-D for cursor right). Make use of this feature, but be aware,
   that not all hardware has all the keys, definde as KEY_-tokens in
   <curses.h>. For portable applications allways design an alternate
   way to select a given functionality - NEVER DEPEND ON THE EXISTANCE
   OF A CERTAIN KEY. (I know of applications, you can not terminate
   in a controlled way, if some key is accidentially missing from
   the definitions in termcap/terminfo.)
   IMHO, it's save to assume that the four "ARROW"-Keys and "HOME" 
   are present on any todays keyboard, as well as ten F-Keys.

   BTW: My personal style is, to give the user the ability to "remap"
   the curses KEY_-tokens with respect to the functionality of the
   application. So, anybody can setup a preferred style for using
   the special keys of his/her keyboard.

Martin Weitzel

P.S.: As I'm sometimes teaching courses on curses, I'd appreciate
      any additions to the above list, if accompanied by a rationale.



More information about the Comp.unix.wizards mailing list