Page 1 of 1

clink - поведение bash/readline для cmd.exe

Posted: Thu 27 Feb, 2014 23:10
by techie
Чего нарыл - http://mridgers.github.io/clink/ - клёвая штука.

UPDATE: Сайт переехал.

Re: clink - поведение bash/readline для cmd.exe

Posted: Fri 28 Feb, 2014 10:51
by HaRT
Подтверждаю, для тех, кто привык работать в bash, штука очень полезная.
К сожалению, некоторых вкусностей в ней тоже нет, например, HISTCONTROL=erasedups. Или мои сведения устарели?

Re: clink - поведение bash/readline для cmd.exe

Posted: Fri 28 Feb, 2014 12:12
by John Doe
А расскажите для тех кто не привык работать в баше, что в этом клинке?
Беглый просмотр показал
- настраиваемое автодополнение командной строки, по типу YAC
- особые шорткаты для работы с командной строкой (перемещение, выделение, блоки, история)

Conemu поддерживает clink.
Но насколько я понимаю, в фаре всё это неприменимо?

Re: clink - поведение bash/readline для cmd.exe

Posted: Fri 28 Feb, 2014 12:26
by Skirda
Для фара - полезна идея по "уточнению" работы дополнения ком.строки. Не просто из истории, а и умное дополнение параметров для разных исполняемых модулей (естественно настраиваемое).

Re: clink - поведение bash/readline для cmd.exe

Posted: Sat 11 Oct, 2014 08:14
by techie
Во-первых, начну с того, с чем Far не справляется и почему я периодически отстреливаю cmd.exe из текущего окружения и стартую команды в нём.

Это отсутствие в Far автоматического буфера с выводом внешней команды. Мне, например, надо работать с SSH консолью на удалённом сервере, и запускать скрипты, которые при ошибке выдают пару страниц текста. Far не позволяет проскроллить вывод обратно, если ты не позаботился добавить view:< префикс в начале, а тогда ты интерактивные части не видишь.

Но cmd.exe редкостный отстой, потому что:
- история между сессиями не сохраняется
- не работает вставка из буфера с клавиатуры - приходится постоянно мышевозюкать
- нет удобняшек типа ctrl-pgup
- дурацкие предложения типа Terminate batch job?

clink это фиксит. Плюс у него есть API на Lua если чё.

Re: clink - поведение bash/readline для cmd.exe

Posted: Sat 11 Oct, 2014 09:42
by HaRT
techie wrote:запускать скрипты, которые при ошибке выдают пару страниц текста. Far не позволяет проскроллить вывод обратно, если ты не позаботился добавить view:< префикс в начале
Это уже несколько лет не так, поищите "/w".

Re: clink - поведение bash/readline для cmd.exe

Posted: Mon 13 Oct, 2014 07:15
by techie
О, крутяк. Списбо. Только кто ж об этом знает? =)

Есть, правда, один ньюансик - теперь уродливый скролл бар портит вид панелей. Можно сделать так, чтобы он появлялся только когда панели выключены?

Re: clink - поведение bash/readline для cmd.exe

Posted: Mon 13 Oct, 2014 07:31
by John Doe
>Можно сделать так, чтобы он появлялся только когда панели выключены?
Вопрос когда-то подымался, с точки зрения разработчиков овчинка не стоит выделки.
Попробуйте написать на мантис.

Re: clink - поведение bash/readline для cmd.exe

Posted: Mon 13 Oct, 2014 08:45
by techie
Эээ, попытался найти - вдруг баг уже существует. Там поиск есть вообще на этом Мантисе? http://bugs.farmanager.com/my_view_page.php

Re: clink - поведение bash/readline для cmd.exe

Posted: Mon 13 Oct, 2014 08:50
by John Doe

Re: clink - поведение bash/readline для cmd.exe

Posted: Mon 13 Oct, 2014 09:43
by techie

clink - поведение bash/readline для cmd.exe

Posted: Mon 25 Nov, 2019 11:55
by Xerox
techie wrote: Mon 13 Oct, 2014 07:15один ньюансик - теперь уродливый скролл бар портит вид панелей. Можно сделать так, чтобы он появлялся только когда панели выключены?
На всякий случай напишу для следующих интересующихся.
Conemu убирает скролл-бар, возможность пролистывать весь вывод остается

clink - поведение bash/readline для cmd.exe

Posted: Wed 06 Jan, 2021 07:58
by citRiks
борюсь с ненужными бордерами и рамками такой шнягой на C#:

Code: Select all

private static void _borderless_far(string[] args)
{
	const int GWL_STYLE = (-16);
	const int GWL_EXSTYLE = (-20);
	int the_pid = -1, parent_pid = -1;
	IntPtr hWnd = IntPtr.Zero;
	Console.WriteLine("hello, we have {0} args", args.Length);
	System.Diagnostics.Process p_self = System.Diagnostics.Process.GetCurrentProcess(), p_parent = null;
	if (args.Length > 0 && int.TryParse(args[0], out the_pid))
	{
		Console.WriteLine("The FAR PID is: {0}", the_pid);
		System.Diagnostics.Process p1 = System.Diagnostics.Process.GetProcessById(the_pid);
		hWnd = p1.MainWindowHandle;
	}
	else
	{
		p_parent = KPDT.KSystem.GetParentProcess(p_self.Id);
		parent_pid = p_parent.Id;
		Console.WriteLine("Parent process name is {0}", p_parent.ProcessName);
		if (p_parent.ProcessName.ToLower() == "far")
		hWnd = p_parent.MainWindowHandle;
	}
	KPDT.WindowStyles wndStyle = (KPDT.WindowStyles)KPDT.KSystem.GetWindowLongPtr(hWnd, GWL_STYLE);
	Console.WriteLine("Style: {0}", wndStyle);
	wndStyle &= ~KPDT.WindowStyles.WS_HSCROLL;
	wndStyle &= ~KPDT.WindowStyles.WS_VSCROLL;
	wndStyle &= ~KPDT.WindowStyles.WS_BORDER;
	wndStyle &= ~KPDT.WindowStyles.WS_THICKFRAME;
	wndStyle &= ~KPDT.WindowStyles.WS_CAPTION;
	wndStyle &= ~KPDT.WindowStyles.WS_EX_LEFTSCROLLBAR;
	wndStyle &= ~KPDT.WindowStyles.WS_EX_RIGHTSCROLLBAR;
	IntPtr res_1 = KPDT.KSystem.SetWindowLongPtr(hWnd, GWL_STYLE, (IntPtr)wndStyle);
	KPDT.WindowStyles wndStyleEx = (KPDT.WindowStyles)KPDT.KSystem.GetWindowLongPtr(hWnd, GWL_EXSTYLE);
	Console.WriteLine("Style ext: {0}", wndStyleEx);
	wndStyleEx &= ~KPDT.WindowStyles.WS_EX_LEFTSCROLLBAR;
	wndStyleEx &= ~KPDT.WindowStyles.WS_EX_RIGHTSCROLLBAR;
	wndStyleEx &= ~KPDT.WindowStyles.WS_EX_STATICEDGE;
	wndStyleEx &= ~KPDT.WindowStyles.WS_EX_WINDOWEDGE;
	wndStyleEx &= ~KPDT.WindowStyles.WS_EX_CLIENTEDGE;
	wndStyleEx &= ~KPDT.WindowStyles.WS_EX_APPWINDOW;
	IntPtr res_2 = KPDT.KSystem.SetWindowLongPtr(hWnd, GWL_EXSTYLE, (IntPtr)wndStyleEx);
	Console.WriteLine("Successfully ({0}, {1}) set window styles for process {2}/{3}", res_1, res_2, p_parent == null ? "(given)" : p_parent.ProcessName, parent_pid);
	// https://docs.microsoft.com/en-us/windows/win32/winmsg/window-styles
	// https://docs.microsoft.com/en-us/windows/win32/winmsg/extended-window-styles
	// https://www.experts-exchange.com/questions/21297321/GetWindowLong-GWL-EXSTYLE-Style-Question.html
	// http://pinvoke.net/default.aspx/Enums/WindowStyles.html
	// GetWindowLongPtr(hwnd, GWL_STYLE && !(WS_BORDER | WS_SIZEBOX | WS_DLGFRAME)));
	// System.Diagnostics.Process[] pp = System.Diagnostics.Process.GetProcessesByName("far");
	// const UInt32 WS_VISIBLE = 0x10000000;
	// KPDT.KSystem.SetWindowLong(windowHandle, GWL_STYLE, (WS_VISIBLE));
	// KPDT.KSystem.MakeExternalWindowBorderless(windowHandle);
}
кусок немного вырван из контекста, но вроде все понятно, и внизу там ссылки по теме
clink - вещь крайне полезная, Сишная + на Луа, думал уже как их обьединить с ФАРом, не придумал.
Так как в Сях не силен, как и в написании чего-то шибко умного и консольного.
Т.е., как, например, показать clink-овский "Ctrl-R" (история как в баше) в ФАРе, не выходя собственно из ФАРа?
Думаю что для ФарГруповских профессионалов в консольных Сях, не составило бы особого труда это сделать,
но по себе в первую очередь знаю что по времени мало чего можно успевать будь ты хоть 100 раз профи