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

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

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

Post by SUSim »

Latest post of the previous page:

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

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

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

Post by John Doe »

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

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

Post by Tim Sobolev »

John Doe wrote:
Tim Sobolev wrote:А зачем лишний раз всё усложнять? А проэмулировать работу BM.prev макросами довольно накладно по коду. И дублировать весь этот код в каждом новом макросе неохота.
Весь этот код это сколько?
Подозреваю что займёт 1 строчку, зато все действия будут явными.
Мне кажется это будет как раз упрощением.
Надо просто -- юзай push и pop, не надо просто -- вообще не используй.
User avatar
John Doe
Бюрократ
Posts: 13003
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 310 times

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

Post by John Doe »

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

Да, из четырёх страниц обсуждения уже примерно понятно как можно работать с закладками, и я даже прикинул как это описать в Энциклопедии. Получается довольно монструозно.

Моя гипотеза заключается в том, что не в описании проблема, а в том, что логика закладок слишком заточена под очень частный случай применения. (И даже на примере ваших макросов, с трудом укладывается в голове).
У меня есть вполне конструктивные идеи, как можно улучшить систему закладок, не потеряв в функциональности, и сделав при этом легче в понимании.
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 158 times
Contact:

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

Post by zg »

John Doe wrote:Да, из четырёх страниц обсуждения уже примерно понятно как можно работать с закладками
что, правда :?
User avatar
Tim Sobolev
Posts: 714
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 2 times

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

Post by Tim Sobolev »

Объясню по-простому: об особом поведении BM.prev вообще можно не упоминать, ибо в общем случае всё работает вполне ожидаемо... Т.к. BM.add всё равно откидывает все более поздние закладки, так что в большинстве случаев такое поведение абсолютно не играет роли. Насчёт возможной грубости прошу прощения, но просто уже надоело писать одно и то же.

Вставка же закладки между существующими не имеет смысла, а если такое кому-то всё-таки понадобилось, то можно просто использовать классические закладки.

И где вообще остальная общественность? Или ей на это фиолетово? :)
Kildor
Posts: 1515
Joined: Wed 16 Mar, 2005 06:26
Location: Новосибирск
Been thanked: 1 time
Contact:

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

Post by Kildor »

Нет, мне не фиолетово, но внезапно кончилось всяческое время. До конца недели я разгребусь с делами в реальном мире, и засяду за эти закладки — после этого будет и впечатление, и идеи.
Ты мне не выкай!
«ФарФорум не для пользователей!»
Upd:
P.S. Я просто поддерживаю беседу.» © Народ.

xmpp:kildor@jabber.ru
User avatar
John Doe
Бюрократ
Posts: 13003
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 310 times

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

Post by John Doe »

Tim Sobolev wrote:...Т.к. BM.add всё равно откидывает все более поздние закладки...
Кстати тоже фича сомнительная в плане универсальности.
Tim Sobolev wrote:Вставка же закладки между существующими не имеет смысла, а если такое кому-то всё-таки понадобилось, то можно просто использовать классические закладки.
Классические это эти чтоль?

Code: Select all

ПравыйCtrl-0..9    Установить закладку 0..9 в текущей позиции
И как тут вставить?
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 4 times

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

Post by Skirda »

Kildor wrote:после этого будет и впечатление, и идеи.
только учти вот :)
We are the Borg. You will be assimilated.
So Say We All!
User avatar
John Doe
Бюрократ
Posts: 13003
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 310 times

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

Post by John Doe »

Code: Select all

вместо BM.last  использовать BM.goto(BM.stat(1))
Видимо BM.stat(0).
Кстати в качестве возвращаемого значения add/del/push/pop так просится это же самое (текущее количество закладок).
А для next/prev - в самый раз возвращать текущую.
User avatar
SUSim
Posts: 1546
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 5 times
Been thanked: 12 times

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

Post by SUSim »

А зачем убирать то что ввели? почему бы не убрать тогда и bm.next с bx.prev
чем вас не устраивает:

Code: Select all

BM.count([Cnt])
BM.curpos([Idx])
BM.append([Idx])
BM.goto([Idx])
BM.del([Idx])
Да настаиваю!!! команд меньше чем сейчас, а функционал полный (ВСЁ можно реализовать что есть вданный момент плюс еще много чего)!
И почему вы не хотите ввести BM.Count и BM.CurPos а вводите ненативный BM.State?
SimSU ··· ·· -- ··· ··-
User avatar
John Doe
Бюрократ
Posts: 13003
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 310 times

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

Post by John Doe »

SUSim
Без паники.
Насчёт bm.Count и bm.CurPos я например с вами согласен, и против вроде бы никто не выступал.

А вот bm.next и bm.prev завязаны на текущей "полустековой" модели.
И в этой модели bm.prev не равно bm.goto(bm.stat(1)-1).
User avatar
SUSim
Posts: 1546
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 5 times
Been thanked: 12 times

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

Post by SUSim »

bm.next как раз нормальный в текущем состоянии он эквивалентен bm.goto(bm.current()+1) в моей постановке,
а вот BM.prev действительно замысловат, но я и не предлагаю его менять, я как раз предлагаю оставить (хотя непонятно зачем эта экономия одного BM.add(), я в своих макросах всегда вместо bm.add() использую bm.add() bm.nex(), чтобы не путаться создалась ли лишняя закладка или нет при bm.prev()).

можно же оставить текущие команды, да и до полнить их пресловутыми push и pop? хотя push() вырождается в BM.append(), а pop в BM.goto(BM.count()) BM.del(BM.Count())
bm.add() текущей модели будет эквивалентна bm.count(bm.current()) bm.append() в моей постановке, да, текста больше но логика понятней, да и bm.add не обязательно же удалять...
SimSU ··· ·· -- ··· ··-
User avatar
Tim Sobolev
Posts: 714
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 2 times

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

Post by Tim Sobolev »

Значится так.
1. Вместо "стековые закладки" пишем "динамические закладки", вместо "конец стека" пишем "конец списка".
2. Текущую BM.prev переименовываем в BM.back.
3. Создаём BM.prev, которая выполняет возврат на предыдущую (добавленную в список ранее текущей), или текущую (если текущая -- первая) закладку, аналог -- BM.goto(1).
4. BM.next оставляем без изменений: выполняет переход на следующую (добавленную в список после текущей), или текущую (если текущая -- последняя) закладку, аналог -- BM.goto(BM.stat(0)).
5. BM.push и BM.pop остаются без изменений, выполняют, соответственно, добавление закладки из текущей позиции редактора в конец списка закладок / переход на позицию редактора из последней в списке закладки и удаление этой закладки. После выполнения пары команд BM.push .. BM.pop состояние редактора и закладок не меняется.
Kildor
Posts: 1515
Joined: Wed 16 Mar, 2005 06:26
Location: Новосибирск
Been thanked: 1 time
Contact:

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

Post by Kildor »

Ага.
А BM.push BM.next — выдаст последнюю закладку, не удаляя её, так?
Соответственно BM.push BM.next BM.pop — всё согласно исходному порядку?
И «BM.push BM.push» — даст две закладки в одной позиции, так?
Ты мне не выкай!
«ФарФорум не для пользователей!»
Upd:
P.S. Я просто поддерживаю беседу.» © Народ.

xmpp:kildor@jabber.ru
User avatar
John Doe
Бюрократ
Posts: 13003
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 310 times

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

Post by John Doe »

Tim Sobolev wrote:Значится так.
Правильно ли я понимаю: чтобы перейти на закладку созданную последней, т.е. "текущую", Next/Prev не помогут, надо будет использовать либо Back, либо Goto(Stat(1))?
Post Reply

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