ws_xpixel и 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;
}
Я использовал это как winsize
ссылка. Но код печатает только нули. Если я использую ws_col
или же ws_row
это работает отлично.
Пожалуйста, помогите, спасибо!
2 ответа
Если вы посмотрите на исходный код glibc, вы увидите, что ws_col
а также ws_row
на самом деле не используются.
/* 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. */
};
PS: Прочтите также этот ответ, если вы не уверены, почему я указываю на glibc.
Эти два значения устанавливаются некоторыми эмуляторами терминала.
Пожалуйста, посмотрите запрос функции VTE, чтобы установить эти поля, в которых обобщены мои последние результаты. (VTE - фактический виджет эмуляции терминала позади gnome-terminal
и много других.)