Subject: 26.1; cua-mode: wrong type argument when activating rectangle

From: Braun Gábor <[email-masked]>
Date: Fri, 22 Mar 2019 16:11:44 +0100

Hi,

Ways to reproduce the bug:

1. Create the following .emacs file (it has been created by customizing
some variables):

------------------- .emacs ----------------------
(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(cua-mode t nil (cua-base))
 '(cua-rectangle-mark-key [f7])
 '(custom-enabled-themes nil))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )
-------------------------------------------------

Start Emacs by the command: emacs -Q -l .emacs

Select some text, then press F7, to be explicit, press the following
three keystrokes (copied from the help buffer shown by `C-h l'):

 <S-up> [previous-line]
 <S-up> [previous-line]
 <f7> [cua-toggle-rectangle-mark]

The following error message appears at the bottom:

Wrong type argument: commandp, cua-toggle-rectangle-mark

2.a) A second way to reproduce the bug:

Start Emacs via

emacs -Q -f cua-mode --eval "(custom-set-variables '(cua-rectangle-mark-
key [(f7)]))"

and press the same three keys as above: S-up S-up f7.
The same error messae appears.

2.b) The problem does not happen when in the command starting Emacs, the
last two arguments are swapped, then the rectangle is activated as 
expected.

emacs -Q --eval "(custom-set-variables '(cua-rectangle-mark-key 
[(f7)]))" -f cua-mode

Suggested patch:

Autoload the command mentioned in the error message.
Library cua-base.el binds cua-toggle-rectangle-mark to a key
in the :set function in (defcustom cua-rectangle-mark-key ...),
so it should ensure that the command is defined.

--- lisp/emulation/cua-base.el	2018-12-15 09:08:18 +0100
+++ lisp/emulation/cua-base.el	2019-03-09 09:08:18 +0100
@@ -592,6 +592,7 @@

 (autoload 'cua-set-rectangle-mark "cua-rect"
   "Start rectangle at mouse click position." t nil)
+(autoload 'cua-toggle-rectangle-mark "cua-rect" nil t)

 ;; Stub definitions until it is loaded
 (defvar cua--rectangle)

The rest is not part of the patch.

System information:

In GNU Emacs 26.1 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.4)
 of 2019-02-03, modified by Debian built on zam904
Windowing system distributor 'The X.Org Foundation', version 
11.0.12003000
System Description:	Debian GNU/Linux buster/sid

Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
Cua mode enabled
Mark set
command-execute: Wrong type argument: commandp, cua-toggle-rectangle-
mark
Type M-x delete-other-windows to delete the help window.
Making completion list...

Configured using:
 'configure --build x86_64-linux-gnu --prefix=/usr
 --sharedstatedir=/var/lib --libexecdir=/usr/lib
 --localstatedir=/var/lib --infodir=/usr/share/info
 --mandir=/usr/share/man --enable-libsystemd --with-pop=yes
 --enable-locallisppath=/etc/emacs:/usr/local/share/emacs/26.1/site-
lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/26.1/site-lisp:/
usr/share/emacs/site-lisp
 --with-sound=alsa --without-gconf --with-mailutils --build
 x86_64-linux-gnu --prefix=/usr --sharedstatedir=/var/lib
 --libexecdir=/usr/lib --localstatedir=/var/lib
 --infodir=/usr/share/info --mandir=/usr/share/man --enable-libsystemd
 --with-pop=yes
 --enable-locallisppath=/etc/emacs:/usr/local/share/emacs/26.1/site-
lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/26.1/site-lisp:/
usr/share/emacs/site-lisp
 --with-sound=alsa --without-gconf --with-mailutils --with-x=yes
 --with-x-toolkit=gtk3 --with-toolkit-scroll-bars 'CFLAGS=-g -O2
 -fdebug-prefix-map=/build/emacs-26.1+1=. -fstack-protector-strong
 -Wformat -Werror=format-security -Wall' 'CPPFLAGS=-Wdate-time
 -D_FORTIFY_SOURCE=2' LDFLAGS=-Wl,-z,relro'

Configured features:
XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GSETTINGS NOTIFY
ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11 THREADS LIBSYSTEMD LCMS2

Important settings:
  value of $LANG: hu_HU.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  delete-selection-mode: t
  cua-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message rmc puny seq byte-opt gv
bytecomp byte-compile cconv dired dired-loaddefs format-spec rfc822 mml
mml-sec password-cache epa derived epg epg-config gnus-util rmail
rmail-loaddefs mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils help-mode easymenu cl-loaddefs cl-lib
cus-start cus-load delsel cua-base elec-pair time-date mule-util tooltip
eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel
term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode
lisp-mode prog-mode register page menu-bar rfn-eshadow isearch timer
select scroll-bar mouse jit-lock font-lock syntax facemenu font-core
term/tty-colors frame cl-generic cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932
hebrew greek romanian slovak czech european ethiopic indian cyrillic
chinese composite charscript charprop case-table epa-hook jka-cmpr-hook
help simple abbrev obarray minibuffer cl-preloaded nadvice loaddefs
button faces cus-face macroexp files text-properties overlay sha1 md5
base64 format env code-pages mule custom widget hashtable-print-readable
backquote dbusbind inotify lcms2 dynamic-setting system-font-setting
font-render-setting move-toolbar gtk x-toolkit x multi-tty
make-network-process emacs)

Memory information:
((conses 16 107807 14804)
 (symbols 48 21486 1)
 (miscs 40 66 204)
 (strings 32 30425 1350)
 (string-bytes 1 782154)
 (vectors 16 14931)
 (vector-slots 8 500152 12640)
 (floats 8 61 221)
 (intervals 56 284 0)
 (buffers 992 13))

Best wishes,

     Gábor