Page 6 of 7

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

Posted: Tue 09 Nov, 2010 23:38
by John Doe

Latest post of the previous page:



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

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

Posted: Wed 10 Nov, 2010 08:07
by Tim Sobolev
Ещё раз: BM.push и BM.pop -- самодостаточные операции, обеспечивающие базовый функционал работы с закладками, достаточный для большинства пользователей. Убираться они не будут. Вставка в виде BM.Add(x) возможно и будет, но если будет затребовано некоторым количеством пользователей. Текущее поведение BM.Add обусловлено функциями, которые требовались от закладок при их введении.

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

Posted: Wed 10 Nov, 2010 09:22
by Kildor
Убирать pop и push не нужно, потому что это позволяет работать с закладками удобно и быстро.
Alt= «BM.push();»
Alt- «BM.pop();»
ShiftBS «BM.prev();»
Зачем нужно вставлять закладки внутрь стека — лично я себе не представляю.

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

Posted: Wed 10 Nov, 2010 11:15
by John Doe
Tim Sobolev wrote:Ещё раз: BM.push и BM.pop -- самодостаточные операции, обеспечивающие базовый функционал работы с закладками, достаточный для большинства пользователей.
Мне тоже не трудно ещё раз: BM.add/next/prev -- вполне могут обеспечивать весь функционал работы с закладками, достаточный для всех задач.
Наличие похожих по назначению функций для пользователя плохо, а для начинающего пользователя в особенности.
И вчерашнее разделение prev/back усложняет всё ещё сильнее.
Tim Sobolev wrote:Убираться они не будут.
Со смешанными чуствами представляю себе подробное описание всего этого хозяйства в Энциклопедии...

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

Posted: Wed 10 Nov, 2010 11:41
by Kildor
> Ещё раз: BM.add/next/prev -- вполне могут обеспечивать весь функционал работы с закладками, достаточный для всех задач.
А теперь покажи, как в макросе нужно реализовывать push и pop?
А если в тексте используется несколько таких операций?
И ты забыл видимо про del.

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

Posted: Wed 10 Nov, 2010 11:45
by John Doe
Kildor wrote:А теперь покажи, как в макросе нужно реализовывать push и pop?
См. на предыдущей странице. Как минимум двумя альтернативными способами (a и b). Оба требуют некоторого изменения поведения Add.
Kildor wrote:И ты забыл видимо про del.
С чего бы?

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

Posted: Wed 10 Nov, 2010 12:06
by Kildor
См. на предыдущей странице. Как минимум двумя альтернативными способами (a и b). Оба требуют некоторого изменения поведения Add.
Тогда предлагаю два других варианта
a. Параметр для Add: Add(Stat(0)).
b. Add без параметра мог бы добавлять закладку в конец
Отсюда вопрос: является ли необходимостью отсечение хвоста при использовании Add?
Реально ведь это принудительное отсечение только ограничивает возможности, и того же можно достичь иначе:
Код:
$rep(bm.stat(0)-bm.stat(1)) bm.del(bm.stat(0)) $end
$bm.add()
Ужас, если честно. Я понимаю, что макросы обычно пишутся один раз, но не настолько же.
Особенно вот этот вот код с $rep.

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

Posted: Wed 10 Nov, 2010 12:10
by John Doe
Этот "код" не относится ни к Pop ни к Push, а является примером того как отсечь "хвост".
Причём варианта "a" он вообще никак не касается, а в варианте "б" можно сделать иначе (не знаю реально востребовано ли отсечение "хвоста", кроме как для примера с колорером).
Ужас, если честно.
bm.add(bm.stаt(0)) это действительно ужас. Лучше bm.add(bm.itemcount).
Причём, если одновременно работать только с одной закладкой, то последняя=текущая, а значит bm.push() будет эквивалентно bm.add() без параметра (а в варианте "b" push=add просто всегда, параметры не предусмотрены).

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

Posted: Wed 10 Nov, 2010 13:28
by John Doe
Kildor wrote:А теперь покажи, как в макросе нужно реализовывать push и pop?
Только что сообразил, что мы тут слегка зациклились ;-)
Ведь ответ на вопрос можно найти 6 страниц назад, в первых сообщениях темы.

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

Posted: Wed 10 Nov, 2010 13:39
by Kildor
Пожалуй.
В том и дело, что реализовать можно всё на изначальном наборе свойств (ну кроме двух закладок на одну позицию). Вопрос лишь в том, что эта реализация будет неудобна и с трудом читабельна. А если в макросах уже реализованы более комплексные функции (типа pop и push), то зачем их убирать? Немного не трогая закладки. К примеру, я бы не отказался от такой вещи как EOL, хотя это реализуется наподобии Editor.RealPos<=len(Editor.Value).

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

Posted: Wed 10 Nov, 2010 13:51
by John Doe
Kildor wrote:Вопрос лишь в том, что эта реализация будет неудобна и с трудом читабельна.
Вот в этой точке наши мнения и расходятся.
Kildor wrote:Немного не трогая закладки...
Оффтопик?

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

Posted: Wed 10 Nov, 2010 18:20
by John Doe
Пример в Энциклопедии, иллюстрирующий работу с закладками, очень уж специфичный.
Предлагаю более простой:

Искать строку %SearchString с самого начала файла. Если не найдена - восстановить исходную позицию.

Code: Select all

BM.Push()
CtrlHome
F7 print(%SearchString) Enter
$If (Dialog)
	mmode(1,0)
	$while(Dialog) eval(waitkey()) $end
	BM.Pop()
$End

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

Posted: Wed 10 Nov, 2010 19:02
by SUSim
Kildor wrote:Вот когда можно будет в макросах писать свои функции/процедуры, тогда пусть хоть всё через одну команду с разными параметрами. А пока, давайте всё-ж думать об удобстве макроса?
В Макросах как раз можно реализовать любую модель работы с закладками!!! Эта надстройка(BM.чтото) по сути только улучшает(сокращает текст макросов) удобство макросов!

А макросы можно и в качестве процедур использовать, правда текста больше писать придется:
вместо dm.add придется писать нечто вроде eval(%%SimSU_BM_Add)

Реализация списка, правда кругового, а не полного-двунаправленного (какой требуется в данном контексте), занимает у меня 40 строк МакроКода (данный стек я использую в макросах заменяющих такие плагины как SaveSelect, TrueRem, Aliases)
All wrote:...
что все вцепились в эти закладки? кому надо он и в ручную "самопальными макросами" все реализует!!! Предлагалось же 5 базовых команд, не меняющих, а дополняющих текущий функционал...
Все эти нововведения позволят только сократить текст макросов, а если они поступят в плагины как требуют некоторые то и немного текст плагинов...

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

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

Posted: Wed 10 Nov, 2010 19:53
by SUSim
Вспомните теорию работы с последовательностью... и пример про ряд разноцветных камушков...

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

Posted: Wed 27 Apr, 2011 17:19
by John Doe
Tim Sobolev wrote:Значится так.
1. Вместо "стековые закладки" пишем "динамические закладки"...
В Писании сейчас соответствующий раздел называется "Стековые закладки".
И соответствующие функции API тоже несут на себе отметку "стековости".
Может пора сейчас всё подряд переименовать в "динамические" (или "сессионные")?

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

Posted: Fri 27 May, 2011 06:16
by Tim Sobolev
John Doe wrote:В Писании сейчас соответствующий раздел называется "Стековые закладки".
И соответствующие функции API тоже несут на себе отметку "стековости".
Может пора сейчас всё подряд переименовать в "динамические" (или "сессионные")?
Да я как бы совсем не против, а очень даже за :)