-;; Calculator for GNU Emacs, part II [calc-yank.el]
+;;; calc-yank.el --- kill-ring functionality for Calc
+
;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc.
-;; Written by Dave Gillespie, daveg@synaptics.com.
+
+;; Author: David Gillespie <daveg@synaptics.com>
+;; Maintainer: Jay Belanger <belanger@truman.edu>
;; This file is part of GNU Emacs.
;; file named COPYING. Among other things, the copyright notice
;; and this notice must be preserved on all copies.
+;;; Commentary:
+;;; Code:
;; This file is autoloaded from calc-ext.el.
-(require 'calc-ext)
+(require 'calc-ext)
(require 'calc-macs)
-(defun calc-Need-calc-yank () nil)
-
-
;;; Kill ring commands.
(defun calc-kill (nn &optional no-delete)
(defun calc-clean-newlines (s)
(cond
-
+
;; Omit leading/trailing whitespace
((or (string-match "\\`[ \n\r]+\\([^\001]*\\)\\'" s)
(string-match "\\`\\([^\001]*\\)[ \n\r]+\\'" s))
((string-match "\\`\\(.*\\)[\n\r]+\\([^\001]*\\)\\'" s)
(calc-clean-newlines (concat (math-match-substring s 1) ","
(math-match-substring s 2))))
-
+
(t s)))
(defun calc-do-grab-region (top bot arg)
- (and (memq major-mode '(calc-mode calc-trail-mode))
- (error "This command works only in a regular text buffer."))
+ (when (memq major-mode '(calc-mode calc-trail-mode))
+ (error "This command works only in a regular text buffer"))
(let* ((from-buffer (current-buffer))
(calc-was-started (get-buffer-window "*Calculator*"))
(single nil)
(defun calc-do-grab-rectangle (top bot arg &optional reduce)
(and (memq major-mode '(calc-mode calc-trail-mode))
- (error "This command works only in a regular text buffer."))
+ (error "This command works only in a regular text buffer"))
(let* ((col1 (save-excursion (goto-char top) (current-column)))
(col2 (save-excursion (goto-char bot) (current-column)))
(from-buffer (current-buffer))
data mat vals lnum pt pos)
(if (= col1 col2)
(save-excursion
- (or (= col1 0)
- (error "Point and mark must be at beginning of line, or define a rectangle"))
+ (unless (= col1 0)
+ (error "Point and mark must be at beginning of line, or define a rectangle"))
(goto-char top)
(while (< (point) bot)
(setq pt (point))
(calc)
(setq mat (list 'vec)
lnum 0)
- (and arg
- (setq arg (if (consp arg) 0 (prefix-numeric-value arg))))
+ (when arg
+ (setq arg (if (consp arg) 0 (prefix-numeric-value arg))))
(while data
(if (natnump arg)
(progn
vals (math-read-expr (concat "[" s "]")))
(if (eq (car-safe vals) 'error)
(let ((v2 (math-read-expr s)))
- (or (eq (car-safe v2) 'error)
- (setq vals (list 'vec v2)))))))))
+ (unless (eq (car-safe v2) 'error)
+ (setq vals (list 'vec v2)))))))))
(if (eq (car-safe vals) 'error)
(progn
(if calc-was-started
(forward-line lnum)
(forward-char (+ (nth 1 vals) (min col1 col2) pos))
(error (nth 2 vals))))
- (or (equal vals '(vec))
- (setq mat (cons vals mat)))
+ (unless (equal vals '(vec))
+ (setq mat (cons vals mat)))
(setq data (cdr data)
lnum (1+ lnum)))
(calc-slow-wrapper
(delete-char 4)
(setq n (1+ n)))
(forward-line n))))
- (if thebuf (setq movept (point)))
- (if (get-buffer-window (current-buffer))
- (set-window-point (get-buffer-window (current-buffer))
- (point)))))))
- (if movept (goto-char movept))
- (and (consp nn)
- (not thebuf)
- (progn
- (calc-quit t)
- (switch-to-buffer newbuf)))))
+ (when thebuf
+ (setq movept (point)))
+ (when (get-buffer-window (current-buffer))
+ (set-window-point (get-buffer-window (current-buffer))
+ (point)))))))
+ (when movept
+ (goto-char movept))
+ (when (and (consp nn)
+ (not thebuf))
+ (calc-quit t)
+ (switch-to-buffer newbuf))))
(defun calc-overwrite-string (str eat-lnums)
- (if (string-match "\n\\'" str)
- (setq str (substring str 0 -1)))
- (if eat-lnums
- (setq str (substring str 4)))
+ (when (string-match "\n\\'" str)
+ (setq str (substring str 0 -1)))
+ (when eat-lnums
+ (setq str (substring str 4)))
(if (and (string-match "\\`[-+]?[0-9.]+\\(e-?[0-9]+\\)?\\'" str)
(looking-at "[-+]?[0-9.]+\\(e-?[0-9]+\\)?"))
(progn
(defun calc-edit (n)
(interactive "p")
(calc-slow-wrapper
- (if (eq n 0)
- (setq n (calc-stack-size)))
+ (when (eq n 0)
+ (setq n (calc-stack-size)))
(let* ((flag nil)
(allow-ret (> n 1))
(list (math-showing-full-precision
(define-key calc-edit-mode-map "\r" 'calc-edit-return)
(define-key calc-edit-mode-map "\C-c\C-c" 'calc-edit-finish))
+(defvar calc-original-buffer)
+(defvar calc-return-buffer)
+(defvar calc-one-window)
+(defvar calc-edit-handler)
+(defvar calc-restore-trail)
+(defvar calc-allow-ret)
+(defvar calc-edit-top)
+
(defun calc-edit-mode (&optional handler allow-ret title)
"Calculator editing mode. Press RET, LFD, or C-c C-c to finish.
To cancel the edit, simply kill the *Calc Edit* buffer."
(interactive)
- (or handler
- (error "This command can be used only indirectly through calc-edit."))
+ (unless handler
+ (error "This command can be used only indirectly through calc-edit"))
(let ((oldbuf (current-buffer))
(buf (get-buffer-create "*Calc Edit*")))
(set-buffer buf)
(setq calc-restore-trail (get-buffer-window (calc-trail-buffer)))
(make-local-variable 'calc-allow-ret)
(setq calc-allow-ret allow-ret)
- (erase-buffer)
- (insert (or title title "Calc Edit Mode")
- ". Press "
- (if (eq (lookup-key (current-global-map) "\e#") 'calc-dispatch)
- "M-# M-# or C-c C-c"
- (if allow-ret "C-c C-c" "RET"))
- " to finish, "
- (if (eq (lookup-key (current-global-map) "\e#") 'calc-dispatch)
- "M-# x"
- "C-x k RET")
- " to cancel.\n")))
+ (let ((inhibit-read-only t))
+ (erase-buffer))
+ (add-hook 'kill-buffer-hook (lambda ()
+ (let ((calc-edit-handler nil))
+ (calc-edit-finish t))
+ (message "(Cancelled)")) t t)
+ (insert (propertize
+ (concat
+ (or title title "Calc Edit Mode. ")
+ "Press `C-c C-c'"
+ (if allow-ret "" " or RET")
+ " to finish, `C-x k RET' to cancel.\n\n")
+ 'font-lock-face 'italic 'read-only t 'rear-nonsticky t 'front-sticky t))
+ (make-local-variable 'calc-edit-top)
+ (setq calc-edit-top (point))))
(put 'calc-edit-mode 'mode-class 'special)
(defun calc-show-edit-buffer ()
(if win
(delete-window win))))
(set-buffer-modified-p nil)
- (goto-char (point-min))
- (forward-line 1)))
+ (goto-char calc-edit-top)))
(defun calc-edit-return ()
(interactive)
(newline)
(calc-edit-finish)))
+;; The variable calc-edit-disp-trail is local to calc-edit finish, but
+;; is used by calc-finish-selection-edit and calc-finish-stack-edit.
+(defvar calc-edit-disp-trail)
+
(defun calc-edit-finish (&optional keep)
"Finish calc-edit mode. Parse buffer contents and push them on the stack."
(interactive "P")
(boundp 'calc-edit-handler)
(boundp 'calc-restore-trail)
(eq major-mode 'calc-edit-mode))
- (error "This command is valid only in buffers created by calc-edit."))
+ (error "This command is valid only in buffers created by calc-edit"))
(let ((buf (current-buffer))
(original calc-original-buffer)
(return calc-return-buffer)
(one-window calc-one-window)
- (disp-trail calc-restore-trail))
+ (calc-edit-disp-trail calc-restore-trail))
(save-excursion
- (if (or (null (buffer-name original))
- (progn
- (set-buffer original)
- (not (eq major-mode 'calc-mode))))
- (error "Original calculator buffer has been corrupted.")))
- (goto-char (point-min))
- (if (looking-at "Calc Edit\\|Editing ")
- (forward-line 1))
+ (when (or (null (buffer-name original))
+ (progn
+ (set-buffer original)
+ (not (eq major-mode 'calc-mode))))
+ (error "Original calculator buffer has been corrupted")))
+ (goto-char calc-edit-top)
(if (buffer-modified-p)
(eval calc-edit-handler))
(if one-window
(if keep
(bury-buffer buf)
(kill-buffer buf))
- (if disp-trail
+ (if calc-edit-disp-trail
(calc-wrapper
(calc-trail-display 1 t)))
(message "")))
(defun calc-finish-stack-edit (num)
(let ((buf (current-buffer))
- (str (buffer-substring (point) (point-max)))
+ (str (buffer-substring calc-edit-top (point-max)))
(start (point))
pos)
(if (and (integerp num) (> num 1))
(math-expr-opers math-standard-opers))
(and (string-match "[^\n\t ]" str)
(math-read-exprs str)))))
- (if (eq (car-safe vals) 'error)
- (progn
- (switch-to-buffer buf)
- (goto-char (+ start (nth 1 vals)))
- (error (nth 2 vals))))
+ (when (eq (car-safe vals) 'error)
+ (switch-to-buffer buf)
+ (goto-char (+ start (nth 1 vals)))
+ (error (nth 2 vals)))
(calc-wrapper
(if (symbolp num)
(progn
(set num (car vals))
(calc-refresh-evaltos num))
- (if disp-trail
+ (if calc-edit-disp-trail
(calc-trail-display 1 t))
(and vals
(let ((calc-simplify-mode (if (eq last-command-char ?\C-j)
(calc-enter-result num "edit" vals)
(calc-enter-result 1 "edit" vals (- num))))))))))
+(provide 'calc-yank)
+
+;;; arch-tag: ca61019e-caca-4daa-b32c-b6afe372d5b5
;;; calc-yank.el ends here