From 5908080d8f97bb285c1f3b60fe3d46e14c3470dc Mon Sep 17 00:00:00 2001 From: hashirama Date: Fri, 31 Jan 2025 01:52:44 +0000 Subject: [PATCH] Update keyPress.hs --- keyPress.hs | 132 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 124 insertions(+), 8 deletions(-) diff --git a/keyPress.hs b/keyPress.hs index 333f280..776738b 100644 --- a/keyPress.hs +++ b/keyPress.hs @@ -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