Documentazione di <code>calcurse</code>

# `calcurse` - un organizer testuale

# Abstract

Questo manuale descrive le funzionalità di `calcurse`, e il suo utilizzo. Innanzitutto vengono descritti la procedura di installazione a partire dai sorgenti e le opzioni della linea di comando; successivamente viene presentata l'interfaccia utente e tutte le opzioni di configurazione che modificano il comportamento di `calcurse`. Infine viene descritta la procedura per la segnalazione dei bachi e come partecipare allo sviluppo di calcurse.

# 1. Introduzione

`Calcurse` è un programma testuale per la gestione dell'agenda. Permette la gestione degli eventi, degli appuntamenti e dei compiti quotidiani: un sistema configurabile di avvisi ricorda all'utente l'avvicinarsi delle scadenze; l'interfaccia testuale può essere personalizzata secondo le necessità dell'utente. Tutti i comandi sono documentati da un sistema d'aiuto in linea.

# 2. Panoramica

## 2.1 Storia dello sviluppo

Ho cominciato a pensare a questo progetto mentre stavo finendo il mio dottorato in astrofisica... Stava diventando piuttosto difficile organizzare la mia vita per cui avevo veramente necessità di un valido strumento per aiutarmi in questo compito difficile ;)

Personalmente apprezzo i programmi con interfaccia utente testuale perché sono semplici, veloci, portabili ed efficienti perciò ho pensato di realizzare un semplice calendario testuale. Inoltre volevo imparare il linguaggio `C` che avevo usato solo durante i miei studi secondari; perciò ho pensato che questo sarebbe stato un buon progetto per organizzarmi e per imparare qualche nozione di `C`!

Sfortunatamente ho finito il mio dottorato prima di aver terminato `calcurse`; in ogni modo ho continuato a lavorarci sperando che potesse risultare utile anche ad altre persone. Perciò eccolo qua....

Perché il nome 'calcurse'? Perché è semplicemente l'unione di 'CALendar' e 'nCURSEs', dal nome delle librerie usate per realizzare l'interfaccia utente.

## 2.2 Principali caratteristiche

`Calcurse` è multi-piattaforma e vuole essere leggero, veloce e affidabile; deve essere usato all'interno della console o in un terminale, localmente o su un computer remoto mediante una connessione di tipo ssh.

`Calcurse` può essere usato in due diversi modi, interattivo e non-interattivo. Nel primo modo permette all'utente di controllare la propria agenda praticamente ovunque grazie all'interfaccia testuale. Il secondo modo permette di aggiungere appuntamenti semplicemente usando appropriati argomenti alla linea di comando all'interno di un compito di cron o di uno script di avvio della shell.

Inoltre `calcurse` è stato realizzato pensando all'utente finale perciò cerca di essere quanto più semplice possibile. Questo comporta un completo aiuto in linea oltre ad una barra di stato in cui sono elencate tutte le azioni disponibili. Anche l'interfaccia utente è configurabile permettendo di poter scegliere fra diverse combinazioni di colori e layout. Key bindings are also configurable, to fit everyone's needs. Infine un sistema configurabile di allarmi ricorda all'utente l'avvicinarsi degli appuntamenti.

# 3. Installazione

## 3.1 Requisiti

### 3.1.1 Librerie `ncurses`

`Calcurse` richiede esclusivamente un compilatore `C` quale `cc` oppure `gcc` nonché le librerie `ncurses`. È piuttosto difficile non avere le librerie `ncurses` già correttamente installate sul proprio computer ma nel caso è possibile trovarle all'indirizzo:

    http://ftp.gnu.org/pub/gnu/ncurses/

Note: It is also possible to link `calcurse` against the `ncursesw` library (ncurses with support for unicode). However, UTF-8 is not yet supported by `calcurse`.

### 3.1.2 Librerie `gettext`

`Calcurse` ha il supporto per la localizzazione (i18n da qui in avanti) attraverso l'utilità `gettext` perciò può usare messaggi in molte lingue se compilato con il relativo supporto (detto NLS).

Comunque NLS è opzionale e se non lo si desiderasse è possibile disabilitarlo dando l'opzione `--disable-nls` a `configure` (vedi la sezione Procedura d'installazione). Per verificare che le utilità `gettext` sono installate sul vostro computer cercate il file di header `libintl.h` ad esempio:

    locate libintl.h

Nel caso non troviate il file potete ottenere i sorgenti di `gettext` al seguente indirizzo:

    http://ftp.gnu.org/pub/gnu/gettext/

Nota: Se anche si fosse trovato il file `libintl.h` potrebbe essere necessario specificarne la posizione durante la procedura d'installazione usando l'opzione `--with-libintl-prefix` con `configure`. Questo perché `configure` potrebbe non essere in grado di localizzarlo se fosse stato installato in una posizione inusuale.

## 3.2 Procedura d'installazione

Innanzitutto è necessario scompattare l'archivio contenente i sorgenti:

    tar zxvf calcurse-2.5.tar.gz

Una volta verificati i requisiti e scompattato l'archivio la procedura d'installazione è piuttosto semplice visto che segue i tre passi standard:

1. `./configure`
2. `make`
3. `make install` (potrebbero essere necessari i diritti di root)

Usate `./configure --help` per l'elenco delle opzioni possibili.

# 4. Elementi di base di `calcurse`

## 4.1 Avvio

### 4.1.1 Argomenti della linea di comando

`Calcurse` accetta le seguenti opzioni della linea di comando (sia nel formato breve che in quello lungo):

`-a, --appointment`
  Mostra gli appuntamenti e gli eventi per il giorno corrente e poi esce.

  Nota: il calendario dal quale leggere gli appuntamenti può essere specificato con l'opzione '-c'.

`-c <file>, --calendar <file>`
  Indica il file calendario da usare. Il calendario predefinito è `~/.calcurse/apts` (vedi la sezione `calcurse` files).
`-d <data|num>, --day <data|num>`
  Mostra gli appuntamenti per la data indicata o per il numero indicato per i giorni futuri a seconda del formato dell'argomento. Sono possibili due formati:
  - una data (possible formats described below).
  - un numero 'n'.
  Nel primo caso viene mostrata la lista degli appuntamenti per la data indicata; nel secondo caso viene mostrata la lista per gli 'n' giorni futuri. Ad esempio digitando `calcurse -d 3` verrà mostrata la lista degli appuntamenti di oggi, domani e dopodomani.
  Possible formats for specifying the date are defined inside the general configuration menu (see General options), using the `input_datefmt` variable.

  Nota: così come con l'argomento '-a' il calendario dal quale leggere gli appuntamenti può essere specificato con l'argomento '-c'.

`-D <dir>, --directory <dir>`
  Specify the data directory to use. This option is incompatible with -c. If not specified, the default directory is `'~/.calcurse/'`.
`-h, --help`
  Stampa la versione breve del testo che descrive le opzioni della riga di comando ed esce.
`-i <file>, --import <file>`
  Import the icalendar data contained in `file`.
`-n, --next`
  Stampa il prossimo appuntamento nelle successive 24 ore ed esce. Il tempo stampato indica le ore e i minuti mancanti all'appuntamento.

  Nota: il calendario dal quale leggere gli appuntamenti può essere specificato con l'opzione '-c'.

`-N, --note`
  When used with the '-a' or '-t' flag, also print note content if one is associated with the displayed item.
`-r[num], --range[=num]`
  Print events and appointments for the num number of days and exit. If no num is given, a range of 1 day is considered.
`-s[date], --startday[=date]`
  Print events and appointments from date and exit. If no date is given, the current day is considered.
`-t[num], --todo[=num]`
  Stampa la lista delle 'attività' ed esce. Se viene specificato anche il numero `num` opzionale vengono stampate esclusivamente le attività che hanno priorità pari al numero stesso.

  Nota: il valore della priorità è compreso fra 1 (maggiore priorità) e 9 (minore priorità).

`-v, --version`
  Stampa la versione di `calcurse` ed esce.
`-x[format], --export[=format]`
  Export user data to specified format. Events, appointments and todos are converted and echoed to stdout. Two possible formats are available: ical and pcal (see section Links below). If the optional argument `format` is not given, ical format is selected by default.

  Nota: è possibile reindirizzare lo standard output per salvare i dati su un file con un comando del tipo `$ calcurse --export > my_data.dat`

### 4.1.2 Variabili d'ambiente per l'i18n

`Calcurse` può essere compilato con il supporto per la localizzazione (vedi librerie `gettext`). Di conseguenza, se preferite che i messaggi del programma vengano mostrati nella vostra lingua, innanzitutto verificate che questa sia disponibile nel file `po/LINGUAS`: questo file indica quali lingue sono supportate mostrando il codice di due lettere corrispondente (ad esempio fr indica il francese). Nel caso in cui la vostra lingua non fosse presente sarebbe estremamente apprezzabile il vostro aiuto nella traduzione di `calcurse` (vedi la sezione Come contribuire).

Se invece la vostra lingua è presente avviate `calcurse` con il seguente comando:

    LC_ALL=fr_FR calcurse

dove fr_FR è il nome della localizzazione d'esempio che deve essere sostituita dal nome della localizzazione desiderata.

È anche necessario indicare il set di caratteri da usare perché in alcuni casi gli accenti e altri caratteri simili non vengono mostrati correttamente. Questo set di caratteri è indicato all'inizio del file po corrispondente alla localizzazione prescelta: ad esempio nel file fr.po viene indicato l'uso del set iso-8859-1 e di conseguenza dovete avviare `calcurse` con il seguente comando:

    LC_ALL=fr_FR.ISO8859-1 calcurse

### 4.1.3 Altre variabili d'ambiente

Le seguenti variabili d'ambiente modificano il funzionamento di `calcurse`:

`VISUAL`
  Indica l'editor usato per scrivere le note.
`EDITOR`
  Se non viene impostata la variabile `VISUAL` viene usato l'editor indicato dalla variabile `EDITOR` come editor di default; se non viene definita nessuna variabile viene usato l'editor `/usr/bin/vi`.
`PAGER`
  Specifica il visualizzatore di default usato per leggere le note. Se questa variabile non viene impostata viene usato `/usr/bin/less`.

## 4.2 Interfaccia utente

### 4.2.1 Modalità non-interattiva

Quando `calcurse` viene avviato con una delle opzioni `-a`, `-d`, `-h`, `-n`, `-t`, `-v`, `-x` funziona nella modalità non-interattiva; questo significa che dopo aver mostrato le informazioni richieste `calcurse` esce riportando al prompt della shell.

In questo modo è possibile ad esempio aggiungere una linea siffatta `'calcurse --todo --appointment'` nel file di avvio della shell per mostrare al logon un elenco dei compiti e degli appuntamenti previsti per la data odierna.

### 4.2.2 Modalità interattiva

Note: Key bindings that are indicated in this manual correspond to the default ones, defined when `calcurse` is launched for the first time. If those key bindings do not suit user's needs, it is possible to change them within the keys configuration menu (see key bindings).

Se viene avviato senza argomenti oppure solo con l'opzione `'-c'` `calcurse` si avvia nella modalità interattiva; in questa modalità viene mostrata un'interfaccia contenente tre differenti sezioni (fra le quali è possibile passare con il tasto 'TAB'), una barra di notifica ed una barra di stato (vedi la figura sotto).

     Sezione appuntamenti ---.                   .--- Sezione calendario
                             |                   |
                             v                   v
     +------------------------------------++----------------------------+
     |            Appointments            ||          Calendar          |
     |------------------------------------||----------------------------|
     |                  (|) April 6, 2006 ||         April 2006         |
     |                                    ||Mon Tue Wed Thu Fri Sat Sun |
     |                                    ||                      1   2 |
     |                                    ||  3   4   5   6   7   8   9 |
     |                                    || 10  11  12  13  14  15  16 |
     |                                    || 17  18  19  20  21  22  23 |
     |                                    || 24  25  26  27  28  29  30 |
     |                                    ||                            |
     |                                    |+----------------------------+
     |                                    |+----------------------------+
     |                                    ||            ToDo            | Sezione
     |                                    ||----------------------------| attività
     |                                    ||                            |     |
     |                                    ||                            |     |
     |                                    ||                            |<--.
     |                                    ||                            |
     +------------------------------------++----------------------------+
     |---[ Mon 2006-11-22 | 10:11:43 ]---(apts)----> 01:20 :: lunch <---|<--.
     +------------------------------------------------------------------+ barra di notifica
     | ? Help      R Redraw      H/L -/+1 Day      G GoTo      C Config |
     | Q Quit      S Save        J/K -/+1 Week     Tab Chg View         |<-.
     +------------------------------------------------------------------+    |
                                                                             |
                                                                     barra di stato

La prima sezione rappresenta un calendario dove è possibile evidenziare una particolare data; la seconda sezione contiene la lista degli eventi e degli appuntamenti per la data evidenziata; ed infine la terza sezione contiene la lista delle attività non assegnate a nessun giorno particolare.

Nella sezione degli appuntamenti si può notare il segno '(|)' accanto alla data indicante la fase lunare secondo la seguente tabella:

'`|)` ':
  primo quarto
'`(|)` ':
  plenilunio
'`(|` ':
  terzo quarto
'`|` ':
  novilunio
nessun segno:
  la fase della luna non corrisponde a nessuna di queste

Nell'ultima riga dello schermo si trova la barra di stato che indica le azioni possibili e le relative scorciatoie di tastiera.

Al di sopra della barra di notifica si trova la barra di notifica che indica (da destra a sinistra): la data e l'ora correnti, il file calendario attualmente in uso (apts nella figura precedente, che è il nome di default, vedi la prossima sezione) e il prossimo appuntamento nelle successive 24 ore; nella figura d'esempio viene indicato l'appuntamento per il pranzo fra un'ora e venti.

Nota: alcune azioni, quali modifica o aggiunta di una voce, richiedono l'inserimento del testo mediante l'editor a linea compreso nel programma.

All'interno di questo editor se appare una linea maggiore dell'ampiezza dello schermo vengono mostrati i caratteri '>', '*', o '<' nell'ultima colonna nel caso ci siano altri caratteri successivamente, prima o dopo della posizione corrente; è inoltre possibile scorrere orizzontalmente.

Inoltre alcuni comandi sono collegati ad alcune scorciatoie. Di seguito sono elencati alcuni comandi (dove '^' indica per il tasto Control):

`^a`:
  sposta il cursore all'inizio della riga di input
`^b`:
  sposta il cursore indietro
`^d`:
  cancella il carattere davanti
`^e`:
  sposta il cursore alla fine della riga di input
`^f`:
  sposta il cursore avanti
`^h`:
  cancella il carattere dietro
`^k`:
  cancella dal cursore fino alla fine della riga di input
`ESCAPE`:
  cancella la modifica

## 4.3 File di `calcurse`

Al primo avvio di `calcurse` viene creata nella vostra directory `$HOME`

(or in the directory you specified with the -D option)
questa gerarchia di directory:

      $HOME/.calcurse/
               |___notes/
               |___conf
               |___keys
               |___apts
               |___todo

`notes/`:
  questa sotto-directory contiene le descrizioni delle note allegate agli appuntamenti, eventi o attività. Per ogni nota viene creato un file di testo con un nome creato dalla funziona mkstemp(3) che dovrebbe essere unico ma senza alcuna correlazione evidente con la descrizione dell'oggetto al quale viene collegato.
`conf`:
  questo file contiene le configurazioni dell'utente
`keys`:
  this file contains the user-defined key bindings
`apts`:
  questo file contiene gli eventi e gli appuntamenti dell'utente
`todo`:
  questo file contiene l'elenco delle attività

## 4.4 Import/Export capabilities

The import and export capabilities offered by `calcurse` are described below.

### 4.4.1 Import

Data in icalendar format as described in the rfc2445 specification (see links section below) can be imported into calcurse. Calcurse ical parser is based on version 2.0 of this specification, but for now on, only a subset of it is supported.

The following icalendar properties are handled by calcurse:

- `VTODO` items:
  "PRIORITY", "VALARM", "SUMMARY", "DESCRIPTION"
- `VEVENT` items:
  "DTSTART", "DTEND", "DURATION", "RRULE", "EXDATE", "VALARM", "SUMMARY", "DESCRIPTION"

The icalendar "DESCRIPTION" property will be converted into calcurse format by adding a note to the item. If a "VALARM" property is found, the item will be flagged as important and the user will get a notification (this is only applicable to appointments).

Here are the properties that are not implemented:

- negative time durations are not taken into account (item is skipped)
- some recurence frequences are not recognize:
  "SECONDLY" / "MINUTELY" / "HOURLY"
- some recurrence keywords are not recognized (all those starting with 'BY'):
  "BYSECOND" / "BYMINUTE" / "BYHOUR" / "BYDAY" / "BYMONTHDAY"
  "BYYEARDAY" / "BYWEEKNO" / "BYMONTH" / "BYSETPOS"
  plus "WKST"
- the recurrence exception keyword "EXRULE" is not recognized
- timezones are not taken into account

### 4.4.2 Export

Two possible export formats are available: `ical` and `pcal` (see section Links below to find out about those formats).

## 4.5 Aiuto in linea

In ogni momento è possibile richiedere il sistema dell'aiuto in linea premendo il tasto '?': una volta avviato si possono richiedere le informazioni su un certo comando premendo il tasto relativo.

# 5. Opzioni

Tutti i parametri di `calcurse` sono configurabili dal menù Configuration accessibile premendo il tasto 'C' che porta ad un sotto-menù con quattro possibili scelte: premendo ancora 'C' si raggiunge alla configurazione dello schema dei colori; premendo 'L' è possibile scegliere la configurazione dell'interfaccia dello schermo principale di `calcurse` (praticamente le posizioni relative dei tre pannelli); premendo 'G' è possibile modificare alcune opzioni generali; pressing 'K' opens the key bindings configuration menu, ed infine premendo 'N' è possibile modificare le impostazioni della barra di notifica.

## 5.1 Opzioni generali

Queste opzioni controllano il comportamento generale di `calcurse`:

`auto_save` (default: yes)
  Questa opzione permette di salvare automaticamente i dati dell'utente all'uscita del programma.

  attenzione: i dati non verranno salvati automaticamente se impostato a no. Questo comporta che sarà necessario premere 'S' per salvare i dati eventualmente modificati.

`periodic_save` (default: 0)
  If different from '0', user's data will be automatically saved every periodic_save minutes. When an automatic save is performed, two asterisks (i.e. '`**`') will appear on the top right-hand side of the screen).
`confirm_quit` (default: yes)
  Se impostato a yes è necessario confermare l'uscita dal programma; altrimenti premendo 'Q' `calcurse` esce senza chiedere conferma.
`confirm_delete` (default: yes)
  Se viene impostata a yes premendo 'D' per cancellare una voce (che può essere un'attività, un appuntamento, o un evento) è necessario confermare. Altrimenti non è necessaria alcuna conferma.
`skip_system_dialogs` (default: no)
  Impostando questa opzione a yes non verranno più mostrati i messaggi di sistema riguardanti il salvataggio e la lettura dei dati, utile per velocizzare le operazioni di input e output.
`skip_progress_bar` (default: no)
  Se impostato a yes non verrà visualizzata la barra di avanzamento che indica il salvataggio in corso dei files insieme al file che viene salvato (vedi la sezione `calcurse` files).
`week_begins_on_monday` (default: yes)
  Con questa opzione è possibile indicare con quale giorno, domenica o lunedì, far iniziare la settimana nella finestra del calendario.
`output_datefmt` (default: %D)
  This option indicates the format to be used when displaying dates in non-interactive mode. Using the default values, dates are displayed the following way: mm/dd/aa. You can see all of the possible formats by typing `man 3 strftime` inside a terminal.
`input_datefmt` (default: 1)
  This option indicates the format that will be used to enter dates in calcurse. Four choices are available:
  1. mm/dd/yyyy
  2. dd/mm/yyyy
  3. yyyy/mm/dd
  4. yyyy-mm-dd

## 5.2 Key bindings

One can define it's own keybindings within the 'Keys' configuration menu. The default keys look like the one used by the `vim` editor, especially the displacement keys. Anyway, within this configuration menu, users can redefine all of the keys available from within calcurse's user interface.

To define new keybindings, first highlight the action to which it will apply. Then, delete the actual key binding if necessary, and add a new one. You will then be asked to press the key corresponding to the new binding. It is possible to define more than one key binding for a single action.

An automatic check is performed to see if the new key binding is not already set for another action. In that case, you will be asked to choose a different one. Another check is done when exiting from this menu, to make sure all possible actions have a key associated with it.

The following keys can be used to define bindings:

- lower-case, upper-case letters and numbers, such as 'a', 'Z', '0'
- CONTROL-key followed by one of the above letters
- escape, horizontal tab, and space keys
- arrow keys (up, down, left, and right)
- 'HOME' and 'END' keys

While inside the key configuration menu, an online help is available for each one of the available actions. This help briefly describes what the highlighted action is used for.

## 5.3 Color themes

Il tema del colore di `calcurse` può essere personalizzato a seconda delle necessità dell'utente. Nella pagina di configurazione è possibile cambiare i colori dello sfondo e del primo piano del tema predefinito: usando i tasti cursore o i tasti di movimento definiti per lo spostamento in `calcurse`, il tasto 'X' o lo spazio per selezionare il colore l'utente può vedere l'anteprima del tema prescelto. È anche possibile mantenere i colori predefiniti del terminale selezionando la relativa opzione nella lista.

Il tema scelto viene applicato ai bordi del pannello, ai titoli, alle indicazioni delle scorciatoie da tastiera e in generale alle informazioni mostrate nella barra di stato. Fra gli altri è anche presente un tema in bianco e nero per usarlo sui terminali monocromatici.

Nota: i colori possono anche non essere supportati a seconda del tipo di terminale e dal valore della variabile d'ambiente `$TERM`; nel caso in cui il tipo di terminale non li supportasse apparirà un messaggio d'errore provando a cambiare i colori. Se sapete che il vostro terminale supporta i colori ma questi non appaiono provate ad impostare la variabile `$TERM` ad un altro valore (come ad esempio xterm-xfree86).

## 5.4 Configurazione del layout

Il layout è la posizione dei pannelli all'interno dello schermo di `calcurse`. Il layout predefinito è così disposto: il pannello del calendario in alto a destra, il pannello delle attività in basso a destra e il pannello degli appuntamenti sul lato sinistro dello schermo (vedi la figura della sezione Modo interattivo). Scegliendo un altro layout è possibile personalizzare l'aspetto di `calcurse` a seconda delle necessità.

## 5.5 Impostazioni della barra delle notifiche

Le seguenti opzioni modificano il comportamento della barra delle notifiche:

`notify-bar_show` (default: yes)
  Questa opzione imposta la visibilità della barra delle notifiche.
`notify-bar_date` (default: %a %F)
  Questa opzione imposta il formato utilizzato per la data mostrata all'interno della barra delle notifiche. È possibile vedere tutti i possibili formati digitando `man 3 strftime` all'interno di un terminale.
`notify-bar_time` (default: %T)
  Questa opzione imposta il formato utilizzato per mostrare l'orario all'interno della barra delle notifiche. È possibile vedere tutti i possibili formati digitando `man 3 strftime` all'interno di un terminale.
`notify-bar_warning` (default: 300)
  Nel caso sia presente un appuntamento marcato come 'important' nell'intervallo definito (in secondi) nella variabile 'notify-bar_warning' viene mostrata lampeggiante la descrizione dell'appuntamento stesso all'interno della barra delle notifiche. Inoltre viene eseguito il comando definito dall'opzione `notify-bar_command`. In questo modo è possibile essere avvisati dell'avvicinarsi di un appuntamento.
`notify-bar_command` (default: printf '\a')
  Questa opzione imposta il comando che deve essere avviato all'avvicinarsi di un appuntamento marcato come 'important'. Il comando viene passato alla shell che lo deve interpretare. Per sapere quale tipo di shell è in uso verificare il valore della variabile d'ambiente `$SHELL`; nel caso questa variabile non sia impostata viene usata `/bin/sh`.

  Esempio: Ammesso che sul sistema in uso sia disponibile il comando `mail` il seguente comando permette di ricevere la notifica con un messaggio di posta elettronica di un appuntamento imminente (la descrizione dell'appuntamento viene inclusa anche nel corpo del messaggio):

  `calcurse --next | mail -s "[calcurse] upcoming appointment!" user@host.com`

# 6. Bachi conosciuti

L'evidenziazione delle voci appare scorretta usando calcurse con un tema bianco e nero insieme alla variabile `$TERM` impostata a xterm-color. Per risolvere questo baco, così come affermato da Thomas E. Dickey (manutentore di `xterm`), si deve usare il valore xterm-xfree86 per la variabile `$TERM`:

> "The xterm-color value for $TERM is a bad choice for XFree86 xterm because it is commonly used for a terminfo entry which happens to not support bce. Use the xterm-xfree86 entry which is distributed with XFree86 xterm (or the similar one distributed with ncurses)."

# 7. Segnalazione dei bachi e feedback

Siete invitati a segnalare i bachi e quant'altro a:

    calcurse .at. culot .dot. org

oppure direttamente all'autore:

    frederic .at. culot .dot. org

# 8. Come contribuire

Se siete interessati a collaborare al progetto dovreste prima di tutto segnalare pregi e difetti oppure funzionalità mancanti in `calcurse`. Attualmente è possibile partecipare alle traduzioni dei messaggi e del manuale di `calcurse`

Nota: ogni aiuto ad aumentare il supporto all'internazionalizzazione di `calcurse` è benvenuto ma prima di cominciare scrivete a `calcurse-i18n .at. culot .dot. org` per evitare di duplicare gli sforzi.

## 8.1 Tradurre la documentazione

La directory doc/ del pacchetto dei sorgenti contiene anche le versioni già tradotte del manuale di `calcurse`; se il manuale non è ancora stato tradotto nella vostra lingua ogni aiuto in tal senso sarà più che apprezzato.

Per fare questo è sufficiente copiare il file contenente il manuale con il nome `manual_XX.html` dove XX identifica il vostro linguaggio: questo file deve essere tradotto ed inviato all'autore (vedi Riportare i bachi e feedback) così che possa essere incluso nel successivo rilascio di `calcurse`.

## 8.2 `calcurse` i18n

Le utilità di `calcurse` producono messaggi multi-lingua, così come ricordato in precedenza: questa sezione contiene informazioni sulla traduzione di questi messaggi nella vostra lingua; queste informazioni sono però incomplete in quanto sono concentrate sull'uso di `gettext` per `calcurse`. Per informazioni maggiormente approfondite e per comprendere il Grande Disegno che sottintende al Supporto delle Lingue fate riferimento al manuale di `GNU gettext`:

    http://www.gnu.org/software/gettext/manual/

Fondamentalmente sono tre le figure coinvolte nel processo di traduzione: gli sviluppatori, i coordinatori per la lingua e i traduttori. Dopo una rapida scorsa al funzionamento del meccanismo verrà illustrato il compito dei traduttori.

### 8.2.1 Panoramica

Per essere in grado di mostrare i messaggi nel linguaggio definito dall'utente sono necessari due passaggi: l'internazionalizzazione (i18n) e la localizzazione (l10n).

i18n è la possibilità per `calcurse` di supportare svariati linguaggi che viene inserita dagli sviluppatori, i quali indicano come traducibili i messaggi e prevedono un sistema per mostrarli tradotti mentre il programma sta funzionando.

l10n è invece il rendere `calcurse` così programmato adatto al linguaggio definito dall'utente traducendo le stringhe predefinite dagli sviluppatori e impostando le variabili d'ambiente così che `calcurse` sia in grado di mostrare le stringhe tradotte.

Le stringhe traducibili vengono innanzitutto indicate come tali nei sorgenti `C`, poi raccolte in un file modello (calcurse.pot - la cui estensione pot significa portable object template). Il contenuto del file modello viene successivamente inserito nei file per la traduzione per ogni linguaggio (ad esempio fr.po per il francese, la cui estensione po sta per portable object, cioè leggibile e modificabile dagli umani). Ogni gruppo di traduzione prende questo file, ne traduce le stringhe e poi le invia indietro agli sviluppatori. Al momento della compilazione viene prodotta una versione binaria di questo file per ragioni d'efficienza (nel nostro esempio fr.mo - dove mo sta per machine object, cioè leggibile dai programmi) e successivamente installato. A questo punto `calcurse` sarà in grado di usare questo file traducendo le stringhe a seconda delle variabili d'ambiente impostate dall'utente.

### 8.2.2 Compiti dei traduttori

Questi sono i passaggi da seguire qualora si volesse iniziare una nuova traduzione:

- Innanzitutto si deve trovare quale sia la sigla che individua il linguaggio prescelto: ad esempio 'fr_FR' o più semplicemente 'fr' indica il francese. Questo sarà il valore a cui impostare la e variabile d'ambiente `LC_ALL` perché il programma mostri correttamente le stringhe tradotte (vedi Variabili d'ambiente per l'i18).
- Poi si dovrà creare un nuovo file 'po' all'interno della directory po/ usando un file modello con il seguente comando: `'msginit -i calcurse.pot -o fr.po -l fr --no-translator'`. Nel caso in cui il comando `msginit` non sia disponibile sul sistema in uso copiate semplicemente il file calcurse.pot con il nome (nel nostro esempio) fr.po e modificatene gli header a mano.

A questo punto è possibile iniziare la traduzione del file fr.po appena creato.

### 8.2.3 I file po

Il formato dei file po è relativamente semplice essendo composti di quattro componenti:

1. Linee locations: indicano la posizione in cui si trovano le stringhe (nome del file e numero di linea) nel caso sia necessario avere un po' di contesto.
2. Linee msgid: le stringhe da tradurre.
3. Linee msgstr: le stringhe tradotte.
4. Linee che iniziano con '#': commenti (alcuni con significati speciali come spiegato più avanti).

Praticamente è necessario tradurre le suddette linee marcate con msgstr con la traduzione delle linee marcate con msgid

Alcune note:

Stringhe fuzzy
  Potrete trovare alcune stringhe marcate con un commento `"#, fuzzy"`, stringhe che `calcurse` non userà finché non verrà preso qualche provvedimento. Questo perché la stringa in questione è stata cambiata nei sorgenti del programma oppure perché `gettext` ha tentato di 'indovinarne' il significato basandosi su altre stringhe simili già presenti nel file. Questo comporta la necessità di controllare la traduzione. Alcune volte la stringa originale è stata modificata per correggere un errore ortografico; in questo caso non è necessaria alcuna azione. Altre volte però la traduzione non è più corretta per cui è necessario rivederla. Una volta che la traduzione può essere considerata corretta è sufficiente rimuovere la linea `"#, fuzzy"` e questa verrà usata normalmente.
Stringhe c-format e sequenze speciali
  Alcune stringhe potranno avere il commento `"#, c-format"`. Questo indica che una componente della stringa ha un particolare significato per il programma e che quindi avrà lasciata inalterata. Ad esempio la sequenze come `"%s"` vengono sostituite dal programma con altre stringhe. Ci sono anche le sequenze del tipo `\n` e `\t` che non devono essere modificate perché la prima indica un ritorno a capo e la seconda una tabulazione.
Le traduzioni possono avere ritorno a capo
  Se le linee sono troppo lunghe possono essere interrotte così:

      	msgid ""
      	"some very long line"
      	"another line"

Header dei file po
  Nelle prime righe del file po la prima stringa costituisce un header contenente alcune informazioni che devono essere completate. Questi header sono:

      	"Content-Type: text/plain; charset=utf-8\n"

  È anche necessario compilare il campo 'Last-Translator' di modo che altri potenziali collaboratori possano contattarvi per unire gli sforzi o per segnalare errori e correzioni. È possibile usare anche un soprannome o aggiungere un indirizzo di posta elettronica come ad esempio:

      	"Last-Translator: Frederic Culot <frederic@culot.org>\n"

Commenti
  Aggiungere commenti (indicati dalle linee che iniziano con il carattere '#') può essere un valido modo per indicare problemi o difficoltà trovate nella traduzione ad altri collaboratori o in generale ai partecipanti alla traduzione.
Dimensione delle stringhe
  `Calcurse` è un programma per la console scritto usando le librerie 'curses' per cui può essere fortemente limitato dalle dimensioni (in particolare dal numero di colonne) del terminale, limitazioni che è necessario tenere a mente mentre si traduce. Spesso una stringa deve essere tutta compresa in una singola linea (la cui dimensione standard è di 80 caratteri). Ponete attenzione e verificate che la vostra traduzione si adatti alla posizione prevista sullo schermo.
Alcuni utili strumenti
  Il file po ha una struttura estremamente semplice per cui può essere modificato anche direttamente con un normale editor di testi; in ogni caso è possibile anche usare degli strumenti specializzati:
  - `poEdit` (http://www.poedit.org/)
  - `KBabel` (http://i18n.kde.org/tools/kbabel/)
  - `GTranslator` (http://gtranslator.sourceforge.net/)
  - `Emacs` po mode
  - `Vim` po mode
E per chiudere
  Mi auguro che troviate soddisfazione nel contribuire ad un mondo maggiormente internazionalizzato. :) Se avete altre domande non esitate a contattarmi all'indirizzo frederic .at. culot .dot. org.

# 9. Link

Questa sezione contiene link e riferimenti che possono risultare interessanti.

## 9.1 Homepage di `calcurse`

L'homepage di `calcurse` è

    http://culot.org/calcurse

## 9.2 Mailing list degli annunci di `calcurse`

Se siete interessati al progetto e volete ricevere gli annunci relativi ai rilasci delle nuove versioni (o all'inserimento di nuove funzionalità) potete iscrivervi alla mailing list degli annunci di `calcurse`.

Per iscriversi alla lista inviate un messaggio all'indirizzo calcurse-announce .at. culot .dot. org con "subscribe" nel soggetto.

## 9.3 Feed rss di `calcurse`

Un'altra possibilità per ricevere questi annunci è l'iscrizione al feed RSS all'indirizzo:

    http://culot.org/calcurse/news_rss.xml

Questo feed viene aggiornato ogni volta viene pubblicata una nuova versione con la descrizione delle funzionalità aggiunte.

##
9.4 Other links

You may want to look at the ical format specification (rfc2445) at:

    http://tools.ietf.org/html/rfc2445

The pcal project page can be found at:

    http://pcal.sourceforge.net/

# 10. Ringraziamenti

È giunto il momento per ringraziare le persone senza le quali questo programma non esisterebbe. Questa è la lista:

- Alex per le sue patch, per il suo aiuto e consigli per la programmazione in `C`
- Gwen per il testing e per i consigli in generale sulle migliorie da apportare a `calcurse`
- Herbert per aver impacchettato `calcurse` per FreeBSD
- Zul per aver impacchettato `calcurse` per NetBSD
- Wain, Steffen e Ronald per aver impacchettato `calcurse` per Archlinux
- Kevin, Ryan, e fEnIo per aver impacchettato `calcurse` per Debian e Ubuntu
- Pascal per aver impacchettato `calcurse` per Slackware
- Alexandre e Markus per aver impacchettato `calcurse` per Mac OsX e Darwin
- Igor per aver impacchettato `calcurse` per ALT Linux
- Joel per il suo script calendar che ha inspirato la vista a calendario per `calcurse`
- Michael Schulz e Chris M. per la traduzione in tedesco di `calcurse` e del manuale
- Jose Lopez per la traduzione in spagnolo di `calcurse` e del manuale
- Neil Williams per la traduzione inglese
- Tony per la sua patch che ha contribuito a migliorare la funzione recur_item_inday() , and for implementing the date format configuration options
- Jeremy Roon per la traduzione olandese
- Leandro Noferini per la traduzione italiana
- Erik Saule for its patch implementing the '-N', '-s', '-r' and '-D' flags
- le persone che hanno scritto software che mi piace e che mi ha inspirato, e specialmente:
  - `vim` per i tasti di movimento
  - `orpheus` e `abook` per la documentazione
  - `pine` e `aptitude` per l'interfaccia utente testuale

Ed infine ancora molti ringraziamenti a tutti gli utenti di `calcurse` che mi hanno inviato i loro commenti.