mirror of
https://codeberg.org/scip/viking-mode.git
synced 2025-12-16 20:10:59 +01:00
experimentally added region kill (however, disabled by default) see issue#2
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||
;; USA
|
||||
|
||||
;; Version: 0.04
|
||||
;; Version: 0.05
|
||||
;; Author: T.v.Dein <tlinden@cpan.org>
|
||||
;; Keywords: kill delete
|
||||
;; URL: https://github.com/tlinden/viking-mode
|
||||
@@ -89,6 +89,10 @@
|
||||
|
||||
;; (setq viking-greedy-kill nil)
|
||||
|
||||
;; To enable quick deletion of regions using the normal key binding:
|
||||
|
||||
;; (setq viking-enable-region-kill t)
|
||||
|
||||
;; You can change the default key binding by:
|
||||
|
||||
;; (define-key viking-mode-map (kbd "C-k") 'viking-kill-thing-at-point)
|
||||
@@ -166,7 +170,7 @@
|
||||
;;; Code:
|
||||
;;;; Consts
|
||||
|
||||
(defconst viking-mode-version "0.04" "Viking Mode version.")
|
||||
(defconst viking-mode-version "0.05" "Viking Mode version.")
|
||||
|
||||
(defgroup viking-mode nil
|
||||
"Kill first, ask later - an emacs mode for killing things quickly"
|
||||
@@ -201,6 +205,11 @@ The default is nil: keep deleted things in the kill-ring."
|
||||
deleted after the kill function, if any. Uses 'just-one-space."
|
||||
:group 'viking-mode)
|
||||
|
||||
(defcustom viking-enable-region-kill nil
|
||||
"If set to true (default: nil), kill the whole region if
|
||||
mark is set."
|
||||
:group 'viking-mode)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -255,7 +264,6 @@ should be a point-moving function."
|
||||
|
||||
(defun viking--kill-region (beg end)
|
||||
"Deletes or kills a region depending on 'viking-really-delete."
|
||||
(message "vkkill")
|
||||
(if viking-really-delete
|
||||
(delete-region beg end)
|
||||
(kill-region beg end)))
|
||||
@@ -297,13 +305,13 @@ should be a point-moving function."
|
||||
(interactive)
|
||||
(let* ((lineA 0) (lineB 0)
|
||||
(beg (save-excursion
|
||||
(skip-chars-backward " \t\r\n")
|
||||
(cond ((looking-at "\r\n")
|
||||
(forward-char 2))
|
||||
((looking-at "\n")
|
||||
(forward-char 1)))
|
||||
(setq lineA (line-number-at-pos))
|
||||
(point)))
|
||||
(skip-chars-backward " \t\r\n")
|
||||
(cond ((looking-at "\r\n")
|
||||
(forward-char 2))
|
||||
((looking-at "\n")
|
||||
(forward-char 1)))
|
||||
(setq lineA (line-number-at-pos))
|
||||
(point)))
|
||||
(end (save-excursion
|
||||
(skip-chars-forward " \t\r\n")
|
||||
(setq lineB (line-number-at-pos))
|
||||
@@ -315,10 +323,21 @@ should be a point-moving function."
|
||||
(delete-region beg end))
|
||||
(message "spaces cleared")))
|
||||
|
||||
;; implements #2: behave different inside region
|
||||
;; FIXME: maybe also do word->line->region?
|
||||
;; Currently it just throws the whole region away
|
||||
(defun viking-kill-region()
|
||||
"Kill region at point, if any"
|
||||
(interactive)
|
||||
(if viking-really-delete
|
||||
(delete-region (point-min) (point-max) t)
|
||||
(kill-region (point-min) (point-max) t))
|
||||
(message "region deleted"))
|
||||
|
||||
|
||||
;;;;; Public interactive kill functions
|
||||
|
||||
(defun viking-kill-word ()
|
||||
(defun --viking-kill-word ()
|
||||
"If point is on space or newline, delete those (like M-SPC), else kill word at point.
|
||||
If 'viking-greedy-kill is t, clean up spaces and newlines afterwards."
|
||||
(interactive)
|
||||
@@ -329,10 +348,28 @@ If 'viking-greedy-kill is t, clean up spaces and newlines afterwards."
|
||||
(viking--kill-word-right)
|
||||
(viking--kill-word-at-point)
|
||||
)
|
||||
(when viking-greedy-kill
|
||||
(when viking-greedy-kill ;; clean up afterwards as well
|
||||
(viking--kill-space))
|
||||
))
|
||||
)
|
||||
)))
|
||||
|
||||
(defun viking-kill-word ()
|
||||
"If point is on space or newline, delete those (like M-SPC), else kill word at point.
|
||||
If 'viking-greedy-kill is t, clean up spaces and newlines afterwards."
|
||||
(interactive)
|
||||
(if (and viking-enable-region-kill mark-active)
|
||||
(viking-kill-region) ;; region-kill can only happen on first C-d invokation
|
||||
|
||||
;; else normal processing
|
||||
(if (viking--point-is-in-space)
|
||||
(viking--kill-space)
|
||||
(progn
|
||||
(if (eq (point) (line-beginning-position))
|
||||
(viking--kill-word-right)
|
||||
(viking--kill-word-at-point)
|
||||
)
|
||||
(when viking-greedy-kill ;; clean up afterwards as well?
|
||||
(viking--kill-space))
|
||||
))))
|
||||
|
||||
(defun viking-kill-line ()
|
||||
"Kill line at point including newline.
|
||||
|
||||
Reference in New Issue
Block a user