php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 22.09.2011, 16:37  
Erfahrener Benutzer
 
Registriert seit: 28.11.2008
Beiträge: 160
PHP-Kenntnisse:
Fortgeschritten
McSodbrenner befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] ANSI Escape Sequenzen in Shell-Script

Hi,

um meine tägliche Arbeit etwas zu beschleunigen, habe ich mir ein Shell-Script mit PHP geschrieben. Dieses Shell-Script ist interaktiv und verarbeitet die Eingabe bei jedem Tastendruck. Gelöst ist das so:

PHP-Code:
// set terminal to return single chars 
`stty -icanon`;

// set terminal to hide input
`stty -echo`;

// main loop
while ($c fread(STDIN1)) {
    ... 
mache irgendetwas

Einzelne Tastatureingaben kriege ich damit, nur halt Escape-Sequenzen nicht. Ich kann zwar nach [ESC] dann das "[" auslesen und weiß dann, dass danach die eigentliche Anweisung kommt, allerdings können die Escape-Sequenzen ja unterschiedliche Längen haben. Und somit weiß ich dann nicht, wie weit ich lesen muss.

Gibt es eine Möglichkeit, die Sequenz auszulesen, ohne dass ich alle bekannten Sequenzen zum Abgleich irgendwo hinterlegen muss?

Danke und Gruß,
Christoph
McSodbrenner ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.09.2011, 10:10  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Na dann mal viel Freude. So ziemlich jede Terminalemulation kocht da gern mal ihr eigenes Süppchen.

Prinzipiell kommst Du auf die Art hier zumindest auf der echten Konsole schon mal ganz gut weiter:

PHP-Code:
function handleRegularKey($character)
{
  echo 
"Hey, somebody pressed the key for \"{$character}\"\n";
}

function 
handleEscape($sequence)
{
  static 
$i=0;
  switch(
$sequence)
  {
    case 
'1b 5b 44'$ev='LEFT BUTTON';break;
    case 
'1b 5b 43'$ev='RIGHT BUTTON';break;
    case 
'1b 5b 42'$ev='DOWN BUTTON';break;
    case 
'1b 5b 41'$ev='UP BUTTON';break;
    default: 
$ev=$sequence;break;
  }
  echo 
'#',$i++,": got button event: {$ev}\n";
}

// main loop 
while ($c fread(STDIN1)) { 
   
// Wenn ESC:
   
if($c==chr(27)){
     
$escBuffer'1b';
     
$ctrl=false;
     
$cnt=0;

     do{
       
$oc=ord(fread(STDIN,1));
       
$cnt++;
       
// Wenn Kontroll-Sequence
       
if($cnt==&& $oc==0x5b){
         
$ctrl=true;
         
$escBuffer.=' 5b';
         
$oc=ord(fread(STDIN,1));
         
$cnt++;
       }
       
$escBuffer.=' '.dechex($oc);
       
/*
         // 0x20 bis 0x2f sind Füllzeichen
         if($oc>=0x20 && $oc<=0x2f)
           echo 'Intermediate';
         // Bei Kontrollsequenzen sind die Zeichen 0x30 bis 0x3f als Parameter zu verstehen
         if($ctrl && $oc>=0x30 && $oc<=0x3f)
           echo 'Kontrollsequence parameter';
       */
       // Das letzte Zeichen für eine Kontrollsequenz liegt zwischen 0x40 und 0x7e
       // und bei normalen Sequenzen zwischen 0x30 und 0x7e
       
if(((!$ctrl && $oc>=0x30) || ($ctrl && $oc>=0x40)) && $oc<=0x7e)
         break;
     }while(
true);
     
// Alle Zeichen der Escape-Sequenz wurden verarbeitet, also kann der Handler 
     // aufgerufen werden.
     
handleEscapeSequence($escBuffer);     
   }else{
     
handleRegularKey($c);
   }

(Achtung - ungetestet und nur aus nem Code von vor ewigen Zeiten portiert.)

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 27.09.2011, 09:01  
Erfahrener Benutzer
 
Registriert seit: 28.11.2008
Beiträge: 160
PHP-Kenntnisse:
Fortgeschritten
McSodbrenner befindet sich auf einem aufstrebenden Ast
Standard

Klasse Antwort, werd ich gleich mal testen, danke!
McSodbrenner ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
gleiches script triggern mit und ohne Variablenübergabe steve_2000 PHP Tipps 2008 2 04.12.2008 17:34
Shell / Batch Script um mehrere PHP Dateien gleichzeitig auszuführen HackReb PHP-Fortgeschrittene 1 09.09.2008 13:29
real escape script in meinem script Change Datenbanken 3 17.08.2008 21:56
shell script dynamische anzal von argumenten noskule Server, Hosting und Workstations 5 01.08.2006 18:36
Script beendet sich ohne Fehlermeldung Zahl PHP Tipps 2006 6 04.06.2006 20:41
[PHP-CLI] Variablen per Shell an ein Script übergeben PHP Tipps 2006 6 23.01.2006 11:18
[Erledigt] kurze frage zu screen in einem shell script Server, Hosting und Workstations 4 16.12.2005 21:22
[Erledigt] Verzögerung durch included Script? Umgehen? PHP Tipps 2005-2 4 10.07.2005 19:26
[Erledigt] Relay Script PHP-Fortgeschrittene 11 01.06.2005 16:02
[Erledigt] Hilfe bei Download Verwaltungs Script PHP Tipps 2005 8 04.05.2005 10:29
[Erledigt] shell script ausführen PHP-Fortgeschrittene 15 01.01.2005 21:28
shell script ausführen PHP Tipps 2004-2 0 28.12.2004 21:02
"das" Script oder "der" Script?? Simbo Off-Topic Diskussionen 31 16.09.2004 17:04
script in shell über shell_exec ausführen ... ?!?!?! PHP Tipps 2004 1 01.09.2004 14:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php ansi escape sequence, php schell tastatureingabe, ansi escape sequenz, ansi-escape-sequenzen, ansi escape sequences, php shell tastatureingabe, ansi escape sequenzen anweisungen, php ansi escape sequences, linux shell script tastatur escape-sequenz, konsole escapesequenzen, ansi escape sequences delay, delay ansi sequence, ansi escape-sequenzen, escape sequenzen cmd script, shell script unter php, shellscript füllzeichen, ansi codes php, batch ansi sequenzen, html sequenz auslesen php, ansi esc chr

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:09 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum