all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#7940: 23.2; Home and End keys don't work as expected with both pc-selection-mode and visual-line-mode enabled
@ 2011-01-30  5:00 PJ Weisberg
  2011-02-01 21:11 ` Stefan Monnier
  2011-02-08 20:46 ` Stefan Monnier
  0 siblings, 2 replies; 4+ messages in thread
From: PJ Weisberg @ 2011-01-30  5:00 UTC (permalink / raw)
  To: 7940


[-- Attachment #1.1: Type: text/plain, Size: 579 bytes --]

1) Open or create a file with logical lines longer than the width of the
window.
2) Enable visual-line-mode and pc-selection-mode (order doesn't matter).
3) Press the <home> and/or <end> keys with point on one of these long
lines.

Expected: Point moves to the beginning/end of the current visual line.
Observed: Point moves to the beginning/end of the current logical line.

I've attached two (mutually exclusive) patches against the trunk.  I've
never submitted a patch to Emacs before, so please let me know which is more
in line with the preferred way of doing things.

--PJ

[-- Attachment #1.2: Type: text/html, Size: 645 bytes --]

[-- Attachment #2: pc-visual-line_if.patch --]
[-- Type: text/x-patch, Size: 3789 bytes --]

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: pj@irregularexpressions.net-20110130045542-\
#   nuvqsje84yncvflq
# target_branch: bzr://bzr.savannah.gnu.org/emacs/trunk/
# testament_sha1: b4d2fcdcc523cadc51d5f47e1965a9610cfcb2db
# timestamp: 2011-01-29 20:56:16 -0800
# base_revision_id: schwab@linux-m68k.org-20110130003535-\
#   jminwifpi767oiw5
# 
# Begin patch
=== modified file 'lisp/emulation/pc-select.el'
--- lisp/emulation/pc-select.el	2011-01-25 04:08:28 +0000
+++ lisp/emulation/pc-select.el	2011-01-30 04:55:42 +0000
@@ -366,8 +366,11 @@
 If scan reaches end of buffer, stop there without error."
   (interactive "p")
   (pc-select-ensure-mark)
-  (end-of-line arg)
-  (setq this-command 'end-of-line))
+  (let ((eol-command (if visual-line-mode
+                         'end-of-visual-line
+                       'end-of-line)))
+    (funcall eol-command arg)
+    (setq this-command eol-command)))
 
 (defun backward-line-mark (&optional arg)
   "Ensure mark is active; move cursor vertically up ARG lines."
@@ -501,8 +504,11 @@
 If scan reaches end of buffer, stop there without error."
   (interactive "p")
   (pc-select-maybe-deactivate-mark)
-  (end-of-line arg)
-  (setq this-command 'end-of-line))
+  (let ((eol-command (if visual-line-mode
+                         'end-of-visual-line
+                       'end-of-line)))
+    (funcall eol-command arg)
+    (setq this-command eol-command)))
 
 (defun backward-line-nomark (&optional arg)
   "Deactivate mark; move cursor vertically up ARG lines."
@@ -628,8 +634,9 @@
 If scan reaches end of buffer, stop there without error."
   (interactive "p")
   (pc-select-ensure-mark)
-  (beginning-of-line arg))
-
+  (if visual-line-mode
+      (beginning-of-visual-line arg)
+    (beginning-of-line arg)))
 
 (defun scroll-up-mark (&optional arg)
   "Ensure mark is active; scroll upward ARG lines; or near full screen if no ARG.
@@ -728,7 +735,9 @@
 If scan reaches end of buffer, stop there without error."
   (interactive "p")
   (pc-select-maybe-deactivate-mark)
-  (beginning-of-line arg))
+  (if visual-line-mode
+      (beginning-of-visual-line arg)
+    (beginning-of-line arg)))
 
 (defun scroll-up-nomark (&optional arg)
   "Deactivate mark; scroll upward ARG lines; or near full screen if no ARG.

# Begin bundle
IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWRC6JvgAAed/gFAQCgBQ4//3
UhJAgL////BQBD5T3uvBYo9T2u73CSSNGiZTTwJoAp6eqe1Gp6R6j1DE9IMoJhNqaaJ6U9IeiAAA
ABoMSaJo0pjQj1B6Jo9IAAAGgilGqeKeieET1GR6QGQAAAAkkTETKeQmeoaTRhAxAAAQAw3lYeef
1M04C3ipM5mIQotSMsIPjeRqjCNoCHAHwOOBBxl4aWGYPXxKaJFljmeQGTDWtzs+2mz7/y3CNPGO
rdiId27xSXTNBg1nYJIe2zPTfXNNzHMLabjUbTcdQ4ekxuDQMMXOFjHmc+tmMoDYLXVEgExiUdae
GQGR+qsItp2CvVpcDG411hLyxqtblv4nf1X5b5B0QdsOyOVsYGx0wJtKSfccbmALQrF4csGUjUwe
D1PWK2YRUMYeCIGAv1ZKBFCkT5J3wbz1V9I0HWdQosUfxQ8LPtzvvWYnVt8aWUgsaVNY0xSp9IjO
VEBomJ13xJCixsTQdXHOWDYHJ+edkomIZeL2o9H5yMBguRiDHeXZA5qBy+hV8LQ8TSiHLAGoyvkV
sGDDgWwBugNTweS12InsfQfwUrafIz1YC5eLILi3IOfS9wEXxH6W1oYB4SsVBa8WjQppsS1EPCJU
GsaHjadSsQ5wZSvBdoCgcIPddbN9rIxL4KadBZRpVruqIzQZzsVS8OhIyngxIKc5YasxaWYBpCYE
5Klvmktt2i1m0rZ6vCWH6TqMaIJL5a3aNCKhgy5xm4siDSaMB5skK/nFU5e+fP5hzQcuJCx+ouYG
Y8aEeSUYo07HE4DSpjqGeKGv5W5KgxxbltiLC+N19KpdkBTmMAlQmZJqYbyJEHp6ZyafsAogsgsE
nmdYmEAgFexKzXLP0At47OQWc+tNZIMXBwbkXKRb9Eyw8G6VzBxSt79F60zN4+zjeHrj7h8Um1Ms
h4a9+51mbjx4TpNuNCXeUekTLVLAKPIBrdiu5ehvGUDRwvwFY4hImwK0h4ZI8Aqj7xJWm0mGB5dQ
rhRoNCqLN/8mhcGY8FNUGS8OZCtrDeE8aqrkuU9rMIuS9C7ShVS7VLRoScK5YYZJ1t+kKi1VivQO
B3TYEKA7gNScG28woU1Ws9OnUKuSfMDKqcOm46OKlBBUKUjFTAOLD53EvYTCKApCIRo7FmSvSFU4
amhaUnhvpGdDPM2jmcBWpRWb9iCYWTJQPoFQZ6VwjWyq6q/BmX1d2dGUVsiRFGvJo+FlgWEPAxsH
RjDYGbBZJlWvjzjkzQMwIw2wA3mnwkxjFHgcZSXxhWateAUMQzC2ISSd3CqXbgQSCSBnFzCssT3v
mVs+rETwYnkV1QMSQCGQVY5ZjsK3ECfKTt2mFjiB2GazcDcDALkxG15mllixc0NQm46x6Z8MhN/i
7kinChICF0TfAA==

[-- Attachment #3: pc-visual-line_function.patch --]
[-- Type: text/x-patch, Size: 5804 bytes --]

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: pj@irregularexpressions.net-20110130033100-\
#   r8qs1ccpbbbsbg1e
# target_branch: bzr://bzr.savannah.gnu.org/emacs/trunk/
# testament_sha1: 10ade64307d860af931f9f6fd8d3162c0b4d71e1
# timestamp: 2011-01-29 19:42:53 -0800
# base_revision_id: schwab@linux-m68k.org-20110130003535-\
#   jminwifpi767oiw5
# 
# Begin patch
=== modified file 'lisp/emulation/pc-select.el'
--- lisp/emulation/pc-select.el	2011-01-25 04:08:28 +0000
+++ lisp/emulation/pc-select.el	2011-01-30 03:31:00 +0000
@@ -369,6 +369,15 @@
   (end-of-line arg)
   (setq this-command 'end-of-line))
 
+(defun end-of-visual-line-mark (&optional arg)
+  "Ensure mark is active; move point to end of current visual line.
+With argument ARG not nil or 1, move forward ARG - 1 lines first.
+If scan reaches end of buffer, stop there without error."
+  (interactive "p")
+  (pc-select-ensure-mark)
+  (end-of-visual-line arg)
+  (setq this-command 'end-of-visual-line))
+
 (defun backward-line-mark (&optional arg)
   "Ensure mark is active; move cursor vertically up ARG lines."
   (interactive "p")
@@ -504,6 +513,15 @@
   (end-of-line arg)
   (setq this-command 'end-of-line))
 
+(defun end-of-visual-line-nomark (&optional arg)
+  "Deactivate mark; move point to end of current visual line.
+With argument ARG not nil or 1, move forward ARG - 1 lines first.
+If scan reaches end of buffer, stop there without error."
+  (interactive "p")
+  (pc-select-maybe-deactivate-mark)
+  (end-of-visual-line arg)
+  (setq this-command 'end-of-visual-line))
+
 (defun backward-line-nomark (&optional arg)
   "Deactivate mark; move cursor vertically up ARG lines."
   (interactive "p")
@@ -630,6 +648,13 @@
   (pc-select-ensure-mark)
   (beginning-of-line arg))
 
+(defun beginning-of-visual-line-mark (&optional arg)
+  "Ensure mark is active; move point to beginning of current visual line.
+With argument ARG not nil or 1, move forward ARG - 1 lines first.
+If scan reaches end of buffer, stop there without error."
+  (interactive "p")
+  (pc-select-ensure-mark)
+  (beginning-of-visual-line arg))
 
 (defun scroll-up-mark (&optional arg)
   "Ensure mark is active; scroll upward ARG lines; or near full screen if no ARG.
@@ -730,6 +755,14 @@
   (pc-select-maybe-deactivate-mark)
   (beginning-of-line arg))
 
+(defun beginning-of-visual-line-nomark (&optional arg)
+  "Deactivate mark; move point to beginning of current visual line.
+With argument ARG not nil or 1, move forward ARG - 1 lines first.
+If scan reaches end of buffer, stop there without error."
+  (interactive "p")
+  (pc-select-maybe-deactivate-mark)
+  (beginning-of-visual-line arg))
+
 (defun scroll-up-nomark (&optional arg)
   "Deactivate mark; scroll upward ARG lines; or near full screen if no ARG.
 A near full screen is `next-screen-context-lines' less than a full screen.

=== modified file 'lisp/simple.el'
--- lisp/simple.el	2011-01-25 04:08:28 +0000
+++ lisp/simple.el	2011-01-30 03:31:00 +0000
@@ -4808,6 +4808,10 @@
     (define-key map [remap kill-line] 'kill-visual-line)
     (define-key map [remap move-beginning-of-line] 'beginning-of-visual-line)
     (define-key map [remap move-end-of-line]  'end-of-visual-line)
+    (define-key map [remap end-of-line-nomark] 'end-of-visual-line-nomark)
+    (define-key map [remap end-of-line-mark] 'end-of-visual-line-mark)
+    (define-key map [remap beginning-of-line-nomark] 'beginning-of-visual-line-nomark)
+    (define-key map [remap beginning-of-line-mark] 'beginning-of-visual-line-mark)
     ;; These keybindings interfere with xterm function keys.  Are
     ;; there any other suitable bindings?
     ;; (define-key map "\M-[" 'previous-logical-line)

# Begin bundle
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
3lo=

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-02-08 20:46 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-30  5:00 bug#7940: 23.2; Home and End keys don't work as expected with both pc-selection-mode and visual-line-mode enabled PJ Weisberg
2011-02-01 21:11 ` Stefan Monnier
2011-02-05 21:41   ` PJ Weisberg
2011-02-08 20:46 ` Stefan Monnier

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.