2009-09-11 17 views
16

Vorrei scrivere un semplice programma C che eseguirà diverse azioni in base agli eventi "key down" e "key up". Questo programma verrà eseguito dall'interno rxvt.Ricezione di key press e key release event nelle applicazioni per terminale Linux?

Quale libreria o meccanismo dovrei utilizzare per accedere a pressioni e rilasci di tasti? È vero che la lettura di /dev/tty fornirà solo rilasci chiave? Questo vale anche per termcap, terminfo, ncurses e slang? C'è un modo per ottenere questo da un'applicazione terminale?

risposta

3

Non credo che ncurses funzionerà. Il link che Basilevs ha fornito parla del tasto "freccia su" e del tasto "freccia giù", non di un tasto stampa e rilascio.

4

Questo non funzionerà nel caso generale. I terminali ANSI (da cui discendono tutti gli emulatori) rappresentano solo gli eventi chiave di "stampa". Non registrano gli eventi down/up in modo indipendente.

Se è necessario accedere a eventi di tastiera di basso livello, l'ambiente corretto è in realtà un programma GUI. Anche un'applicazione web avrà un accesso più pulito agli eventi chiave rispetto a un terminale.

7

I seguenti collegamenti possono essere di aiuto nell'utilizzo della modalità raw della tastiera che consente di accedere agli eventi della tastiera piuttosto che ai soli rilasci di chiave.

  1. Questa Linux Journal article
  2. Questo article su SourceForge
  3. E questo HOWTO per quando tutto va male

modalità Raw ha lo svantaggio che si deve fare la propria conversione da scannerizza i codici per i caratteri.

+2

+1 Grazie per questa risposta, avevo bisogno di accedere con la tastiera non elaborata in un programma terminale e questa era la soluzione! Ma si dovrebbe ricordare che usando l'accesso da tastiera non elaborato, il programma non si "comporta" come un programma terminale classico. Ad esempio quando lo si esegue su una macchina remota, non è possibile registrare gli eventi chiave. Tienilo a mente. – leemes