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

Здесь обсуждается всё, что касается макросов.
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 »

Latest post of the previous page:

Tim Sobolev wrote:Значится так.
Правильно ли я понимаю: чтобы перейти на закладку созданную последней, т.е. "текущую", Next/Prev не помогут, надо будет использовать либо Back, либо Goto(Stat(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 »

Kildor wrote:А BM.push BM.next — выдаст последнюю закладку, не удаляя её, так?
да
Kildor wrote:BM.push BM.next BM.pop — всё согласно исходному порядку?
да, но можно и без BM.next
Kildor wrote:«BM.push BM.push» — даст две закладки в одной позиции, так?
да
John Doe wrote:Правильно ли я понимаю: чтобы перейти на закладку созданную последней, т.е. "текущую", Next/Prev не помогут, надо будет использовать либо Back, либо Goto(Stat(1))?
На позицию редактора из последней закладки (если она текущая) можно перейти через BM.next, BM.Goto(BM.Stat(0)) и BM.Goto(BM.Stat(1))
Если она не текущая, то только BM.next (повторяя до упора) и BM.Goto(BM.Stat(0)) (непосредственно).

PS. Если всё понятно, буду крутить.
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:
John Doe wrote:Правильно ли я понимаю: чтобы перейти на закладку созданную последней, т.е. "текущую", Next/Prev не помогут, надо будет использовать либо Back, либо Goto(Stat(1))?
На позицию редактора из последней закладки (если она текущая) можно перейти через BM.next, BM.Goto(BM.Stat(0)) и BM.Goto(BM.Stat(1))
Если она не текущая, то только BM.next (повторяя до упора) и BM.Goto(BM.Stat(0)) (непосредственно).
А если она текущая, но не последняя?

И что по поводу прозвучавших выше предложений а) по возвращаемым значениям б) bm.curpos/bm.itemcount?
Tim Sobolev wrote:PS. Если всё понятно, буду крутить.
Имхо лучше не становится: back/next/prev это жутковато.
Может покрутить-таки в сторону упрощения?
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.pop — всё согласно исходному порядку?
> да, но можно и без BM.next
Тут ещё имелось в виду, что через next можно получить запушенную закладку, не удаляя её, так? Иногда требуются приседания вокруг одной закладки, а постоянно писать pop push не сильно красиво.

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

xmpp:kildor@jabber.ru
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.stat... :( две команды bm.count и bm.curpos нативны ???
Зачем такие сложности... (ну да ладно... хотя я не понимаю зачем пользоваться bm.push если есть bm.add), логика не нарушена, но остается непонятным bm.push хвост не обрезает? (кладет закладку последней и на нее позиционируется то есть после bm.push получаем bm.stat(1)==bm.stat(0)) ?

Дим, может упростим всё??? :oops:
? примешь мои 5 команд (первые 3 потом расширим, то есть оставим их пока без параметров) + на их комбинация легко реализует push, pop, clear, next, previost и т.п.? тогда можно будет оставить и любимую bm.prev (с добавлением новой закладки)...
А про пересечение типа push/pop, next и goto объяснять вообще не требуется, народ зачем вам смешивать стили выбрали пушь-поп так им и пользуйтесь им (это типа стек) хотите больше возможностей пользуйтесь списком (goto, add, del...) хотите продвинутости - двусвязный список пользуйте previos, next, prev...
Kidor, если модель поддерживает несколько подходов это не требует от неё(модели) поддерживать смешанный подход! зачем мешать все в кучу???
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 wrote:... хотя я не понимаю зачем пользоваться bm.push если есть bm.add
По сути при bm.add вначале обрезается хвост, а потом делается bm.push.
Зачем 2 функции там где прекрасно можно обойтись одной мне тоже не ясно.
SUSim wrote:если модель поддерживает несколько подходов это не требует от неё(модели) поддерживать смешанный подход! зачем мешать все в кучу???
Не надо несколько подходов там, где можно обойтись одним. Уже и закладки переименовали из стековых в динамические, зачем этот pop/push...
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
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 »

Tim Sobolev wrote:
Kildor wrote:>> BM.push BM.next BM.pop — всё согласно исходному порядку?
> да, но можно и без BM.next
Тут ещё имелось в виду, что через next можно получить запушенную закладку, не удаляя её, так? Иногда требуются приседания вокруг одной закладки, а постоянно писать pop push не сильно красиво.
Да, понял, если прыгать в редакторе вокруг последней закладки, то BM.next или BM.goto(BM.stat(0)), второй вариант более ресурсоёмкий :)
А также BM.goto(BM.stat(1)) или BM.Goto(0) или BM.Goto -- танцы вокруг текущей. Т.e. по BM.push сохранили, что-то делаем в редакторе, прыгаем на текущую по BM.next или BM.Goto (более ресурсоёмко, но более очевидно), опять что-то делаем и т.д., и т.д., потом по BM.pop переходим в позицию закладки и удаляем её. Следует только помнить, что при удалении текста, на который поставлена закладка, сама закладка удалится (если ничего не путаю).
John Doe wrote:А если она текущая, но не последняя?
Если нужно перейти с текущей на последнюю, то так же
Tim Sobolev wrote:BM.next (повторяя до упора) и BM.Goto(BM.Stat(0)) (непосредственно).
Если перейти к текущей, то только BM.Goto(BM.Stat(1)) или BM.Goto(0) или BM.Goto.
John Doe wrote:
SUSim wrote:если модель поддерживает несколько подходов это не требует от неё(модели) поддерживать смешанный подход! зачем мешать все в кучу???
Не надо несколько подходов там, где можно обойтись одним. Уже и закладки переименовали из стековых в динамические, зачем этот pop/push...
Именно чтобы не нарушая состояние редактора и закладк сохранять и восстанавливать нужную позицию в редакторе. По другому это не получится никак.
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:Именно чтобы не нарушая состояние редактора и закладк сохранять и восстанавливать нужную позицию в редакторе. По другому это не получится никак.
Т.е?
Push прекрасно можно заменить на Goto(Stat(0)) + Add, а Pop на Goto(Stat(0)) + Del.
(И громоздкость конструкции можно ещё сильно уменьшить.)

P.S.
А что по остальным вопросам?
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:Именно чтобы не нарушая состояние редактора и закладок сохранять и восстанавливать нужную позицию в редакторе. По другому это не получится никак.
Т.е?
Push прекрасно можно заменить на Goto(Stat(0)) + Add, а Pop на Goto(Stat(0)) + Del.
(И громоздкость конструкции можно ещё сильно уменьшить.)
Нет. Goto(Stat(0)) произведёт изменение текущей позиции в редакторе на позицию из последней закладки, а нам надо сохранить текущую позицию редактора.
BM.Goto(n) производит переход к закладке с номером n (делает её "текущей") и устанавливает координаты в редакторе, взятые из этой закладки.
John Doe wrote:И что по поводу прозвучавших выше предложений а) по возвращаемым значениям б) bm.curpos/bm.itemcount?
а) ещё не знаю, мне кажется излишеством б) если общественность поддержит, обращайтесь к Валентину :wink:.
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:Нет. Goto(Stat(0)) произведёт изменение текущей позиции в редакторе на позицию из последней закладки, а нам надо сохранить текущую позицию редактора
Верно...
Тогда предлагаю два других варианта
  1. Параметр для Add: Add(Stat(0)).
  2. Add без параметра мог бы добавлять закладку в конец
Отсюда вопрос: является ли необходимостью отсечение хвоста при использовании Add?
Реально ведь это принудительное отсечение только ограничивает возможности, и того же можно достичь иначе:

Code: Select all

$rep(bm.stat(0)-bm.stat(1)) bm.del(bm.stat(0)) $end
$bm.add()
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.push и BM.pop
В то время как для навигации вполне хватает функционала, заложенного к текущему (1714) билду.
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 »

Вообще a и b это независимые предложения, и ни в одном из них я не предполагаю никаких вставок.
Поэтому речь как раз об упрощении, которое позволит убрать излишние функции.
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 »

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

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

Уверен, примеры можно продолжать.

P.S.
Да и вообще сама возможность удалять из середины (bm.del(Idx)) вполне логично предполагает возможность вставлять.
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:Например, я лично хотел бы чтобы нумерация закладок (и соответственно последовательность перехода по ним) соответствовала реальному положению закладок в тексте.
Для макроса эта задача проста, однако без возможности вставки ничего не выйдет.
Другой пример: я хочу изменить сохранённую позицию (в уже существующей закладке).
Это можно было бы сделать удалив и заново создав, но к сожалению нумерация собьётся, а вот если бы была возможность вставки...
Меня интересуют практические, а не теоретические примеры. Текущее поведение BM.add обусловленно непосредственно практическим его применением для навигации. Практического применения вышеуказанных примеров я не вижу.
John Doe wrote:Да и вообще сама возможность удалять из середины (bm.del(Idx)) вполне логично предполагает возможность вставлять.
Задания индекса обусловлено необходимостью иметь возможность удалять начальные и конечные закладки.
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 »



Но вообще-то основная мысль не в том, что вставка жизненно необходима, а в том, что Push/Pop избыточны, и всю их функциональность красивее решит Add даже без наделения его способностями вставки:
John Doe wrote:Вообще a и b это независимые предложения, и ни в одном из них я не предполагаю никаких вставок.
Поэтому речь как раз об упрощении, которое позволит убрать излишние функции.
Post Reply

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