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

Здесь обсуждаются темы, косвенно связанные с Far.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

Latest post of the previous page:

Zoin
Нет, это ненормально. Это капкан, о котором тоже стоит подумать (сегодня утром я думал уже что у меня крыша едет).
Ты запусти
ConEmu.exe /bufferheight 9999 /cmd cmd.exe
а иначе берется сохраненная командная строка из реестра, и там ведь никакого /bufferheight 9999 нет...
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

Zoin
Получилось? Или я тоже чего-то не понял, почему у тебя не сработало. Если задаем BufferHeight (достаточно большой), то полоса прокрутки должна быть сразу и весь буфер сразу должен быть в наличии, прокручивай как хочешь, хоть с текстом, хоть без.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

Как подружить с конманом - давайте думать вместе. Можно еще какой-то ключ добавить, чтобы запустить с буфером, но все-таки устанавливать родителя окна. Тогда в конмане выделение работать все-таки будет, но с дефектом - скачки в левый верхний угол иногда. Решайте, предлагайте, сделаю.
User avatar
Zoin
Posts: 101
Joined: Sun 11 Feb, 2007 19:28

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

Post by Zoin »

NightRoman
Не, не помогает. Полосы прокрутки кстати сразу нет (а точнее она быстро моргает и исчезает с самого начала).
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

Это, а такой флаг вроде уже даже есть "Update Console handle". Вы когда конему с конманом пользуете, этот флаг должне быть установлен? Если да, то я его тогда могу и задействовать.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

Zoin wrote:Не, не помогает. Полосы прокрутки кстати сразу нет (а точнее она быстро моргает и исчезает с самого начала).
Прикольно. А какой у тебя размер буфера у дефолтных настроек консоли? (не знаю пока к чему это, но так, на всякий случай).
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 »

NightRoman wrote:Как подружить с конманом - давайте думать вместе.
можно поиграться с функами GetWindowThreadProcessId, EnumWindows и GetClassName... т.е. берем процесс, который сделал консоль, потом перебираем все окна с нужным классом и находим то окно, у которого тот-же самый процесс... если нашли - то вот оно окно ConEmu... если нет - то считаем что живем в честной консоле...
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

Zoin

*) WM_RBUTTONUP: разобрался, в том смысле, что смог воспроизвести нежелательное меню консоли по правому клику. То есть на данный момент согласен - оставим, как было (и я добавлю коммент в код на будущее). На самом деле когда-нибудь какое-нибудь приложение захочет это событие, но пока примеров нет - заморачиваться не стоит. Завтра обновлю тестовую версию с учетом этого.
*) WM_MOUSEWHEEL: все еще неясно, продолжаю искать подвох.
*) WM_RBUTTONDBLCLK -> WM_RBUTTONDOWN: тоже неясно, может туплю (в одном режиме в панелях Фара элементы выделяются \ развыделяются, в другом становятся текущими и появляется меню - все как я ожидаю). Опиши подробнее, если не лень, в чем неудобство "стандарного" поведения и где подвох. Если лень - забудем, проблем с этим вроде нет.

Почему ж у тебя не работает режим с прокруткой? Не прояснилось?
User avatar
Zoin
Posts: 101
Joined: Sun 11 Feb, 2007 19:28

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

Post by Zoin »

NightRoman
Нет, всё тоже самое.
Width: 115
Height: 50
хотя и правда не ясно чем оно поможет. Про WM_RBUTTONDBLCLK -> WM_RBUTTONDOWN - достаточно быстро покликать правой кнопкой в панелях по папке - с костылём и без него - думаю будет сразу заметно в чём разница (если конечно райтклик ни на что другое не переопределён)
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

Zoin
Высота дефолтного буфера необычно мала (у тебя в дефолтной консоли тоже нет прокрутки?), может, в этом дело, попробуй увеличить. Если не поможет, я не знаю, в чем дело, тебе и карты в руки, попробуй разобраться - поможешь и себе, и другим.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

= Experimental BufferHeight 2008.06.26 =

Суммирую все изменения с начала эпопеи BufferHeight.

ЗАПУСК С УСТАНОВКОЙ ВЫСОТЫ БУФЕРА КОНСОЛИ (РЕЖИМ ПРОКРУТКИ)

Дополнительный ключ: /BufferHeight <высота буфера>. Примеры:
conemu /BufferHeight 9999 /cmd cmd.exe
conemu /bufferheight 1000 /cmd powershell.exe -noexit myscript.ps1

ПОДДЕРЖКА CONMAN: если величина /BufferHeight отрицательная, то это является
указанием принудительно установить родителя консольного окна. Это может быть
нужно, например, для нормальной работы с ConMan. Замечание: в таком режиме в
процессе выделения мышью выделение может скакнуть в левый верхний угол - как
бороться - пока неясно, но если продолжать выделение, оно "восстанавливается".

Если команда /cmd не задана, берется сохраненная команда из реестра, если есть,
а если нет, то в режиме прокрутки запускается "cmd", а в стандартном режиме
сначала пытаемся запустить "far", потом "cmd".

Проверка на слишком маленькую или слишком большую заданную высоту буфера не
делается, рекомендуется выбирать ее так, что она заведомо больше высоты окна (в
строках), но не больше 9999, что является магическим ограничением высоты буфера
в виндовом диалоге настроек консоли.

Режим прокрутки предназначен в первую очередь для интерактивных сессий в
оболочках типа Cmd или PowerShell и не предназначен для программ типа FAR.
FAR, как и раньше следует запускать без всяких /BufferHeight - при этом
установка родителя окна консоли ДЕЛАЕТСЯ, то есть плагины, которые этого
ожидают, это и получают.

ОПИСАНИЕ РЕЖИМА ПРОКРУТКИ

*) Окно имеет стандартную вертикальную полосу прокрутки.
*) Управление прокруткой с клавиатуры:
- CtrlPgUp, CtrlPgDn листают страницы вверх-вниз
- CtrlUp, CtrlDn прокручивают вверх-вниз построчно
*) Работа с выделением только мышью: выделение - левой кнопкой с перемещением,
копирование и вставка - правой кнопкой.

ТЕХНИЧЕСКИЕ ПОДРОБНОСТИ (В ТОМ ЧИСЛЕ ДЛЯ НЕДАВНИХ ОБСУЖДЕНИЙ)

*) Реализована отрисовка выделения (работает только в режиме прокрутки).
*) В режиме прокрутки положение окна консоли подгоняется под положение мыши -
это нужно для корректной работы выделения в оригинальной консоли.
*) В режиме прокрутки при старте устанавливаем QuickEdit режим, это нужно для
возможности выделения мышью в оригинальной консоли.
*) WM_MOUSEWHEEL теперь обрабатывается как событие мыши, нужно для прокрутки.
*) WM_RBUTTONUP НЕ обрабатывается (как и было раньше), чтобы избежать
нежелательного появления консольного меню в некоторых ситуациях.
*) WM_RBUTTONDBLCLK преобразовывается в WM_RBUTTONDOWN (как и было раньше). По
задумке Zoin это помогает быстро быделить и тут же развыделить элемент панели
Фара двойным правым кликом (не знаю зачем, но считаем, что автору видней).

P.S. на случай, если есть\будут вопросы, пока я еще тут, потом на неделю пропаду.

EDIT: removed obsolete archive
Last edited by NightRoman on Thu 03 Jul, 2008 09:41, edited 1 time in total.
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 + ConMan гоняет?
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:

HWND ConsoleWindow = GetConsoleWindow();
HWND ConEmuWindow = 0;

static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
TCHAR buffer[MAX_PATH];

DWORD process = (DWORD)lParam;

if(GetClassName(hwnd, buffer, sizeof(buffer) / sizeof(*buffer)))
{
if(!lstrcmp(buffer, _T("VirtualConsoleClass")))
{ // ok, found ConEmu window...
DWORD proc = 0;
DWORD thread = GetWindowThreadProcessId(hwnd, &proc);
if(proc == process)
{ // great!!! we found ConEmu window
ConEmuWindow = hwnd;

return FALSE;
}
}
}
return TRUE;
}

static bool DetectConEmu()
{
ConEmuWindow = 0;

DWORD firstProcess = 0;
if(!GetWindowThreadProcessId(ConsoleWindow, &firstProcess))
return false;

EnumWindows(EnumWindowsProc, (LPARAM)firstProcess);

if(ConEmuWindow)
return true;
return false;
}
Last edited by hoopoe on Thu 26 Jun, 2008 11:41, edited 3 times in total.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 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 »

NightRoman wrote:hoopoe
Правильно я понимаю: ты это добавляешь в конман, приседания с отрицательной высотой буфера использовать необязательно, и выделение в конему под конманом прекрасно работает в "режиме прокрутки"?
да, правильно... вот тут приаттачено... если кто попробует и отпишется - то будет респект...
Attachments
Release.rar
(35.47 KiB) Downloaded 180 times
User avatar
HaRT
Moderator
Posts: 10866
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

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

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