Here is a collection of scripts for plan9port's acme that I use in my daily workflow.


Source: rc (687 bytes)
Usage: alink name cmd

alink creates a new acme window 'name', executing cmd in it. Windows are marked clean and scrolled up once cmd exits.


Source: rc, various programs (1012 bytes)
Usage: furi scheme host [ports[-maxport]]

furi maps predefined actions to bogus URI schemes. Right-clicking a URI with a scheme such as nmap:// spawns a new window with command output for the relevant scheme. The window is marked clean once the command exits. button2 on Repeat will re-execute the command. Ports can be suffixed to the URI with schemes (:80). Some schemes accept port ranges (:22-6000)

TODO: a lot.


type is text
data matches '([^ ]+)://([a-zA-Z0-9_@\-]+([.][a-zA-Z0-9_@\-]+)*)/?(:?([0-9]+(-[0-9]+)?)?)'
plumb start rc -c 'furi '$1' '$2' '$5


Source: rc, jq, curl (353 bytes)
Usage: cve cvenum

cve retrieves a short description of a given CVE ID, as well as various references. It pulls from


type is text
data matches '(CVE-[0-9]+-[0-9]+)'
plumb start rc -c 'alink '$1' cve '$1' >[2=1]'


Source: rc, 1802 bytes
Usage: slide [n]

A clone of Russ Cox's slide program (featured here). When invoked with no arguments, slide opens the '1' file in the window's directory ($%). The Slide+ and Slide- commands are used to navigate between slides. slide exits when it cannot find the next slide.

Custom button2 functionality, or 'macros' may be implemented by defining rc functions in the slide file. button2 events on words corresponding to macro names will execute the relevant function. Executed functions have access to the slide's $winid, and the routines defined in p9p's acme.rc

Newly-defined macros become executable after reloading the slide (via the Get command, or a slide navigation)