Update of /project/mcclim/cvsroot/mcclim/Backends/beagle/input
In directory common-lisp.net:/tmp/cvs-serv303/beagle/input
Modified Files:
events.lisp
Log Message:
Nasty hacks to add support for backspace + delete keys.
Date: Sun May 29 11:55:39 2005
Author: drose
Index: mcclim/Backends/beagle/input/events.lisp
diff -u mcclim/Backends/beagle/input/events.lisp:1.5 mcclim/Backends/beagle/input/events.lisp:1.6
--- mcclim/Backends/beagle/input/events.lisp:1.5 Sat May 28 21:56:05 2005
+++ mcclim/Backends/beagle/input/events.lisp Sun May 29 11:55:39 2005
@@ -28,7 +28,7 @@
#||
-$Id: events.lisp,v 1.5 2005/05/28 19:56:05 drose Exp $
+$Id: events.lisp,v 1.6 2005/05/29 09:55:39 drose Exp $
Events in Cocoa
---------------
@@ -201,7 +201,8 @@
;; This falls over when the function keys, the arrow keys, the num-lock key (and others)
;; are pressed; I guess we don't want to be doing this!
;;; (key-name (ccl::lisp-string-from-nsstring (send event 'characters-ignoring-modifiers))))
- (let ((key-name (characters-to-key-name (send event 'characters-ignoring-modifiers))))
+ (let* ((characters (send event 'characters-ignoring-modifiers))
+ (key-name (characters-to-key-name characters)))
key-name))
@@ -474,9 +475,13 @@
(make-instance (if (eq :key-down event-type)
'key-press-event
'key-release-event)
+ ;; McCLIM seems not to understand these, whatever we pass :-(
:key-name keyname
- ;; not needed by spec - should change implementation?
- :key-character (and (characterp keyname) keyname)
+ ;; not needed by spec - should change implementation? And this is a
+ ;; REALLY bad place to deal with DELETE-CHAR -> #\Del. ::FIXME::
+ :key-character (if (eq keyname :DELETE-CHAR)
+ #\Del
+ (and (characterp keyname) keyname))
:x 0 ; Not needed for key events?
:y 0 ; Not needed for key events?
:graft-x 0 ; Not needed for key events?
@@ -818,7 +823,8 @@
(defun characters-to-key-name (ns-string-characters-in)
;;; (format *terminal-io* "Processing ~S~%" ns-string-characters-in)
;;; (format *terminal-io* "Got string with length ~A~%" (send ns-string-characters-in 'length))
-;;; (format *terminal-io* "character(0) = ~A~%" (send ns-string-characters-in :character-at-index 0))
+;;; (format *terminal-io* "character(0) = ~A~%"
+;;; (char-code (send ns-string-characters-in :character-at-index 0)))
(if (<= (send ns-string-characters-in :character-at-index 0) 255)
(numeric-keysym-to-character (send ns-string-characters-in :character-at-index 0))
(progn
@@ -838,6 +844,12 @@
(cond
((= #x1b keysym)
(get-key-name-from-cocoa-constants keysym))
+ ;; Manually massage this... messy. OS X generates 127 for |<-| key,
+ ;; map it onto #\Backspace (by default in OpenMCL it maps onto
+ ;; #\Del (delete forward)). OpenMCL treats #\Backspace and
+ ;; #\Delete as synonyms.
+ ((= #x7f keysym)
+ #\Backspace)
((and (<= 0 keysym 255))
(code-char keysym))
(t nil)))
@@ -888,6 +900,8 @@
#$NSF34FunctionKey :F34
#$NSF35FunctionKey :F35
#$NSInsertFunctionKey :INSERT
+ ;; Neither of these appear to have the desired result.
+;;; #$NSDeleteFunctionKey #\Del ; :DELETE-CHAR
#$NSDeleteFunctionKey :DELETE-CHAR
#$NSHomeFunctionKey :HOME
#$NSBeginFunctionKey :BEGIN
@@ -920,6 +934,9 @@
#$NSFindFunctionKey :FIND
#$NSHelpFunctionKey :HELP
#$NSModeSwitchFunctionKey :MODE-SWITCH
+ ;; #x7f = DEL in ASCII
+;;; #x7f :BACKSPACE
+ ;; #x1b = ESC in ASCII
#x1b :ESCAPE))
;;;(defun get-key-name-from-cocoa-constants (ns-in)