Or non QWERTY layouts. I tried to think of a way to make that neat and configurable, i really did, but...
Unified · Split
| @@ -616,6 +616,20 @@ let layoutready layout = · 615 unmodified lines | ||
| 616 | 616 | alltilesvisible; |
| 617 | 617 | ;; |
| 618 | 618 | |
| 619 | +let mapc code = | |
| 620 | + let viewmapcode = function | |
| 621 | + (* remap some key codes to arrows in view mode *) | |
| 622 | + | 44 -> 113 | |
| 623 | + | 45 -> 116 | |
| 624 | + | 46 -> 111 | |
| 625 | + | 47 -> 114 | |
| 626 | + | n -> n | |
| 627 | + in | |
| 628 | + match state.mode with | |
| 629 | + | View -> viewmapcode code | |
| 630 | + | LinkNav _ | Textentry _ | Birdseye _ -> code | |
| 631 | +;; | |
| 632 | + | |
| 619 | 633 | let gotoxy x y = |
| 620 | 634 | let y = bound y 0 state.maxy in |
| 621 | 635 | let y, layout = |
| @@ -5052,6 +5066,7 @@ let () = · 4430 unmodified lines | ||
| 5052 | 5066 | display (); |
| 5053 | 5067 | Wsi.mapwin (); |
| 5054 | 5068 | Wsi.setcursor Wsi.CURSOR_INHERIT; |
| 5069 | + Wsi.setmapc mapc; | |
| 5055 | 5070 | Sys.set_signal Sys.sighup (Sys.Signal_handle (fun _ -> reload ())); |
| 5056 | 5071 | |
| 5057 | 5072 | let rec reap () = |
| @@ -38,8 +38,10 @@ class type t = · 37 unmodified lines | ||
| 38 | 38 | method opendoc : string -> unit |
| 39 | 39 | end;; |
| 40 | 40 | |
| 41 | +type keycode = int;; | |
| 41 | 42 | val setcursor : cursor -> unit;; |
| 42 | 43 | val settitle : string -> unit;; |
| 44 | +val setmapc : (keycode -> keycode) -> unit;; | |
| 43 | 45 | val swapb : unit -> unit;; |
| 44 | 46 | val readresp : Unix.file_descr -> unit;; |
| 45 | 47 | val init : t -> int -> int -> Unix.file_descr * int * int;; |
| @@ -312,3 +312,4 @@ let ks2kt = · 311 unmodified lines | ||
| 312 | 312 | | code when code land 0xff00 = 0xff00 -> Ctrl code |
| 313 | 313 | | code -> Code code |
| 314 | 314 | |
| 315 | +let setmapc = ignore | |
| @@ -101,11 +101,12 @@ type state = · 100 unmodified lines | ||
| 101 | 101 | ; mutable levl5mask : int |
| 102 | 102 | ; mutable xkb : bool |
| 103 | 103 | ; mutable fscale : float |
| 104 | + ; mutable mapc : keycode -> keycode | |
| 104 | 105 | } |
| 105 | 106 | and fs = |
| 106 | 107 | | NoFs |
| 107 | 108 | | Fs of (int * int * int * int) |
| 108 | −;; | |
| 109 | +and keycode = int;; | |
| 109 | 110 | |
| 110 | 111 | let state = |
| 111 | 112 | { mink = max_int |
| @@ -140,6 +141,7 @@ let state = · 28 unmodified lines | ||
| 140 | 141 | ; levl5mask = 0 |
| 141 | 142 | ; xkb = false |
| 142 | 143 | ; fscale = 1.0 |
| 144 | + ; mapc = Fun.id | |
| 143 | 145 | } |
| 144 | 146 | ;; |
| 145 | 147 | |
| @@ -484,7 +486,7 @@ let readresp sock = · 338 unmodified lines | ||
| 484 | 486 | | 2 -> (* key press *) |
| 485 | 487 | if Array.length state.keymap > 0 |
| 486 | 488 | then |
| 487 | − let code = r8 resp 1 in | |
| 489 | + let code = r8 resp 1 |> state.mapc in | |
| 488 | 490 | let mask = r16 resp 28 in |
| 489 | 491 | let keysym = getkeysym code mask in |
| 490 | 492 | vlog "keysym = %x %c mask %#x code %d" |
| @@ -1289,3 +1291,4 @@ let ks2kt = · 798 unmodified lines | ||
| 1289 | 1291 | ;; |
| 1290 | 1292 | |
| 1291 | 1293 | let fontsizescale n = float n *. state.fscale |> truncate;; |
| 1294 | +let setmapc f = state.mapc <- f;; | |