diff -c c\:/foo/simple.el c\:/foo/simple-patched-2012-12-24.el
*** c:/foo/simple.el	Mon Dec 24 13:48:06 2012
--- c:/foo/simple-patched-2012-12-24.el	Mon Dec 24 14:13:14 2012
***************
*** 819,824 ****
--- 819,854 ----
  	 (overlay-recenter (point))
  	 (recenter -3))))
  
+ (defun end-of-line (&optional n)
+   "Move cursor to end of current line or end of next line if repeated.
+ If called interactively with no prefix arg:
+  If the previous command was also `end-of-line' then move to the
+  end of the next line.  Else move to the end of the current line.
+ Otherwise, move to the end of the Nth next line (Nth previous line
+  if N <0 )."
+   (interactive
+    (list (if current-prefix-arg (prefix-numeric-value current-prefix-arg) 0)))
+   (unless n (setq n  0))                ; non-interactive with no arg
+   (if (and (eq this-command last-command)  (not current-prefix-arg))
+       (forward-line 1)
+     (forward-line n))
+   (let ((inhibit-field-text-motion  t))  (end-of-line)))
+ 
+ (defun beginning-of-line (&optional n)
+   "Move cursor to beginning of current line or next line if repeated.
+ If called interactively with no prefix arg:
+  If the previous command was also `beginning-of-line' then move to the
+  beginning of the previous line.  Else move to the beginning of the
+  current line.
+ Otherwise, move to the beginning of the Nth previous line (Nth next
+  line if N < 0)."
+   (interactive
+    (list (if current-prefix-arg (prefix-numeric-value current-prefix-arg) 0)))
+   (unless n (setq n  0))                ; non-interactive with no arg
+   (if (and (eq this-command last-command)  (not current-prefix-arg))
+       (forward-line -1)
+     (forward-line (- n))))
+ 
  (defcustom delete-active-region t
    "Whether single-char deletion commands delete an active region.
  This has an effect only if Transient Mark mode is enabled, and
***************
*** 5007,5036 ****
  ;;; Editing based on visual lines, as opposed to logical lines.
  
  (defun end-of-visual-line (&optional n)
!   "Move point to end of current visual line.
! With argument N not nil or 1, move forward N - 1 visual lines first.
! If point reaches the beginning or end of buffer, it stops there.
! To ignore intangibility, bind `inhibit-point-motion-hooks' to t."
!   (interactive "^p")
!   (or n (setq n 1))
!   (if (/= n 1)
!       (let ((line-move-visual t))
! 	(line-move (1- n) t)))
    ;; Unlike `move-beginning-of-line', `move-end-of-line' doesn't
    ;; constrain to field boundaries, so we don't either.
    (vertical-motion (cons (window-width) 0)))
  
  (defun beginning-of-visual-line (&optional n)
!   "Move point to beginning of current visual line.
! With argument N not nil or 1, move forward N - 1 visual lines first.
  If point reaches the beginning or end of buffer, it stops there.
! To ignore intangibility, bind `inhibit-point-motion-hooks' to t."
!   (interactive "^p")
!   (or n (setq n 1))
!   (let ((opoint (point)))
!     (if (/= n 1)
! 	(let ((line-move-visual t))
! 	  (line-move (1- n) t)))
      (vertical-motion 0)
      ;; Constrain to field boundaries, like `move-beginning-of-line'.
      (goto-char (constrain-to-field (point) opoint (/= n 1)))))
--- 5037,5083 ----
  ;;; Editing based on visual lines, as opposed to logical lines.
  
  (defun end-of-visual-line (&optional n)
!   "Move cursor to end of current visual line, or end of next if repeated.
! If point reaches the beginning or end of buffer, stop there.
! To ignore intangibility, bind `inhibit-point-motion-hooks' to t.
! 
! If called interactively with no prefix argument:
!  If the previous command was also `end-of-visual-line', then move to
!  the end of the next visual line.  Else move to end of current one.
! Otherwise, move to the end of the Nth next visual line (Nth previous
!  one if N < 0)."
!   (interactive
!    (list (if current-prefix-arg (prefix-numeric-value current-prefix-arg) 0)))
!   (unless n (setq n  0))                 ; non-interactive with no arg 
!   (let ((line-move-visual  t))
!     (if (and (eq this-command last-command)  (not current-prefix-arg))
!         (line-move 1 t)
!       (line-move n t)))
    ;; Unlike `move-beginning-of-line', `move-end-of-line' doesn't
    ;; constrain to field boundaries, so we don't either.
    (vertical-motion (cons (window-width) 0)))
  
  (defun beginning-of-visual-line (&optional n)
!   "Move cursor to beginning of current visual line or next if repeated.
  If point reaches the beginning or end of buffer, it stops there.
! To ignore intangibility, bind `inhibit-point-motion-hooks' to t.
! 
! With argument N, move backward N visual lines.
! 
! If called interactively with no prefix argument:
!  If the previous command was also `beginning-of-visual-line', then
!  move to the beginning of the previous visual line.  Else move to the
!  beginning of the current visual line.
! Otherwise, move to the beginning of the Nth previous visual line
!  (Nth next one if N < 0)."
!   (interactive
!    (list (if current-prefix-arg (prefix-numeric-value current-prefix-arg) 0)))
!   (unless n (setq n  0))                 ; non-interactive with no arg
!   (let ((opoint  (point)))
!     (let ((line-move-visual  t))
!       (if (and (eq this-command last-command)  (not current-prefix-arg))
!           (line-move -1 t)
!         (line-move n t)))
      (vertical-motion 0)
      ;; Constrain to field boundaries, like `move-beginning-of-line'.
      (goto-char (constrain-to-field (point) opoint (/= n 1)))))
***************
*** 5098,5105 ****
  (defvar visual-line-mode-map
    (let ((map (make-sparse-keymap)))
      (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)
      ;; These keybindings interfere with xterm function keys.  Are
      ;; there any other suitable bindings?
      ;; (define-key map "\M-[" 'previous-logical-line)
--- 5145,5154 ----
  (defvar visual-line-mode-map
    (let ((map (make-sparse-keymap)))
      (define-key map [remap kill-line] 'kill-visual-line)
!     (define-key map [home] 'beginning-of-line)
!     (define-key map [end]  'end-of-line)
!     (define-key map "\C-a" 'beginning-of-visual-line)
!     (define-key map "\C-e" 'end-of-visual-line)
      ;; These keybindings interfere with xterm function keys.  Are
      ;; there any other suitable bindings?
      ;; (define-key map "\M-[" 'previous-logical-line)

Diff finished.  Mon Dec 24 21:13:36 2012
