Сдвигать вывод по Enter в командной строке
Сдвигать вывод по Enter в командной строке
Хотелось бы чтобы Enter в командной строке окна под панелями (userscreen) вёл себя аналогично обычному интерпретатору cmd.exe (или же сделать такое поведение хотя бы опциональным) - если нет ввода от пользователя (пустая командная строка), чтобы просто печатал текст prompt-а и сдвигался на строку ниже (выводя prompt и курсор). Сейчас Far не делает ничего.
Раньше как-то не особо обращал внимание на это поведение, но в последнее время много приходилось работать в bash - и там я так привык к этому, что сейчас Far в этом смысле ощущается "деревянным". Такое поведение очень удобно, когда нужно визуально отделить один вывод какой-нибудь утилиты от другого (возможно от другой утилиты) - просто стучим по Enter столько, сколько нужно (чаще просто зажав клавишу) - и таким образом как-бы сдвигаем предыдущий вывод выше. Сейчас в Far нет никакой возможности "сдвинуть" существующий вывод и в результате всё идёт одним полотном.
Реализовать, мне кажется, должно быть несложно.
Раньше как-то не особо обращал внимание на это поведение, но в последнее время много приходилось работать в bash - и там я так привык к этому, что сейчас Far в этом смысле ощущается "деревянным". Такое поведение очень удобно, когда нужно визуально отделить один вывод какой-нибудь утилиты от другого (возможно от другой утилиты) - просто стучим по Enter столько, сколько нужно (чаще просто зажав клавишу) - и таким образом как-бы сдвигаем предыдущий вывод выше. Сейчас в Far нет никакой возможности "сдвинуть" существующий вывод и в результате всё идёт одним полотном.
Реализовать, мне кажется, должно быть несложно.
Сдвигать вывод по Enter в командной строке
Может быть, но это не совсем то же самое. При этом реально отрабатывает запускатор (зачем?), да и в выводе я получаю пустую строку между prompt-ами (визуально воспринимается как будто там реально что-то выполнялось - и ведь на самом деле так).
- John Doe
- Бюрократ
- Posts: 13862
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Сдвигать вывод по Enter в командной строке
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;
}
- John Doe
- Бюрократ
- Posts: 13862
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Сдвигать вывод по Enter в командной строке
Кстати, если хочется сделать совсем как в cmd, то можно так:
В результате в каждой добавленной строке будет копия приглашения.
(Хотя лично я смысла в этом не вижу)
Update
...однако я заметил, что если в макросе убирать панель функциональных клавиш, то это помогает избежать её мерцания.
Поэтому можно усовершенствовать макрос вот так:
В результате в каждой добавленной строке будет копия приглашения.
(Хотя лично я смысла в этом не вижу)
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;
}
Сдвигать вывод по Enter в командной строке
John Doe: Большое спасибо за макрос, последняя версия позволяет добиться именно такого поведения, которого мне не хватало.
Сдвигать вывод по Enter в командной строке
По-моему, стоит этот скрипт поместить в раздел "Полезные макросы и скрипты". Я его для себя еще немного косметически подредактировал и добавил пару комментариев:
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;
}
- John Doe
- Бюрократ
- Posts: 13862
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Сдвигать вывод по Enter в командной строке
Т.е. вам требовалось при вставке новой строки оставлять там копию приглашения?plastikat wrote:последняя версия позволяет добиться именно такого поведения, которого мне не хватало.
Сдвигать вывод по Enter в командной строке
А можно пояснить почему это так работает. В документации по Get/SetUserScreen написано очень скупо.
И еще, я убрал io.write, разницы в работе макроса не заметил.
И еще, я убрал io.write, разницы в работе макроса не заметил.
- John Doe
- Бюрократ
- Posts: 13862
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Сдвигать вывод по Enter в командной строке
Хороший вопрос. Действительно для вставки строки достаточно пары команд.
Code: Select all
lua:panel.GetUserScreen();panel.SetUserScreen()
Сдвигать вывод по Enter в командной строке
Это просто поведение привычных мне оболочек. Макрос же гибок и позволяет это поведение настраивать. На каком поведении остановиться - покажет практика.
Сдвигать вывод по Enter в командной строке
Только что заметил небольшой "косячок". Если Фар запущен с большим буфером и ключом "/w", то при прокрутке копируются также и часы, отображаемые в правом верхнем углу, и стрелка вверх, отображаемая в конце командной строки. Кроме того, один экземпляр заголовка панелей (только одна строка) тоже остается на экране и уезжает вверх.
Не то, чтобы это как-то мешало, но мы же все тут эстеты...
Не то, чтобы это как-то мешало, но мы же все тут эстеты...
- John Doe
- Бюрократ
- Posts: 13862
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Сдвигать вывод по Enter в командной строке
Я вот тоже не могу понять почему GetUserScreen оставляет на экране часы (и признак выполнения макроса).
Code: Select all
lua:panel.GetUserScreen();mf.waitkey();panel.SetUserScreen()
Edit: http://bugs.farmanager.com/view.php?id=2958
А это не воспроизводится.
Сдвигать вывод по Enter в командной строке
На другом компьютере у меня это тоже не воспроизводится.
А вот это у меня не воспроизводится (в одном месте точно, да и в другом (вчерашнем), кажется, тоже).John Doe wrote:и признак выполнения макроса