From a4b31fffa75b94adb3622698a9610c50667ff9e5 Mon Sep 17 00:00:00 2001 From: Sergio Gil Date: Fri, 14 Nov 2025 14:53:19 +0100 Subject: [PATCH] Support Unicode input by calling `wget_wch` instead of `wgetch` --- src/lib_ncurses.cr | 2 +- src/ncurses.cr | 5 +++-- src/ncurses/window.cr | 12 +++++++++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/lib_ncurses.cr b/src/lib_ncurses.cr index c98d44e..325cc67 100644 --- a/src/lib_ncurses.cr +++ b/src/lib_ncurses.cr @@ -66,7 +66,7 @@ lib LibNCurses fun wtimeout(window : Window, timeout : LibC::Int) # Input functions - fun wgetch(window : Window) : LibC::Int + fun wget_wch(window : Window, wch : LibC::UInt*) : LibC::Int fun flushinp : LibC::Int # Mouse functions diff --git a/src/ncurses.cr b/src/ncurses.cr index a723bf8..68ea63a 100644 --- a/src/ncurses.cr +++ b/src/ncurses.cr @@ -16,8 +16,9 @@ module NCurses alias Color = LibNCurses::Color # Possible integer result values - ERR = -1 - OK = 0 + ERR = -1 + OK = 0 + KEY_CODE_YES = 0o400 BORDER_DEFAULT = 0.chr diff --git a/src/ncurses/window.cr b/src/ncurses/window.cr index 4adf3af..fb9afb1 100644 --- a/src/ncurses/window.cr +++ b/src/ncurses/window.cr @@ -232,10 +232,16 @@ module NCurses # # Returned as `Key` if recognised, `Char` otherwise # - # Wrapper for `wgetch()` (`getch()`) + # Wrapper for `wget_wch()` (`get_wch()`) def get_char : Key | Char | Nil - return nil if (key = LibNCurses.wgetch(self)) == ERR - return Key.from_value?(key) || key.chr + case LibNCurses.wget_wch(self, out key) + when OK # key is a character + key.chr + when KEY_CODE_YES # key is a special key + Key.from_value?(key) + else # ERR or something else unexpected + nil + end end # Get a character input for main loop