Работа со стековыми закладками в редакторе (BM.Add и др.)

Здесь обсуждается всё, что касается макросов.
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Работа со стековыми закладками в редакторе (BM.Add и др.

Post by SUSim »

Latest post of the previous page:

Если немного расширить функции минимального функционала:
вместо bm.count() сделать
bm.count([Cnt]) и при заданном Cnt обрезать размер до Cnt, а при незаданном просто возвращать, то функции bm.trunc и bm.clear отпадут

вместо bm.curpos() сделать
bm.curpos([Idx]) и при заданном Idx устанавливать Curpos в позицию Idx не трогая редактора, а при не заданном просто возвращать индекс, то отпадет функция bm.set(Idx)

вместо bm.append() сделать
bm.append([Idx]) и при заданном Idx добавлять закладку в указанную позицию, а при незаданном в конец, то отпадет функция bm.insert(Idx)

и добавив в минимальный функционал функцию bm.test() из супер расширенно функционала

получим ИМХО полный набор работы с закладками

А по большому счету всё это можно реализовать ПРОСТО макросами :) класс BM не нужен.
SimSU ··· ·· -- ··· ··-
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Работа со стековыми закладками в редакторе (BM.Add и др.

Post by John Doe »

Skirda wrote:
John Doe wrote:Слишком большое разнообразие функций, и слишком много неописанных тонкостей.
А если все тонкости описать, то сложновато получается, всему этому нестройному хозяйству сильно недостаёт интуитивности.
предлагай - что удалить, что добавить (благо, как я понял, bm.xxx() не сильно юзается - можно и пошалить :-))
Проблема в том, что закладки с одной стороны немного стековые, а с другой - вовсе нет.
Это по меньшей мере неконцептуально. Казалось бы "да пусть будет, каждый будет пользоваться чем ему надо". Но прежде чем понять "что же надо" придётся вникнуть в эту массу фунций, выделить их общности и различия.
Имхо неоправданно это. Простота наше всё.

Я считаю что надо определиться с тем являются ли закладки стеком или нет, после чего убрать всё лишнее.
Если убирать жалко, значит надо чётко разделить закладки на 2 типа.

User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Работа со стековыми закладками в редакторе (BM.Add и др.

Post by John Doe »

Tim Sobolev wrote: У BM.prev есть спец.роль (см. уточнения к BM.add).
Я так понимаю эту особую роль можно заменить двумя обычными командами, применение которых абсолютно прозрачно и не требует примечаний в Писании.
И даже если преположить что BM.prev таки нужен, его всё равно можно реализовать с помощью BM.goto(BM_Prev) (где BM_Prev константа, со значением, к примеру, -2).
Tim Sobolev wrote:
John Doe wrote:И правильно ли вообще обзывать вершину стека "хвостом" и "концом"?
Ну можешь предложить свой вариант наименование, суть я вроде описал :)
В данном случае я только лишь усомнился, с точки зрения здравого смысла. Если есть какая-то общепринятая практика именования - значит стоит её придерживаться.
(Какова практика мне неизвестно)
John Doe wrote:

Code: Select all

  Примечание для BM.add() и BM.prev()

  Если была выполнена операция BM.add() и после неё BM.prev(), произойдёт
  следующее:

  а) Если текущая позиция в редакторе соответствует позиции, сохранённой в
  BM.add(), то произойдёт переход на предшествующую, созданной BM.add(),
  закладку.
Ну а если были множественные перемещения, и позиция совпадает совершенно случайно?
Имхо этот пункт снижает предсказуемость закладок, не давая ничего взамен.
Tim Sobolev wrote:Создание закладки в текущей позиции редактора происходит ТОЛЬКО при вызове BM.prev и ТОЛЬКО для случая когда перед этим была вызвана BM.add, мы не стоим в позиции редактора, которая была при вызове BM.add и не производилось других, изменяющих состояние стековых закладок, операций. Такой функционал заложен изначально (ради него, по сути, эти закладки и добавлялись) и только для пары BM.add/BM.prev с целью простой и быстрой навигации, например при переходе на определение функции из колорера.
В результате мы незначительно экономим на явном вызове BM.Add, но зато существенно запутываем описание.
User avatar
Tim Sobolev
Posts: 729
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 7 times

Re: Работа со стековыми закладками в редакторе (BM.Add и др.

Post by Tim Sobolev »

Да что все прицепились к слову "стековые"? По сути лишь BM.push и BM.pop "чисто" стековые функции. И вообще, название "стековые" прилепили только чтобы как-то отличать от обычных, в реализации это обычный двунаправленный список, со своей спецификой: отсутствует вставка, вместо неё происходит откидывание "хвоста". Выкидывать функционал навигации по списку никто не собирается. Если название не соответствует выполняемым функциям, значит надо менять название, например на "динамические".

Насчёт вникания в функционал. Базовый функционал дают BM.push, BM.pop, BM.clear и BM.stat. Расширенный - BM.add, BM.del, BM.prev, BM.next, BM.goto и BM.get. Кому надо -- разберётся. Кому не надо -- пусть пользуется стандартными и самопальными макросами.
User avatar
Tim Sobolev
Posts: 729
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 7 times

Re: Работа со стековыми закладками в редакторе (BM.Add и др.

Post by Tim Sobolev »

John Doe wrote:И даже если преположить что BM.prev таки нужен, его всё равно можно реализовать с помощью BM.goto(BM_Prev)
А зачем лишний раз всё усложнять? А проэмулировать работу BM.prev макросами довольно накладно по коду. И дублировать весь этот код в каждом новом макросе неохота.
John Doe wrote:В результате мы незначительно экономим на явном вызове BM.Add, но зато существенно запутываем описание.
Вызов как раз не явный, а ситуативный. И изначально эти закладки разрабатывались именно под такое поведение.

PS. BM.add, BM.prev и BM.next разрабатывались исключительно для поддержки навигации в редакторе. Поэтому они столь специфичны. Кому нужно простое сохранение и возврат к позиции в редакторе, должен использовать BM.push и BM.pop, а нужна ещё и выборочная навигация и удаление -- вместе с BM.goto, BM.del.
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Работа со стековыми закладками в редакторе (BM.Add и др.

Post by SUSim »

Если за основу взять именно стек, то для базового функционала хватит: BM.push, BM.рop ну может быть еще BM.clear, (зачем BM.state? кстати всетаки лучше BM.count).
этого хватит для большинства случаев
SimSU ··· ·· -- ··· ··-
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Работа со стековыми закладками в редакторе (BM.Add и др.

Post by John Doe »

Tim Sobolev wrote:Да что все прицепились к слову "стековые"? ... Если название не соответствует выполняемым функциям, значит надо менять название, например на "динамические".
Не к названию. Одна и таже сущность и стек и не стек. Выгоды ноль, описание путанное.
Я не знаю конечно, может это обычная практика в серьёзных языках программирования, но зачем усложнять примитивный макроязык?
Tim Sobolev wrote:А проэмулировать работу BM.prev макросами довольно накладно по коду. И дублировать весь этот код в каждом новом макросе неохота.
Накладно что именно? Вести счёт закладкам?
Tim Sobolev wrote:
John Doe wrote:В результате мы незначительно экономим на явном вызове BM.Add, но зато существенно запутываем описание.
Вызов как раз не явный, а ситуативный. И изначально эти закладки разрабатывались именно под такое поведение.
Изначально может и так, но мы же стремимся к лучшему.
Что даёт нам эта ситуативность, помимо уменьшения предсказуемости?
Tim Sobolev wrote:BM.add, BM.prev и BM.next разрабатывались исключительно для поддержки навигации в редакторе.
Давайте на конкретных примерах.

P.S.
Я не возражаю, пусть add/next, но тогда давайте упростим, и выбросим все лишние свойства стека.
User avatar
Tim Sobolev
Posts: 729
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 7 times

Re: Работа со стековыми закладками в редакторе (BM.Add и др.

Post by Tim Sobolev »

SUSim wrote:Если за основу взять именно стек
А зачем сознательно урезать функционал? Чистый стек неудобен.
User avatar
Tim Sobolev
Posts: 729
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 7 times

Re: Работа со стековыми закладками в редакторе (BM.Add и др.

Post by Tim Sobolev »

John Doe wrote:
Tim Sobolev wrote:BM.add, BM.prev и BM.next разрабатывались исключительно для поддержки навигации в редакторе.
Давайте на конкретных примерах.
Конкретно на ShiftSpace у меня висит переход к определению функции в Colorer: BM.Add() F11 O 8
на ShiftBS висит BM.Prev()
На CtrlShiftBS висит BM.Next()
Т.о. я могу посмотреть что делает функция, её подфункция и т.д., попрыгать туда-обратно столько, сколько мне нужно
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Работа со стековыми закладками в редакторе (BM.Add и др.

Post by SUSim »

А я и не предлагаю урезать по этому выбрал бы полноценный список и при этом для сохранения минимума функций и философию макросов FAR то:
BM.count([Cnt])
BM.curpos([Idx])
BM.append([Idx])
BM.goto([Idx])
BM.del([Idx])

Заметьте, я специально не повторяю существующие названия, чтобы не портить существующий функционал...
Данный функционал легко расширяется как в стек так и в существующий двунаправленный список
SimSU ··· ·· -- ··· ··-
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Работа со стековыми закладками в редакторе (BM.Add и др.

Post by SUSim »

Tim Sobolev wrote:Конкретно на ShiftSpace у меня висит переход к определению функции в Colorer: BM.Add() F11 O 8
если тут сменить позицию в редакторе то тут
на ShiftBS висит BM.Prev()
разьве не появится лишняя закладка?
На CtrlShiftBS висит BM.Next()
Т.о. я могу посмотреть что делает функция, её подфункция и т.д., попрыгать туда-обратно столько, сколько мне нужно
SimSU ··· ·· -- ··· ··-
User avatar
Tim Sobolev
Posts: 729
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 7 times

Re: Работа со стековыми закладками в редакторе (BM.Add и др.

Post by Tim Sobolev »

SUSim wrote:разьве не появится лишняя закладка?
Появится, в этом-то и весь смысл :)

PS. BM.stat(1) в 1711 пофиксил, теперь 0 когда закладок нет, и от 1 и выше -- индекс закладки.
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Работа со стековыми закладками в редакторе (BM.Add и др.

Post by SUSim »

:) Блина... получаешь то, на что даже не надеялся, (непонятки - баги, могут оказаться фичами :) )
я не понимал этой фичи и в макросах приходилось писать add() next(), а с примером понял мысль :)
SimSU ··· ·· -- ··· ··-
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Работа со стековыми закладками в редакторе (BM.Add и др.

Post by SUSim »

В реализации универсального перечисления чего-либо, и всесторонней работы с этим перечислением, должно быть как минимум:
1 - возможность добавления и/или вставки в произвольное место элемента;
2 - возможность перехода к любому элементу;
3 - возможность удаления любого элемента;
Это минимальный функционал при работе с абстрактными элементами.
Для реализации специфики программирования требуется еще как минимум:
4 - получение количества всех элементов (при проведении физического эксперимента оно(количество) известно или не важно);
5 - изменение позиционирования (на индекс "нужного" элемента) без выполнения пункта 2 (то есть возможность получать данные от любого элемента без посещения старших элементов);

Перечитал 4 раза, не знаю как понятней рассказать... не та специфика у меня, но теория фундаментальная... :?
SimSU ··· ·· -- ··· ··-
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Работа со стековыми закладками в редакторе (BM.Add и др.

Post by John Doe »

Tim Sobolev wrote:А зачем лишний раз всё усложнять? А проэмулировать работу BM.prev макросами довольно накладно по коду. И дублировать весь этот код в каждом новом макросе неохота.
Весь этот код это сколько?
Подозреваю что займёт 1 строчку, зато все действия будут явными.
Мне кажется это будет как раз упрощением.
User avatar
Tim Sobolev
Posts: 729
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 7 times

Re: Работа со стековыми закладками в редакторе (BM.Add и др.

Post by Tim Sobolev »

John Doe wrote:
Tim Sobolev wrote:А зачем лишний раз всё усложнять? А проэмулировать работу BM.prev макросами довольно накладно по коду. И дублировать весь этот код в каждом новом макросе неохота.
Весь этот код это сколько?
Подозреваю что займёт 1 строчку, зато все действия будут явными.
Мне кажется это будет как раз упрощением.
Надо просто -- юзай push и pop, не надо просто -- вообще не используй.
Post Reply

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