Прокрутки в редакторе

Здесь обсуждается всё, что касается макросов.
Shmuel
Posts: 5838
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Прокрутки в редакторе

Post by Shmuel » Sat 20 Feb, 2016 19:43

Пока что набросал 2 макроса, в первом приближении работает.

Shmuel
Posts: 5838
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Позиция курсора при скроллинге в редакторе

Post by Shmuel » Fri 26 Feb, 2016 17:20

Добавил ещё макросы для горизонтальной прокрутки в редакторе (что-то не нашёл, как это можно без макросов делать клавишами).

User avatar
HaRT
Moderator
Posts: 8840
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 86 times
Been thanked: 151 times

Позиция курсора при скроллинге в редакторе

Post by HaRT » Fri 26 Feb, 2016 18:02

Shmuel, спасибо за горизонтальную прокрутку.
А сложно ли прикрутить вариант (c добавлением [b]Shift[/b]) горизонтальной прокрутки, чтобы каретка всегда сохраняла своё положение в тексте — даже когда уезжает за экран?
Или Фар такое не позволяет? Тогда чтобы останавливался (т.е. чтобы при прокрутке случайно не сместить курсор в тексте).
Для вертикальной прокрутки вариант с остановкой у меня .
Фар есть инструмент, а не нянька. © 2009 DrKnS

Shmuel
Posts: 5838
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Позиция курсора при скроллинге в редакторе

Post by Shmuel » Fri 26 Feb, 2016 18:10

Макрос в последнем спойлере отредактирован: возьмите по новой.
HaRT wrote: Или Фар такое не позволяет? Тогда чтобы останавливался (т.е. чтобы при прокрутке случайно не сместить курсор в тексте).
На данный момент Фар не позволяет. А остановить можно (доработав макросы).

User avatar
HaRT
Moderator
Posts: 8840
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 86 times
Been thanked: 151 times

Позиция курсора при скроллинге в редакторе

Post by HaRT » Fri 26 Feb, 2016 18:14

Shmuel wrote: остановить можно (доработав макросы)
Было бы неплохо.
Кстати, я дописал соответствующие свои макросы для вертикальной прокрутки в тот пост.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Shmuel
Posts: 5838
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Позиция курсора при скроллинге в редакторе

Post by Shmuel » Fri 26 Feb, 2016 18:46

HaRT, специально для вас (так как я не люблю, чтобы останавливалось).

User avatar
HaRT
Moderator
Posts: 8840
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 86 times
Been thanked: 151 times

Позиция курсора при скроллинге в редакторе

Post by HaRT » Fri 26 Feb, 2016 19:10

Shmuel wrote: специально для вас (так как я не люблю, чтобы останавливалось)
Спасибо!
Обнаружилось поведение, которое Вам вряд ли понравится: если каретка находится в крайней правой позиции окна (неважно, в пределах текста строки или за её концом), то обычная (не обязательно сохраняющая позицию каретки в тексте) прокрутка влево ничего никуда не смещает вообще.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Shmuel
Posts: 5838
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Позиция курсора при скроллинге в редакторе

Post by Shmuel » Fri 26 Feb, 2016 19:15

HaRT wrote: если каретка находится в крайней правой позиции окна (неважно, в пределах текста строки или за её концом), то обычная (не обязательно сохраняющая позицию каретки в тексте) прокрутка влево ничего никуда не смещает вообще.
Вы наверное пользуетесь необновлённым макросом (выше было указано, чтол макрос отредактирован).

User avatar
HaRT
Moderator
Posts: 8840
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 86 times
Been thanked: 151 times

Позиция курсора при скроллинге в редакторе

Post by HaRT » Fri 26 Feb, 2016 19:20

Shmuel wrote: наверное пользуетесь необновлённым макросом
Только что обновился отсюда:
Shmuel wrote: макросы для горизонтальной прокрутки в редакторе
Изменений не обнаружил. А у Вас прокрутка влево из крайней правой позиции окна работает?
Фар есть инструмент, а не нянька. © 2009 DrKnS

Shmuel
Posts: 5838
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Позиция курсора при скроллинге в редакторе

Post by Shmuel » Fri 26 Feb, 2016 19:24

HaRT wrote: А у Вас прокрутка влево из крайней правой позиции окна работает?
Работает. Убедитесь, что есть пространство для прокрутки (если LeftPos==1, то прокрутки влево, естественно, быть не может).

User avatar
HaRT
Moderator
Posts: 8840
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 86 times
Been thanked: 151 times

Позиция курсора при скроллинге в редакторе

Post by HaRT » Fri 26 Feb, 2016 19:48

Shmuel wrote: Убедитесь, что есть пространство для прокрутки
Да есть-есть, я убедился ещё до того, как багу зарепортить. Могут ли влиять [x] Cursor beyond end of line или [x] Show scrollbar?
UPD
Если отключить показ полосы прокрутки, то прокрутка влево работает, как ожидается.
Очевидно, в скрипте надо использовать не ширину окна как такового, а ширину его „клиентской области“.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Shmuel
Posts: 5838
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Позиция курсора при скроллинге в редакторе

Post by Shmuel » Fri 26 Feb, 2016 20:35

К сожалению, я не могу найти никакого прямого способа узнать из макроса, есть ли в редакторе полоса вертикальной прокрутки.
Опция Editor.ShowScrollBar - глобальная, а в редакторе можно изменить показ полосы прокрутки локально, но на значение опции это не повлияет.

User avatar
HaRT
Moderator
Posts: 8840
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 86 times
Been thanked: 151 times

Позиция курсора при скроллинге в редакторе

Post by HaRT » Fri 26 Feb, 2016 20:51

Shmuel wrote: не могу найти никакого прямого способа узнать из макроса, есть ли в редакторе полоса вертикальной прокрутки
Я знаю только дедовский способ — открыть диалог и проверить галку. Да, он некрасивый, зато работает.
А вообще было бы полезно в скриптах иметь доступ к размерам клиентской области редактора/просмотрщика непосредственно — например, в результате вызова editor.GetInfo().
Фар есть инструмент, а не нянька. © 2009 DrKnS

Shmuel
Posts: 5838
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Позиция курсора при скроллинге в редакторе

Post by Shmuel » Fri 26 Feb, 2016 20:57

HaRT wrote: А вообще было бы полезно в скриптах иметь доступ к размерам клиентской области редактора/просмотрщика непосредственно
Согласен, и сделать это не должно быть сложно. К примеру, добавить ещё один бит-флаг в EDITOR_OPTIONS, типа EOPT_SHOWSCROLLBAR, это легко позволит вычислить "клиентскую область".

Shmuel
Posts: 5838
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Позиция курсора при скроллинге в редакторе

Post by Shmuel » Fri 26 Feb, 2016 22:52

Shmuel wrote: К сожалению, я не могу найти никакого прямого способа узнать из макроса, есть ли в редакторе полоса вертикальной прокрутки.
Ещё раз поискал - нашёл Editor.Set(15,-1). Это позволяет узнать текущее локальное значение опции.
Теперь набор макросов выглядит так:

По-видимому имеет смысл отделить сообщения, начиная от этого, и перенести в раздел макросов.

User avatar
HaRT
Moderator
Posts: 8840
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 86 times
Been thanked: 151 times

Позиция курсора при скроллинге в редакторе

Post by HaRT » Fri 26 Feb, 2016 23:53

Shmuel wrote: включена ли строка статуса и строка команд
Да, это явные пробелы в Editor.Set либо в Editor.Set.

Про строку статуса ниже, а вот для строки команд есть ещё более уродливый , чем для полосы прокрутки.

Если теперь добавить предположение о том, что редактор занимает всё окно Фара (думаю, оно нарушается не чаще 1 раза из 1000), то по состоянию полосы команд () и соотношению Far.Height и вычисленной прежде высоты клиентской области H0 несложно определить и состояние строки статуса.

PS
Я признаю, что всё это омерзительно, и предпочёл бы иметь возможность получать эти важные значения (включая размеры клиентской области редактора/просмотрщика) непосредственно.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Post Reply

Return to “Обсуждение макросов”