Author: sasugaanija
Date: Tue Aug 28 05:38:44 2007
New Revision: 4923

Modified:
   trunk/emacs/uim-var.el
   trunk/emacs/uim.el

Log:
* emacs/uim-var.el
  - (uim-ignore-next)
    - Revived.

* emacs/uim.el
  - (uim-process-input)
    - Add workaround for FSF Emacs-20/21.
  


Modified: trunk/emacs/uim-var.el
==============================================================================
--- trunk/emacs/uim-var.el      (original)
+++ trunk/emacs/uim-var.el      Tue Aug 28 05:38:44 2007
@@ -256,6 +256,10 @@
 (defvar uim-last-key-vector nil
   "Recent key vector.")
 
+(defvar uim-ignore-next nil
+  "If the value is non-nil, uim-process-input ignores next input.
+ This variable is used for avoiding FSF Emacs20/21's strange behavior.")
+
 (defvar uim-prefix-arg nil
   "Recent current-prefix-arg value.")
 

Modified: trunk/emacs/uim.el
==============================================================================
--- trunk/emacs/uim.el  (original)
+++ trunk/emacs/uim.el  Tue Aug 28 05:38:44 2007
@@ -891,14 +891,31 @@
        sendkey newvec count mouse  wait discard)
     (setq new-key-vector (uim-this-command-keys-vector))
 
+    (if uim-ignore-next
+       ;; workaround for FSF Emacs-20/21
+       (progn
+         (uim-debug (format "ignore this input %s" new-key-vector))
+         (setq uim-ignore-next nil)
+         (setq discard t))
+      
     (if current-prefix-arg
        (let (vector-list)
          (setq uim-prefix-arg current-prefix-arg)
          (setq vector-list (uim-separate-prefix-vector new-key-vector))
          (setq new-key-vector (car vector-list))
          (setq uim-prefix-arg-vector (nth 1 vector-list))
+
+           ;; Workaround for FSF Emacs-20/21
+           ;;  Key event beginning with C-u and terminating with ESC-something
+           ;;  invokes uim-process-input with twice at a time.
+           ;;  In such a case, uim.el ignores the 2nd vector.
+           (if (and uim-emacs
+                    (<= emacs-major-version 21)
+                    (>= (length new-key-vector) 2))
+               (setq uim-ignore-next t))
+
          (uim-debug (format "uim-prefix-arg-vector %s" uim-prefix-arg-vector))
-         (uim-debug (format "set uim-prefix-arg: %s" current-prefix-arg))))
+           (uim-debug (format "set uim-prefix-arg: %s" current-prefix-arg)))))
 
     (if uim-xemacs
        (setq uim-original-input-event (copy-event last-input-event)))
@@ -961,7 +978,10 @@
       (uim-debug (format "send-vector-raw: %s" send-vector-raw))
 
 
-      (cond ((or (and uim-emacs 
+      (cond (discard
+            (setq send nil))
+           
+           ((or (and uim-emacs 
                      (eventp event)
                      (memq (event-basic-type event) 
                            '(mouse-1 mouse-2 mouse-3 mouse-4 mouse-5)))

Reply via email to