OpeningLastFile.lua

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
John Doe
Бюрократ
Posts: 11848
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 130 times

OpeningLastFile.lua

Post by John Doe » Tue 23 Apr, 2013 22:29

Кто может объяснить что делает OpeningLastFile.lua?
Я не имею ввиду ошибку в наименовании клавиши (key="Ctrl""), а хочу понять цель.

Для чего может понадобиться макрос, открывающий предпоследний файл истории?

Связанные темы:

User avatar
t-rex
Страшный и ужасный
Posts: 4899
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Contact:

Re: Улучшение макросов из поставки фара

Post by t-rex » Tue 23 Apr, 2013 22:54

вроде раньше в истории последняя строка была пустой.

User avatar
HaRT
Moderator
Posts: 8470
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 74 times
Been thanked: 135 times

Re: Улучшение макросов из поставки фара

Post by HaRT » Wed 24 Apr, 2013 08:21

t-rex wrote:вроде раньше в истории последняя строка была пустой.
Ни в 1.75 (build 2634), ни в 2.0 (build 1694) пустой строки в истории нет.
John Doe wrote:Для чего может понадобиться макрос, открывающий предпоследний файл истории?
Чтобы в самом деле открыть предпоследний файл. Я регулярно подобным пользуюсь, когда надо по очереди менять пару файлов и что-то вне фара перепроверять.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
John Doe
Бюрократ
Posts: 11848
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 130 times

Re: Улучшение макросов из поставки фара

Post by John Doe » Wed 24 Apr, 2013 09:02

HaRT wrote:Чтобы в самом деле открыть предпоследний файл. Я регулярно подобным пользуюсь, когда надо по очереди менять пару файлов и что-то вне фара перепроверять.
Не возражаю против того, чтобы пользоваться "подобным", но как пользоваться именно "этим" я не понял, хотя поставил, и честно пытался применять.
Поведение не очень предсказуемо, а мануал не прилагается.

Предлагаю убрать из поставки, или заменить на подобное, если у кого есть.

P.S.
Во втором посте другие претенденты на удаление.

User avatar
DrKnS
Posts: 4914
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 161 times

Re: Улучшение макросов из поставки фара

Post by DrKnS » Wed 24 Apr, 2013 09:06

HaRT wrote:
t-rex wrote:вроде раньше в истории последняя строка была пустой.
Ни в 1.75 (build 2634), ни в 2.0 (build 1694) пустой строки в истории нет.
Потому что она была убрана гораздо раньше, в 2562/850 соответственно.

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 3 times

Улучшение макросов из поставки фара

Post by Skirda » Wed 24 Apr, 2013 09:50

John Doe wrote:Смысла View.CtrlUpDown.lua я вообще не понял.
В редакторе Ctrl-Down что делает? Правильно, скроллирует текст вверх, оставляя позицию курсора на месте относительно лево-верха консольного окна.
Во вьювере руки машинально сами тянуться нажать ту же комбинацию, но результат иной.
Собственно это ради таких "криворучек", как я :crazy:
John Doe wrote:Предлагаю убрать из поставки, или заменить на подобное, если у кого есть.
Ну что за мания всё удалять... предложи замену, а не удаление.
We are the Borg. You will be assimilated.
So Say We All!

User avatar
John Doe
Бюрократ
Posts: 11848
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 130 times

Re: Улучшение макросов из поставки фара

Post by John Doe » Wed 24 Apr, 2013 09:59

Skirda wrote:Во вьювере руки машинально сами тянуться нажать ту же комбинацию, но результат иной.
Тогда другое дело, но в таком случае надо описание подправить, и имя файла, чтобы не возникало вопросов о назначении.
Skirda wrote:Ну что за мания всё удалять... предложи замену, а не удаление.
Замену "чего"? Поставьте задачу.
Сейчас выяснили, что Up просто лишний. Значит макрос служит для открытия последнего закрытого файла.
Имеет право быть, наверно...

Или давайте желаемое поведение - предложим замену.

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 3 times

Re: Улучшение макросов из поставки фара

Post by Skirda » Wed 24 Apr, 2013 10:08

John Doe wrote:
Skirda wrote:Во вьювере руки машинально сами тянуться нажать ту же комбинацию, но результат иной.
Тогда другое дело, но в таком случае надо описание подправить, и имя файла, чтобы не возникало вопросов о назначении.
Предложения?
"Скроллинг на одну строку, как в редакторе...."
John Doe wrote:Сейчас выяснили, что Up просто лишний. Значит макрос служит для открытия последнего закрытого файла.
Имеет право быть, наверно...
В те далекие лихие годы, когда земля была горячей... Изначально, когда была пустая строка в историях, макрос исполнял свою задачу - открывал последний файл. Потом просто забыли его поправить - бывает же такое :-)
John Doe wrote:Или давайте желаемое поведение - предложим замену.
Up убери и получишь нужное поведение (Opening last...).
С Up`ом, как писали выше, мы получаем поведение "открыть предпоследний файл".
We are the Borg. You will be assimilated.
So Say We All!

User avatar
John Doe
Бюрократ
Posts: 11848
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 130 times

Re: Улучшение макросов из поставки фара

Post by John Doe » Wed 24 Apr, 2013 10:13

Skirda wrote:Предложения?
"Скроллинг на одну строку, как в редакторе...."
Учитывая, что правки нужны всем дистрибутивным макросам я это сам поправлю, главное было понять цель.

User avatar
John Doe
Бюрократ
Posts: 11848
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 130 times

Улучшение макросов из поставки фара

Post by John Doe » Tue 04 Sep, 2018 09:04

HaRT wrote:
Wed 24 Apr, 2013 08:21
t-rex wrote:вроде раньше в истории последняя строка была пустой.
Ни в 1.75 (build 2634), ни в 2.0 (build 1694) пустой строки в истории нет.
John Doe wrote:Для чего может понадобиться макрос, открывающий предпоследний файл истории?
Чтобы в самом деле открыть предпоследний файл. Я регулярно подобным пользуюсь, когда надо по очереди менять пару файлов и что-то вне фара перепроверять.
OpeningLastFile.lua

Code: Select all

Macro {
  description="Opening previous view/edit (from history)";
  area="Viewer Editor Shell QView Tree Info Search"; key="Ctrl'";
  flags="NoSendKeysToPlugins";
  action=function()
    Far.DisableHistory(0x4)
    Keys"AltF11"
    local pos = 0
    repeat
      for i=1,pos do Keys"Up" end
      Keys"Enter"
      if Area.Dialog then --already opened
        Keys"Esc AltF11"
        pos = pos+1
      end
    until Menu.Id~=far.Guids.HistoryEditViewId
  end;
}
Предлагаю такой макрос взамен малофункциональному текущему (AltF11 Up Enter)

С каждым нажатием будет открываться следующий файл из истории.

User avatar
John Doe
Бюрократ
Posts: 11848
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 130 times

Улучшение макросов из поставки фара

Post by John Doe » Tue 04 Sep, 2018 09:45

John Doe wrote:
Tue 04 Sep, 2018 09:04
взамен малофункциональному текущему (AltF11 Up Enter)
Эксперименты показали, что текущий тоже становится более осмысленным, если добавить в его начало Far.DisableHistory().
После этого он ведёт себя идентично моему, за исключением того, что нижняя строка пропускается всегда (что было правильным только пока она была пустой).

Но я хотел бы акцентировать внимание на другом, на том что Far.DisableHistory() в данном случае открывает перед нами фичу, в других случаях не проявляющуюся: если файл открыт из истории, то порядок истории не меняется, причём повторно история открывается с курсором, установленным на только что открытый файл.
Определённо это не случайно, когда-то было намеренно реализованно именно так, а впоследствии поломалось.
Предлагаю рассмотреть возможность исправления.


Впрочем, не факт, фича вроде бы доступна по Shift+Enter.
Last edited by John Doe on Tue 04 Sep, 2018 10:14, edited 1 time in total.

User avatar
John Doe
Бюрократ
Posts: 11848
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 130 times

Улучшение макросов из поставки фара

Post by John Doe » Tue 04 Sep, 2018 10:02

С учётом выясненного, исправить исходный макрос можно проще:

Code: Select all

local lastitem
Macro {
  description="Opening previous file from view/edit history";
  area="Viewer Editor Shell QView Tree Info Search"; key="Ctrl'";
  flags="NoSendKeysToPlugins";
  action=function()
    Keys"AltF11"
    if Menu.Value==lastitem then
      Keys"Up"
    end
    lastitem = Menu.Value
    Keys"ShiftEnter"
  end;
}

Shmuel
Posts: 5524
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 179 times

Улучшение макросов из поставки фара

Post by Shmuel » Tue 04 Sep, 2018 10:50

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

User avatar
John Doe
Бюрократ
Posts: 11848
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 130 times

Улучшение макросов из поставки фара

Post by John Doe » Tue 04 Sep, 2018 11:06

Абсолютно согласен, что слишком наворачивать не стоит (хотя в поставке есть и сложные).
Сам стараюсь упрощать (пусть и в ущерб универсальности), но ведь в любом случае, макрос прежде всего должен выполнять заявленную функцию, поэтому тут всегда будет некий компромисс.
John Doe wrote:
Tue 04 Sep, 2018 10:02
С учётом выясненного, исправить исходный макрос можно проще:
Упростил ещё немного:
Проще можно было бы сделать только если в фаре вернётся пустая нижняя строка историй (чего я уверен не случится).

P.S.
Что до комментариев, то кое-где можно было бы добавить ссылки на форум.
Но не уверен что надо.
Last edited by John Doe on Tue 04 Sep, 2018 11:10, edited 1 time in total.

User avatar
John Doe
Бюрократ
Posts: 11848
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 130 times

OpeningLastFile.lua

Post by John Doe » Wed 05 Sep, 2018 08:48

  1. local initial
  2. Macro {
  3.   description="Opening previous file from view/edit history";
  4.   area="Viewer Editor Shell QView Tree Info Search"; key="Ctrl'";
  5.   flags="NoSendKeysToPlugins";
  6.   action=function()
  7.     Keys"AltF11"
  8.     if not Area.Menu then return end -- modal editor/viewer
  9.     if Object.Eof then
  10.       -- ensure that initial (bottom) item opened only once
  11.       initial = initial~=Menu.Value and Menu.Value or false
  12.     end
  13.     if not initial then Keys"Up" end -- step up in history
  14.     Keys"ShiftEnter"
  15.   end;
  16. }
Такой макрос конечно сложнее чем , но и удобнее на порядок.

User avatar
John Doe
Бюрократ
Posts: 11848
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 130 times

OpeningLastFile.lua

Post by John Doe » Thu 06 Sep, 2018 12:26

Альтернативная реализация:
  1. Macro {
  2.   description="Opening previous file from view/edit history";
  3.   area="Viewer Editor Shell QView Tree Info Search"; key="Ctrl'";
  4.   flags="NoSendKeysToPlugins";
  5.   action=function()
  6.     local cur = Area.Viewer and Viewer.FileName
  7.              or Area.Editor and Editor.FileName
  8.     Keys"AltF11"
  9.     if not Area.Menu then return end -- modal editor/viewer
  10.     if not Object.Eof or cur==Menu.Value:match": (.*)$" then
  11.       Keys"Up"
  12.     end
  13.     Keys"ShiftEnter"
  14.   end;
  15. }
Оба варианта решают одну и ту же задачу: когда курсор на самом нижнем пункте неясно, то ли надо открывать именно его, то ли следующий по списку.
  • Прошлый вариант: ориентируется на имя пункта меню, чтобы не открыть один и тот же пункт два раза подряд.
  • Этот вариант: ориентируется на имя файла, открытого в текущем редакторе/вьювере, чтобы не открыть пункт, совпадающий по имени с активным.
Какой лучше оставить?

P.S.
Проще всего было бы ориентироваться на количество элементов в списке истории, но это тоже не абсолютно надёжно, прежде всего потому, что если количество достигнет заданного предела, то перестанет изменяться. Есть же предел?

Post Reply

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