summaryrefslogtreecommitdiff
path: root/lisp/misc.el
diff options
context:
space:
mode:
authorJim Blandy <jimb@redhat.com>1989-10-31 15:59:53 +0000
committerJim Blandy <jimb@redhat.com>1989-10-31 15:59:53 +0000
commitac1c6ea2915c86f32904c13ad6be2db16487003e (patch)
tree2af4fca28f1fddcdcb00479261b7e83bca6a47e8 /lisp/misc.el
parent5211c0c990394c4476accaf0f2597d5d7963e7c8 (diff)
downloademacs-ac1c6ea2915c86f32904c13ad6be2db16487003e.tar.gz
Initial revision
Diffstat (limited to 'lisp/misc.el')
-rw-r--r--lisp/misc.el51
1 files changed, 51 insertions, 0 deletions
diff --git a/lisp/misc.el b/lisp/misc.el
new file mode 100644
index 00000000000..db7b3f223b5
--- /dev/null
+++ b/lisp/misc.el
@@ -0,0 +1,51 @@
+;; Basic editing commands for Emacs
+;; Copyright (C) 1989 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 1, or (at your option)
+;; any later version.
+
+;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+
+(defun copy-from-above-command (&optional arg)
+ "Copy characters from previous nonblank line, starting just above point.
+Copy ARG characters, but not past the end of that line.
+If no argument given, copy the entire rest of the line.
+The characters copied are inserted in the buffer before point."
+ (interactive "P")
+ (let ((cc (current-column))
+ n
+ (string ""))
+ (save-excursion
+ (beginning-of-line)
+ (backward-char 1)
+ (skip-chars-backward "\ \t\n")
+ (move-to-column cc)
+ ;; Default is enough to copy the whole rest of the line.
+ (setq n (if arg (prefix-numeric-value arg) (point-max)))
+ ;; If current column winds up in middle of a tab,
+ ;; copy appropriate number of "virtual" space chars.
+ (if (< cc (current-column))
+ (if (= (preceding-char) ?\t)
+ (progn
+ (setq string (make-string (min n (- (current-column) cc)) ?\ ))
+ (setq n (- n (min n (- (current-column) cc)))))
+ ;; In middle of ctl char => copy that whole char.
+ (backward-char 1)))
+ (setq string (concat string
+ (buffer-substring
+ (point)
+ (min (save-excursion (end-of-line) (point))
+ (+ n (point)))))))
+ (insert string)))