ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Здесь обсуждается всё, что касается макросов.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by buniak_a_h »

Макрос навеян этим:
PieApple wrote: Thu 23 Jan, 2014 12:57 Еще хотел бы поделиться идеей, реализованной в Проводнике с Windows 7, Total Commander, что если нажать мышкой на имя папки в адресной строке сверху, то происходит переход вверх на эту папку.
На самом деле получилось прикольно и, возможно, полезно (если Вы любите настольных грызунов).
Суть:
Клик мышой на заголовке панели, содержащей имя папки, вызывает переход (как в проводнике). А если клик приходится на разделитель (бэкслэш), то предоставляется выбор, в какую папку перейти.
Первоначальный макрос сваян «на коленке» за полчасика, потому не судите строго. Если будут отзывы и замечания — попробую «докрутить».

Начиная с этой версии я перестал выкладывать текст скрипта в сообщении (уж больно трудоёмко стало, т.к. он вырос). Тем более что “Select all” на сайте опять перестал работать. Теперь только во вложении в виде 7z-архива.
Сведения о версии:
Версия 1.4.12.
  1. Исправлена ошибка процедуры настройки, возникшая из-за изменения интерфейса. Ошибка проявлялась при вызове настройки сликом средней клавиши (колёсиком) на заголовке панели.
  2. Сделана возможность вызова диалога настройки скрипта через меню настроек плагинов.
ClickToTitleDir-1.4.12.7z
(24.95 KiB) Downloaded 32 times

Вместе с файлом самого скрипта поставляются языковые файлы ClickToTitleDirRus.lng и ClickToTitleDirEng.lng и файл помощи ClickToTitleDirRus.hlf.
Last edited by buniak_a_h on Mon 25 Dec, 2023 02:15, edited 69 times in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by John Doe »

Latest post of the previous page:

citRiks wrote: Wed 20 Jan, 2021 09:57 но не смею надеятся
И правильно делаете.
Чтобы иметь надежду надо предоставить минимальный пример, вызывающий проблему.

А сама функция насколько я понимаю изначально скопирована из BufferScroll.lua.
Поскольку там с ней проблем нет, предполагаю что проблема в неправильном её использовании.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by buniak_a_h »

John Doe wrote: Wed 20 Jan, 2021 10:11 А сама функция насколько я понимаю изначально скопирована из BufferScroll.lua.
Видимо, нет;
buniak_a_h wrote: Mon 04 May, 2020 11:19
John Doe wrote: Mon 04 May, 2020 11:05 Пример чтения текста (но не цвета) есть в скрипте BufferScroll.
Спасибо, конечно, но… Есть и в ClickToTiltleDir-е. Я же читаю с консоли! Разве не Вы назвали мой первый вариант (через граббер) "варварским"?
Т.е. к тому времени, когда Вы мне про BufferScroll.lua написали, тут уже было чтение с консоли. Чуть выше - ссыль на мелкомягкое описание.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by John Doe »

buniak_a_h wrote: Wed 20 Jan, 2021 10:27 Т.е. к тому времени, когда Вы мне про BufferScroll.lua написали, тут уже было чтение с консоли. Чуть выше - ссыль на мелкомягкое описание.
Т.е. вы хотите сказать что возможно всё было наоборот, и код этой функции в BufferScroll.lua был взят из вашего скрипта (идентичность кода видна даже покомментариям).
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by buniak_a_h »

John Doe wrote: Wed 20 Jan, 2021 11:14 вы хотите сказать…
Я ничего не хочу сказать, кроме того, что написал. Я этот скрипт не смотрел, но:
1. Имена переменных - из описания функции от MS. Поэтому совпадение вполне вероятно.
2. Всякие nLength - это точно моё.
3. Получение информации о консоли и "подгонка" вертикальной координаты в зависимости от размеров окна FAR-а и размера буфера консоли - это точно моё. Помню, как рождалось в муках в зависимости от вертикальной позиции.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by John Doe »

Поймите правильно, я вовсе не против чтобы вы использовали мой код, каким бы образом он к вам ни попал.
Но вы заявляете "Я даже не знаю, что такое wchar_t", поэтому я и обращаю внимание, что если где-то вашем собственном коде закралась ошибка, может оказаться проще найти её сравнив с оригинальной реализацией.
https://t.me/FarManager — Telegram чат
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by citRiks »

John Doe, buniak_a_h,
на всякий случай напоминаю,
что вся грусть ситуации в том что ошибка случается только у меня,
поэтому непонятно в коде ли ошибка, или какие-то чудеса у меня вдруг стали творится на двух компах и всех версиях ФАРа одновременно,
когда раньше все было Ок и у меня тоже
Замена wchar_t на char как-то помогла, т.е. строка стала читаться,
но потом ФАР умирает изза нарушения доступа к памяти (уже после чтений из консоли),
и уже "на лету", и уже без видимых на то причин
Кажется это связано с УТФ8 опять, потому что замены всяких :суб(...)/:лен(...)/:матч(...) на их аналоги "стринг.***(...)" делает вылеты по нарушению доступа отложенными, а может и совсем все решает,
но не успел допроверить эту тему.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by buniak_a_h »

John Doe, я использовал это слово в процедуре копирования файлов (копирование со временной панели с сохранением структуры папок; Вы, наверно, видели). Скорее всего, делал по аналогии.
Сейчас я уже не помню, но, исходя из приведённой цитаты, к тому времени, когда Вы посоветовали мне этот скрипт, я уже написал. Я эту же тему обсуждал в конференции "Нужна помощь" - может, мне там что-то написали.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by buniak_a_h »

citRiks, а попробуйте удвоить размер буфера: заменить
local lpCharacter = ffi.new("wchar_t[?]",nLength)
на
local lpCharacter = ffi.new("wchar_t[?]",nLength*2)
Last edited by buniak_a_h on Wed 20 Jan, 2021 19:07, edited 1 time in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by citRiks »

buniak_a_h, идея хорошая, только еще утром я изза таких идей на работу опоздал :)
и спал сильно меньше скажем так
сейчас подготовлю минимальный пример с вызовом этой функции,
может это поможет получить помощь от сишников и обяснить это все..
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by citRiks »

вот прекрасный минимальный пример

Code: Select all

--[[ Based on BufferScroll.Lua @JD from here:
http://forum.farmanager.com/viewtopic.php?f=60&t=8675
--]]

local ffi = require("ffi")
local C = ffi.C
ffi.cdef([[
//https://docs.microsoft.com/en-us/windows/console/getstdhandle
HANDLE GetStdHandle(		//WINAPI
	DWORD nStdHandle	//_In_
);
//https://docs.microsoft.com/en-us/windows/console/setconsolescreenbuffersize
BOOL SetConsoleScreenBufferSize(//WINAPI
	HANDLE hConsoleOutput,	//_In_
	COORD  dwSize		//_In_
);
//https://docs.microsoft.com/en-us/windows/console/readconsoleoutputcharacter
BOOL ReadConsoleOutputCharacterW(//WINAPI
	HANDLE hConsoleOutput,		//_In_
	LPTSTR lpCharacter,		//_Out_
	DWORD nLength,			//_In_
	COORD dwReadCoord,		//_In_
	LPDWORD lpNumberOfCharsRead	//_Out_
);
]])
local	STD_OUTPUT_HANDLE = ffi.new("DWORD", -11)
local	INVALID_HANDLE_VALUE = ffi.cast("HANDLE", -1)
local	hConsoleOutput = C.GetStdHandle(STD_OUTPUT_HANDLE)
if	hConsoleOutput == INVALID_HANDLE_VALUE then return end
--[[ this code is coming from original BufferScrol,
-- but seems to be not required for minimal example:
if	win.GetConsoleScreenBufferInfo().WindowTop == 0 and O.height
then	local dwSize = ffi.new("COORD", win.GetConsoleScreenBufferInfo().SizeX, O.height)
	panel.GetUserScreen()
	C.SetConsoleScreenBufferSize(hConsoleOutput, dwSize)
	panel.SetUserScreen()
end --]]
local wSize = ffi.sizeof("wchar_t")
local dwReadCoord = ffi.new("COORD")
local lpNumberOfCharsRead = ffi.new("DWORD[1]")

local function ReadConsoleOutputCharacter(x, y, read_len, lpCharacter)
	dwReadCoord.X = x
	dwReadCoord.Y = y
	lpCharacter = lpCharacter or
		--[[ original code, fails immediatly with the error:
		-- bad argument #2 to 'ReadConsoleOutputCharacterW'
		-- (cannot convert 'unsigned short [?]' to 'char *')
		ffi.new("wchar_t[?]",	read_len) --]]
		-- [[ my attempt to be smart, fails not immediatly,
		-- but after second or third attempt to run it again: ]]
		ffi.new("char[?]", read_len)
	local	read_res = C.ReadConsoleOutputCharacterW(
			hConsoleOutput,
			lpCharacter,
			read_len,
			dwReadCoord,
			lpNumberOfCharsRead
				)
	if	read_res > 0
	then	local	chr_len = lpNumberOfCharsRead[0]
			--[[ this size multiplicator is from origibnal code,
			but how it need to be adjusted upon changeing to "char[?]" ? (originally "wchar_[?]") --]]
			* wSize
		--[[ let' right  now lnot to deal with unicode conversions:
		local	str_raw = ffi.string(lpCharacter, chr_len)
		local	str_res = win.Utf16ToUtf8(str_raw) --]]
		return	str_res, chr_len
	end
	far.Message(debug.getinfo(2).currentline, nil, nil, "ewl")
end

Macro { description = "Test FFi ReadConsoleOutputCharacter(...)";
	area = "Common"; key = "CtrlShiftR";
	action = function()
		local cons_buff_info = win.GetConsoleScreenBufferInfo()
		-- read from top left corner:
		local coord_X = cons_buff_info.WindowLeft
		local coord_Y = cons_buff_info.WindowBottom - Far.Height + 1
		-- read size of far screen width:
		local read_len = Far.Width
		local str_read, str_size = ReadConsoleOutputCharacter(coord_X, coord_Y, read_len, nil)
		far.Message(str_read or "<NOTHING>", str_size)
	end
}
Взываю всех добрых сишников о помосчи :cry:
Last edited by citRiks on Wed 20 Jan, 2021 22:54, edited 1 time in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by citRiks »

В кодебоксе для пущей читабельности:
  1. --[[ Based on BufferScroll.Lua @JD from here:
  2.  
  3. http://forum.farmanager.com/viewtopic.php?f=60&t=8675
  4.  
  5. --]]
  6.  
  7.  
  8.  
  9. local ffi = require("ffi")
  10.  
  11. local C = ffi.C
  12.  
  13. ffi.cdef([[
  14.  
  15. //https://docs.microsoft.com/en-us/windows/console/getstdhandle
  16.  
  17. HANDLE GetStdHandle(        //WINAPI
  18.  
  19.     DWORD nStdHandle    //_In_
  20.  
  21. );
  22.  
  23. //https://docs.microsoft.com/en-us/windows/console/setconsolescreenbuffersize
  24.  
  25. BOOL SetConsoleScreenBufferSize(//WINAPI
  26.  
  27.     HANDLE hConsoleOutput,  //_In_
  28.  
  29.     COORD  dwSize       //_In_
  30.  
  31. );
  32.  
  33. //https://docs.microsoft.com/en-us/windows/console/readconsoleoutputcharacter
  34.  
  35. BOOL ReadConsoleOutputCharacterW(//WINAPI
  36.  
  37.     HANDLE hConsoleOutput,      //_In_
  38.  
  39.     LPTSTR lpCharacter,     //_Out_
  40.  
  41.     DWORD nLength,          //_In_
  42.  
  43.     COORD dwReadCoord,      //_In_
  44.  
  45.     LPDWORD lpNumberOfCharsRead //_Out_
  46.  
  47. );
  48.  
  49. ]])
  50.  
  51. local   STD_OUTPUT_HANDLE = ffi.new("DWORD", -11)
  52.  
  53. local   INVALID_HANDLE_VALUE = ffi.cast("HANDLE", -1)
  54.  
  55. local   hConsoleOutput = C.GetStdHandle(STD_OUTPUT_HANDLE)
  56.  
  57. if  hConsoleOutput == INVALID_HANDLE_VALUE then return end
  58.  
  59. --[[ this code is coming from original BufferScrol,
  60.  
  61. -- but seems to be not required for minimal example:
  62.  
  63. if  win.GetConsoleScreenBufferInfo().WindowTop == 0 and O.height
  64.  
  65. then    local dwSize = ffi.new("COORD", win.GetConsoleScreenBufferInfo().SizeX, O.height)
  66.  
  67.     panel.GetUserScreen()
  68.  
  69.     C.SetConsoleScreenBufferSize(hConsoleOutput, dwSize)
  70.  
  71.     panel.SetUserScreen()
  72.  
  73. end --]]
  74.  
  75. local wSize = ffi.sizeof("wchar_t")
  76.  
  77. local dwReadCoord = ffi.new("COORD")
  78.  
  79. local lpNumberOfCharsRead = ffi.new("DWORD[1]")
  80.  
  81.  
  82.  
  83. local function ReadConsoleOutputCharacter(x, y, read_len, lpCharacter)
  84.  
  85.     dwReadCoord.X = x
  86.  
  87.     dwReadCoord.Y = y
  88.  
  89.     lpCharacter = lpCharacter or
  90.  
  91.         --[[ original code, fails immediatly with the error:
  92.  
  93.         -- bad argument #2 to 'ReadConsoleOutputCharacterW'
  94.  
  95.         -- (cannot convert 'unsigned short [?]' to 'char *')
  96.  
  97.         ffi.new("wchar_t[?]",   read_len) --]]
  98.  
  99.         -- [[ my attempt to be smart, fails not immediatly,
  100.  
  101.         -- but after second or third attempt to run it again: ]]
  102.  
  103.         ffi.new("char[?]", read_len)
  104.  
  105.     local   read_res = C.ReadConsoleOutputCharacterW(
  106.  
  107.             hConsoleOutput,
  108.  
  109.             lpCharacter,
  110.  
  111.             read_len,
  112.  
  113.             dwReadCoord,
  114.  
  115.             lpNumberOfCharsRead
  116.  
  117.                 )
  118.  
  119.     if  read_res > 0
  120.  
  121.     then    local   chr_len = lpNumberOfCharsRead[0]
  122.  
  123.             --[[ this size multiplicator is from origibnal code,
  124.  
  125.             but how it need to be adjusted upon changeing to "char[?]" ? (originally "wchar_[?]") --]]
  126.  
  127.             * wSize
  128.  
  129.         --[[ let' right  now lnot to deal with unicode conversions:
  130.  
  131.         local   str_raw = ffi.string(lpCharacter, chr_len)
  132.  
  133.         local   str_res = win.Utf16ToUtf8(str_raw) --]]
  134.  
  135.         return  str_res, chr_len
  136.  
  137.     end
  138.  
  139.     far.Message(debug.getinfo(2).currentline, nil, nil, "ewl")
  140.  
  141. end
  142.  
  143.  
  144.  
  145. Macro { description = "Test FFi ReadConsoleOutputCharacter(...)";
  146.  
  147.     area = "Common"; key = "CtrlShiftR";
  148.  
  149.     action = function()
  150.  
  151.         local cons_buff_info = win.GetConsoleScreenBufferInfo()
  152.  
  153.         -- read from top left corner:
  154.  
  155.         local coord_X = cons_buff_info.WindowLeft
  156.  
  157.         local coord_Y = cons_buff_info.WindowBottom - Far.Height + 1
  158.  
  159.         -- read size of far screen width:
  160.  
  161.         local read_len = Far.Width
  162.  
  163.         local str_read, str_size = ReadConsoleOutputCharacter(coord_X, coord_Y, read_len, nil)
  164.  
  165.         far.Message(str_read or "<NOTHING>", str_size)
  166.  
  167.     end
  168.  
  169. }
Last edited by citRiks on Wed 20 Jan, 2021 22:53, edited 5 times in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by citRiks »

для удобства рассмотрения,
это я тут просуммировал исходные данные и изыскания:
citRiks wrote: Tue 19 Jan, 2021 19:59 Одинаково падает на таких версиях ФАРа:
Far Manager, version 3.0.5718.0 x64
Far Manager, version 3.0.5675.0 x86
Far Manager, version 3.0.5687.0 x86
Far Manager, version 3.0.5730.0 x86 ("latest night build")
Windows 7 SP1, х86/х64, Хоме/Проф.

Проверял на двух компах - одно и то же
некоторые проверенные версии ФАРа не самые новые,
и я что-то не совсем понимаю почему я раньше не падало,
вроде совсем не давно ведь пользовался
citRiks wrote: Tue 19 Jan, 2021 20:24 какая-то сложная заморочка, перестала работать ReadConsoleOutputCharacterW:
ReadConsoleOutputCharacterW' (cannot convert 'unsigned short [?]' to 'char *')
С этим не знаю можете ли вы помочь, но полезно знать повторяется это у других или нет
citRiks wrote: Tue 19 Jan, 2021 20:34 ничего не пменял в последние месяцы, и точно что не на двух компах, хотя может что и было
Visual Studio Code устанавливал, может она чего меняет в консоли, но вряд ли же
Нипонятна ..
..
убрал все плугина добавленные за прошедший год, не помогло это
citRiks wrote: Wed 20 Jan, 2021 09:57 там помогает замена wchar_t[?] на char[?]
но надо тогда пересчитать wsize, и еще какие-то путаницы возникают.
были после этого вылеты, но уже не на этой функции
..
Хотелось бы комментарии/консультации местных сишников ..
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by HaRT »

citRiks wrote: Wed 20 Jan, 2021 22:14 Взываю всех добрых сишников о помосчи
Нет, с неведомых переменных я не согласен. Да и сомнение берёт, что обвязка минимальная.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by citRiks »

HaRT,
подправил, там было действительно что подчистить
но лучше теперь смотреть в комментарии там,
например "str_res" там не присваивается,
но стоит замечание что "это на этом этапе не нужно",
с закоментрованной строчкой присваивания,
которую при надобнсоти (а надобность будет) можно просто разкоменнтировать

Last edited by HaRT on Wed 20 Jan, 2021 23:01, edited 1 time in total.
Reason: Спрятан офтопик
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by buniak_a_h »

HaRT wrote: Wed 20 Jan, 2021 22:32 Да и сомнение берёт, что обвязка минимальная
Я не очень представляю себе, что такое "обвязка", но для тестирования моей функции чтения с экрана подходит, мне кажется, такой скрипт:
  1. local ffi = require"ffi"
  2.  
  3. local C = ffi.C
  4.  
  5. local wsize = ffi.sizeof"wchar_t"
  6.  
  7. local max, min = math.max, math.min
  8.  
  9.  
  10.  
  11. local ReadConsoleLine = function(x,y)
  12.  
  13.  local function InInterval(_x, x1, x2)
  14.  
  15.   _x = _x or x1
  16.  
  17.   return max(min(_x or 0, x2), x1)
  18.  
  19.  end
  20.  
  21.    local STD_OUTPUT_HANDLE = ffi.new("DWORD",-11)
  22.  
  23.  local hConsoleOutput = C.GetStdHandle(STD_OUTPUT_HANDLE)
  24.  
  25.  local dwReadCoord = ffi.new"COORD"
  26.  
  27.  local lpNumberOfCharsRead = ffi.new"DWORD[1]"
  28.  
  29.  x = InInterval(x, 0, Far.Width+1)
  30.  
  31.  y = InInterval(y, 0, Far.Height)
  32.  
  33.  --BAX, 19.01.2021 lpCharacter = lpCharacter or ffi.new("wchar_t[?]",Far.Width)
  34.  
  35.  local info = win.GetConsoleScreenBufferInfo()
  36.  
  37.  local nLength = Far.Width+1
  38.  
  39.  dwReadCoord.X,dwReadCoord.Y = x-info.WindowLeft ,y+(info.WindowBottom - Far.Height+1)
  40.  
  41.  local lpCharacter = ffi.new("wchar_t[?]",nLength)
  42.  
  43.  local res = C.ReadConsoleOutputCharacterW(hConsoleOutput,lpCharacter,nLength-1,dwReadCoord,lpNumberOfCharsRead)
  44.  
  45.  if res>0 then
  46.  
  47.    return win.Utf16ToUtf8(ffi.string(lpCharacter,lpNumberOfCharsRead[0]*wsize))
  48.  
  49.  end
  50.  
  51.  far.Message(debug.getinfo(2).currentline,nil,nil,"ewl")
  52.  
  53. end
  54.  
  55.  
  56.  
  57. local sY = far.InputBox('EBA82BF0-3C3D-4C40-8A15-F58689DE2168', 'Тест чтения с консоли', 'Введи номер строки', nil, '1')
  58.  
  59. while sY do
  60.  
  61.  local nY = tonumber(sY)
  62.  
  63.  if nY then
  64.  
  65.   far.Show(ReadConsoleLine(1,nY))
  66.  
  67.  else
  68.  
  69.   far.Message('Неверная y-координата',nil,nil,'w')
  70.  
  71.  end
  72.  
  73.  sY = far.InputBox('EBA82BF0-3C3D-4C40-8A15-F58689DE2168', 'Тест чтения с консоли', 'Введи номер строки', nil, sY)
  74.  
  75. end
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by citRiks »

HaRT wrote: Wed 20 Jan, 2021 22:32 Да и сомнение берёт, что обвязка минимальная.
обвязка минимальная, а критерий успеха - просто не упасть по ошибке памяти после третьего (на всякий случай пятого) вызова
Вызов делается простым CtrlShiftR.
Но тут трагизм в другом немного, почему у всех работает "wchar_t[?]", а у меня вдруг перестал?
Post Reply

Return to “Обсуждение макросов”