anchor.diff:             :visual-block-p
              :apply-visual-range
              :vi-visual-insert
  -           :vi-visual-append))
  +           :vi-visual-append
  +           :vi-visual-upcase
  +           :vi-visual-downcase))
   (in-package :lem-vi-mode.visual)
   
   (defvar *set-visual-function* nil)
  
positive.code:                             (insert-string start str))))
      (vi-visual-end)))
  
  (defun visual-p ()
    (eq 'visual (current-state)))
  
  (defun visual-char-p ()
    (and (visual-p)
         (eq *set-visual-function* 'visual-char)))
  
  (defun visual-line-p ()
    (and (visual-p)
         (eq *set-visual-function* 'visual-line)))
  
  (defun visual-block-p ()
    (and (visual-p)
         (eq *set-visual-function* 'visual-block)))
  
  (defun apply-visual-range (function)
    (dolist (ov (sort (copy-list *visual-overlays*) #'point< :key #'overlay-start))
      (funcall function
               (overlay-start ov)
               (overlay-end ov))))
  
negative.code:         (change-state 'visual 'visual-block)
          (message "-- VISUAL BLOCK --"))))
  
  (defun visual-p ()
    (eq 'visual (current-state)))
  
  (defun visual-char-p ()
    (and (visual-p)
         (eq *set-visual-function* 'visual-char)))
  
  (defun visual-line-p ()
    (and (visual-p)
         (eq *set-visual-function* 'visual-line)))
  
  (defun visual-block-p ()
    (and (visual-p)
         (eq *set-visual-function* 'visual-block)))
  
  (defun apply-visual-range (function)
    (dolist (ov (sort (copy-list *visual-overlays*) #'point< :key #'overlay-start))
      (funcall function
               (overlay-start ov)
               (overlay-end ov))))
  
  (defun string-without-escape ()
    (concatenate 'string
                 (loop for key-char = (key-to-char (read-key))
  