Update keyPress.hs

This commit is contained in:
千住柱間 2025-01-31 01:52:44 +00:00
commit 5908080d8f

View file

@ -1,14 +1,135 @@
{-# LANGUAGE OverloadedStrings, OverloadedLabels, ImplicitParams #-}
import Control.Monad (void)
import Control.Monad
import System.Environment (getArgs, getProgName)
import Data.Text (unpack)
import Data.Int (Int32)
import Data.Maybe
import qualified GI.Gtk as Gtk
import Data.GI.Base
import GI.Gdk as Gdk
import Data.Text (Text, unpack)
import Text.Read (readMaybe)
import Data.Word (Word32)
-- this can be mapped to a kana keyboard later
keymap :: [(Word32, String)]
keymap =
[ (9, "# Esc")
, (67, "# F1")
, (68, "# F2")
, (69, "# F3")
, (70, "# F4")
, (71, "# F5")
, (72, "# F6")
, (73, "# F7")
, (74, "# F8")
, (75, "# F9")
, (76, "# F10")
, (95, "# F11")
, (96, "# F12")
, (111, "# PrintScrn")
, (78, "# Scroll Lock")
, (110, "# Pause")
, (49, "# `")
, (10, "# 1")
, (11, "# 2")
, (12, "# 3")
, (13, "# 4")
, (14, "# 5")
, (15, "# 6")
, (16, "# 7")
, (17, "# 8")
, (18, "# 9")
, (19, "# 0")
, (20, "# -")
, (21, "# =")
, (22, "# Backspace")
, (106, "# Insert")
, (97, "# Home")
, (99, "# Page Up")
, (77, "# Num Lock")
, (112, "# KP /")
, (63, "# KP *")
, (82, "# KP -")
, (23, "# Tab")
, (24, "# Q")
, (25, "# W")
, (26, "# E")
, (27, "# R")
, (28, "# T")
, (29, "# Y")
, (30, "# U")
, (31, "# I")
, (32, "# O")
, (33, "# P")
, (34, "# [")
, (35, "# ]")
, (36, "# Return")
, (107, "# Delete")
, (103, "# End")
, (105, "# Page Down")
, (79, "# KP 7")
, (80, "# KP 8")
, (81, "# KP 9")
, (86, "# KP +")
, (66, "# Caps Lock")
, (38, "# A")
, (39, "# S")
, (40, "# D")
, (41, "# F")
, (42, "# G")
, (43, "# H")
, (44, "# J")
, (45, "# K")
, (46, "# L")
, (47, "# ;")
, (48, "# '")
, (83, "# KP 4")
, (84, "# KP 5")
, (85, "# KP 6")
, (50, "# Shift Left")
, (94, "# International")
, (52, "# Z")
, (53, "# X")
, (54, "# C")
, (55, "# V")
, (56, "# B")
, (57, "# N")
, (58, "# M")
, (59, "# ,")
, (60, "# .")
, (61, "# /")
, (62, "# Shift Right")
, (51, "# \\")
, (98, "# Cursor Up")
, (87, "# KP 1")
, (88, "# KP 2")
, (89, "# KP 3")
, (108, "# KP Enter")
, (37, "# Ctrl Left")
, (115, "# Logo Left (-> Option)")
, (64, "# Alt Left (-> Command)")
, (65, "# Space")
, (113, "# Alt Right (-> Command)")
, (116, "# Logo Right (-> Option)")
, (117, "# Menu (-> International)")
, (109, "# Ctrl Right")
, (100, "# Cursor Left")
, (104, "# Cursor Down")
, (102, "# Cursor Right")
, (90, "# KP 0")
, (91, "# KP .")
, (133, "# ModKey")
]
handleKeyEvent :: Word32 -> IO ()
handleKeyEvent keyval =
case lookup keyval keymap of
Just keyName -> putStrLn keyName
Nothing -> putStrLn "Unknown key"
activate :: Gtk.Application -> IO ()
activate app = do
@ -24,12 +145,7 @@ activate app = do
Gtk.on controller #keyPressed $ \_ keyval _ -> do
-- key <- Gdk.keyvalName keyval -- cant use this because the keyname doesnt always match the real key.
{--
i'll let the keycode displaying while i search for an actual solution for this, but it seems that
it can be a little hard to deal with keycodes: https://superuser.com/questions/1709357/difficulty-remapping-the-super-key
--}
print $ keyval
handleKeyEvent $ keyval -- keyval is translated using our hardcoded table
return True