2016-10-05 8 views
0

現在、Luaを使ってApple製のplistファイルの内容を読み込もうとしています。NSEventをObjective-CからLuaに翻訳する

plistには、 'modifierマスク'を使用してキーボードショートカットが含まれています。他

-- modifierMask = 131072 (shift) 
-- modifierMask = 262144 (control) 
-- modifierMask = 524288 (option) 
-- modifierMask = 1048576 (command)   
-- modifierMask = 786432 (control + option) 
-- modifierMask = 393216 (control + shift) 
-- modifierMask = 1310720 (control + command)   
-- modifierMask = 1572864 (option + command) 
-- modifierMask = 655360 (shift + option) 
-- modifierMask = 1179648 (command + shift) 
-- modifierMask = 917504 (control + shift + option) 
-- modifierMask = 1703936 (option + command + shift) 
-- modifierMask = 1835008 (control + option + command) 

誰かがありますが、私はAppleがマスク値を計算しているかを正確にわからないよ - 一つずつをテストすることにより

は、私がmodifierMask値以下に示す修飾キーと一致することを決定しました

Modifier Flags 
The following constants (except for NSDeviceIndependentModifierFlagsMask)  represent device-independent bits found in event modifier flags: 

Declaration 
OBJECTIVE-C 
enum { 
    NSAlphaShiftKeyMask = 1 << 16, 
    NSShiftKeyMask  = 1 << 17, 
    NSControlKeyMask = 1 << 18, 
    NSAlternateKeyMask = 1 << 19, 
    NSCommandKeyMask = 1 << 20, 
    NSNumericPadKeyMask = 1 << 21, 
    NSHelpKeyMask  = 1 << 22, 
    NSFunctionKeyMask = 1 << 23, 
    NSDeviceIndependentModifierFlagsMask = 0xffff0000U 
}; 

これは有望に見える、しかし、私はObjective-Cのについて何も知らないので、誰もができれば私は思っていた:最も可能性が高い修飾マスクがNSEvent modifier flagsに一致し、次のObjective-Cの例を供給することを示唆しました私を助けてくださいこれらのObjective-C宣言をLua内で使用できるものに置き換えますか?基本的には、modifierMask(つまり '131072')を入力し、そのmodifierMaskが意味するもの(つまり、 'shift')を示す結果を返すLua関数を作成します。何か案は?

ありがとうございます!

+0

あなたは "との取引" とはどういう意味ですか?シフト値を整数に変換する方法をお探しですか?あるいは、これらの値を使ってplistの数値を比較する方法を探していますか? – Avi

+0

申し訳ありませんが、もっと明確にすべきでした。基本的には、plistからmodifierMask(つまり131072)を入力してその値を返すことができる関数を作成したいと考えています(シフトボタンが押されています)。 –

答えて

0

hereを回答:

maskToTable = function(value) 
local modifiers = { 
    AlphaShift = 1 << 16, 
    Shift  = 1 << 17, 
    Control = 1 << 18, 
    Alternate = 1 << 19, 
    Command = 1 << 20, 
    NumericPad = 1 << 21, 
    Help  = 1 << 22, 
    Function = 1 << 23, 
} 

local answer = {} 

for k, v in pairs(modifiers) do 
    if (value & v) == v then 
     table.insert(answer, k) 
    end 
end 

return answer 
end 
関連する問題