ConEmu: Console Emulator — эмулятор консоли

Здесь обсуждаются темы, косвенно связанные с Far.
User avatar
HaRT
Moderator
Posts: 9234
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 93 times
Been thanked: 195 times

Re: ConEmu: Console Emulator — эмулятор консоли

Post by HaRT »

Latest post of the previous page:

hoopoe
Прошу код в таком количестве всё-таки приложением, а не прямо в текст.
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

Re: ConEmu: Console Emulator — эмулятор консоли

Post by t-rex »

HaRT
Да оставь, пусть себе тут программируют. Смертные в этой теме уже давно ничего не понимают :)

User avatar
hoopoe
Posts: 263
Joined: Mon 28 Mar, 2005 07:44
Location: Нежный Новгород
Has thanked: 1 time
Contact:

Re: ConEmu: Console Emulator — эмулятор консоли

Post by hoopoe »

еще бага: если ConEmu развернуть на весь экран, то все скроллеры пропадают...

User avatar
NightRoman
Posts: 5920
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 12 times
Been thanked: 14 times
Contact:

Re: ConEmu: Console Emulator — эмулятор консоли

Post by NightRoman »

hoopoe wrote:еще бага: если ConEmu развернуть на весь экран, то все скроллеры пропадают...
у меня не проявляется...

al666
Posts: 237
Joined: Mon 04 Jul, 2005 08:55
Been thanked: 1 time

Re: ConEmu: Console Emulator — эмулятор консоли

Post by al666 »

hoopoe wrote:а кто-нить кроме меня тут связку ConEmu + ConMan гоняет?
Я периодически пытаюсь запустить.

Щас поставил обе ваши тестовые версии.

Когда открываю альтернативную консоль как-то они странно взаимодействуют.

Если не указывать ключ conemu /BufferHeight 1000 - выделение мышкой в конмане невидимое, однако выделенный кусок в буфер копирует.

Если же указать ключ conemu /BufferHeight 1000, тогда выделение нормальное, однако такой способ запуска плохо стыкуется с работой в FAR'е.

User avatar
NightRoman
Posts: 5920
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 12 times
Been thanked: 14 times
Contact:

Re: ConEmu: Console Emulator — эмулятор консоли

Post by NightRoman »

Если не указывать ключ conemu /BufferHeight 1000 - выделение мышкой в конмане невидимое, однако выделенный кусок в буфер копирует.
Это не бага. В нормальном режиме (без /BufferHeight) считается, что конему заточен под Фар, а Фар сам занимается выделением.
Если же указать ключ conemu /BufferHeight 1000, тогда выделение нормальное, однако такой способ запуска плохо стыкуется с работой в FAR'е.
Я бы тоже сказал, что это нормально ибо в режиме прокрутки конему не предназначен для Фара (по крайней мере, в моем видении).

User avatar
hoopoe
Posts: 263
Joined: Mon 28 Mar, 2005 07:44
Location: Нежный Новгород
Has thanked: 1 time
Contact:

Re: ConEmu: Console Emulator — эмулятор консоли

Post by hoopoe »

во втором случае можно включить альтернативную консоль и сразу ее выключить - фар вернется в нормальное состояние...

User avatar
hoopoe
Posts: 263
Joined: Mon 28 Mar, 2005 07:44
Location: Нежный Новгород
Has thanked: 1 time
Contact:

Re: ConEmu: Console Emulator — эмулятор консоли

Post by hoopoe »

поигравшись с последней версией стало понятно, что логика выбора размеров консоли вызывает некоторую критику :)

итак, для случая без /BufferHeight - все понятно... стандартное поведение более чем устраивает... а вот для случая с /BufferHeight логика должна быть следующей:

размерность по X - целиком управляется ConEmu... это не интересно... а вот с Y - тут все не просто... когда ConEmu решает поменять размер окна по вертикали, то он должен посмотреть, имеет ли текущее консольное окно полосу прокрутки... и если нет - то выставить тот размер консоли, которое посчитает нужным... но если полоса прокрутки таки есть, то вертикальные размеры консольного буфера меняться не должны, изменяться может только само окно... код примерно такой:
ConEmu.cpp: 189
убрать этот код:
if (csbi.dwSize.X != size.X || csbi.dwSize.Y != pVCon->BufferHeight)
{
csbi.dwSize.X = size.X;
if (csbi.dwSize.Y == csbi.srWindow.Bottom - csbi.srWindow.Top + 1 || pVCon->BufferHeight < size.Y)
csbi.dwSize.Y = size.Y;
else
csbi.dwSize.Y = pVCon->BufferHeight;
SetConsoleScreenBufferSize(pVCon->hConOut(), csbi.dwSize);
}

и заменить его на этот:
csbi.dwSize.X = size.X;

if(csbi.dwSize.Y == csbi.srWindow.Bottom - csbi.srWindow.Top + 1)
csbi.dwSize.Y = size.Y;
else
csbi.dwSize.Y = max(csbi.dwSize.Y, size.Y);
SetConsoleScreenBufferSize(pVCon->hConOut(), csbi.dwSize);

User avatar
NightRoman
Posts: 5920
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 12 times
Been thanked: 14 times
Contact:

Re: ConEmu: Console Emulator — эмулятор консоли

Post by NightRoman »

hoopoe
Ну не пойдет же это (в таком виде), мы ж один раз уже вставали на эту граблю. Опять получается, что /BufferHeight НИКОГДА не устанавливается, а будет взят из дефолтных настроек консоли. Это не то, как задумано.

User avatar
hoopoe
Posts: 263
Joined: Mon 28 Mar, 2005 07:44
Location: Нежный Новгород
Has thanked: 1 time
Contact:

Re: ConEmu: Console Emulator — эмулятор консоли

Post by hoopoe »

да, согласен... этот вариант далек от идеала... но мне кажется что buffer height должен выстреливать только один раз, в момент создания консоли и больше нигде не всплывать в качестве значения (а только лишь как влаг что прокрутка разрешена)...

как думаешь?

User avatar
NightRoman
Posts: 5920
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 12 times
Been thanked: 14 times
Contact:

Re: ConEmu: Console Emulator — эмулятор консоли

Post by NightRoman »

Да, думаю, такой подход должен сработать. Но я все, пасую на неделю, удачи :)

User avatar
NightRoman
Posts: 5920
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 12 times
Been thanked: 14 times
Contact:

Re: ConEmu: Console Emulator — эмулятор консоли

Post by NightRoman »

hoopoe
Ну как с уточненным вариантом твоего изменения, все ОК? Выложи тогда этот код, я включу его в очередную тестовую версию. И добавлю еще от себя фикс небольшого дефекта в отрисовке курсора (может, никто и не заметил, но он есть).

User avatar
hoopoe
Posts: 263
Joined: Mon 28 Mar, 2005 07:44
Location: Нежный Новгород
Has thanked: 1 time
Contact:

Re: ConEmu: Console Emulator — эмулятор консоли

Post by hoopoe »

а какой код выложить?

User avatar
NightRoman
Posts: 5920
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 12 times
Been thanked: 14 times
Contact:

Re: ConEmu: Console Emulator — эмулятор консоли

Post by NightRoman »

hoopoe wrote:да, согласен... этот вариант далек от идеала... но мне кажется что buffer height должен выстреливать только один раз, в момент создания консоли и больше нигде не всплывать в качестве значения (а только лишь как влаг что прокрутка разрешена)...
Тот, что чуть выше, но с уточнением, о котором ты пишешь. Если ты это не пробовал еще - нет проблем, сделаю сам. А есть уже есть, то лучше просто давай его сюда.

User avatar
hoopoe
Posts: 263
Joined: Mon 28 Mar, 2005 07:44
Location: Нежный Новгород
Has thanked: 1 time
Contact:

Re: ConEmu: Console Emulator — эмулятор консоли

Post by hoopoe »

не, нету... как-то не нужно было... стартовую консоль фар сам выставляет... а все остальные - у меня конман разруливает...

User avatar
NightRoman
Posts: 5920
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 12 times
Been thanked: 14 times
Contact:

Re: ConEmu: Console Emulator — эмулятор консоли

Post by NightRoman »

= Experimental BufferHeight and some fixes 2008.07.03 =

*) Приятное наблюдение: консольные приложения в режиме с высотой буфера работают
"быстрее". Если приложение "делает мало, а выводит на консоль часто", то время
выполнения в 1.5-2.5 раза меньше под ConEmu, чем в обычной консоли. Видимо,
сказывается "скупая" тактика отрисовки в ConEmu и то, что нет физической
отрисовки в оригинальной консоли, которая довольно дорогая, получается.

*) Исправлен мелкий дефект в отрисовке курсора: он мог ошибочно оставаться
отрисованным в поле ввода после перехода с поля ввода на кнопку или другой
элемент диалога, при активации которого курсор должен скрываться.

*) Уточнение в установке параметров окна консоли в буфер режиме: при первом
вызове устанавливаем высоту буфера /BufferHeight, при последующих смотрим на
наличие вертикальной прокрутки: если есть, то сохраняем текущую высоту буфера
(она может быть уже и не равна /BufferHeight), иначе подгоняем под высоту окна.

Для тех, кто не следил за эпопеей с поддержкой высоты буфера - подробности
использования и остальные изменения описаны в файле About-ConEmu-Changes.txt

EDIT: latest version is here
http://forum.farmanager.com/viewtopic.p ... 284#p39284
Last edited by NightRoman on Sun 18 Jan, 2009 14:21, edited 1 time in total.

Post Reply

Return to “Операционные системы, командные оболочки и прочее”