Modificare le tabelle preservando esattamente quelle scritte a mano
Vi è mai capitato di correggere una sola parola in una tabella e ritrovarvi l’intera tabella nel git diff? Le tabelle sono l’elemento che più spesso perde il proprio allineamento in Markdown.

Nelle tabelle Markdown rimangono le tracce delle rifiniture fatte a mano. Si allineano ordinatamente le barre verticali, si regola la larghezza delle celle con gli spazi e, a volte, si altera persino l’allineamento di proposito. Quella forma è parte integrante del testo originale del file.
Ma un editor che mostra le tabelle come griglie deve interpretare il testo originale. Se riallinea automaticamente la tabella quando salva di nuovo, cambia anche la forma creata dalla persona.
L’allineamento automatico delle tabelle di Typora è noto per comportarsi così. Per uniformare la larghezza delle colonne, riempie di spazi gli intervalli tra le barre verticali e salva il risultato nel file. Il comportamento è documentato in un’issue pubblica ed è stata presentata separatamente anche una richiesta per poterlo disattivare tramite un’opzione.
mote ha scelto di non farlo. Sullo schermo mostra la tabella come una griglia, ma nel file conserva esattamente il testo originale scritto a mano.
Solo la cella che stai modificando mostra il testo originale
Anche quando fai clic su una tabella in modalità live, la griglia rimane intatta. Solo la cella in cui si trova il cursore torna a mostrare il testo originale, mentre le barre verticali appaiono attenuate.
Puoi spostarti in un’altra cella con Tab o con i tasti freccia. Premendo Invio nell’ultima riga viene creata una nuova riga.
Anche la selezione è naturale. Trascinando all’interno di una cella, viene selezionato soltanto il testo. Trascinando oltre la cella, più celle vengono selezionate formando un rettangolo e, copiandole, viene creata una tabella contenente soltanto le celle selezionate. La prima riga diventa l’intestazione e viene mantenuto anche l’allineamento.
Se una selezione iniziata fuori dalla tabella raggiunge la tabella, viene selezionata l’intera tabella. Non ci si ritrova con metà tabella selezionata in modo innaturale.
È possibile spostare anche intere righe e colonne. Quando passi il mouse sulla tabella, appaiono delle maniglie a sinistra delle righe e sopra le colonne. Basta trascinarle nella posizione desiderata.
Dal menu contestuale puoi aggiungere o eliminare righe e colonne. Ogni operazione viene gestita come una singola modifica, perciò può essere annullata in una volta sola. Il testo originale delle celle che non hai toccato, invece, non cambia. Le stesse funzioni sono disponibili anche nella palette dei comandi.

La tabella è crollata per colpa di una sola barra verticale
All’inizio, quando si inseriva una barra verticale all’interno di una tabella, veniva sempre aggiunta una barra rovesciata. Questo perché avevamo considerato soltanto il caso in cui si volesse inserire il carattere della barra verticale dentro una cella.
Ma per chi scrive direttamente le tabelle Markdown, la barra verticale è il simbolo che separa le celle. Quando si inseriva una nuova riga, persino i separatori venivano trasformati in caratteri e la tabella crollava.
Perciò abbiamo corretto il comportamento in modo che tenga conto della posizione in cui avviene l’inserimento.
Se inserisci una barra verticale all’inizio di una riga, viene ignorata. Se subito dopo è già presente un separatore, il cursore si sposta nella cella successiva. La barra verticale viene sottoposta a escape soltanto quando la inserisci in una frase all’interno di una cella. E se, subito sotto la tabella, scrivi una riga che inizia con una barra verticale, questa viene aggiunta alla tabella esistente come nuova riga.
Problemi del genere sono difficili da individuare guardando soltanto il codice. Per questo abbiamo creato test che fanno clic sulla tabella e trascinano le maniglie in una finestra reale. Verifichiamo che la tabella venga disegnata correttamente, che righe e colonne si spostino nella direzione desiderata e che l’app non si chiuda inaspettatamente durante il processo.
Il risultato diventa ancora più evidente dopo il salvataggio. Se modifichi una sola parola in una cella, anche nel git diff compare soltanto quella riga.
Gli spazi usati per allineare le colonne, gli asterischi degli elenchi puntati e i due spazi alla fine delle righe rimangono invariati. Se il file non aveva un’interruzione di riga finale, viene mantenuta persino quella condizione. Nella barra di stato puoi vedere immediatamente quanti byte sono cambiati durante il salvataggio.

Ci sono anche funzioni che abbiamo aggiunto e poi rimosso
Per un certo periodo era possibile regolare con il mouse la larghezza delle colonne. Ora non più.
Markdown non dispone di una sintassi per memorizzare la larghezza delle colonne. Per ricordarla, bisognerebbe creare un file separato accanto al documento. Quella cartella, allora, rimarrebbe completa soltanto in presenza di mote. Spostandola con git, aprendola su un altro dispositivo o usando un altro editor, le informazioni andrebbero perse.
Per i bordi delle tabelle abbiamo risolto con un’impostazione dell’app. Puoi scegliere se visualizzare tutti i bordi come una griglia oppure tracciare una linea soltanto sotto l’intestazione. La stessa impostazione viene applicata anche allo schermo e alle esportazioni in PDF e HTML.
Il criterio è semplice. I valori che non si possono scrivere in Markdown vengono inseriti nelle impostazioni dell’app, oppure non diventano una funzione.
Per questo abbiamo rimosso la regolazione della larghezza delle colonne. La larghezza viene determinata automaticamente in base al contenuto. E il documento rimane fino alla fine un unico file .md.
Un editor che riscrive bene le tabelle e un editor che conserva esattamente le tabelle che ho scritto.
mote ha scelto il secondo.