-(defun plomvi-nothing()
- "Do nothing. Used to shadow self-insert bindings in `plomvi-mode-editable-map'."
- (interactive))
-
(defun plomvi-half-scroll()
"Scroll down half a screen width."
(interactive)
(interactive)
(search-backward isearch-string))
-
-(defun plomvi-copy-line()
- "Copy current line into kill buffer."
+(defun plomvi-Y()
+ "Copy rectangle, or full line, or region in full lines."
(interactive)
- (let ((keep_pos (point))) ; We sort of cheat: We kill the line, then we
- (kill-whole-line) ; paste it back, and return point to its
- (plomvi-paste-backward) ; original position.
- (goto-char keep_pos))) ;
+ (cond
+ ((and (boundp 'rectangle-mark-mode) (eq t rectangle-mark-mode))
+ (copy-rectangle-as-kill (region-beginning) (region-end)))
+ ((use-region-p)
+ (let* ((start-start-pos (region-beginning))
+ (start-end-pos (region-end))
+ (region-start (progn
+ (goto-char start-start-pos)
+ (beginning-of-line)
+ (point)))
+ (region-end (progn
+ (goto-char start-end-pos)
+ (end-of-line)
+ (+ 1 (point)))))
+ (copy-region-as-kill region-start region-end)
+ (goto-char region-start)))
+ (t
+ (let ((keep-pos (point))
+ (region-start (progn (beginning-of-line) (point)))
+ (region-end (progn (end-of-line) (+ 1 (point)))))
+ (copy-region-as-kill region-start region-end)
+ (goto-char keep-pos)))))
(defun plomvi-copy-region()
"Copy marked region."
(defvar plomvi-mode-basic-map (make-sparse-keymap)
"Keymap for `plomvi-mode' on read-only buffers.
-In contrast to the keymap `plomvi-editable-mode' for editable buffers,
-this not only excludes keybindings for editing text, but also does not
-shadow keybindings that are bound to `self-insert-command'.
-
-Thus, it on the whole shadows much fewer keybindings of other keymaps
-that can therefore be used for other purposes.")
+In contrast to the keymap `plomvi-editable-mode' for editable
+buffers, this excludes keybindings for editing text, which thus
+become available to be used for other purposes.")
+(suppress-keymap plomvi-mode-basic-map t)
(define-key plomvi-mode-basic-map (kbd ":") 'plomvi-prompt)
(define-key plomvi-mode-basic-map (kbd "C-w") 'other-window)
(define-key plomvi-mode-basic-map (kbd "k") 'previous-line)
(defvar plomvi-mode-editable-map (make-sparse-keymap)
"Keymap for `plomvi-mode' on editable buffers.
-Inherits from `plomvi-mode-basic-map', but adds keybindings for text editing
-and shadows keybindings bound to `self-insert-command' to avoid accidentally
-typing text outside of what would be Vim's Insert mode.")
+Inherits from `plomvi-mode-basic-map', but adds keybindings for
+text editing.")
(set-keymap-parent plomvi-mode-editable-map plomvi-mode-basic-map)
-(define-key plomvi-mode-editable-map [remap self-insert-command] 'plomvi-nothing)
(define-key plomvi-mode-editable-map (kbd "i") 'plomvi-deactivate)
(define-key plomvi-mode-editable-map (kbd "x") 'plomvi-x)
(define-key plomvi-mode-editable-map (kbd "o") 'plomvi-newline-below)
(define-key plomvi-mode-editable-map (kbd "I") 'string-insert-rectangle)
(define-key plomvi-mode-editable-map (kbd "p") 'plomvi-paste-forward)
(define-key plomvi-mode-editable-map (kbd "P") 'plomvi-paste-backward)
-(define-key plomvi-mode-editable-map (kbd "Y") 'plomvi-copy-line)
+(define-key plomvi-mode-editable-map (kbd "Y") 'plomvi-Y)
(define-key plomvi-mode-editable-map (kbd "y") 'plomvi-copy-region)
(define-key plomvi-mode-editable-map (kbd "D") 'plomvi-region-kill)
(define-prefix-command 'plomvi-d-map)