33.16 Подсчёт колонок

Функции колонок преобразуют позицию символа (подсчёт символов от начала буфера) в позицию колонки (подсчёт экранных символов от начала строки).

Эти функции подсчитывают каждый символ в соответствии с количеством колонок, которые он занимает на экране. Это означает, что управляющие символы занимают 2 или 4 колонки в зависимости от значения ctl-arrow, а табуляции занимают количество колонок, зависящее от значения tab-width и от колонки, в которой табуляция начинается. См. Обычные соглашения отображения.

Вычисления номера колонки игнорируют ширину окна и величину горизонтальной прокрутки. Следовательно, значение колонки может быть сколь угодно большим. Первая (или самая левая) колонка имеет номер 0. Они также игнорируют наложения и свойства текста, кроме невидимости. Невидимый текст считается имеющим нулевую ширину, если только buffer-invisibility-spec не указывает, что невидимый текст должен отображаться как многоточие (см. Невидимый текст).

Функция: current-column

Эта функция возвращает горизонтальную позицию точки, измеренную в колонках, считая от 0 на левом поле. Позиция колонки равна сумме ширин всех отображаемых представлений символов между началом текущей строки и точкой.

Команда: move-to-column column &optional force

Эта функция перемещает точку в колонку column в текущей строке. При вычислении column учитываются ширины отображаемых представлений символов между началом строки и точкой.

При интерактивном вызове column — это значение префиксного числового аргумента. Если column не является целым числом, вызывается ошибка.

Если невозможно переместиться в колонку column, потому что она находится внутри многоколоночного символа, например табуляции, точка перемещается в конец этого символа. Однако если force не равен nil и column находится внутри табуляции, то move-to-column либо преобразует табуляцию в пробелы (когда indent-tabs-mode равен nil), либо вставляет перед ней достаточное количество пробелов (в противном случае), чтобы точка могла переместиться точно в колонку column. Другие многоколоночные символы могут вызывать аномалии, несмотря на force, поскольку нет способа их разделить.

Аргумент force также влияет на случай, если строка недостаточно длинна, чтобы достичь колонки column; если он равен t, это означает добавление пробелов в конце строки для достижения этой колонки.

Возвращаемое значение — это номер колонки, в которую фактически произошло перемещение.