IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Applications et environnements graphiques Discussion :

Fenêtrage dans XTERM par séquences escape


Sujet :

Applications et environnements graphiques

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Points : 11
    Points
    11
    Par défaut Fenêtrage dans XTERM par séquences escape
    OS : Ubuntu 13.10
    Pgm : GFORTH
    Ecran : XTERM

    Bonjour,

    Je programme pour un terminal XTERM, à bas niveau : par exemple pour envoyer l'ordre "Scroll Up", symbole esc[S il faut envoyer 1B 5B 53 au terminal. En FORTH j'écris 1B emit 5B emit 53 emit et ça va tout seul.

    Je voudrais faire vivre plusieurs fenêtres simultanément, et pour éviter mille gymnastiques arithmétiques je voudrais créer des rectangles ayant chacun une marge haute, basse, gauche, droite dans lesquelles l'affichage scrolle tout seul et se replie en fin de ligne, etc.

    J'ai beau parcourir les listes de codes escape des terminaux, je désespère un peu d'y trouver mes billes. Si quelqu'un a des lumières sur la question, elles sont bienvenues :-)

    Merci à vous,
    electronring

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Bonjour,

    Veux-tu réinventer tmux ?

    Nom : tmux5.png
Affichages : 1211
Taille : 39,0 Ko
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Points : 11
    Points
    11
    Par défaut tout à fait ça
    Merci !
    Oui et non : c'est le comportement que je veux obtenir. Mais la cible pour laquelle je programme dispose de 20ko de code, OS compris, au mieux donc je ne vais pas m'amuser à utiliser un Tmux, et ce serait d'ailleurs impossible.
    ...c'est la déformation (et le plaisir) des utilisateurs du Forth : je cherche les commandes Xterm qui me permettent d'obtenir mon comportement, et il importe que je n'utilise pas un bit de plus.
    Donc... comment faire ça proprement avec les commandes escape ? That is the -
    electronring




    Citation Envoyé par Flodelarab Voir le message
    Bonjour,

    Veux-tu réinventer tmux ?

    Nom : tmux5.png
Affichages : 1211
Taille : 39,0 Ko

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Joli défi. Très intéressant.

    En même temps, je ne comprends pas comment Ubuntu peut tenir sur 20ko.

    Pour ta solution, as-tu pensé que bash pouvait appeler bash ? Ainsi, ton script peut être le parent de processus qu'il active, stoppe ou met en arrière plan.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Bonjour,

    Malheureusement, ce n'est pas le terminal lui-même qui gère ces subdivisions, mais le programme sous-jacent, qui rafraîchit les zones concernées en fonction de l'état d'un tampon qu'il maintient dans sa propre mémoire. Cela n'est d'ailleurs efficace que depuis que l'on utilise des terminaux virtuels et/ou des réseaux à haute vitesse. Avec d'authentiques terminaux physiques reliés par des connexions série, cela aurait pu devenir intolérablement long. Il me semble que les terminaux peuvent quand même définir des limites hautes et basses pour la zone de scrolling (c'était possible en Vidéotex mais je ne sais plus comment le faire en ANSI/ECMA-48) mais pas gauche ou droite, et pas en plusieurs exemplaires non plus.

    En revanche, si ton programme s'appuie sur un système Unix/Linux déjà en place, tu peux utiliser « ncurses » qui fera ce travail pour toi.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Points : 11
    Points
    11
    Par défaut Problème XTERM pour cible embarquée
    Je n'ai peut-être pas assez bien expliqué pourquoi je recherche les séquences ANSI applicables.
    Je travaille certes avec Gforth mais ma cible finale c'est un nanoprocesseur enfoui dans un petit FPGA, sur ~la moitié d'une carte de crédit. Je n'ai vraiment aucun usage des ressources logicielles disponibles pour les ordinateurs grand public, qui sont des usines à gaz géantes par rapport à mon sujet.
    Pour la cible enfouie, cela vaut le coup de piloter un terminal externe (ou un PC l'émulant) parce que, comme c'était intéressant pour DEC à l'origine, le maître n'a pas besoin d'embarquer toute cette complexité.
    Ça m'arrange en l'espèce, mais je dois surtout ne pas utiliser des trucs comme Tmux, puisque je ne les embarquerai pas dans le produit final.
    L'alternative pour moi c'est de me bourrer l'émulation semi-graphique complète, en Forth ça ne va pas chercher loin ; mais si je peux utiliser des commandes existantes hein, on m'en voudra pas ?
    :-)



    Citation Envoyé par Obsidian Voir le message
    Bonjour,

    Malheureusement, ce n'est pas le terminal lui-même qui gère ces subdivisions, mais le programme sous-jacent, qui rafraîchit les zones concernées en fonction de l'état d'un tampon qu'il maintient dans sa propre mémoire. Cela n'est d'ailleurs efficace que depuis que l'on utilise des terminaux virtuels et/ou des réseaux à haute vitesse. Avec d'authentiques terminaux physiques reliés par des connexions série, cela aurait pu devenir intolérablement long. Il me semble que les terminaux peuvent quand même définir des limites hautes et basses pour la zone de scrolling (c'était possible en Vidéotex mais je ne sais plus comment le faire en ANSI/ECMA-48) mais pas gauche ou droite, et pas en plusieurs exemplaires non plus.

    En revanche, si ton programme s'appuie sur un système Unix/Linux déjà en place, tu peux utiliser « ncurses » qui fera ce travail pour toi.

  7. #7
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Il n'est pas possible de définir des zones rectangulaires arbitraires uniquement à l'aide de commandes ANSI.

    Ce qui est faisable est de limiter l'affichage à une zone horizontale comme évoqué par Obsidian.

    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    hline=$(for i in $(seq 1 200); do printf "-"; done)
    top=10
    bottom=15
     
    printf "\033c"                            # reset
    printf "\033[?7l"                         # désactive retour à la ligne auto
    printf "\033[$((top-1));0H$hline"         # delimiteur haut
    printf "\033[$((bottom+1));0H$hline"      # delimiteur bas
    printf "\033[?7h"                         # réactive retour ligne auto
    printf "\033[${top};${bottom}r\033[10;0H" # definition zone de scrolling
     
    # test
    for i in 1 2 3 4;do date;sleep 1;done
    ls -l /usr/bin
    for i in 1 2 3 4;do date;sleep 1;done
    printf "\033c\n"
    ɹǝsn *sıɹɐlos*

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Points : 11
    Points
    11
    Par défaut XTERM bande scroll horizontale
    Ah ok.
    Bon, je peux me contenter de ça confortablement.
    Merci pour votre temps !
    electronring



    Citation Envoyé par jlliagre Voir le message
    Il n'est pas possible de définir des zones rectangulaires arbitraires uniquement à l'aide de commandes ANSI.

    Ce qui est faisable est de limiter l'affichage à une zone horizontale comme évoqué par Obsidian.

    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    hline=$(for i in $(seq 1 200); do printf "-"; done)
    top=10
    bottom=15
     
    printf "\033c"                            # reset
    printf "\033[?7l"                         # désactive retour à la ligne auto
    printf "\033[$((top-1));0H$hline"         # delimiteur haut
    printf "\033[$((bottom+1));0H$hline"      # delimiteur bas
    printf "\033[?7h"                         # réactive retour ligne auto
    printf "\033[${top};${bottom}r\033[10;0H" # definition zone de scrolling
     
    # test
    for i in 1 2 3 4;do date;sleep 1;done
    ls -l /usr/bin
    for i in 1 2 3 4;do date;sleep 1;done
    printf "\033c\n"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Séquence escape
    Par licorne dans le forum C
    Réponses: 4
    Dernier message: 31/03/2006, 19h25
  2. [VBS]Insérer password dans navigateur par VBS
    Par Zeromus dans le forum VBScript
    Réponses: 6
    Dernier message: 07/12/2005, 13h50
  3. [J2SE] selection dans jList par click souris
    Par rupteur dans le forum Composants
    Réponses: 6
    Dernier message: 01/12/2005, 12h36
  4. [VB.NET] Ouvrir fichier dans appli par double-clic dessus
    Par vynce dans le forum Windows Forms
    Réponses: 4
    Dernier message: 29/03/2005, 16h43
  5. Réponses: 1
    Dernier message: 04/06/2003, 11h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo