Сдвигать вывод по Enter в командной строке

Вам не хватает чего-то в Far? Вы считаете, что вашу идею стоит услышать? Пишите сюда.
plastikat
Posts: 77
Joined: Fri 17 Jul, 2009 10:55
Has thanked: 1 time

Сдвигать вывод по Enter в командной строке

Post by plastikat »

Хотелось бы чтобы Enter в командной строке окна под панелями (userscreen) вёл себя аналогично обычному интерпретатору cmd.exe (или же сделать такое поведение хотя бы опциональным) - если нет ввода от пользователя (пустая командная строка), чтобы просто печатал текст prompt-а и сдвигался на строку ниже (выводя prompt и курсор). Сейчас Far не делает ничего.

Раньше как-то не особо обращал внимание на это поведение, но в последнее время много приходилось работать в bash - и там я так привык к этому, что сейчас Far в этом смысле ощущается "деревянным". Такое поведение очень удобно, когда нужно визуально отделить один вывод какой-нибудь утилиты от другого (возможно от другой утилиты) - просто стучим по Enter столько, сколько нужно (чаще просто зажав клавишу) - и таким образом как-бы сдвигаем предыдущий вывод выше. Сейчас в Far нет никакой возможности "сдвинуть" существующий вывод и в результате всё идёт одним полотном.

Реализовать, мне кажется, должно быть несложно.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Сдвигать вывод по Enter в командной строке

Post by DrKnS »

Пробел Enter не?
plastikat
Posts: 77
Joined: Fri 17 Jul, 2009 10:55
Has thanked: 1 time

Сдвигать вывод по Enter в командной строке

Post by plastikat »

Может быть, но это не совсем то же самое. При этом реально отрабатывает запускатор (зачем?), да и в выводе я получаю пустую строку между prompt-ами (визуально воспринимается как будто там реально что-то выполнялось - и ведь на самом деле так).
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Сдвигать вывод по Enter в командной строке

Post by John Doe »

Code: Select all

Macro { description="Line feed via Enter in Userscreen";
  area="Shell Tree Info QView"; key="Enter";
  uid="3A6A0C4A-BBC8-4751-922D-09B59084DC5A";
  condition=function()
    return not APanel.Visible and CmdLine.Empty
  end;
  action=function()
    panel.GetUserScreen()
    io.write("\n")
    panel.SetUserScreen()
  end;
}
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

Сдвигать вывод по Enter в командной строке

Post by fml2 »

Как это часто у вас бывает: гениально и просто! Не перестаю удивляться тому, что возможно в Фаре с помощью Луа.
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Сдвигать вывод по Enter в командной строке

Post by John Doe »

Кстати, если хочется сделать совсем как в cmd, то можно так:
В результате в каждой добавленной строке будет копия приглашения.
(Хотя лично я смысла в этом не вижу)

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

Code: Select all

local leave_prompt = false

Macro { description="Line feed via Enter in Userscreen";
  area="Shell Tree Info QView"; key="Enter";
  uid="3A6A0C4A-BBC8-4751-922D-09B59084DC5A";
  condition=function()
    return not APanel.Visible and CmdLine.Empty
  end;
  action=function()
    local toggleKeyBar = Far.GetConfig"Screen.KeyBar" and "CtrlB"
    Keys(toggleKeyBar)
    if not leave_prompt then panel.GetUserScreen() end
    io.write("\n")
    panel.SetUserScreen()
    Keys(toggleKeyBar)
  end;
}
plastikat
Posts: 77
Joined: Fri 17 Jul, 2009 10:55
Has thanked: 1 time

Сдвигать вывод по Enter в командной строке

Post by plastikat »

John Doe: Большое спасибо за макрос, последняя версия позволяет добиться именно такого поведения, которого мне не хватало.
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

Сдвигать вывод по Enter в командной строке

Post by fml2 »

По-моему, стоит этот скрипт поместить в раздел "Полезные макросы и скрипты". Я его для себя еще немного косметически подредактировал и добавил пару комментариев:

Code: Select all

-- This script scrolls the console (where program output goes)
-- when the user presses Enter while the panels are hidden and
-- the command line is empty.

-- Whether the command prompt should be displayed in the inserted lines
local leave_prompt = true

Macro {
  description="Line feed via Enter in Userscreen";
  area="Shell Tree Info QView";
  key="Enter";
  uid="3A6A0C4A-BBC8-4751-922D-09B59084DC5A";
  condition=function()
    return not APanel.Visible and CmdLine.Empty
  end;
  action=function()
    local toggleKeyBar = Far.GetConfig"Screen.KeyBar" and "CtrlB"
    Keys(toggleKeyBar)
    if not leave_prompt then panel.GetUserScreen() end
    io.write("\n")
    panel.SetUserScreen()
    Keys(toggleKeyBar)
  end;
}
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Сдвигать вывод по Enter в командной строке

Post by John Doe »

plastikat wrote:последняя версия позволяет добиться именно такого поведения, которого мне не хватало.
Т.е. вам требовалось при вставке новой строки оставлять там копию приглашения?
iva
Posts: 128
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Сдвигать вывод по Enter в командной строке

Post by iva »

А можно пояснить почему это так работает. В документации по Get/SetUserScreen написано очень скупо.
И еще, я убрал io.write, разницы в работе макроса не заметил.
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Сдвигать вывод по Enter в командной строке

Post by John Doe »

Хороший вопрос. Действительно для вставки строки достаточно пары команд.

Code: Select all

lua:panel.GetUserScreen();panel.SetUserScreen()
plastikat
Posts: 77
Joined: Fri 17 Jul, 2009 10:55
Has thanked: 1 time

Сдвигать вывод по Enter в командной строке

Post by plastikat »

John Doe wrote: Т.е. вам требовалось при вставке новой строки оставлять там копию приглашения?
Это просто поведение привычных мне оболочек. Макрос же гибок и позволяет это поведение настраивать. На каком поведении остановиться - покажет практика.
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

Сдвигать вывод по Enter в командной строке

Post by fml2 »

Только что заметил небольшой "косячок". Если Фар запущен с большим буфером и ключом "/w", то при прокрутке копируются также и часы, отображаемые в правом верхнем углу, и стрелка вверх, отображаемая в конце командной строки. Кроме того, один экземпляр заголовка панелей (только одна строка) тоже остается на экране и уезжает вверх.

Не то, чтобы это как-то мешало, но мы же все тут эстеты...
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Сдвигать вывод по Enter в командной строке

Post by John Doe »

fml2 wrote: копируются также и часы, отображаемые в правом верхнем углу
Я вот тоже не могу понять почему GetUserScreen оставляет на экране часы (и признак выполнения макроса).

Code: Select all

lua:panel.GetUserScreen();mf.waitkey();panel.SetUserScreen()
И всё ещё не понятно почему GetUserScreen/SetUserScreen вызывают перевод строки.
Edit: http://bugs.farmanager.com/view.php?id=2958
fml2 wrote: один экземпляр заголовка панелей (только одна строка) тоже остается на экране и уезжает вверх.
А это не воспроизводится.
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

Сдвигать вывод по Enter в командной строке

Post by fml2 »

John Doe wrote:
fml2 wrote: один экземпляр заголовка панелей (только одна строка) тоже остается на экране и уезжает вверх.
А это не воспроизводится.
На другом компьютере у меня это тоже не воспроизводится.
John Doe wrote:и признак выполнения макроса
А вот это у меня не воспроизводится (в одном месте точно, да и в другом (вчерашнем), кажется, тоже).
Post Reply

Return to “Предложения и идеи”