Русские буквы в макросе
Русские буквы в макросе
Хочу написать макрос, который бы вызывался по нажатию "\" и в зависимости от
следующей набранной буквы выполнял те или иные действия. Для этого использую такой код
В макросе пишу все в одну строку и, естественно, кавычки экранирую "\".
Результат: Если запускаю из командной строки по macro:post @filename.lua, то проверка обоих условий в if работает правильно. Если же запускаю из редактора как макрос, то сравнение с "к" всегда дает false. В обоих случаях print(s) выдает знак вопроса, если в s русская буква.
Понимаю, что тут проблема с кодировкой (у меня в редакторе OEM). Подскажите, как ее решить?
следующей набранной буквы выполнял те или иные действия. Для этого использую такой код
В макросе пишу все в одну строку и, естественно, кавычки экранирую "\".
Результат: Если запускаю из командной строки по macro:post @filename.lua, то проверка обоих условий в if работает правильно. Если же запускаю из редактора как макрос, то сравнение с "к" всегда дает false. В обоих случаях print(s) выдает знак вопроса, если в s русская буква.
Понимаю, что тут проблема с кодировкой (у меня в редакторе OEM). Подскажите, как ее решить?
Re: Русские буквы в макросе
Спасибо. Со сравнением я пока справлялся при помощи указания кода символа, то есть вместо =="к" писал =="\170". А как быть с выводом значения строки по print, если там русские буквы?
Этот вопрос, видимо, надо писать в ликбез по lua, продублирую и там.
Этот вопрос, видимо, надо писать в ликбез по lua, продублирую и там.
Re: Русские буквы в макросе
Подскажите в каой кодировке работате os.execute.
Если зависит от системы, то у меня Windows 7 русская.
Если зависит от системы, то у меня Windows 7 русская.
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: Русские буквы в макросе
У меня работает в ANSI-кодировке. Текст из UTF-8 в ANSI можно преобразовать так:iva wrote:Подскажите в каой кодировке работате os.execute.
win.WideCharToMultiByte(win.Utf8ToUtf16(str), win.GetACP())
Функция os.execute - не юникодная. Лучше попробуйте win.ShellExecute - она юникодная.
Re: Русские буквы в макросе
Спасибо. Ваша команда мне помогла.
А с win.ShellExecute я пробовал разобраться. Действие у меня нестандартное, а тогда, как я понял, его надо сначала в реестр заносить. Это для меня сложнее.
А с win.ShellExecute я пробовал разобраться. Действие у меня нестандартное, а тогда, как я понял, его надо сначала в реестр заносить. Это для меня сложнее.
не получается через lua передать прграмме фаил на чтение
Здравствуйте.Хочу чтобы html htm файлы открывались браузером links когда файл находится под курсором по ctrl+r
Написал
<code>
local function fu()
local name=APanel.Current
os.execute("%farhome%\\..\\links\\links.exe "..name)
end
Macro{
area="Shell";
key="Ctrlr";
action=fu
}
такой код работает когда имя файла на английском,когда на русском система не опознает параметры или links пишет что не может найти файл <какие то кракозябры>.html.Видно переменная name привратилась в unicode строку.Как это исправить?
Заранее спасибо.
Написал
<code>
local function fu()
local name=APanel.Current
os.execute("%farhome%\\..\\links\\links.exe "..name)
end
Macro{
area="Shell";
key="Ctrlr";
action=fu
}
такой код работает когда имя файла на английском,когда на русском система не опознает параметры или links пишет что не может найти файл <какие то кракозябры>.html.Видно переменная name привратилась в unicode строку.Как это исправить?
Заранее спасибо.
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: не получается через lua передать прграмме фаил на чтение
См. два сообщения, начиная от http://forum.farmanager.com/viewtopic.p ... 65#p114865.kosta wrote:такой код работает когда имя файла на английском,когда на русском система не опознает
В той теме и задавать надо подобные вопросы.
Re: Русские буквы в макросе
Подскажите пожалуйста почему не работает lua код?
<code>
local str=win.WideCharToMultyByte(win.Utf8ToUtf16(str), win.GetACP())
os.execute(str)
</code>
Пишет:
attempt to call
field 'WideCharToMultyByte' (a nil value)
<code>
local str=win.WideCharToMultyByte(win.Utf8ToUtf16(str), win.GetACP())
os.execute(str)
</code>
Пишет:
attempt to call
field 'WideCharToMultyByte' (a nil value)
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: Русские буквы в макросе
Кстати, LuaJIT допускает использование UTF-8 символов в идентификаторах. Это, в частности, означает, что можно писать макросы для Фара с русскими именами переменных и функций.
Re: Русские буквы в макросе
Обьясните пожалуйста ,что это за обьект win и почему не соответствуют прототипы API Windows(или соответствуют?) luafar прототипам,вот например win.WideCharToMultyByte(win.Utf8ToUtf16(str), win.GetACP()),где посмотреть как использовать
нужные win api в Luafar,а то я снимаю русское имя файла под курсором в панелях функцией local name=APanel.Current, в
name оказывается юникод и os.execute не понимает строку?
Спасибо
нужные win api в Luafar,а то я снимаю русское имя файла под курсором в панелях функцией local name=APanel.Current, в
name оказывается юникод и os.execute не понимает строку?
Спасибо