(yank)
(previous-line)))
-(defun plomvi-region-kill()
- "Kill marked region."
+(defun plomvi-affect-lines-of-region(f)
+ "Call f on start of first line of region and end of last line of region."
+ (let* ((start-start-pos (region-beginning))
+ (start-end-pos (region-end))
+ (region-start (progn
+ (goto-char start-start-pos)
+ (line-beginning-position)))
+ (region-end (progn
+ (goto-char start-end-pos)
+ (+ 1 (line-end-position)))))
+ (funcall f region-start region-end)
+ (goto-char region-start)))
+
+(defun plomvi-kill-region-lines()
+ "Kill lines of marked region."
(interactive)
- (kill-region (region-beginning) (region-end)))
+ (plomvi-affect-lines-of-region 'kill-region))
(defun plomvi-x()
"If rectangle or region marked, kill those; else, kill char after point."
((and (boundp 'rectangle-mark-mode) (eq t rectangle-mark-mode))
(kill-rectangle (region-beginning) (region-end)))
((use-region-p)
- (plomvi-region-kill))
- (t
- (delete-char 1))))
+ (kill-region (region-beginning) (region-end)))
+ ((not (= (line-beginning-position) (line-end-position)))
+ (delete-char 1)
+ (if (not (= (point) (line-beginning-position))) (backward-char)))))
(defun plomvi-rectangle-mark()
"Start marked rectangle, move right one char so a single column is visible."
((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)))
+ (plomvi-affect-lines-of-region 'copy-region-as-kill))
(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)))))
+ (copy-region-as-kill (line-beginning-position) (+ 1 (line-end-position))))))
(defun plomvi-copy-region()
"Copy marked region."
(interactive)
(plomvi-mode -1))
+(defun plomvi-end-of-line()
+ "Move to end of line exclusive line break char."
+ (interactive)
+ (end-of-line)
+ (if (not (= (point) (line-beginning-position))) (backward-char)))
+
(defvar plomvi-mode-basic-map (make-sparse-keymap)
"Keymap for `plomvi-mode' on read-only buffers.
(define-key plomvi-mode-basic-map (kbd "g") 'plomvi-g-map)
(define-key plomvi-g-map (kbd "g") 'beginning-of-buffer)
(define-key plomvi-mode-basic-map (kbd "G") 'plomvi-goto-line)
-(define-key plomvi-mode-basic-map (kbd "$") 'end-of-line)
+(define-key plomvi-mode-basic-map (kbd "$") 'plomvi-end-of-line)
(define-key plomvi-mode-basic-map (kbd "0") 'plomvi-prefix-zero-or-line-start)
(define-key plomvi-mode-basic-map (kbd "1") 'digit-argument)
(define-key plomvi-mode-basic-map (kbd "2") 'digit-argument)
(define-key plomvi-mode-editable-map (kbd "P") 'plomvi-paste-backward)
(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-key plomvi-mode-editable-map (kbd "D") 'plomvi-kill-region-lines)
(define-prefix-command 'plomvi-d-map)
(define-key plomvi-mode-editable-map (kbd "d") 'plomvi-d-map)
(define-key plomvi-d-map (kbd "w") 'kill-word)