Opened 13 years ago

Last modified 13 years ago

#495 assigned defect

Табулатори в изхода

Reported by: Александър Шопов Owned by: anonymous
Priority: normal Component: -- Общи --
Severity: normal Keywords:
Cc: yavor@…

Description

В някои файлове се извежда табулатор за форматиране - \t.

Напълно е възможно популярен терминален емулатор (xterm) да бъде в режим, в който таулаторите са с различен размер от стандартния, а е и възможно отделните табулатори да са разлечин размер - например 1-ят да е 3, а следващите по 5 шпации.

По-добре е да се ползват по 8 шпации за форматиране.

Change History (7)

comment:1 Changed 13 years ago by yavorescu

Cc: yavor@… added

Можеш ли да дадеш рецепта, с която да се възпроизведе проблема? Ако е възможно и вероятно xterm да се настрои по такъв начин, то доста програми биха се държали неприятно дори и при LC_ALL=C. Например nano:

void print_opt_full(const char *shortflag
#ifdef HAVE_GETOPT_LONG
        , const char *longflag
#endif
        , const char *desc)
{
    printf(" %s\t", shortflag);
    if (strlenpt(shortflag) < 8)
        printf("\t");

#ifdef HAVE_GETOPT_LONG
    printf("%s\t", longflag);
    if (strlenpt(longflag) < 8)
        printf("\t\t");
    else if (strlenpt(longflag) < 16)
        printf("\t");
#endif

    if (desc != NULL)
        printf("%s", _(desc));
    printf("\n");
}

Повечето (всички?) програми на GNOME ползват GOption, и доколкото успях да тествам с различни терминали при различнен брой колони няма никакви проблеми. (Не съм пробвал да "дефинирам" стойност за "horizontal tab", понеже не знам как изобщо става това.)

comment:2 Changed 13 years ago by Александър Шопов

Да, проблемът не е вероятен, но е възможен.

Ситуацията идва от факта, че терминалните емулатори емулират устройства, на които може да се задава размер и позиция на табулатора. (Това ми е останало като спомен от някогашната работа с VAX)

Трудно ми беше да намеря пример за това.

По принцип стандартът POSIX дефинира програма точно за това - tabs (man tabs - при мен страницата е в пакета man-pages). Възможно е във FreeBSD да има реализация на програмата. (http://people.freebsd.org/~schweikh/posix-utilities.html)

Конкретна програма, която променя размера на табулатора има тук: http://invisible-island.net/vttest/vttest.html

Компилирай я и пусни под xterm. В тест 2 се извеждат табулации - размерът им е различен от 8 шпации.

comment:3 Changed 13 years ago by yavorescu

Да, пробвах програмата и там \t е 6 шпации, но в тази програма експлицитно се предефинира това. С емулаторите, които тествах (далеч не са всички) това не се случва, както и няма някакви потребителски опции за настройка.

В main.c:

  cup(1,7); tbc(1); tbc(2); /* no-op */
  cup(1,1); for (col = 1; col <= min_cols-2; col += 6) printf("\t*");
  cup(2,2); for (col = 2; col <= min_cols-2; col += 6) printf("     *");

По-надолу има един тест, където "връщат" "vanilla tabs":

  /* Set vanilla tabs for next test */
  cup(1,1); tbc(3); for (col = 1; col <= max_cols; col += 8) { cuf(8); hts(); }

Ако може някой да демонстрира терминал (не тестова програма писана с академична цел), където примерно елементарен код като:

#include <stdio.h>

int
main (void)
{
  printf ("Опаaa!\tОпалянка!\n\tЙощ едно „опа“.\n");
  return 0;
}

се форматира различно от

Опаaa!  Опалянка!
        Йощ едно опа.

(т.е. две шпации между колоните и подравняване налице), то този проблем е просто хипотетичен проблем.

Използването на 8 шпации вместо \t е неподходящо в някои случаи -- например ако горният низ е композитен или (части) се изгражда(т) динамично. Да не говорим, че е досадно за самия преводач.

Все пак, ще се поровя малко и ще поразпитам по този въпрос.

comment:4 Changed 13 years ago by yavorescu

Това намерих като спецификация: http://www.opengroup.org/onlinepubs/009695399/utilities/tabs.html. Доколкото разбирам, това не е задължително, което отчасти обяснява защо нямам такава програма на моите системи. Продължавам да търся терминален емулатор, където да е възможно да се прояви/конфигурира различно поведение.

comment:5 Changed 13 years ago by Александър Шопов

Потвърждение за FreeBSD и xterm - http://lists.freebsd.org/pipermail/freebsd-current/2008-April/084668.html

comment:6 Changed 13 years ago by Александър Шопов

Да не говорим, че е досадно за самия преводач.

Всъщност как се появиха при теб табулациите?

В po-mode - при мен GNU Emacs генерира по 8 шпации дори в случаите, когато натискам табулатора. Единствено когато копирам низа от оригинала с ctrl-j, ги получавам в изхода, или работя директно с файла с E.

comment:7 Changed 13 years ago by yavorescu

Owner: changed from yavorescu to anonymous
Status: newassigned

Ще оправя преводите постепенно.

(В PO mode `\t' се въвежда с C-q TAB.)

Note: See TracTickets for help on using tickets.