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

Здесь обсуждается всё, что касается макросов.
Post Reply
Kildor
Posts: 1515
Joined: Wed 16 Mar, 2005 06:26
Location: Новосибирск
Been thanked: 1 time
Contact:

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

Post by Kildor »

Вопрос по поводу редакторных закладок. Можно ли каким-то образом реализовать сабжевый функционал (BM.push, BM.pop)? То есть, что я должен писать в своём макросе, чтоб сделать поведение закладок стековым?
Ты мне не выкай!
«ФарФорум не для пользователей!»
Upd:
P.S. Я просто поддерживаю беседу.» © Народ.

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

Re: BM.push(), BM.pop()

Post by John Doe »

Нигде в Писании не описаны подробности функционирования закладок, но ясно сказано что они стековые.
По логике (из имеющегося скудного описания) в качестве push/pop надо использовать bm.add()/bm.prev().
User avatar
Tim Sobolev
Posts: 729
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 7 times

Re: BM.push(), BM.pop()

Post by Tim Sobolev »

В общем случае BM.push это переход к последней и BM.add (чтобы не затирать)
В общем случае BM.pop это перейти к последней и сделать BM.del
я на днях немного расширю функционал стековых закладок, самому как оказалось кое-чего не хватает :)

Если же нужно единоразово сохранить и восстановить позицию в макросе, то есть пример в писании
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: BM.push(), BM.pop()

Post by John Doe »

Tim Sobolev wrote:В общем случае BM.push это переход к последней и BM.add (чтобы не затирать)
В общем случае BM.pop это перейти к последней и сделать BM.del
Ну если нужно только Push/Pop то чего париться с сохранением хвоста?
Полагаю переходить к последней (в первом случае) и удалять последнюю (во втором) даже излишне.

P.S.
А для полноты не хватает функции для получения номера "текущей" закладки, и возможности перейти к закладке по её номеру.
User avatar
Tim Sobolev
Posts: 729
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 7 times

Re: BM.push(), BM.pop()

Post by Tim Sobolev »

John Doe wrote:
Tim Sobolev wrote:В общем случае BM.push это переход к последней и BM.add (чтобы не затирать)
В общем случае BM.pop это перейти к последней и сделать BM.del
Полагаю переходить к последней (в первом случае) и удалять последнюю (во втором) даже излишне.
В примере удалялась для того, чтобы не светилась в в Visualizer :)
John Doe wrote:А для полноты не хватает функции для получения номера "текущей" закладки, и возможности перейти к закладке по её номеру.
Вот этого и мне не хватает и будет добавлятся.
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: BM.push(), BM.pop()

Post by John Doe »

Получение с помощью BM.Stat(N), а переход BM.Prev/Next(N)?
Или по макроязыку вопросы к Валентину?
User avatar
Tim Sobolev
Posts: 729
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 7 times

Re: BM.push(), BM.pop()

Post by Tim Sobolev »

John Doe wrote:Получение с помощью BM.Stat(N)
Да
John Doe wrote:а переход BM.Prev/Next(N)? Или по макроязыку вопросы к Валентину?
Мы с ним как-нибудь сами решим :)
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: BM.push(), BM.pop()

Post by John Doe »

Вот хотелось бы поучаствовать.
Имхо Prev/Next избыточно: разве недостаточно одной функции с параметром?

P.S.
Tim Sobolev wrote:В примере удалялась для того, чтобы не светилась в в Visualizer :)
А о каком примере речь?
Kildor
Posts: 1515
Joined: Wed 16 Mar, 2005 06:26
Location: Новосибирск
Been thanked: 1 time
Contact:

Re: BM.push(), BM.pop()

Post by Kildor »

В общем, ситуация следующая:

Есть набор из N строк длины M (Если кому-то будет понятней — выравнивание сиквенсов).
Нужно удалить все совпадающие символы, оставив только различные.

Как это делаю я: Запоминаю позицию курсора*, запоминаю букву. Прохожу вниз по всем строкам, и смотрю, имеются ли различия. Если различий нет, то выделяю столбец и удаляю. Затем перехожу к запомненной ранее позиции и перехожу на следующий символ. Повторяю M раз. В конце — перехожу в начало строки (то есть первое запоминание позиции курсора), и делаю там дополнительные телодвижения.
И вот как раз * и хотелось бы сделать стеком.

Соответственно, получается, что вместо BM.push надо использовать просто BM.add, а вместо BM.pop надо использовать связку из BM.prev(); BM.del()?

Вообще, можно немного подробностей по этим закладкам?
Вот у меня ничего нет. Я делаю BM.add, ухожу с позиции, как мне вернуться на нужное место? BM.prev? А если я сделал две закладки, что тогда выдаст bm.prev?
Last edited by Kildor on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Исправлено форматирование
Ты мне не выкай!
«ФарФорум не для пользователей!»
Upd:
P.S. Я просто поддерживаю беседу.» © Народ.

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

Re: BM.push(), BM.pop()

Post by John Doe »

Kildor wrote:Вот у меня ничего нет. Я делаю BM.add, ухожу с позиции, как мне вернуться на нужное место? BM.prev? А если я сделал две закладки, что тогда выдаст bm.prev?
Если закладки 2 то чтобы вернуться на первую надо сделать prev 2 раза.
User avatar
Tim Sobolev
Posts: 729
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 7 times

Re: BM.push(), BM.pop()

Post by Tim Sobolev »

BM.add добавляет закладку. Если производилась навигация по закладкам, то при BM.add удаляются все закладки, добавленные после текущей. В общем же случае, если нас не заботит "хвост", BM.add сохраняет текущую позицию, потом мы выполняем какие-то действия, выполняем BM.next (переход к следующей закладке или к текущей, если более поздних закладок нет) и BM.del для удаления текущей закладки.

О закладках и одном примере работы с ними можно почитать в Писании Второй Версии
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: BM.push(), BM.pop()

Post by John Doe »

Tim Sobolev wrote:BM.next (переход к следующей закладке или к текущей, если более позних закладок нет)
Надо бы писание уточнить, а то может показаться, что тут нужен prev.
Kildor
Posts: 1515
Joined: Wed 16 Mar, 2005 06:26
Location: Новосибирск
Been thanked: 1 time
Contact:

Re: BM.push(), BM.pop()

Post by Kildor »

Кажется понятно.
> О закладках и одном примере работы с ними можно почитать в писании второй версии
В том и дело, что в писании написано весьма непонятно.

@John Doe
Спасибо! Когда-нибудь я даже запомню про эти кавычки…
Ты мне не выкай!
«ФарФорум не для пользователей!»
Upd:
P.S. Я просто поддерживаю беседу.» © Народ.

xmpp:kildor@jabber.ru
Kildor
Posts: 1515
Joined: Wed 16 Mar, 2005 06:26
Location: Новосибирск
Been thanked: 1 time
Contact:

Re: BM.push(), BM.pop()

Post by Kildor »

Вот, вопрос.

Почему закладки вот в этом макросе работают совершенно по разному, если закомментировать строку print("Start ");

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

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

Re: BM.push(), BM.pop()

Post by John Doe »

Не вижу разницы.
Post Reply

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