Как правильно применить kbdLayout()?

Здесь обсуждается всё, что касается макросов.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 8 times

Как правильно применить kbdLayout()?

Post by sToLp » Sun 07 Aug, 2011 10:10

При составлении макроса пробую в комстроке: macro:post %rskld=print(itoa(kbdLayout(),16));
жму Enter и получаю в строке в зависимости от текущей раскладки 4190419 или 4090409.
Это я что-то не так делаю или бага какая?
Фар 2.1 build 1807 bis19 x86

Maximus5
Posts: 3292
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 4 times
Contact:

Re: Как правильно применить kbdLayout()?

Post by Maximus5 » Sun 07 Aug, 2011 11:24

Очевидно, вы что-то делаете не так. А именно, вы не написали, чего хотите достичь :P

User avatar
John Doe
Бюрократ
Posts: 12232
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 32 times
Been thanked: 162 times

Re: Как правильно применить kbdLayout()?

Post by John Doe » Sun 07 Aug, 2011 11:38

Документацию для кого писали?
http://api.farmanager.com/ru2/macro/mac ... #kbdlayout

User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 8 times

Re: Как правильно применить kbdLayout()?

Post by sToLp » Sun 07 Aug, 2011 12:58

John Doe wrote:Документацию для кого писали?
пример взят оттуда: №2
Maximus5 wrote: вы не написали, чего хотите достичь
хочу проверить в какой раскладке набран текст, уже имеющийся в комстроке, и если в английской - применить к нему xlat() и далее запустить его на выполнение как алиас

Maximus5
Posts: 3292
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 4 times
Contact:

Re: Как правильно применить kbdLayout()?

Post by Maximus5 » Sun 07 Aug, 2011 13:04

Что-то мне подсказывает, что вот это

Code: Select all

%rskld=print(itoa(kbdLayout(),16));
не выполняет вот это
в какой раскладке набран текст, уже имеющийся в комстроке, и если в английской - применить к нему xlat() и далее запустить его на выполнение как алиас
Так чего вы все-таки хотели достичь постом №1?

User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 8 times

Re: Как правильно применить kbdLayout()?

Post by sToLp » Sun 07 Aug, 2011 13:19

Ошибочно полагал, что print() отдаёт результат в переменную, не меняя содержание комстроки...
Простите за необоснованное беспокойство.

User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 8 times

Re: Как правильно применить kbdLayout()?

Post by sToLp » Sun 07 Aug, 2011 17:31

Получилось таки составить макрос, который позволяет удобно работать с макросами замечательного плагина MacroLib http://forum.farmanager.com/viewtopic.p ... 714#p74714 как с алиасами. То есть по их именам, введённым в комстроку.

Code: Select all

macro Area="Shell" Key="CtrlShiftJ NumEnter" Name="исполнитьМакроЛайбом" Cond="CmdLine:1"
Priority=3
Descr="Содержимое комстроки выполнить как алиас плагина MacroLib (подстановкой префикса 'fml:Call ')"
{{
  %%Clv=CmdLine.Value; CtrlY print(itoa(kbdLayout(),16)); clip(1,CmdLine.Value)
  $if (clip(0) == 4090409)
  CtrlY Print("fml:Call "+xlat(%%Clv,1)) Enter
  $else
  CtrlY Print("fml:Call "+%%Clv) Enter
  $end
}}
И теперь мне можно просто набрать имя (алиас) нужного мне мароса в комстроке и нажать Enter на цифровой клавиатуре. И fml-макрос сработает. Сработает даже если ему дано имя "сравнить", а в строке оно набралось как "chfdybnm".

Мне так удобнее работать с переходами во множество нужных мест и во многих других случаях...
Attachments
she-NumEnter-выполнитьFmlКакАлиас(c)sToLp.7z
макрос для запуска fml-макросов как алиасов
(1.03 KiB) Downloaded 141 times

User avatar
SUSim
Posts: 1520
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 5 times
Been thanked: 8 times

Re: Как правильно применить kbdLayout()?

Post by SUSim » Mon 08 Aug, 2011 17:39

Спонтанно! ЗАЧЕМ, 25 текстовых строк пихать в архив? который весит больше fml ???
макрос неплох, но запустить макрос из ком строки можно любой! почему вы остановились только на .FML
SimSU ··· ·· -- ··· ··-

User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 8 times

Re: Как правильно применить kbdLayout()?

Post by sToLp » Mon 08 Aug, 2011 19:47

SUSim wrote:ЗАЧЕМ, 25 текстовых строк пихать в архив? который весит больше fml ???
А вы пробовали присоединить fml-файл? Или хотя бы txt? А архивный файл присоединяется запросто.
SUSim wrote:макрос неплох, но запустить макрос из ком строки можно любой! почему вы остановились только на .FML
Fml-макросы могут содержать поле Name= и таким образом через быстрый префикс (штатно - fml:call имяМакроса) запускаться по типу doskey-алиасов из комстроки. А как запустить из командной строки reg-макрос я не знаю. Про другие типы макросов я тоже не ведаю. И буду рад если просветите.

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 3 times

Re: Как правильно применить kbdLayout()?

Post by Skirda » Tue 09 Aug, 2011 05:10

надо бы в примеры в Писание поместить (или буду улучшалки?/копирайт не позволяет?)
We are the Borg. You will be assimilated.
So Say We All!

User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 1 time

Re: Как правильно применить kbdLayout()?

Post by Centaur » Tue 09 Aug, 2011 06:19

sToLp wrote:
SUSim wrote:ЗАЧЕМ, 25 текстовых строк пихать в архив? который весит больше fml ???
А вы пробовали присоединить fml-файл? Или хотя бы txt? А архивный файл присоединяется запросто.
Текст не надо «присоединять». Его нужно обрамить в тэг [‌code] и запостить открытым текстом. Чтобы потенциальный пользователь его сначала прочитал и осмыслил, потом скопировал, сохранил и заюзал. В случае же с аттачем вероятна ситуация «скачал, положил и начал использовать» без обязательного шага осмысления.

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 3 times

Re: Как правильно применить kbdLayout()?

Post by Skirda » Tue 09 Aug, 2011 07:11

sToLp wrote:хочу проверить в какой раскладке набран текст, уже имеющийся в комстроке, и если в английской - применить к нему xlat()
А откуда уверенность в том, что kbdLayout() возвращает значение раскладки, в какой набран текст?
kbdLayout возвращает значение раскладки, включенной в данный момент.
1. Сейчас Eng
2. Набираем ghbdtn
3. Переключаем раскладку на Rus
4. вызываем макрос
каков результат?
We are the Borg. You will be assimilated.
So Say We All!

User avatar
Wave
Posts: 1762
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 4 times
Been thanked: 15 times

Re: Как правильно применить kbdLayout()?

Post by Wave » Tue 09 Aug, 2011 10:18

КМК, ситуация «не глядя набрал и ткнул энтер» случается чаще, чем «набрал, чего-то поделал, попереключал раскладку и т.п., а потом ткнул энтер».
Мешать может ну разве что в ситуации копипасты. И то, пятьдесят на пятьдесят. Но вообще это каждый должен индивидуально подбирать, какие юз-кейсы у него случаются чаще и что помогает, а что мешает. Например, мне не холодно и не жарко от этого kbdLayout, я печатаю глядя на экран. А перехожу в какие-то места чаще всего с помощью фильтра альтхистори.
Забавно, что макросами уже можно сделать аналоги плагинов HotFolders, NamedFolders, Alias. Кто во что горазд и кому что удобней.
Пользуюсь ФАРом больше 20 лет © собирательный.

User avatar
HaRT
Moderator
Posts: 8682
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 78 times
Been thanked: 145 times

Re: Как правильно применить kbdLayout()?

Post by HaRT » Tue 09 Aug, 2011 11:39

Centaur wrote:Текст не надо «присоединять». Его нужно обрамить в тэг [‌code] и запостить открытым текстом.
Желательно ещё обрамить в .
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
John Doe
Бюрократ
Posts: 12232
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 32 times
Been thanked: 162 times

Как правильно применить kbdLayout()?

Post by John Doe » Tue 09 Aug, 2011 11:56

Имхо.
Текст в теге [code] и так уже ограничен, и не расползается больше минимума. Поэтому если макрос это основное содержание поста, то нет смысла его прятать, и этим заставлять всех до единого кликать по этому спойлеру.

User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 8 times

Re: Как правильно применить kbdLayout()?

Post by sToLp » Tue 09 Aug, 2011 21:31

Поправил оформление поста, публикующего макрос .
Skirda wrote:надо бы в примеры в Писание поместить
ни чего не имею против
или будут улучшалки?
в примере лучше показывать штатный префикс плагина
или копирайт не позволяет?
для себя «(с)» интерпретирую так: «не Фар дал, сам ковал», и поэтому всё помеченное маркой «(sToLp)» можете употреблять как Вам только заблагорассудится
kbdLayout возвращает значение раскладки, включенной в данный момент.
1. Сейчас Eng
2. Набираем ghbdtn
3. Переключаем раскладку на Rus
4. вызываем макрос
каков результат?
Wave в целом верно ответил на этот вопрос. То есть, по моему, kbdLayout() достаточно обеспечивает функциональность макроса. Однако, если намекнёте как можно сделать более строго – попробую с удовольствием.

Post Reply

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