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 | alltilesvisible; | 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 | let gotoxy x y = | 633 | let gotoxy x y = |
| 620 | let y = bound y 0 state.maxy in | 634 | let y = bound y 0 state.maxy in |
| 621 | let y, layout = | 635 | let y, layout = |
| @@ -5052,6 +5066,7 @@ let () = · 4430 unmodified lines | |||
| 5052 | display (); | 5066 | display (); |
| 5053 | Wsi.mapwin (); | 5067 | Wsi.mapwin (); |
| 5054 | Wsi.setcursor Wsi.CURSOR_INHERIT; | 5068 | Wsi.setcursor Wsi.CURSOR_INHERIT; |
| 5069 | Wsi.setmapc mapc; | ||
| 5055 | Sys.set_signal Sys.sighup (Sys.Signal_handle (fun _ -> reload ())); | 5070 | Sys.set_signal Sys.sighup (Sys.Signal_handle (fun _ -> reload ())); |
| 5056 | 5071 | ||
| 5057 | let rec reap () = | 5072 | let rec reap () = |
| @@ -38,8 +38,10 @@ class type t = · 37 unmodified lines | |||
| 38 | method opendoc : string -> unit | 38 | method opendoc : string -> unit |
| 39 | end;; | 39 | end;; |
| 40 | 40 | ||
| 41 | type keycode = int;; | ||
| 41 | val setcursor : cursor -> unit;; | 42 | val setcursor : cursor -> unit;; |
| 42 | val settitle : string -> unit;; | 43 | val settitle : string -> unit;; |
| 44 | val setmapc : (keycode -> keycode) -> unit;; | ||
| 43 | val swapb : unit -> unit;; | 45 | val swapb : unit -> unit;; |
| 44 | val readresp : Unix.file_descr -> unit;; | 46 | val readresp : Unix.file_descr -> unit;; |
| 45 | val init : t -> int -> int -> Unix.file_descr * int * int;; | 47 | val init : t -> int -> int -> Unix.file_descr * int * int;; |
| @@ -312,3 +312,4 @@ let ks2kt = · 311 unmodified lines | |||
| 312 | | code when code land 0xff00 = 0xff00 -> Ctrl code | 312 | | code when code land 0xff00 = 0xff00 -> Ctrl code |
| 313 | | code -> Code code | 313 | | code -> Code code |
| 314 | 314 | ||
| 315 | let setmapc = ignore | ||
| @@ -101,11 +101,12 @@ type state = · 100 unmodified lines | |||
| 101 | ; mutable levl5mask : int | 101 | ; mutable levl5mask : int |
| 102 | ; mutable xkb : bool | 102 | ; mutable xkb : bool |
| 103 | ; mutable fscale : float | 103 | ; mutable fscale : float |
| 104 | ; mutable mapc : keycode -> keycode | ||
| 104 | } | 105 | } |
| 105 | and fs = | 106 | and fs = |
| 106 | | NoFs | 107 | | NoFs |
| 107 | | Fs of (int * int * int * int) | 108 | | Fs of (int * int * int * int) |
| 108 | ;; | 109 | and keycode = int;; |
| 109 | 110 | ||
| 110 | let state = | 111 | let state = |
| 111 | { mink = max_int | 112 | { mink = max_int |
| @@ -140,6 +141,7 @@ let state = · 28 unmodified lines | |||
| 140 | ; levl5mask = 0 | 141 | ; levl5mask = 0 |
| 141 | ; xkb = false | 142 | ; xkb = false |
| 142 | ; fscale = 1.0 | 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 | | 2 -> (* key press *) | 486 | | 2 -> (* key press *) |
| 485 | if Array.length state.keymap > 0 | 487 | if Array.length state.keymap > 0 |
| 486 | then | 488 | then |
| 487 | let code = r8 resp 1 in | 489 | let code = r8 resp 1 |> state.mapc in |
| 488 | let mask = r16 resp 28 in | 490 | let mask = r16 resp 28 in |
| 489 | let keysym = getkeysym code mask in | 491 | let keysym = getkeysym code mask in |
| 490 | vlog "keysym = %x %c mask %#x code %d" | 492 | vlog "keysym = %x %c mask %#x code %d" |
| @@ -1289,3 +1291,4 @@ let ks2kt = · 798 unmodified lines | |||
| 1289 | ;; | 1291 | ;; |
| 1290 | 1292 | ||
| 1291 | let fontsizescale n = float n *. state.fscale |> truncate;; | 1293 | let fontsizescale n = float n *. state.fscale |> truncate;; |
| 1294 | let setmapc f = state.mapc <- f;; | ||