Latest post of the previous page:
MBlockEditor, но я не в курсе, чем предлагаемое отличается )SimpleIndent
- CyberShadow
- Posts: 194
- Joined: Sun 15 Apr, 2007 17:12
- Been thanked: 1 time
- Contact:
Re: Табулятор
В принципе, если не используется постоянное выделение, думаю практически разницы почти нету. Можно назначить макрос на таб при присутствии выделения - но меня лично раздражало, что если выделить блок где-нибудь, потом о нем забыть и на другой странице кода попытаться вставить таб - происходит не то, что ожидаемо. Это макросами не просто решить.
- CyberShadow
- Posts: 194
- Joined: Sun 15 Apr, 2007 17:12
- Been thanked: 1 time
- Contact:
- HaRT
- Moderator
- Posts: 10869
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Табулятор
Справедливости ради, проверить факт нахождения каретки внутри выделения или в начале строки макросами не так уж сложно.CyberShadow wrote:Это макросами не просто решить.
Кстати, а что считается началом строки: только первый символ/ первый непробельный тоже или все ведущие пробелы?
И ещё одна идея: можно было бы добавлять ровно ту комбинацию пробелов/табуляций, которая есть на соответствующем участке предыдущей строки — т.е. повторить логику, реализованную плагином [ESC] при использовании AutoIndent.
Фар есть инструмент, а не нянька. © 2009 DrKnS
- CyberShadow
- Posts: 194
- Joined: Sun 15 Apr, 2007 17:12
- Been thanked: 1 time
- Contact:
Re: Табулятор
Для повседневцах этого форума, может и несложно. Моя интерпретация "сложно" - когда макрос не вмещается в видимой области поля редактирования макро-кода.HaRT wrote:Справедливости ради, проверить факт нахождения каретки внутри выделения или в начале строки макросами не так уж сложно.
Первый символ, так как операция идентации принципиально выполняется над целыми строками.HaRT wrote:Кстати, а что считается началом строки: только первый символ/ первый непробельный тоже или все ведущие пробелы?
То есть, при сдвиге вправо, копировать существующие пробельные символы (с начала строки или сверху)? Так идея неплохая (мне бы не пришла в голову т.к. [ESC]). Но вставки больше одной единицы сдвига идет вопреки того, что операции сдвига следуют быть симметричными.HaRT wrote:И ещё одна идея: можно было бы добавлять ровно ту комбинацию пробелов/табуляций, которая есть на соответствующем участке предыдущей строки — т.е. повторить логику, реализованную плагином [ESC] при использовании AutoIndent.
- HaRT
- Moderator
- Posts: 10869
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Табулятор
Т.е. если у меня выделения нет, строка “ bla”, каретка стоит на ‘b’ и я вызываю сдвиг вправо, то ничто никуда не сдвинется? Это неоптимально, ибо требует лишних действий (перехода в начало строки и возвращения обратно) для получения того же результата (что и при наличии предлагаемой логики). Предлагаемое мною поведение реализовано, например, в Microsoft Visual C++, и на практике это действительно удобно.CyberShadow wrote:Первый символ, так как операция идентации принципиально выполняется над целыми строками.
Моё предложение относится к сдвигу одной строки, и как его лучше распространить на выделение нескольких, надо будет ещё подумать. А для одной предлагается очень понятная вещь: скопировать из предшествующей строки имеющиеся там в этих же (экранных) позициях пробельные символы, притом ровно столько, сколько обеспечат заданный отступ. Т.е. чтобы результат был такой же, как если бы мы при включённой в [ESC] опции AutoIndent перешли в конец предыдущей строки, нажали Enter (тут происходит собственно выравнивание) и затем нажали Del, тем самым приклеив изначальную строку к отступу.CyberShadow wrote:при сдвиге вправо, копировать существующие пробельные символы (с начала строки или сверху)?
А вот смысл этой фразы от меня ускользает. Прошу разъяснить.CyberShadow wrote:Но вставки больше одной единицы сдвига идет вопреки того, что операции сдвига следуют быть симметричными.
Фар есть инструмент, а не нянька. © 2009 DrKnS
- CyberShadow
- Posts: 194
- Joined: Sun 15 Apr, 2007 17:12
- Been thanked: 1 time
- Contact:
Re: Табулятор
Мне кажется тут идет взаимо-непонимание в крупных масштабах... Давайте по-подробнее:
Что означает "вызывать сдвиг вправо"? При отсутствии выделения плагин пропускает нажатие клавиши Tab, и других способов активации плагин не предоставляет (см. имя), так что в описанной ситуации Tab будет работать как без плагина.HaRT wrote:и я вызываю сдвиг вправо
Что такое "заданный отступ"? Речь идет о сдвиге "длиной" в TabSize или по другим правилам (напр. как в строке выше)? Если последнее, см. ниже:HaRT wrote:скопировать из предшествующей строки имеющиеся там в этих же (экранных) позициях пробельные символы, притом ровно столько, сколько обеспечат заданный отступ.
Я считаю, что (при присутствии выделения) нажатие на Tab, и сразу на Shift+Tab, должно привести текст в исходное состояние. Иначе, будет уже что-то другое.HaRT wrote:А вот смысл этой фразы от меня ускользает. Прошу разъяснить.
- CyberShadow
- Posts: 194
- Joined: Sun 15 Apr, 2007 17:12
- Been thanked: 1 time
- Contact:
Re: Табулятор
Кажется доходит что имеется в виду. Кажется этим занимается плагин Smart BS - кроме "умного" бекспейса, он также обрабатывает нажатие на Tab.
Last edited by CyberShadow on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Добавлена ссылка на плагин
Reason: Добавлена ссылка на плагин
- CyberShadow
- Posts: 194
- Joined: Sun 15 Apr, 2007 17:12
- Been thanked: 1 time
- Contact:
Re: Табулятор
Еще находки:
1) Auto-indent - фича FAR, не [ЕSC] - он только ее включает когда указано
2) Плагинам не нужно самим для этой цели никаких пробелов/табов ставлять:
В таком состоянии редактора если нажать Enter, курсор перейдет под букву L. Пробельные знаки не вставятся до тех пор, пока не напечатать одну букву - тогда они в точности скопируются из строки выше. Проверял без плагинов.
Smart BS этим пользуется и сам не вставляет никакие символы - он лишь меняет позицию курсора.
1) Auto-indent - фича FAR, не [ЕSC] - он только ее включает когда указано
2) Плагинам не нужно самим для этой цели никаких пробелов/табов ставлять:
В таком состоянии редактора если нажать Enter, курсор перейдет под букву L. Пробельные знаки не вставятся до тех пор, пока не напечатать одну букву - тогда они в точности скопируются из строки выше. Проверял без плагинов.
Smart BS этим пользуется и сам не вставляет никакие символы - он лишь меняет позицию курсора.
- HaRT
- Moderator
- Posts: 10869
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Табулятор
Нет, он ориентируется на предшествующие строки при выборе величины сдвига, а я предлагаю при заданной величине сдвига брать в расчёт предыдущую строку для определения того, какие пробельные символы использовать.CyberShadow wrote:Кажется этим занимается плагин Smart BS - кроме "умного" бекспейса, он также обрабатывает нажатие на Tab.
Фар есть инструмент, а не нянька. © 2009 DrKnS
- HaRT
- Moderator
- Posts: 10869
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Табулятор
Да, Вы правы, это сам Фар. Тем актуальнее моё предложение.CyberShadow wrote:Еще находки:
1) Auto-indent - фича FAR, не [ЕSC] - он только ее включает когда указано
2) Плагинам не нужно самим для этой цели никаких пробелов/табов ставлять:
Да, а я предлагаю по такой же логике вставлять их и при сдвиге.CyberShadow wrote:В таком состоянии редактора если нажать Enter, курсор перейдет под букву L. Пробельные знаки не вставятся до тех пор, пока не напечатать одну букву - тогда они в точности скопируются из строки выше.
Фар есть инструмент, а не нянька. © 2009 DrKnS
- CyberShadow
- Posts: 194
- Joined: Sun 15 Apr, 2007 17:12
- Been thanked: 1 time
- Contact:
Re: Табулятор
Тогда думаю проще будет макрос, который несколькими нажатиями стрелки вправо переведет курсор на следующую таб-позицию. FAR сделает основную работу (копирование пробельных знаков) при первом вводе текста.
- HaRT
- Moderator
- Posts: 10869
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Табулятор
А я предлагаю, чтобы, если каретка находится на одном из ведущих пробельных символов или на первом непробельном, применять сдвиг ко всей текущей строке (строго говоря, исключая символы левее каретки).CyberShadow wrote:При отсутствии выделения плагин пропускает нажатие клавиши Tab
Я исхожу из того, что отступ, добавляемый плагином, имеет фиксированную ширину, но не обязан совпадать с шириной табуляции.CyberShadow wrote:Что такое "заданный отступ"? Речь идет о сдвиге "длиной" в TabSize или по другим правилам (напр. как в строке выше)?
Спасибо, теперь гораздо понятнее. Предлагаемое мной поведение никак не противоречит этой логике — по ShiftTab будут стираться все те и только те символы, которые были добавлены по Tab.CyberShadow wrote:(при присутствии выделения) нажатие на Tab, и сразу на Shift+Tab, должно привести текст в исходное состояние. Иначе, будет уже что-то другое.
Фар есть инструмент, а не нянька. © 2009 DrKnS
- HaRT
- Moderator
- Posts: 10869
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Табулятор
Э, нет. Такой вариант прокатит только для новой/пустой строки, а то, что предлагаю я, относится к любой.CyberShadow wrote:Тогда думаю проще будет макрос, который несколькими нажатиями стрелки вправо переведет курсор на следующую таб-позицию. FAR сделает основную работу (копирование пробельных знаков) при первом вводе текста.
Можно, конечно, вывернуться макросом наподобие Up End Enter . Del BS, но к нему надо ещё добавлять разные проверки, а также как-то сопрягать с плагином.
Фар есть инструмент, а не нянька. © 2009 DrKnS
- CyberShadow
- Posts: 194
- Joined: Sun 15 Apr, 2007 17:12
- Been thanked: 1 time
- Contact:
Re: Табулятор
Понятно... а можно полюбопытствовать насчет решаемой проблемы? Мне такая функция редко бы пригодилась...
- HaRT
- Moderator
- Posts: 10869
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Табулятор
Мне тоже нечасто, просто я ищу согласованного поведения разных способов выравнивания: автоматического и ручного. Всяческие рассогласования меня всегда очень напрягают.CyberShadow wrote:можно полюбопытствовать насчет решаемой проблемы? Мне такая функция редко бы пригодилась...
Фар есть инструмент, а не нянька. © 2009 DrKnS