Console Control
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
Console Control
Console Control for FAR 3
Микроплагин для управления размером и шрифтом консольного окна FAR с помощью мыши или клавиатуры.
Микроплагин для управления размером и шрифтом консольного окна FAR с помощью мыши или клавиатуры.
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
Re: Console Control
Latest post of the previous page:
Да ну, нафиг. Там куча команд для Plugin.Call. Всякие экзотические алгоритмы можно реализовать с помощью макросов.- John Doe
- Бюрократ
- Posts: 13860
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Console Control
Команд хоть и куча, но все для установки.Max Rusov wrote:Да ну, нафиг. Там куча команд для Plugin.Call. Всякие экзотические алгоритмы можно реализовать с помощью макросов.
Плагин пока не предоставляет возможности получения размеров/координат.
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
Re: Console Control
Предоставляет, читайте внимательнее:
т.е."WindowSize", {Width}, {Height}
Изменение размеров консольного окна.
Если параметр опущен или = 0, соответствующая координата не изменяется
Возвращает новые значения размера окна: Width, Height
Code: Select all
local CX, CY = Plugin.Call(ConCtrlID, "WindowSize")
- John Doe
- Бюрократ
- Posts: 13860
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Console Control
Перевёл дистрибутивные макросы из .fmlua в .lua, плюс применил Plugin.require.
При желании можно сделать ConCtrl глобальной: _G.ConCtrl = Plugin.require("94624B7B-FFDB-435F-B955-F99DBBC3BFE0")
Update
В текст вложения случайно закрался print, он лишний, удалите.
При желании можно сделать ConCtrl глобальной: _G.ConCtrl = Plugin.require("94624B7B-FFDB-435F-B955-F99DBBC3BFE0")
Update
В текст вложения случайно закрался print, он лишний, удалите.
- Attachments
-
- ConsoleControl.lua.7z
- (1.74 KiB) Downloaded 141 times
- John Doe
- Бюрократ
- Posts: 13860
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Console Control
Есть одна неприятная особенность.
Если задать для WindowSize размер больше возможного, то окно остаётся прежним, зато буфер увеличивается, и появляются скроллбары.
1. Было бы удобнее не трогать размер буфера, если изменение окна невозможно.
2. Как опция, можно пытаться установить максимально возможный размер окна.
Если задать для WindowSize размер больше возможного, то окно остаётся прежним, зато буфер увеличивается, и появляются скроллбары.
1. Было бы удобнее не трогать размер буфера, если изменение окна невозможно.
2. Как опция, можно пытаться установить максимально возможный размер окна.
- John Doe
- Бюрократ
- Posts: 13860
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Console Control
Новая версия ConsoleControl комплектуется lua-модулем и -макросами.
Есть пара пожеланий.
модуль ConsoleControl.lua
Есть пара пожеланий.
модуль ConsoleControl.lua
- В текущей реализации таблица модуля попадает в глобальное пространство имён.
На самом деле такой необходимости нет, можно сделать как-то так:В этом случае в макросах будет local ConsoleControl = require"ConsoleControl"Code: Select all
local cc = {} function cc.FontSize(Size) ... end return cc
(А если хочется глобально, то _G.ConsoleControl = require"ConsoleControl")
Есть и другие способы.
Например функции в модуле можно определять и не используя локальную таблицу:
- В каждом макросе присутствует условие
А можно проще: condition = ConsoleControl.Installed
Code: Select all
condition=function() return ConsoleControl.Installed() end;
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
Re: Console Control
Ну и замечательно. Вызовы доступны в любом контексте + работает дополнение.John Doe wrote:В текущей реализации таблица модуля попадает в глобальное пространство имён.
Работает, хотя я не понял почему. LUA - язык загадка.John Doe wrote:А можно проще: condition = ConsoleControl.Installed
- John Doe
- Бюрократ
- Posts: 13860
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Console Control
Насколько я знаю это плохая практика, по ряду причин.Max Rusov wrote:Ну и замечательно. Вызовы доступны в любом контексте + работает дополнение.
И я не понял что означает "в любом контексте", и о каком автодополнении речь.
Если по-простому, то имя функции на самом деле переменная.Max Rusov wrote:Работает, хотя я не понял почему.
Например, эти определения равнозначны:
Вот ещё пример:
Code: Select all
my_print=print
print=error
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
Re: Console Control
В "любом контексте" значит, например, macro:post или или Eval....John Doe wrote:Насколько я знаю это плохая практика, по ряду причин.
И я не понял что означает "в любом контексте", и о каком автодополнении речь.
macro:post ConsoleControl.Menu()
Автодополнение делается, например, макросом LuaMacroComplit, из сборки SimSu
По поводу "плохая практика" - мне кажется это сильным преувеличением. У каждого свой FAR и в него не ставят те плагины, которые не нужны. Следовательно, говорить о "засорении" - бессмысленно.
Понял, спасибо.John Doe wrote:Если по-простому, то имя функции на самом деле переменная
- John Doe
- Бюрократ
- Posts: 13860
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Console Control
Это не совсем так.Max Rusov wrote:В "любом контексте" значит, например, macro:post или или Eval...
Чтобы скрипт модуля исполнился - необходимо выполнить require.
В вашей сборке макросов ConsoleControl-Macros.lua есть вызов require, и эта часть исполняется в момент загрузки макросов, поэтому всё работает.
Но зачем глобальную переменную устанавливать в модуле? С таким же успехом её можно установить в том же самом ConsoleControl-Macros.lua, использовав возвращаемое значение require.
Это как минимум гибче.
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
Re: Console Control
Да, это так. Согласен, что это неудобство. Поэтому я и предлагал, кстати, регистрировать интерфейсный модуль из плагина, чтобы его не надо было копировать в %FARPROFILE%\Macros\Modules и подключать через require. Хорошо хоть то, что подключить достаточно один раз в любом макросе, и после этого становится доступным везде...John Doe wrote:Прежде чем модуль станет доступным надо исполнить require. В вашей сборке макросов ConsoleControl-Macros.fmlua есть вызов require, и эта часть исполняется при старте, поэтому всё работает.
Я не хочу писать лишнего кода. Хочу, чтобы мои функции были доступны в любой момент, в любом LUA выражении. Почему вы не возражаете, что LuaMacro в api.lua добавляет кучу глобальных таблиц?John Doe wrote:Но зачем глобальную переменную устанавливать в модуле? С таким же успехом её можно установить в том же самом макросе, использовав возвращаемое значение require. Это как минимум гибче.
- John Doe
- Бюрократ
- Posts: 13860
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Console Control
Где я это предлагаю?Я не хочу писать лишнего кода.
Весь код останется прежним, просто глобальная переменная переедет из вашего модуля в ваш макрос.ConsoleControl-Macros.lua
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
Re: Console Control
Ну а macro:post? А если я хочу вычислить выражение в LUA калькуляторе? Вы упорно не желаете понять, что я как раз _хочу_ чтобы эта таблица попала в глобальный контекст. С моей точки зрения - это большое преимущество.
- John Doe
- Бюрократ
- Posts: 13860
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Console Control
Для вас это преимущество, супер, не возражаю.
macro:post будет работать, потому что таблица тоже попадёт в глобальный контекст.
Но зачем устанавливать какую-то переменную где-то в модуле? Если можно сделать это явно, в собственном макросе.
Я подчёркиваю, для пользователя этот модуль чужой, он вообще не знает (не помнит) что там этом модуль внутри делает.
И вообще, пользователь предпочитает другую переменную, покороче.
ConCtrl
macro:post будет работать, потому что таблица тоже попадёт в глобальный контекст.
Но зачем устанавливать какую-то переменную где-то в модуле? Если можно сделать это явно, в собственном макросе.
Я подчёркиваю, для пользователя этот модуль чужой, он вообще не знает (не помнит) что там этом модуль внутри делает.
И вообще, пользователь предпочитает другую переменную, покороче.
ConCtrl
- John Doe
- Бюрократ
- Posts: 13860
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Console Control
Для интереса "свернул" ваш модуль.
Вместо ConsoleControl = cc лучше return cc, как я предлагал ранее.
Добавил ещё Config и Command (или вы намеренно пропустили?)
А вот вся "документация:"
Code: Select all
local cc = {}
cc.ID = "94624B7B-FFDB-435F-B955-F99DBBC3BFE0"
for c in ("Exist Call Command Config Menu"):gmatch("%w+") do
cc[c] = function(...)
return Plugin[c](cc.ID,...)
end
end
cc.Installed = cc.Exist
for c in ("WindowSize BufferSize FontSize FontSizeDelta FontName Maximize Topmost Transparency"):gmatch("%w+") do
cc[c] = function(...)
return Plugin.Call(cc.ID,c,...)
end
end
cc.WindowSizeDelta = function(DX, DY)
local X, Y = cc.WindowSize()
return cc.WindowSize(X+DX, Y+DY)
end
cc.BufferSizeDelta = function(DX, DY)
local X, Y = cc.BufferSize()
return cc.BufferSize(X+DX, Y+DY)
end
ConsoleControl = cc
Добавил ещё Config и Command (или вы намеренно пропустили?)
А вот вся "документация:"