Files
ioccc/2024/howe
Landon Curt Noll fd483c2bed Merge pull request #165 from SirWumpus/fix_try
Fix all try.sh scripts to be more portable WRT gmake vs make.

We will update templates and reference files in a subsequent PR.
2025-08-03 11:37:20 -07:00
..
2025-08-02 19:38:13 -07:00
2025-08-03 11:31:04 -07:00
2025-08-03 11:31:04 -07:00
2025-08-03 11:03:58 -04:00

To build:

    make all

Bugs and (Mis)features:

The current status of this entry is:

STATUS: known bug - please help us fix

For more detailed information see 2024/howe in bugs.html.

Try:

    ./try.sh

Judges' remarks:

This is not your grandmother's 👵 emacs(1) 🤓, nor is it as limited as ed(1), eh (🇨🇦)?

The source (and of this program) has fun with an UTF-8 conforming accent, in a manor of speaking 😉.

TL;DR - to exit type Q or press CTRL+C.

As mentioned in the COMMANDS section of prog.html, try these commands:

    | Key cmd  | Action                                                     |
    |----------|------------------------------------------------------------|
    | h j k l  | Left, down, up, right cursor movement                      |
    | H J K L  | Page top, page down, page up, page bottom                  |
    | b w      | Word left, word right                                      |
    | |        | Goto column (count) of physical line                       |
    | /ERE     | Find first occurrence of ERE pattern after the cursor      |
    | n        | Find next occurrence of ERE                                |
    | G        | Goto line (count) number; 1G top of file, G bottom         |
    | \        | Toggle text selection                                      |
    | d motion | Delete text selection or region given by motion            |
    | y motion | Yank (copy) text selection or region given by motion       |
    | P        | Paste last deleted or yanked text region before the cursor |
    | i        | Insert text mode before cursor, ESC or CTRL+C ends insert  |
    | u        | Toggle undo of last edit                                   |
    | x        | Delete character after the cursor, i.e., dl                |
    | W        | Write buffer to file                                       |
    | Q        | Quit                                                       |
    | CTRL+C   | Quit                                                       |

NOTE: Any other key will redraw the screen.

Author's remarks:

Building

Simply type make to build. There are two macros that can be customised:

  • BUF to set the buffer size; default 128KB.

  • MODE to set the file creation mode; default 0600.

What's Interesting

  • This is an update with bug fixes of a previous IOCCC winner, with permission of the author.

  • This entry requires Curses. Some Linux might require NCurses built with wide character support, -lncursesw.

  • The source is UTF-8. When are é ë ê è not same as e?

  • The documentation is found in prog.html.

  • prog can view its own source.

  • A regression test suite is available on demand. The test suite requires tic(1) to build the specialised test terminal entry.

  • Original unobfuscated more fully featured source available (search/replace, pipe-filter selection, markers, insert file, edit buffer grows, literal character input, multi undo/redo). See full version.

  • The iocccsize(1) tool only counts bytes, not characters, i.e,. UTF-8 multibyte characters such that some characters cost 2, 3, or 4 bytes, thus penalising UTF-8 entries.

    UTF-8 demands equal rights and respect as real characters! The dominance of slim ASCII must end! We are the UTF-8 People's Front for Freedom, Equality, and Brotherhood (oh that's been used already) - We are the UTF-8 Countless Tourist Defence Farce for One Voice, One World, One Character Set.

Furthermore:

  • Refactor page framing to address original issue of scrolling and paging up/down when the file contains long lines.

  • CTRL+C will exit insert mode as with vi(1); CTRL+C will also quit, unlike vi(1), for those who cannot find Q.

  • Add extended regular expression forward search with buffer wrap-around.

  • Add text selection with delete (cut), yank (copy), and put (paste).

  • Add delete (cut), yank (copy) with motion.

  • Replace start/end of line with goto-column command.

  • Add counts for motion commands, delete, and put.

  • Replace top/end of file with goto-line command.

  • Fix word left to behave like vi(1).

  • Add basic UTF-8 support.

Updates