Capture keypresses on Windows
Nessuno ha ancora preso questa issue.
- Lingua principale
- C
- Stelle
- 40.4k
- Fork
- 8.1k
- Merge medio
- 2g 13h
- PR unite (30g)
- 96
Descrizione
Description
Some tutorials and packages show it is possible to capture and handle keypresses on terminals, but only available on *nix systems
The example below shows a commonly see implementation.
<?php
$stdin = fopen('php://stdin', 'r');
system('stty cbreak -echo');
stream_set_blocking($stdin, false);
while (1) {
$keypress = fgets($stdin);
if ($keypress) {
echo 'Key pressed: ' . $keypress . PHP_EOL;
}
}
EDIT:
This example captures keys presses in the open terminal, except: shift, alt, control, caps lock, meta and fn
This example above does not work on Windows.
The intention is to capture a single keypress, of course, without typing enter. This would make possible things like terminal games and many command line apps, working for any O.S.
This was discussed in the past here: https://bugs.php.net/bug.php?id=34972
CMB gave some hope this would be implemented, and so, not a bug at all.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia esaminando la discussione storica in bugs.php.net/bug.php?id=34972 e la gestione esistente dell’input da terminale in php-src. Determina il punto di ingresso Windows appropriato e come deve comportarsi l’acquisizione di una singola pressione di tasto nei sistemi operativi supportati. Il lavoro è completato quando esiste un modo documentato e testato, multipiattaforma, per leggere un tasto senza richiedere Enter.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- c, php
- Ambito
- cli, operating-systems
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100