emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/keyboard.c,v


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/src/keyboard.c,v
Date: Fri, 01 Feb 2008 16:01:49 +0000

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Changes by:     Miles Bader <miles>     08/02/01 16:01:31

Index: src/keyboard.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/keyboard.c,v
retrieving revision 1.941
retrieving revision 1.942
diff -u -b -r1.941 -r1.942
--- src/keyboard.c      31 Jan 2008 11:35:42 -0000      1.941
+++ src/keyboard.c      1 Feb 2008 16:00:40 -0000       1.942
@@ -33,7 +33,7 @@
 #include "window.h"
 #include "commands.h"
 #include "buffer.h"
-#include "charset.h"
+#include "character.h"
 #include "disptab.h"
 #include "dispextern.h"
 #include "syntax.h"
@@ -1788,7 +1788,7 @@
                          : (lose >= 0x20 && lose < 0x7f))
                      /* To extract the case of continuation on
                          wide-column characters.  */
-                     && (WIDTH_BY_CHAR_HEAD (FETCH_BYTE (PT_BYTE)) == 1)
+                     && ASCII_BYTE_P (lose)
                      && (XFASTINT (XWINDOW (selected_window)->last_modified)
                          >= MODIFF)
                      && (XFASTINT (XWINDOW 
(selected_window)->last_overlay_modified)
@@ -1845,7 +1845,7 @@
                {
                  unsigned int c
                    = translate_char (Vtranslation_table_for_input,
-                                     XFASTINT (last_command_char), 0, 0, 0);
+                                     XFASTINT (last_command_char));
                  int value;
                  if (NILP (Vexecuting_kbd_macro)
                      && !EQ (minibuf_window, selected_window))
@@ -2024,7 +2024,7 @@
      int last_pt;
      int modified;
 {
-  int beg, end;
+  EMACS_INT beg, end;
   Lisp_Object val, overlay, tmp;
   int check_composition = 1, check_display = 1, check_invisible = 1;
   int orig_pt = PT;
@@ -3196,7 +3196,7 @@
          || (VECTORP (current_kboard->Vkeyboard_translate_table)
              && XVECTOR (current_kboard->Vkeyboard_translate_table)->size > 
(unsigned) XFASTINT (c))
          || (CHAR_TABLE_P (current_kboard->Vkeyboard_translate_table)
-             && CHAR_VALID_P (XINT (c), 0)))
+             && CHARACTERP (c)))
        {
          Lisp_Object d;
          d = Faref (current_kboard->Vkeyboard_translate_table, c);
@@ -10088,8 +10088,38 @@
 
       /* If KEY is not defined in any of the keymaps,
         and cannot be part of a function key or translation,
-        and is an upper case letter or shifted key,
-        use the corresponding lower-case/unshifted key instead.  */
+        and is an upper case letter
+        use the corresponding lower-case letter instead.  */
+      if (first_binding >= nmaps
+         && /* indec.start >= t && fkey.start >= t && */ keytran.start >= t
+         && INTEGERP (key)
+         && ((CHARACTERP (make_number (XINT (key) & ~CHAR_MODIFIER_MASK))
+              && UPPERCASEP (XINT (key) & ~CHAR_MODIFIER_MASK))
+             || (XINT (key) & shift_modifier)))
+       {
+         Lisp_Object new_key;
+
+         original_uppercase = key;
+         original_uppercase_position = t - 1;
+
+         if (XINT (key) & shift_modifier)
+           XSETINT (new_key, XINT (key) & ~shift_modifier);
+         else
+           XSETINT (new_key, (DOWNCASE (XINT (key) & ~CHAR_MODIFIER_MASK)
+                              | (XINT (key) & ~CHAR_MODIFIER_MASK)));
+
+         /* We have to do this unconditionally, regardless of whether
+            the lower-case char is defined in the keymaps, because they
+            might get translated through function-key-map.  */
+         keybuf[t - 1] = new_key;
+         mock_input = max (t, mock_input);
+
+         goto replay_sequence;
+       }
+      /* If KEY is not defined in any of the keymaps,
+        and cannot be part of a function key or translation,
+        and is a shifted function key,
+        use the corresponding unshifted function key instead.  */
       if (first_binding >= nmaps
          && /* indec.start >= t && fkey.start >= t && */ keytran.start >= t)
        {




reply via email to

[Prev in Thread] Current Thread [Next in Thread]