php / php/php-src

Capture keypresses on Windows

Aperta
#12,939 3 commenti 29 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Category: Streams Feature OS: Windows
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

image

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

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. 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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.