2017-03-21 2 views
2

Voici le code que j'utilise pour imprimer la résolution en pixels du terminal actuel.ws_xpixel et ws_ypixel

#include <sys/ioctl.h> 
#include <stdio.h> 
#include <unistd.h> 

int main (int argc, char *argv[]) { 

    struct winsize ww; 
    ioctl(STDOUT_FILENO, TIOCGWINSZ, &ww); 
    printf ("x-pixels %d\n", ww.ws_xpixel); 
    printf ("y-pixels %d\n", ww.ws_ypixel); 
    return 0; 
} 

I utilisé this comme winsize référence. Mais le code imprime uniquement des zéros. Si j'utilise ws_col ou ws_row cela fonctionne très bien.

S'il vous plaît, aidez, merci!

Répondre

1

Si vous regardez le source code of glibc vous verrez que ws_col et ws_rowne sont pas réellement utilisés.

/* Type of ARG for TIOCGWINSZ and TIOCSWINSZ requests. */ 
struct winsize 
{ 
    unsigned short int ws_row; /* Rows, in characters. */ 
    unsigned short int ws_col; /* Columns, in characters. */ 

    /* These are not actually used. */ 
    unsigned short int ws_xpixel; /* Horizontal pixels. */ 
    unsigned short int ws_ypixel; /* Vertical pixels. */ 
}; 

P.S .: A lire aussi ce answer, si vous ne savez pas pourquoi je montre glibc.

+0

Merci!, Alors comment obtenir des tailles en pixels? – Debashish

+1

Essayez d'obtenir la largeur de pixel d'un caractère. –

+0

Peut-être que l'utilisation de [XTerm Control Sequences] (http://stackoverflow.com/a/22785601/1807667) sera une solution pour votre cas. –

0

Ces deux valeurs sont définies par certains émulateurs de terminal.

Veuillez voir le VTE feature request to set these fields qui résume mes récentes découvertes. (VTE est le widget d'émulation de terminal réel derrière gnome-terminal et beaucoup d'autres.)