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

Здесь обсуждаются темы, косвенно связанные с Far.
Post Reply
User avatar
techie
Posts: 795
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 35 times
Been thanked: 6 times

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

Post by techie »

Чего нарыл - http://mridgers.github.io/clink/ - клёвая штука.

UPDATE: Сайт переехал.
Last edited by techie on Sat 11 Oct, 2014 08:03, edited 1 time in total.
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

Подтверждаю, для тех, кто привык работать в bash, штука очень полезная.
К сожалению, некоторых вкусностей в ней тоже нет, например, HISTCONTROL=erasedups. Или мои сведения устарели?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

А расскажите для тех кто не привык работать в баше, что в этом клинке?
Беглый просмотр показал
- настраиваемое автодополнение командной строки, по типу YAC
- особые шорткаты для работы с командной строкой (перемещение, выделение, блоки, история)

Conemu поддерживает clink.
Но насколько я понимаю, в фаре всё это неприменимо?
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

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

Post by Skirda »

Для фара - полезна идея по "уточнению" работы дополнения ком.строки. Не просто из истории, а и умное дополнение параметров для разных исполняемых модулей (естественно настраиваемое).
We are the Borg. You will be assimilated.
So Say We All!
User avatar
techie
Posts: 795
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 35 times
Been thanked: 6 times

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

Post by techie »

Во-первых, начну с того, с чем Far не справляется и почему я периодически отстреливаю cmd.exe из текущего окружения и стартую команды в нём.

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

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

clink это фиксит. Плюс у него есть API на Lua если чё.
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

techie wrote:запускать скрипты, которые при ошибке выдают пару страниц текста. Far не позволяет проскроллить вывод обратно, если ты не позаботился добавить view:< префикс в начале
Это уже несколько лет не так, поищите "/w".
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
techie
Posts: 795
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 35 times
Been thanked: 6 times

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

Post by techie »

О, крутяк. Списбо. Только кто ж об этом знает? =)

Есть, правда, один ньюансик - теперь уродливый скролл бар портит вид панелей. Можно сделать так, чтобы он появлялся только когда панели выключены?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

>Можно сделать так, чтобы он появлялся только когда панели выключены?
Вопрос когда-то подымался, с точки зрения разработчиков овчинка не стоит выделки.
Попробуйте написать на мантис.
User avatar
techie
Posts: 795
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 35 times
Been thanked: 6 times

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

Post by techie »

Эээ, попытался найти - вдруг баг уже существует. Там поиск есть вообще на этом Мантисе? http://bugs.farmanager.com/my_view_page.php
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

techie wrote: Mon 13 Oct, 2014 07:15один ньюансик - теперь уродливый скролл бар портит вид панелей. Можно сделать так, чтобы он появлялся только когда панели выключены?
На всякий случай напишу для следующих интересующихся.
Conemu убирает скролл-бар, возможность пролистывать весь вывод остается
Last edited by Xerox on Mon 25 Nov, 2019 12:01, edited 2 times in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post 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 раз профи
Post Reply

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