Subject: 23.1; UK Keyboard (pc105-uk) Definition Wrong in quail.el

From: Richard Wordingham <[email-masked]>
Date: Wed, 26 Jan 2011 23:04:28 +0000

When I execute

(quail-set-keyboard-layout "pc105-uk")

quail text input methods (e.g thai-kesmanee) cease to work.  (I
actually encountered the error when coding up a Khmer keyboard.)  When I
should get the lower character key on a letter key I get the upper
character, and when I type a shifted character I get the character from
another key.

A key diagnostic is that (length quail-keyboard-layout-standard)
returns 180 (6 rows of 15 characters with 2 shift positions), but
(length quail-keyboard-layout) returns 181 after setting the keyboard.

The other keyboard names (in the version of Emacs 23.1 from which I am
reporting) all yield lengths of 180 characters.

The bug appears to be that in the definition of
quail-keyboard-layout-alist in quail.el, there is an extra space in the
first non-blank line of the keyboard definition of the pc105-uk
definition.  This bug is also present in Emacs 22.1 (by examination of
quail.el) and Emacs 23.2 (demonstrated on Windows 7).

A work around in my .emacs file (for Emacs 23.2, confirmed on Emacs
23.1) is the sequence

(quail-set-keyboard-layout "pc105-uk")
(if (> (length quail-keyboard-layout) (length
quail-keyboard-layout-standard)) (setq quail-keyboard-layout
	  (concat (substring quail-keyboard-layout 0 60)
		  (substring quail-keyboard-layout 61
			     (length quail-keyboard-layout)))))

This chops out the superflous character.  Keyboard then works.

In GNU Emacs 23.1.1 (i486-pc-linux-gnu, GTK+ Version 2.20.1)
 of 2010-11-23 on rothera, modified by Debian
Windowing system distributor `The X.Org Foundation', version
11.0.10706000 configured using `configure  '--build=i486-linux-gnu'
'--host=i486-linux-gnu' '--prefix=/usr' '--sharedstatedir=/var/lib'
'--libexecdir=/usr/lib' '--localstatedir=/var/lib'
'--infodir=/usr/share/info' '--mandir=/usr/share/man' '--with-pop=yes'
'--enable-locallisppath=/etc/emacs23:/etc/emacs:/usr/local/share/emacs/23.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/23.1/site-lisp:/usr/share/emacs/site-lisp:/usr/share/emacs/23.1/leim'
'--with-x=yes' '--with-x-toolkit=gtk' '--with-toolkit-scroll-bars'
'build_alias=i486-linux-gnu' 'host_alias=i486-linux-gnu'
'CFLAGS=-DDEBIAN -g -O2' 'LDFLAGS=-g' 'CPPFLAGS=''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_GB.utf8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix
  default-enable-multibyte-characters: t

Major mode: Lisp Interaction

Minor modes in effect:
  tpu-edt-mode: t
  tooltip-mode: t
  tool-bar-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  global-auto-composition-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
<triple-mouse-5> <down-mouse-5> <mouse-5> <double-down-mouse-5> 
<double-mouse-5> <triple-down-mouse-5> <triple-mouse-5> 
<triple-down-mouse-5> <triple-mouse-5> <down-mouse-5> 
<mouse-5> <double-down-mouse-5> <double-mouse-5> <triple-down-mouse-5> 
<triple-mouse-5> <triple-down-mouse-5> <triple-mouse-5> 
<triple-down-mouse-5> <triple-mouse-5> <down-mouse-5> 
<mouse-5> <double-down-mouse-5> <double-mouse-5> <triple-down-mouse-5> 
<triple-mouse-5> <triple-down-mouse-5> <triple-mouse-5> 
<triple-down-mouse-5> <triple-mouse-5> <triple-down-mouse-5> 
<triple-mouse-5> <triple-down-mouse-5> <triple-mouse-5> 
<triple-down-mouse-5> <triple-mouse-5> <help-echo> 
<C-home> <kp-begin> <help-echo> <help-echo> <help-echo> 
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo> 
<help-echo> <help-echo> <menu-bar> <help-menu> <send-emacs-bug-report> 
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo> 
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo> 
C-g C-x b * G G <backspace> <backspace> <tab> <down-mouse-1> 
<mouse-2> <help-echo> <help-echo> <help-echo> <help-echo> 
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo> 
<down-mouse-1> <mouse-2> <help-echo> <down-mouse-5> 
<mouse-5> <down-mouse-5> <mouse-5> <down-mouse-5> <mouse-5> 
<down-mouse-5> <mouse-5> <down-mouse-5> <mouse-5> <help-echo> 
<down-mouse-5> <mouse-5> <double-down-mouse-5> <double-mouse-5> 
<C-home> <kp-multiply> B U G <return> <left> <left> 
<home> <kp-multiply> b u g C-g <C-home> <kp-multiply> 
b u g <return> <down-mouse-5> <mouse-5> <double-down-mouse-5> 
<double-drag-mouse-5> <down-mouse-5> <mouse-5> <double-down-mouse-5> 
<double-mouse-5> <triple-down-mouse-5> <triple-mouse-5> 
<triple-down-mouse-5> <triple-mouse-5> <triple-down-mouse-5> 
<triple-mouse-5> <triple-down-mouse-5> <triple-mouse-5> 
<triple-down-mouse-5> <triple-mouse-5> <down-mouse-5> 
<mouse-5> <double-down-mouse-5> <double-mouse-5> <triple-down-mouse-5> 
<triple-mouse-5> <down-mouse-4> <mouse-4> <double-down-mouse-4> 
<double-mouse-4> <down-mouse-5> <mouse-5> <double-down-mouse-5> 
<double-mouse-5> <down-mouse-5> <mouse-5> <double-down-mouse-5> 
<double-mouse-5> <triple-down-mouse-5> <triple-mouse-5> 
<triple-down-mouse-5> <triple-mouse-5> <down-mouse-4> 
<mouse-4> <double-down-mouse-4> <double-mouse-4> <triple-down-mouse-4> 
<triple-mouse-4> <triple-down-mouse-4> <triple-mouse-4> 
<triple-down-mouse-4> <triple-mouse-4> <triple-down-mouse-4> 
<triple-mouse-4> <triple-down-mouse-4> <triple-mouse-4> 
<triple-down-mouse-4> <triple-mouse-4> <triple-down-mouse-4> 
<triple-mouse-4> <triple-down-mouse-4> <triple-mouse-4> 
<triple-down-mouse-4> <triple-mouse-4> <triple-down-mouse-4> 
<triple-mouse-4> <triple-down-mouse-4> <triple-mouse-4> 
<help-echo> <help-echo> <down-mouse-1> <mouse-1> <help-echo> 
C-x b * s <tab> <return> <help-echo> <down-mouse-1> 
<mouse-1> <down-mouse-1> <mouse-1> C-x b g C-x C-b 
<down-mouse-1> <mouse-1> <right> <right> <right> <right> 
<right> <right> <right> <right> <right> <right> <right> 
<right> <right> <right> <right> <right> <right> <right> 
<right> <right> <right> <right> <right> <right> <right> 
<right> <right> <right> <right> <right> <right> <right> 
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo> 
<down-mouse-1> <mouse-1> <help-echo> <help-echo> <help-echo> 
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo> 
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo> 
<help-echo> <help-echo> <help-echo> <down-mouse-1> 
<mouse-1> C-j <backspace> <help-echo> <help-echo> <help-echo> 
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo> 
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo> 
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo> 
<help-echo> <help-echo> <menu-bar> <help-menu> <send-emacs-bug-report> 
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo> 
<help-echo> <help-echo> <menu-bar> <help-menu> <se
nd-emacs-bug-report>

Recent messages:
/usr/bin/mail is not an executable.  Setting mail-interactive to t.
Quit
Making completion list...
uncompressing emacs.gz...done
uncompressing emacs-1.gz...done
Search failed: "BUG" [2 times]
Mark set
Quit
Search failed: "bug"
byte-code: End of buffer
read-buffer-to-switch: Command attempted to use minibuffer while in
minibuffer