Function: calc-copy-to-buffer
calc-copy-to-buffer is an autoloaded, interactive and byte-compiled
function defined in calc-yank.el.gz.
Signature
(calc-copy-to-buffer NN)
Documentation
Copy the top of stack into an editing buffer.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/calc/calc-yank.el.gz
(defun calc-copy-to-buffer (nn)
"Copy the top of stack into an editing buffer."
(interactive "P")
(let ((thebuf (and (not (memq major-mode '(calc-mode calc-trail-mode)))
(current-buffer)))
(movept nil)
oldbuf newbuf)
(calc-wrapper
(save-excursion
(calc-force-refresh)
(let ((n (prefix-numeric-value nn))
(eat-lnums calc-line-numbering)
(big-offset (if (eq calc-language 'big) 1 0))
top bot)
(setq oldbuf (current-buffer)
newbuf (or thebuf
(calc-find-writable-buffer (buffer-list) 0)
(calc-find-writable-buffer (buffer-list) 1)
(error "No other buffer")))
(cond ((and (or (null nn)
(consp nn))
(= (calc-substack-height 0)
(- (1- (calc-substack-height 1)) big-offset)))
(calc-cursor-stack-index 1)
(if (looking-at
(if calc-line-numbering "[0-9]+: *[^ \n]" " *[^ \n]"))
(goto-char (1- (match-end 0))))
(setq eat-lnums nil
top (point))
(calc-cursor-stack-index 0)
(setq bot (- (1- (point)) big-offset)))
((> n 0)
(calc-cursor-stack-index n)
(setq top (point))
(calc-cursor-stack-index 0)
(setq bot (- (point) big-offset)))
((< n 0)
(calc-cursor-stack-index (- n))
(setq top (point))
(calc-cursor-stack-index (1- (- n)))
(setq bot (point)))
(t
(goto-char (point-min))
(forward-line 1)
(setq top (point))
(calc-cursor-stack-index 0)
(setq bot (point))))
(with-current-buffer newbuf
(if (consp nn)
(kill-region (region-beginning) (region-end)))
(push-mark (point) t)
(if (and overwrite-mode (not (consp nn)))
(calc-overwrite-string (with-current-buffer oldbuf
(buffer-substring top bot))
eat-lnums)
(or (bolp) (setq eat-lnums nil))
(insert-buffer-substring oldbuf top bot)
(and eat-lnums
(let ((n 1))
(while (and (> (point) (mark))
(progn
(forward-line -1)
(>= (point) (mark))))
(delete-char 4)
(setq n (1+ n)))
(forward-line n))))
(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))))