SimpleIndent

Здесь можно обсудить ваш любимый плагин.
User avatar
HaRT
Moderator
Posts: 10860
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Табулятор

Post by HaRT »

Latest post of the previous page:

CyberShadow wrote:Это макросами не просто решить.
Справедливости ради, проверить факт нахождения каретки внутри выделения или в начале строки макросами не так уж сложно.
Кстати, а что считается началом строки: только первый символ/ первый непробельный тоже или все ведущие пробелы?

И ещё одна идея: можно было бы добавлять ровно ту комбинацию пробелов/табуляций, которая есть на соответствующем участке предыдущей строки — т.е. повторить логику, реализованную плагином [ESC] при использовании AutoIndent.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
CyberShadow
Posts: 194
Joined: Sun 15 Apr, 2007 17:12
Been thanked: 1 time
Contact:

Re: Табулятор

Post by CyberShadow »

HaRT wrote:Справедливости ради, проверить факт нахождения каретки внутри выделения или в начале строки макросами не так уж сложно.
Для повседневцах этого форума, может и несложно. Моя интерпретация "сложно" - когда макрос не вмещается в видимой области поля редактирования макро-кода.
HaRT wrote:Кстати, а что считается началом строки: только первый символ/ первый непробельный тоже или все ведущие пробелы?
Первый символ, так как операция идентации принципиально выполняется над целыми строками.
HaRT wrote:И ещё одна идея: можно было бы добавлять ровно ту комбинацию пробелов/табуляций, которая есть на соответствующем участке предыдущей строки — т.е. повторить логику, реализованную плагином [ESC] при использовании AutoIndent.
То есть, при сдвиге вправо, копировать существующие пробельные символы (с начала строки или сверху)? Так идея неплохая (мне бы не пришла в голову т.к. [ESC]). Но вставки больше одной единицы сдвига идет вопреки того, что операции сдвига следуют быть симметричными.
User avatar
HaRT
Moderator
Posts: 10860
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Табулятор

Post by HaRT »

CyberShadow wrote:Первый символ, так как операция идентации принципиально выполняется над целыми строками.
Т.е. если у меня выделения нет, строка “   bla”, каретка стоит на ‘b’ и я вызываю сдвиг вправо, то ничто никуда не сдвинется? Это неоптимально, ибо требует лишних действий (перехода в начало строки и возвращения обратно) для получения того же результата (что и при наличии предлагаемой логики). Предлагаемое мною поведение реализовано, например, в Microsoft Visual C++, и на практике это действительно удобно.
CyberShadow wrote:при сдвиге вправо, копировать существующие пробельные символы (с начала строки или сверху)?
Моё предложение относится к сдвигу одной строки, и как его лучше распространить на выделение нескольких, надо будет ещё подумать. А для одной предлагается очень понятная вещь: скопировать из предшествующей строки имеющиеся там в этих же (экранных) позициях пробельные символы, притом ровно столько, сколько обеспечат заданный отступ. Т.е. чтобы результат был такой же, как если бы мы при включённой в [ESC] опции AutoIndent перешли в конец предыдущей строки, нажали Enter (тут происходит собственно выравнивание) и затем нажали Del, тем самым приклеив изначальную строку к отступу.
CyberShadow wrote:Но вставки больше одной единицы сдвига идет вопреки того, что операции сдвига следуют быть симметричными.
А вот смысл этой фразы от меня ускользает. Прошу разъяснить.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
CyberShadow
Posts: 194
Joined: Sun 15 Apr, 2007 17:12
Been thanked: 1 time
Contact:

Re: Табулятор

Post by CyberShadow »

Мне кажется тут идет взаимо-непонимание в крупных масштабах... Давайте по-подробнее:
HaRT wrote:и я вызываю сдвиг вправо
Что означает "вызывать сдвиг вправо"? При отсутствии выделения плагин пропускает нажатие клавиши Tab, и других способов активации плагин не предоставляет (см. имя), так что в описанной ситуации Tab будет работать как без плагина.
HaRT wrote:скопировать из предшествующей строки имеющиеся там в этих же (экранных) позициях пробельные символы, притом ровно столько, сколько обеспечат заданный отступ.
Что такое "заданный отступ"? Речь идет о сдвиге "длиной" в TabSize или по другим правилам (напр. как в строке выше)? Если последнее, см. ниже:
HaRT wrote:А вот смысл этой фразы от меня ускользает. Прошу разъяснить.
Я считаю, что (при присутствии выделения) нажатие на Tab, и сразу на Shift+Tab, должно привести текст в исходное состояние. Иначе, будет уже что-то другое.
User avatar
CyberShadow
Posts: 194
Joined: Sun 15 Apr, 2007 17:12
Been thanked: 1 time
Contact:

Re: Табулятор

Post by CyberShadow »

Кажется доходит что имеется в виду. Кажется этим занимается плагин Smart BS - кроме "умного" бекспейса, он также обрабатывает нажатие на Tab.
Last edited by CyberShadow on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Добавлена ссылка на плагин
User avatar
CyberShadow
Posts: 194
Joined: Sun 15 Apr, 2007 17:12
Been thanked: 1 time
Contact:

Re: Табулятор

Post by CyberShadow »

Еще находки:

1) Auto-indent - фича FAR, не [ЕSC] - он только ее включает когда указано

2) Плагинам не нужно самим для этой цели никаких пробелов/табов ставлять:

В таком состоянии редактора если нажать Enter, курсор перейдет под букву L. Пробельные знаки не вставятся до тех пор, пока не напечатать одну букву - тогда они в точности скопируются из строки выше. Проверял без плагинов.

Smart BS этим пользуется и сам не вставляет никакие символы - он лишь меняет позицию курсора.
User avatar
HaRT
Moderator
Posts: 10860
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Табулятор

Post by HaRT »

CyberShadow wrote:Кажется этим занимается плагин Smart BS - кроме "умного" бекспейса, он также обрабатывает нажатие на Tab.
Нет, он ориентируется на предшествующие строки при выборе величины сдвига, а я предлагаю при заданной величине сдвига брать в расчёт предыдущую строку для определения того, какие пробельные символы использовать.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 10860
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Табулятор

Post by HaRT »

CyberShadow wrote:Еще находки:
1) Auto-indent - фича FAR, не [ЕSC] - он только ее включает когда указано
2) Плагинам не нужно самим для этой цели никаких пробелов/табов ставлять:
Да, Вы правы, это сам Фар. Тем актуальнее моё предложение.
CyberShadow wrote:В таком состоянии редактора если нажать Enter, курсор перейдет под букву L. Пробельные знаки не вставятся до тех пор, пока не напечатать одну букву - тогда они в точности скопируются из строки выше.
Да, а я предлагаю по такой же логике вставлять их и при сдвиге.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
CyberShadow
Posts: 194
Joined: Sun 15 Apr, 2007 17:12
Been thanked: 1 time
Contact:

Re: Табулятор

Post by CyberShadow »

Тогда думаю проще будет макрос, который несколькими нажатиями стрелки вправо переведет курсор на следующую таб-позицию. FAR сделает основную работу (копирование пробельных знаков) при первом вводе текста.
User avatar
HaRT
Moderator
Posts: 10860
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Табулятор

Post by HaRT »

CyberShadow wrote:При отсутствии выделения плагин пропускает нажатие клавиши Tab
А я предлагаю, чтобы, если каретка находится на одном из ведущих пробельных символов или на первом непробельном, применять сдвиг ко всей текущей строке (строго говоря, исключая символы левее каретки).
CyberShadow wrote:Что такое "заданный отступ"? Речь идет о сдвиге "длиной" в TabSize или по другим правилам (напр. как в строке выше)?
Я исхожу из того, что отступ, добавляемый плагином, имеет фиксированную ширину, но не обязан совпадать с шириной табуляции.
CyberShadow wrote:(при присутствии выделения) нажатие на Tab, и сразу на Shift+Tab, должно привести текст в исходное состояние. Иначе, будет уже что-то другое.
Спасибо, теперь гораздо понятнее. Предлагаемое мной поведение никак не противоречит этой логике — по ShiftTab будут стираться все те и только те символы, которые были добавлены по Tab.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 10860
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Табулятор

Post by HaRT »

CyberShadow wrote:Тогда думаю проще будет макрос, который несколькими нажатиями стрелки вправо переведет курсор на следующую таб-позицию. FAR сделает основную работу (копирование пробельных знаков) при первом вводе текста.
Э, нет. Такой вариант прокатит только для новой/пустой строки, а то, что предлагаю я, относится к любой.
Можно, конечно, вывернуться макросом наподобие Up End Enter . Del BS, но к нему надо ещё добавлять разные проверки, а также как-то сопрягать с плагином.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
CyberShadow
Posts: 194
Joined: Sun 15 Apr, 2007 17:12
Been thanked: 1 time
Contact:

Re: Табулятор

Post by CyberShadow »

Понятно... а можно полюбопытствовать насчет решаемой проблемы? :) Мне такая функция редко бы пригодилась...
User avatar
HaRT
Moderator
Posts: 10860
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Табулятор

Post by HaRT »

CyberShadow wrote:можно полюбопытствовать насчет решаемой проблемы? :) Мне такая функция редко бы пригодилась...
Мне тоже нечасто, просто я ищу согласованного поведения разных способов выравнивания: автоматического и ручного. Всяческие рассогласования меня всегда очень напрягают.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
CyberShadow
Posts: 194
Joined: Sun 15 Apr, 2007 17:12
Been thanked: 1 time
Contact:

Re: Табулятор

Post by CyberShadow »

HaRT wrote:А я предлагаю, чтобы, если каретка находится на одном из ведущих пробельных символов или на первом непробельном, применять сдвиг ко всей текущей строке (строго говоря, исключая символы левее каретки).
Я правильно понял, что это отличится от текущего поведения только когда символы до каретки включают и табы, и пробелы?
User avatar
HaRT
Moderator
Posts: 10860
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Табулятор

Post by HaRT »

CyberShadow wrote:Я правильно понял, что это отличится от текущего поведения только когда символы до каретки включают и табы, и пробелы?
Нет, отличие не в этом. Вы же сам несколькими сообщениями выше писали, что при отсутствии выделения плагин отдаст Tab Фару. А я предлагаю, чтобы он отработал (что бы он дальше ни делал) не только при наличии выделения, но также и при нахождении каретки „в пределах отступа” строки. Или это я что-то неправильно понял?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
CyberShadow
Posts: 194
Joined: Sun 15 Apr, 2007 17:12
Been thanked: 1 time
Contact:

Re: Табулятор

Post by CyberShadow »

Да, но...

Допустим есть 5 табов и текст. Курсор на первой букве.

Ведь нет разницы, если нажатие Tab пройдет в редактор и вставится таб у курсора, или если плагин споймает нажатие и идентирует текущую строку, вставив таб в начале строки? В итоге и так и так получится строка с 6 табами в начале. То же и с пробелами.
Post Reply

Return to “Обсуждение плагинов”