# Acme (software)

Acme è un ibrido tra un window manager, una shell grafica ed un editor di testo. Sviluppato originariamente da Rob Pike per il sistema operativo Plan 9, è stato in seguito portato su altre piattaforme, tra le quali macOS, Linux ed OpenBSD.
La sua interfaccia è influenzata da Oberon e la sua caratteristica peculiare risiede nello sfruttamento massiccio del mouse, tramite l'introduzione di gesture per eseguire manipolazioni del testo. Integra inoltre un linguaggio interno, ereditato da sam, che risulta essere un'evoluzione dei comandi di ed. Analogamente ad altri software di Plan 9, Acme è di fatto un server 9P, ovvero fornisce uno pseudo-filesystem per mezzo del quale è possibile interagire con esso.

## Interfaccia utente

Acme è un software pensato per terminali grafici. Di default si presenta con due colonne, dentro le quali possono essere innestate verticalmente diverse finestre. Ogni finestra può contenere solamente testo puro UTF-8, Acme infatti non possiede alcun supporto ad immagini o testo formattato, quindi non è presente alcuna possibilità di supportare il syntax highlighting.
Ad ogni finestra è associata una tagline, di colore ciano, che fornisce informazioni circa lo stato della stessa (se è sporca, ovvero se essa contiene modifiche non salvate sul disco), il titolo (che può essere ad esempio il percorso al file aperto, o la cartella mostrata), più diversi comandi di default (come quelli per chiudere la finestra, salvare le modifiche o annullarle).
La tagline, così come le finestre, è un contenitore di testo e risulta completamente modificabile dall'utente. Grazie a tale caratteristica viene spesso usata per la scrittura di comandi da eseguire in seguito; infatti su Acme non sono presenti widget "statici", piuttosto qualsiasi comando (che si identifica mediante un nome) può essere eseguito semplicemente cliccando con il tasto centrale del mouse su di esso, a prescindere da dove il nome sia stato digitato.
È inoltre possibile salvare lo stato delle finestre, in modo da poterlo ripristinare in seguito ad un'altra esecuzione del programma.

### Mouse

Come già detto, Acme è pensato per essere utilizzato con il mouse, in particolare un mouse a tre tasti, identificati come 1 (il sinistro), 2 (quello centrale) e 3 (quello destro).
Acme introduce i chords (accordi), mediante i quali è possibile eseguire le classiche operazioni di taglia, copia (snarf, secondo il lessico usato su Plan 9) ed incolla presenti in altri sistemi; questo in maniera rapida e senza l'ausilio della tastiera. Oltre alla manipolazione del testo, gli accordi del mouse, possono essere utilizzati per passare argomenti ai comandi: ad esempio selezionando il nome di una finestra contenente un programma C (diciamo /tmp/foo.c) e poi clickando con un accordo 2-1 su cc, il programma verrà compilato.
In linea generale, con il tasto 1 si seleziona (doppio click seleziona una parola) e, avendo selezionato una porzione di testo, il 2 esegue ed il 3 passa il testo selezionato al plumber; se il plumber non esegue alcuna azione, allora viene cercato (nel contesto in cui è stato selezionato il testo) la successiva occorrenza.
Il plumber è in realtà un software separato (ma da cui Acme dipende) che associa ad espressioni regolari determinate azioni. Esso viene utilizzato in maniera pervasiva e trasparente da Acme, ad esempio per aprire file o cartelle (fungendo in pratica da file manager).

## Integrazione con il sistema

A differenza degli IDE, che tendono ad integrare al loro interno diversi componenti che aiutano lo sviluppatore nell'implementazione e nella gestione del software, Acme si limita a fornire un'interfaccia coerente, ed è essa ad integrarsi all'ambiente circostante. Ciò permette all'utente di continuare ad utilizzare gli strumenti forniti dal sistema ospite, senza dover imparare gli specifici strumenti dell'ambiente di sviluppo. Tutto ciò è reso possibile mediante la caratteristica peculiare di Acme di eseguire comandi esterni, con la possibilità di attingere dal loro output ed al contempo fornendo loro input; tutto ciò seguendo la filosofia originale di Unix, ovvero portare a termine un compito componendo tra loro piccoli programmi che comunicano l'un l'altro per mezzo di pipe. Questo design fa sì che Acme possa interfacciarsi nativamente con qualsiasi programma supporti l'acquisizione dati dallo standard input, ad esempio un correttore ortografico, una calcolatrice, un programma per la crittografia, un client IRC e così via.
Un esempio pratico è effettuare l'ordinamento di alcune righe di un file: si selezionano le righe con il tasto 1 del mouse, dunque si clicca con il tasto 2 sul comando |sort; quello che avviene è che le righe vengono passate tramite una pipe al comando sort, che le ordina in maniera lessicografica ed infine le stampa sullo standard output; quest'ultimo viene catturato da Acme, il quale rimpiazza le righe precedentemente selezionate con l'output fornito, ordinando di fatto le righe del file di partenza.