diff options
| author | Teddy Wing | 2018-09-02 14:12:56 +0200 |
|---|---|---|
| committer | Teddy Wing | 2018-09-02 14:12:56 +0200 |
| commit | 4b31eb9b8412e429949aca73ef475787910e4b0b (patch) | |
| tree | be5e5582ada52cf2e26bd455e91a5a2fb32ce69b /src | |
| parent | 69352361515b16c1ed9646b891ba61ed1781a7a7 (diff) | |
| download | dome-key-map-4b31eb9b8412e429949aca73ef475787910e4b0b.tar.bz2 | |
Test mode finder
Add a new `moder.c` based on `includer.c` to test getting a mode and
then getting an action for a mode mapping.
Doesn't completely work currently. Right now all I get is this output:
$ ./moder
2
Segmentation fault: 11
Clearly I'm messing up something with the pointer in
`c_run_key_action()`. Not sure what it is yet.
Changed `CKeyActionResult.in_mode` to be a `Trigger` instead of a
`HeadphoneButton` list. That allows us to pass it directly into the
second argument of `c_run_key_action()` without converting.
But maybe the pointer value isn't living long enough? Not sure what the
problem is yet.
Diffstat (limited to 'src')
| -rw-r--r-- | src/cocoa_bridge.rs | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/cocoa_bridge.rs b/src/cocoa_bridge.rs index 920ea02..15cee95 100644 --- a/src/cocoa_bridge.rs +++ b/src/cocoa_bridge.rs @@ -86,7 +86,7 @@ impl<'a> KeyActionResult<'a> { pub struct CKeyActionResult { pub action: *const c_char, pub kind: *const ActionKind, - pub in_mode: *const HeadphoneButton, + pub in_mode: *const Trigger, } #[no_mangle] @@ -120,7 +120,14 @@ pub extern "C" fn c_run_key_action( ); let in_mode = k.in_mode.map_or_else( || ptr::null(), - |m| m.as_ptr(), + |m| { + let trigger = Trigger { + buttons: m.as_ptr(), + length: m.len(), + }; + + &trigger + }, ); CKeyActionResult { @@ -149,6 +156,9 @@ pub extern "C" fn run_key_action_for_mode<'a>( let sample_maps = "map <up> k map <down> j map <play><down> works! +mode <play><up> { + map <down> hello +} "; // Figure out how to persist this without re-parsing |
