Files
ioccc/2024/howe
Cody Boone Ferguson 951a42b8ff Fix html links in 2024/
Due to a manifest mix-up (which had some html files marked as markdown
and as display_via_github as true) the respective entries' index.html
linked to html files on GitHub which do not render right (and is the
wrong place in any case).

This means that the index.html files and the .entry.json files were
updated. This in particular goes for:

    2024/burton
    2024/ferguson1
    2024/howe

Thanks to @SirWumpus for reporting this!
2025-08-05 09:22:40 -07:00
..
2025-08-05 09:22:40 -07:00
2025-08-02 19:38:13 -07:00
2025-08-05 09:22:40 -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