Русские буквы в макросе

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
iva
Posts: 126
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Русские буквы в макросе

Post by iva » Sat 23 Nov, 2013 11:48

Хочу написать макрос, который бы вызывался по нажатию "\" и в зависимости от
следующей набранной буквы выполнял те или иные действия. Для этого использую такой код

В макросе пишу все в одну строку и, естественно, кавычки экранирую "\".
Результат: Если запускаю из командной строки по macro:post @filename.lua, то проверка обоих условий в if работает правильно. Если же запускаю из редактора как макрос, то сравнение с "к" всегда дает false. В обоих случаях print(s) выдает знак вопроса, если в s русская буква.
Понимаю, что тут проблема с кодировкой (у меня в редакторе OEM). Подскажите, как ее решить?

User avatar
zg
zero-gravity
Posts: 5572
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 89 times
Contact:

Re: Русские буквы в макросе

Post by zg » Sat 23 Nov, 2013 12:23

файл с макросом сохранить в кодировке utf-8.

iva
Posts: 126
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Re: Русские буквы в макросе

Post by iva » Sat 23 Nov, 2013 14:14

Спасибо. Со сравнением я пока справлялся при помощи указания кода символа, то есть вместо =="к" писал =="\170". А как быть с выводом значения строки по print, если там русские буквы?
Этот вопрос, видимо, надо писать в ликбез по lua, продублирую и там.

iva
Posts: 126
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Re: Русские буквы в макросе

Post by iva » Mon 02 Dec, 2013 13:21

Подскажите в каой кодировке работате os.execute.
Если зависит от системы, то у меня Windows 7 русская.

Shmuel
Posts: 5836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Re: Русские буквы в макросе

Post by Shmuel » Mon 02 Dec, 2013 15:02

iva wrote:Подскажите в каой кодировке работате os.execute.
У меня работает в ANSI-кодировке. Текст из UTF-8 в ANSI можно преобразовать так:
win.WideCharToMultiByte(win.Utf8ToUtf16(str), win.GetACP())

Функция os.execute - не юникодная. Лучше попробуйте win.ShellExecute - она юникодная.

iva
Posts: 126
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Re: Русские буквы в макросе

Post by iva » Mon 02 Dec, 2013 17:15

Спасибо. Ваша команда мне помогла.
А с win.ShellExecute я пробовал разобраться. Действие у меня нестандартное, а тогда, как я понял, его надо сначала в реестр заносить. Это для меня сложнее.

kosta
Posts: 13
Joined: Mon 25 Nov, 2013 10:44

не получается через lua передать прграмме фаил на чтение

Post by kosta » Wed 04 Dec, 2013 15:38

Здравствуйте.Хочу чтобы 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 строку.Как это исправить?
Заранее спасибо.

Shmuel
Posts: 5836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Re: не получается через lua передать прграмме фаил на чтение

Post by Shmuel » Wed 04 Dec, 2013 15:49

kosta wrote:такой код работает когда имя файла на английском,когда на русском система не опознает
См. два сообщения, начиная от http://forum.farmanager.com/viewtopic.p ... 65#p114865.
В той теме и задавать надо подобные вопросы.

kosta
Posts: 13
Joined: Mon 25 Nov, 2013 10:44

Re: Русские буквы в макросе

Post by kosta » Tue 10 Dec, 2013 08:39

Спасибо команде Фар за помощь!

kosta
Posts: 13
Joined: Mon 25 Nov, 2013 10:44

Re: Русские буквы в макросе

Post by kosta » Wed 11 Dec, 2013 17:14

Подскажите пожалуйста почему не работает lua код?
<code>
local str=win.WideCharToMultyByte(win.Utf8ToUtf16(str), win.GetACP())
os.execute(str)
</code>
Пишет:
attempt to call
field 'WideCharToMultyByte' (a nil value)

Shmuel
Posts: 5836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Re: Русские буквы в макросе

Post by Shmuel » Wed 11 Dec, 2013 17:17

А у вас в имени функции одна буковка неправильная.

Shmuel
Posts: 5836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Re: Русские буквы в макросе

Post by Shmuel » Wed 11 Dec, 2013 17:30

Кстати, LuaJIT допускает использование UTF-8 символов в идентификаторах. Это, в частности, означает, что можно писать макросы для Фара с русскими именами переменных и функций.

kosta
Posts: 13
Joined: Mon 25 Nov, 2013 10:44

Re: Русские буквы в макросе

Post by kosta » Thu 12 Dec, 2013 08:18

Обьясните пожалуйста ,что это за обьект win и почему не соответствуют прототипы API Windows(или соответствуют?) luafar прототипам,вот например win.WideCharToMultyByte(win.Utf8ToUtf16(str), win.GetACP()),где посмотреть как использовать
нужные win api в Luafar,а то я снимаю русское имя файла под курсором в панелях функцией local name=APanel.Current, в
name оказывается юникод и os.execute не понимает строку?
Спасибо

Shmuel
Posts: 5836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Re: Русские буквы в макросе

Post by Shmuel » Thu 12 Dec, 2013 08:31

Должно быть win.WideCharToMultiByte. У вас одна неправильная буква, о чём уже было сказано.

kosta
Posts: 13
Joined: Mon 25 Nov, 2013 10:44

Re: Русские буквы в макросе

Post by kosta » Thu 12 Dec, 2013 11:00

Буковка найдена. теперь все работает.Спасибо большое!

Post Reply

Return to “Нужна помощь”