From e5655093ea7874cab4aecc3e1e514ea60c95ac08 Mon Sep 17 00:00:00 2001 From: Thomas von Dein Date: Thu, 18 Dec 2025 09:17:01 +0100 Subject: [PATCH] moved to codeberg --- README.md | 3 + mark-copy-yank-things-mode.el | 752 ---------------------------------- 2 files changed, 3 insertions(+), 752 deletions(-) delete mode 100644 mark-copy-yank-things-mode.el diff --git a/README.md b/README.md index 5bf960a..b8e5e71 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ +> [!CAUTION] +> This software is now being maintained on [Codeberg](https://codeberg.org/scip/mark-copy-yank-things-mode/). + ### MCYT - An emacs minor mode to mark, copy, and yank things #### Demo diff --git a/mark-copy-yank-things-mode.el b/mark-copy-yank-things-mode.el deleted file mode 100644 index 891a0e0..0000000 --- a/mark-copy-yank-things-mode.el +++ /dev/null @@ -1,752 +0,0 @@ -;;; mark-copy-yank-things-mode.el --- mark, copy, yank things - -;; Copyright (C) 2017, T.v.Dein - -;; This file is NOT part of Emacs. - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2 of the -;; License, or (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program; if not, write to the Free Software -;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -;; USA - -;; Version: 0.04 -;; Author: T.v.Dein -;; Keywords: copy yank mark things -;; URL: https://codeberg.org/scip/mark-copy-yank-things -;; License: GNU General Public License >= 2 - -;;; Commentary: -;;;; Usage - -;; MCYT minor mode provides convenience functions and wrappers to -;; mark, copy and yank various things with just one key chord. In copy -;; and yank mode the thing in question will be highlighted shortly as -;; visual feedback. This can be turned off. - -;; Copied text will be stripped of leading and trailing whitespaces, -;; fontification and other text properties will be removed. This might -;; change in a future version. - -;; The MCYT mode has 3 sub mode key maps for copying, yanking and -;; marking things. Each sub map has it's own prefix key: - -;; C-c c copy things prefix -;; C-c y yank things prefix -;; C-c m mark things prefix - -;; COPY commands (keymap: mcyt-copy-map): -;; C-c c w mcyt-copy-word -;; C-c c q mcyt-copy-quote -;; C-c c k mcyt-copy-parens -;; C-c c l mcyt-copy-line -;; C-c c p mcyt-copy-paragraph -;; C-c c f mcyt-copy-defun -;; C-c c u mcyt-copy-url -;; C-c c e mcyt-copy-email -;; C-c c c mcyt-copy-comment-block -;; C-c c a mcyt-copy-buffer -;; C-c c i mcyt-copy-ip -;; C-c c s mcyt-copy-sexp -;; C-c c > mcyt-copy-buffer-after-point -;; C-c c < mcyt-copy-buffer-before-point -;; C-c c $ mcyt-copy-line-after-point -;; C-c c ^ mcyt-copy-line-before-point - -;; COPY & YANK commands (keymap: mcyt-yank-map): -;; C-c c y y mcyt-copy-and-yank-line -;; C-c c y l mcyt-copy-and-yank-line -;; C-c c y p mcyt-copy-and-yank-paragraph -;; C-c c y f mcyt-copy-and-yank-defun -;; C-c c y a mcyt-copy-and-yank-buffer -;; C-c c y w mcyt-copy-and-yank-word -;; C-c c y i mcyt-copy-and-yank-ip -;; C-c c y c mcyt-copy-and-yank-comment - -;; MARK commands (keymap: mcyt-mark-map): -;; C-c c a a mcyt-mark-buffer -;; C-c c a w mcyt-mark-word -;; C-c c a f mcyt-mark-defun -;; C-c c a p mcyt-mark-paragraph -;; C-c c a l mcyt-mark-line -;; C-c c a u mcyt-mark-url -;; C-c c a e mcyt-mark-email -;; C-c c a s mcyt-mark-sexp -;; C-c c a c mcyt-mark-comment-block -;; C-c c a i mcyt-mark-ip -;; C-c c a > mcyt-mark-buffer-after-point -;; C-c c a < mcyt-mark-buffer-before-point -;; C-c c a $ mcyt-mark-line-after-point -;; C-c c a ^ mcyt-mark-line-before-point - -;; Please note, the commands mcyt-copy-sexp and mcyt-mark-sexp only -;; work if expand-region is installed. You can find it here: -;; https://github.com/magnars/expand-region.el. - -;;;; Install: - -;; To use, save mark-copy-yank-things-mode.el to a directory in your load-path. - -;; Add something like this to your config: - -;; (require 'mark-copy-yank-things-mode) -;; (add-hook 'text-mode-hook 'mark-copy-yank-things-mode) - -;; or load it manually, when needed: - -;; M-x mark-copy-yank-things-mode - -;; However, it's also possible to enable MCYT globally: - -;; (mark-copy-yank-things-global-mode) - -;;;; Customize - -;; To turn off short blinking of copied and yanked things (visual feedback): - -;; (setq mark-copy-yank-things-enable-blinking nil) - -;; Of course the mark commands do highlight anyway. - -;; You can also customize the various prefix keys defined for this mode: - -;; (define-key mark-copy-yank-things-mode-map (kbd "C-c c") 'mcyt-copy-map) -;; (define-key mark-copy-yank-things-mode-map (kbd "C-c y") 'mcyt-yank-map) -;; (define-key mark-copy-yank-things-mode-map (kbd "C-c m") 'mcyt-mark-map) - -;; You may also directly customize the key bindings, e.g: - -;; (define-key mcyt-copy-map (kbd "l") 'mcyt-copy-line) -;; (define-key mcyt-yank-map (kbd "l") 'mcyt-yank-line) -;; (define-key mcyt-mark-map (kbd "l") 'mcyt-mark-line) - -;;;; Reporting Bugs: - -;; Open https://codeberg.org/scip/mark-copy-yank-things/issues and -;; file a new issue -;;; Code -;;;; Dependencies - -(require 'thingatpt) -(require 'cl-lib) - -;; optional: expand-region - -;;;; Consts and Defs - -(defconst mark-copy-yank-things-mode-version "0.02" "Mark-Copy-Yank-Things Mode version.") - -(defgroup mark-copy-yank-things-mode nil - "Kill first, ask later - an emacs mode for killing things quickly" - :group 'extensions - :group 'tools - :link '(url-link :tag "Repository" "https://codeberg.org/scip/mark-copy-yank-things")) - -(defvar mark-copy-yank-things-mode-map (make-sparse-keymap) - "Keymap for the MCYT minor mode.") - -;;;; Customizables - -(defcustom mark-copy-yank-things-blink-time 0.2 - "How long should mark-copy-yank-things highlight a region, -in seconds, specify milliseconds like this: 0.1" - :group 'mark-copy-yank-things-mode) - -(defcustom mark-copy-yank-things-enable-blinking t - "If set to true (default) highlight the deleted text shortly -for 'mark-copy-yank-things-blink-time seconds. Set to nil to disable the feature" - :group 'mark-copy-yank-things-mode) - -;;;; Internal Functions -;;;;; Helpers - -(defun mcyt--blink(begin end) - "blink a region. used for copy and delete" - (interactive) - (let* ((rh (make-overlay begin end))) - (progn - (overlay-put rh 'face '(:background "DodgerBlue" :foreground "White")) - (sit-for mark-copy-yank-things-blink-time t) - (delete-overlay rh)))) - -(defun mcyt--get-point (symbol &optional arg) - "Return point at symbol" - (save-excursion - (funcall symbol arg) - (point))) - -(defun mcyt--copy-thing (begin-of-thing end-of-thing &optional arg) - "Copy thing between beg & end into kill ring. -Remove leading and trailing whitespace while we're at it. -Also, remove whitespace before column, if any. -Also, font-lock will be removed, if any." - (save-excursion - (let* ((beg (mcyt--get-point begin-of-thing 1)) - (end (mcyt--get-point end-of-thing arg))) - (progn - (copy-region-as-kill beg end) - (with-temp-buffer - (yank) - (goto-char 1) - (while (looking-at "[ \t\n\r]") - (delete-char 1)) - (delete-trailing-whitespace) - (delete-whitespace-rectangle (point-min) (point-max)) ;; del column \s, hehe - (font-lock-unfontify-buffer) ;; reset font lock - (kill-region (point-min) (point-max)) - ))))) - -(defun mcyt--blink-and-copy-thing (begin end &optional arg cap) - "General wrapper for all copy[+yank] functions. Highlights -the region BEGIN to END for mark-copy-yank-things-blink-time -seconds, then copies the stuff in between into the kill-ring." - (let ((name (or cap (car (last (split-string (symbol-name end) "-")))))) - (if (eq t mark-copy-yank-things-enable-blinking) - (mcyt--blink (mcyt--get-point begin 1) (mcyt--get-point end 1))) - (mcyt--copy-thing begin end arg) - (message (format "%s at point copied" name)))) - -(defun mcyt--space-p () - "little helper, just returns true if current char -at point is a whitespace" - (interactive) - (let ((c (char-after nil))) - (or (eq 32 c) (eq 9 c)))) - -(defun mcyt--comment-p (pos) - "Check whether the code at POS is comment by comparing font face." - (interactive) - (let* ((fontfaces (get-text-property pos 'face))) - (if (not (listp fontfaces)) - (setf fontfaces (list fontfaces))) - (delq nil - (mapcar #'(lambda (f) - (or (eq f 'font-lock-comment-face) - (eq f 'font-lock-comment-delimiter-face))) - fontfaces)))) - -(defun mcyt--point (&optional arg) - "Just a wrapper to make blink happy." - (point)) - -;;;;; Beginning- and End-of-things - -(defun mcyt-beginning-of-comment-block () - "Move point to the beginning of a comment block" - (interactive) - (let ((isc t) - (ok (point))) - (while (and (not (bobp)) (eq t isc)) - ;; if char behind is still a comment, go there - ;; if we're already on the first comment char on current line, go up - (if (mcyt--comment-p (- (point) 1)) - (backward-char 1) - (previous-line)) - ;; now, if we're not on a comment anymore, - ;; go back to last recorded commentchar and break the loop - (if (mcyt--comment-p (point)) - (setq ok (point)) - (goto-char ok) - (setq isc nil))))) - -(defun mcyt-end-of-comment-block () - "Move point to the end of a comment block, return column -of widest comment line." - (interactive) - (let ((isc t) - (col (current-column)) - (ok (point))) - (while (eq isc t) - ;; if char in front is still a comment, go there - ;; if not (e.g. because forward-char leads to next line) - ;; go one line down - (if (mcyt--comment-p (+ (point) 1)) - (forward-char 1) - (next-line)) - ;; now, if we're not on a comment anymore, go back to the last - ;; recorded comment char and break the loop - (if (mcyt--comment-p (point)) - (progn - (setq ok (point)) - (if (> (current-column) col) - (setq col (current-column)))) - (goto-char ok) - (setq isc nil))) - col)) - -(defun mcyt-beginning-of-quote(&optional arg) - "return position of begin of quote" - (re-search-backward "\"" (line-beginning-position) 3 1) - (if (looking-at "\"") (goto-char (+ (point) 1)) )) - -(defun mcyt-end-of-quote(&optional arg) - "return position of end of quote" - (re-search-forward "\"" (line-end-position) 3 arg) - (if (looking-back "\"") (goto-char (- (point) 1)) )) - -(defun mcyt-beginning-of-parenthesis(&optional arg) - "return position of opening parens" - (re-search-backward "[[<(?]" (line-beginning-position) 3 1) - (if (looking-at "[[<(?]") (goto-char (+ (point) 1)) )) - -(defun mcyt-end-of-parenthesis(&optional arg) - "return position of closing parens" - (re-search-forward "[]>)?]" (line-end-position) 3 arg) - (if (looking-back "[]>)?]") (goto-char (- (point) 1)) )) - -(defun mcyt-beginning-of-ip (&optional arg) - "goto begin of ip address" - (interactive) - (while (looking-at "[0-9\.\/]") - (backward-char 1)) - (forward-char 1)) - -(defun mcyt-end-of-ip (&optional arg) - "goto end of ip address" - (interactive) - (while (looking-at "[0-9\.\/]") - (forward-char 1))) - -;; We use these for word finding, since the built-in word functions do -;; not include -_. which is annoying, that is we (re-)define word here -;; independent of syntax table -(defun mcyt-beginning-of-symbol (&optional arg) - (interactive) - (backward-word) - (while (looking-back "[-_\.]") - (backward-word))) - -(defun mcyt-end-of-symbol (&optional arg) - (interactive) - (forward-word) - (while (looking-at "[-_\.]") - (forward-word))) - -(defun mcyt-buffer-after-point (&optional arg) - (interactive) - (goto-char (point-max))) - -(defun mcyt-buffer-before-point (&optional arg) - (interactive) - (goto-char (point-min))) - -(defun mcyt-line-after-point (&optional arg) - (interactive) - (end-of-line)) - -(defun mcyt-line-before-point (&optional arg) - (interactive) - (beginning-of-line)) - - - - - -;;;;; Prefix-Map Loader and Key Bindings - -(defun mcyt--load-prefix-maps () - (define-prefix-command 'mcyt-copy-map) - (define-prefix-command 'mcyt-yank-map) - (define-prefix-command 'mcyt-mark-map) - - (define-key mark-copy-yank-things-mode-map (kbd "C-c c") 'mcyt-copy-map) - (define-key mark-copy-yank-things-mode-map (kbd "C-c y") 'mcyt-yank-map) - (define-key mark-copy-yank-things-mode-map (kbd "C-c m") 'mcyt-mark-map) - - ;; "speaking" bindings CTRL-[c]opy [w]ord, etc... - (define-key mcyt-copy-map (kbd "w") 'mcyt-copy-word) - (define-key mcyt-copy-map (kbd "q") 'mcyt-copy-quote) - (define-key mcyt-copy-map (kbd "k") 'mcyt-copy-parens) - (define-key mcyt-copy-map (kbd "l") 'mcyt-copy-line) - (define-key mcyt-copy-map (kbd "p") 'mcyt-copy-paragraph) - (define-key mcyt-copy-map (kbd "f") 'mcyt-copy-defun) - (define-key mcyt-copy-map (kbd "u") 'mcyt-copy-url) - (define-key mcyt-copy-map (kbd "e") 'mcyt-copy-email) - (define-key mcyt-copy-map (kbd "c") 'mcyt-copy-comment-block) - (define-key mcyt-copy-map (kbd "a") 'mcyt-copy-buffer) - (define-key mcyt-copy-map (kbd "i") 'mcyt-copy-ip) - (define-key mcyt-copy-map (kbd "s") 'mcyt-copy-sexp) - (define-key mcyt-copy-map (kbd ">") 'mcyt-copy-buffer-after-point) - (define-key mcyt-copy-map (kbd "<") 'mcyt-copy-buffer-before-point) - (define-key mcyt-copy-map (kbd "$") 'mcyt-copy-line-after-point) - (define-key mcyt-copy-map (kbd "^") 'mcyt-copy-line-before-point) - - - ;; CTRL-[c]copy-and-[y]ank [w]word, etc... - (define-key mcyt-yank-map (kbd "y") 'mcyt-copy-and-yank-line) - (define-key mcyt-yank-map (kbd "l") 'mcyt-copy-and-yank-line) - (define-key mcyt-yank-map (kbd "p") 'mcyt-copy-and-yank-paragraph) - (define-key mcyt-yank-map (kbd "f") 'mcyt-copy-and-yank-defun) - (define-key mcyt-yank-map (kbd "a") 'mcyt-copy-and-yank-buffer) - (define-key mcyt-yank-map (kbd "w") 'mcyt-copy-and-yank-word) - (define-key mcyt-yank-map (kbd "i") 'mcyt-copy-and-yank-ip) - (define-key mcyt-yank-map (kbd "c") 'mcyt-copy-and-yank-comment) - - ;; M-a'rk commands - (define-key mcyt-mark-map (kbd "a") 'mcyt-mark-buffer) - (define-key mcyt-mark-map (kbd "w") 'mcyt-mark-word) - (define-key mcyt-mark-map (kbd "f") 'mcyt-mark-defun) - (define-key mcyt-mark-map (kbd "p") 'mcyt-mark-paragraph) - (define-key mcyt-mark-map (kbd "l") 'mcyt-mark-line) - (define-key mcyt-mark-map (kbd "u") 'mcyt-mark-url) - (define-key mcyt-mark-map (kbd "e") 'mcyt-mark-email) - (define-key mcyt-mark-map (kbd "s") 'mcyt-mark-sexp) - (define-key mcyt-mark-map (kbd "c") 'mcyt-mark-comment-block) - (define-key mcyt-mark-map (kbd "i") 'mcyt-mark-ip) - (define-key mcyt-mark-map (kbd ">") 'mcyt-mark-buffer-after-point) - (define-key mcyt-mark-map (kbd "<") 'mcyt-mark-buffer-before-point) - (define-key mcyt-mark-map (kbd "$") 'mcyt-mark-line-after-point) - (define-key mcyt-mark-map (kbd "^") 'mcyt-mark-line-before-point)) - -;;;; API Functions / Interface -;;;;; Copy - -(defun mcyt-copy-comment-block () - "Copy a block of comments positioned AFTER actual code. - -For example: - -if(tor) { # anonymous - $C-end; # disconnect -} - -In this example the following text would be copied: - -# anonymous -# disconnect - -Also supports normal one- or multiline comments, indended or not. -" - (interactive) - (let ((beg 0) - (end 0) - (A 0) - (B 0) - (max 0)) - (save-excursion - (mcyt-beginning-of-comment-block) - (setq beg (point)) - (set-mark-command nil) - (setq max (mcyt-end-of-comment-block)) - (unless (>= (current-column) max) - (setq A (point)) - (while (< (current-column) max) - (insert " ")) - (setq B (point))) - (setq end (point)) - (rectangle-mark-mode) - (sit-for 0.2 t) - (copy-rectangle-as-kill beg end) - (unless (eq A 0) - (delete-region A B)) - (with-temp-buffer - (yank-rectangle) - (delete-trailing-whitespace) - (copy-region-as-kill (point-min) (point-max)))))) - -(defun mcyt-copy-line (&optional arg) - "Copy line at point into kill-ring, truncated" - (interactive "P") - (mcyt--blink-and-copy-thing 'beginning-of-line 'end-of-line arg)) - -(defun mcyt-copy-paragraph (&optional arg) - "Copy line at point into kill-ring, truncated" - (interactive "P") - (mcyt--blink-and-copy-thing 'backward-paragraph 'forward-paragraph arg)) - -(defun mcyt-copy-quote(&optional arg) - "Copy a quoted string at point" - (interactive "P") - (mcyt--blink-and-copy-thing 'mcyt-beginning-of-quote 'mcyt-end-of-quote arg)) - -(defun mcyt-copy-parens(&optional arg) - "Copy a stuff inside parens at point" - (interactive "P") - (mcyt--blink-and-copy-thing 'mcyt-beginning-of-parenthesis 'mcyt-end-of-parenthesis arg)) - -(defun mcyt-copy-word (&optional arg) - "Copy word at point into kill-ring" - (interactive "P") - (mcyt--blink-and-copy-thing 'mcyt-beginning-of-symbol 'mcyt-end-of-symbol arg)) - -(defun mcyt-copy-buffer(&optional arg) - "Copy the whole buffer into kill-ring, as-is" - (interactive "P") - (mcyt--blink (point-min) (point-max)) - (copy-region-as-kill (point-min) (point-max)) - (message "buffer copied")) - -(defun mcyt-copy-defun (&optional arg) - "Copy function at point into kill-ring" - (interactive "P") - (mcyt--blink-and-copy-thing 'beginning-of-defun 'end-of-defun arg)) - -(defun mcyt-copy-url (&optional arg) - "Copy url or file-path at point into kill-ring" - (interactive "P") - (let ((beg (car (or (bounds-of-thing-at-point 'url) (bounds-of-thing-at-point 'filename)))) - (end (cdr (or (bounds-of-thing-at-point 'url) (bounds-of-thing-at-point 'filename))))) - (mcyt--blink beg end) - (kill-ring-save beg end) - (message "url at point copied"))) - -(defun mcyt-copy-email (&optional arg) - "Copy email at point into kill-ring" - (interactive "P") - (let ((beg (car (bounds-of-thing-at-point 'email))) - (end (cdr (bounds-of-thing-at-point 'email)))) - (mcyt--blink beg end) - (kill-ring-save beg end) - (message "email at point copied"))) - -(defun mcyt-copy-sexp (&optional arg) - "Copy sexp at point into kill-ring" - (interactive "P") - (if (not (fboundp 'er/mark-outside-pairs)) - (message "(mcyt-copy-sexp) not supported, install expand-region.") - (let ((ign (er/mark-outside-pairs)) - (beg (mark)) - (end (point))) - (deactivate-mark) - (mcyt--blink beg end) - (kill-ring-save beg end) - (message "sexp at point copied")))) - -(defun mcyt-copy-ip (&optional arg) - "Copy ip address at point into kill-ring" - (interactive "P") - (mcyt--blink-and-copy-thing 'mcyt-beginning-of-ip 'mcyt-end-of-ip arg)) - -(defun mcyt-copy-buffer-after-point (&optional arg) - "Copy everything from (point) to (eobp)" - (interactive "P") - (mcyt--blink-and-copy-thing 'mcyt--point 'mcyt-buffer-after-point arg "buffer-after-point")) - -(defun mcyt-copy-buffer-before-point (&optional arg) - "Copy everything from (point) to (bobp)" - (interactive "P") - (mcyt--blink-and-copy-thing 'mcyt--point 'mcyt-buffer-before-point arg "buffer-before-point")) - -(defun mcyt-copy-line-after-point (&optional arg) - "Copy everything from (point) to end of line" - (interactive "P") - (mcyt--blink-and-copy-thing 'mcyt--point 'mcyt-line-after-point arg "line-after-point")) - -(defun mcyt-copy-line-before-point (&optional arg) - "Copy everything from (point) to beginning of line" - (interactive "P") - (mcyt--blink-and-copy-thing 'mcyt--point 'mcyt-line-before-point arg "line-before-point")) - - -;;;;; Copy+Yank - -(defun mcyt-copy-and-yank-word (&optional arg) - "copy current word, yank it after current and place the cursor to the beginning of the copy" - (interactive "P") - (progn - (mcyt-copy-word) - (mcyt-end-of-symbol) - (insert " ") - (yank))) - -(defun mcyt-copy-and-yank-ip (&optional arg) - "copy current ip, yank it after current and place the cursor to the beginning of the copy" - (interactive "P") - (progn - (mcyt-copy-ip) - (mcyt-end-of-ip) - (insert " ") - (yank))) - -(defun mcyt-copy-and-yank-line (&optional arg) - "copy current line, yank it below and place the cursor there. -Supports numerical arguments, if present, copy current line -ARG times. Also accessible with {C-u [0-9]+ C-c y y}" - (interactive "P") - (message "arg: %s" (prefix-numeric-value arg)) - (cl-loop for i - below (prefix-numeric-value arg) - collect (progn - (mcyt-copy-line) - (move-end-of-line nil) - (newline-and-indent) - (yank)))) - -(defun mcyt-copy-and-yank-paragraph(&optional arg) - "copy current paragraph, add two newlines after current paragraph, -yank the copy below and place the cursor on the beginning of -copied paragraph" - (interactive "P") - (progn - (mcyt-copy-paragraph) - (move-end-of-line nil) - (newline-and-indent) - (newline-and-indent) - (yank) - (backward-paragraph) - (next-line))) - -(defun mcyt-copy-and-yank-defun(&optional arg) - "copy current function, add two newlines after current function, -yank the copy below and place the cursor on the beginning of -copied defun" - (interactive "P") - (progn - (mcyt-copy-defun) - (end-of-defun) - (newline-and-indent) - (newline-and-indent) - (yank) - (beginning-of-defun))) - -(defun mcyt-copy-and-yank-buffer(&optional arg) - "copy the whole buffer and yank all of it after end-of-buffer" - (interactive "P") - (progn - (mcyt-copy-buffer) - (end-of-buffer) - (newline) - (yank))) - -(defun mcyt-copy-and-yank-comment(&optional arg) - "copy current comment block, add newline, yank the copy -below and place the cursor on the end of copied comment" - (interactive "P") - (progn - (mcyt-copy-comment-block) - (mcyt-end-of-comment-block) - (newline-and-indent) - (yank) - (end-of-coment-block))) - -;;;;; Mark - -;; related, but just mark things -(defun mcyt-mark-line () - (interactive) - (move-beginning-of-line nil) - (set-mark-command nil) - (move-end-of-line nil) - (setq deactivate-mark nil)) - -(defun mcyt-mark-word() - (interactive) - (mcyt-beginning-of-symbol) - (set-mark-command nil) - (mcyt-end-of-symbol) - (setq deactivate-mark nil)) - -(defun mcyt-mark-url() - (interactive) - (beginning-of-thing 'url) - (set-mark-command nil) - (end-of-thing 'url) - (setq deactivate-mark nil)) - -(defun mcyt-mark-email() - (interactive) - (beginning-of-thing 'email) - (set-mark-command nil) - (end-of-thing 'email) - (setq deactivate-mark nil)) - -(defun mcyt-mark-ip() - (interactive) - (mcyt-beginning-of-ip) - (set-mark-command nil) - (mcyt-end-of-ip) - (setq deactivate-mark nil)) - -(defun mcyt-mark-comment-block () - "Same as mcyt-copy-comment-block, without the copying part." - (interactive) - (let ((beg 0) - (end 0) - (A 0) - (B 0) - (max 0)) - (save-excursion - (mcyt-beginning-of-comment-block) - (setq beg (point)) - (set-mark-command nil) - (setq max (mcyt-end-of-comment-block)) - (unless (>= (current-column) max) - (setq A (point)) - (while (< (current-column) max) - (insert " ")) - (setq B (point))) - (setq end (point)) - (rectangle-mark-mode)))) - -(defun mcyt-mark-buffer () - (interactive) - (mark-whole-buffer)) - -(defun mcyt-mark-defun () - (interactive) - (mark-defun)) - -(defun mcyt-mark-sexp () - (interactive) - (if (not (fboundp 'er/mark-outside-pairs)) - (message "(mcyt-mark-sexp) not supported, install expand-region.") - (er/mark-outside-pairs))) - -(defun mcyt-mark-paragraph () - (interactive) - (mark-paragraph)) - -(defun mcyt-mark-buffer-after-point() - (interactive) - (set-mark-command nil) - (mcyt-buffer-after-point) - (setq deactivate-mark nil)) - -(defun mcyt-mark-buffer-before-point() - (interactive) - (set-mark-command nil) - (mcyt-buffer-before-point) - (setq deactivate-mark nil)) - -(defun mcyt-mark-line-after-point() - (interactive) - (set-mark-command nil) - (mcyt-line-after-point) - (setq deactivate-mark nil)) - -(defun mcyt-mark-line-before-point() - (interactive) - (set-mark-command nil) - (mcyt-line-before-point) - (setq deactivate-mark nil)) - - - -;;;; Minor Mode and Key Map - -;;;###autoload - -;; the minor mode, can be enabled by major mode via hook or manually -(define-minor-mode mark-copy-yank-things-mode "mark, copy and yank various things" - :lighter " Y" - :group 'mark-copy-yank-things-mode - (mcyt--load-prefix-maps) - (run-hooks 'mark-copy-yank-things-mode-hook)) - -;; just in case someone wants to use it globally -(define-globalized-minor-mode mark-copy-yank-things-global-mode - mark-copy-yank-things-mode mark-copy-yank-things-mode - :group 'mark-copy-yank-things-mode) - -(provide 'mark-copy-yank-things-mode) - -;;; mark-copy-yank-things-mode.el ends here