C'è un modo per il mio binario di reagire ad alcuni tasti di scelta rapida globali in Linux?

StackOverflow https://stackoverflow.com/questions/74790

  •  09-06-2019
  •  | 
  •  

Domanda

È possibile ascoltare un determinato tasto di scelta rapida (ad esempio:Ctrl-IO) e quindi eseguire un'azione specifica?La mia applicazione è scritta in C, funzionerà solo su Linux e non ha una GUI.Ci sono biblioteche che aiutano in questo tipo di compito?

MODIFICARE:ad esempio, amarok ha scorciatoie globali, quindi ad esempio se assegni una combinazione di tasti a un'azione (diciamo Ctrl-+, Ctrl E +) è possibile eseguire l'azione premendo i tasti.Se mappassi Ctrl-+ all'azione di aumento del volume, ogni volta che premo Ctrl-+ il volume dovrebbe aumentare di una certa quantità.

Grazie

È stato utile?

Soluzione

Quanto devono essere globali i tasti di scelta rapida?È sufficiente che siano globali per una sessione X?In tal caso dovresti essere in grado di aprire una connessione Xlib e ascoltare gli eventi di cui hai bisogno.

Normalmente gli eventi della tastiera in X vengono consegnati alla finestra che attualmente ha il focus e propagati nella gerarchia finché non vengono gestiti.Chiaramente questo non è ciò che vogliamo.Dobbiamo elaborare l'evento prima che qualsiasi altra finestra possa accedervi.Dobbiamo chiamare XGrabKey nella finestra principale con il codice chiave e i modificatori del nostro tasto di scelta rapida per ottenere ciò.

Ho trovato un buon esempio Qui.

Altri suggerimenti

Penso smoofra è sulla strada giusta qui;stai cercando di registrare un tasto di scelta rapida globale con X in modo da poter intercettare la pressione dei tasti e intraprendere l'azione appropriata. Xlib è probabilmente quello che vuoi, e XGrabKey è la funzione, penso.

Non è facile da imparare, temo;Ho individuato questo esempio che sembra utile: TinyWM.Ho trovato anche un esempio utilizzando Java/JNI (accedendo alla stessa funzione Xlib sottostante).

Dovresti guardare il codice sorgente di xbindkeys.

La programmazione di Xlib è piuttosto arcana, la documentazione è difficile da trovare e ci sono sottili problemi di portabilità.Faresti meglio a copiare un codice temprato dalla battaglia.

Un modo per farlo è fare in modo che l'applicazione sia in ascolto su una determinata porta, o file socket, per le richieste in entrata.

Quindi puoi scrivere una piccola applicazione client che si connette a quella porta o file socket e invia comandi all'applicazione in esecuzione.

Quindi puoi configurare il tuo gestore di finestre per associare determinate combinazioni di tasti per avviare la tua piccola app client.

In UNIX, l'accesso a una shell della riga di comando avviene tramite a terminale.Ciò ci riporta ai giorni in cui le persone accedevano ai loro grandi computer condivisi letteralmente tramite terminali collegati direttamente alle macchine (ad es.tramite cavo seriale).

In effetti, il programma 'xterm' o qualunque derivato usi sulla tua macchina UNIX viene propriamente chiamato a emulatore di terminale - si comporta (sia dal tuo punto di vista che da quello del sistema operativo) in modo molto simile a uno di quei terminali vecchio stile.

Ciò rende leggermente complicato gestire l'input in modi interessanti, poiché esistono molti tipi diversi di terminali e il tuo sistema UNIX deve conoscere le capacità di ciascun tipo.Queste capacità erano tradizionalmente archiviate in un file termcap file e penso che utilizzino sistemi più moderni terminfo Invece.Tentativo

man 5 terminfo

su un sistema Linux per ulteriori informazioni.

Ora, la buona notizia è che non è necessario fare troppi problemi con le funzionalità del terminale, ecc.per avere un'applicazione a riga di comando che fa cose interessanti con funzionalità di input o finestre.C'è una biblioteca, maledizioni, questo aiuterà.Cercare

man 3 ncurses

sul tuo sistema Linux per ulteriori informazioni.Probabilmente sarai in grado di trovare un tutorial decente sull'uso delle maledizioni online.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top