Lưu đường mòn Calc để sử dụng sau


12

Có khả năng lưu Emacs Calculator Trail (dưới dạng tệp) và khôi phục lại sau không? Nếu không, nó có nên là tính năng?

Ví dụ, khi tôi có một tính toán không đầy đủ nhưng phải tắt Emacs của tôi, sẽ thật tuyệt nếu tôi có thể tiếp tục sau đó.

Trường hợp thứ hai: Tôi thực hiện một số tính toán và muốn lưu trữ cách tôi đã thực hiện, để sau đó kiểm tra xem tôi đã làm đúng hay cần sửa đổi.

Lý do thứ hai là tại sao tôi sử dụng MATLAB (tôi biết, quá nhiều) cho các tính toán nhỏ, chỉ để tôi có thể khôi phục chúng. Nhưng tôi chỉ muốn sử dụng Emacs Calc!

Cảm ơn câu trả lời


1
Có lẽ chế độ nhúng là những gì bạn muốn?
npostavs

Tôi biết Calc được tích hợp tốt với các macro bàn phím và thậm chí mở rộng chúng. Tôi không thấy lý do tại sao bạn không thể lưu chúng dưới dạng kmacros thông thường. Bạn cũng đã thử GNU Octave chưa? Nó được cho là hầu hết tương thích với Matlab và đi kèm với chế độ emacs.
Kevin Holmes

1
Tôi tin rằng các khối src của Org (bên cạnh chế độ nhúng) cho calc sẽ là cách tốt nhất, đặc biệt là cho trường hợp thứ hai của bạn. Thật không may, mã khối src không (chưa) đủ tinh vi cho nhiều thứ hơn là những thứ cơ bản. Hãy có một cái nhìn tại địa chỉ: home.fnal.gov/~neilsen/notebook/orgExamples/...
Dieter.Wilhelm

@estownya - Xin vui lòng gửi một số ví dụ mã calc với câu trả lời được trả về bởi calc.
Melioratus

Chà, Calc Trail là một bộ đệm như mọi thứ khác. Bạn có thể chuyển sang nó và C-x C-wviết nó ra. Tôi không nghĩ có bất kỳ cách dễ dàng nào để xây dựng lại tất cả trạng thái Calc khi bạn muốn tải lại.
MAP

Câu trả lời:


0

Vì việc xử lý dấu vết calc là văn bản dựa trên nên người ta có thể sử dụng write-regioninsert-file-contents.

Tuy nhiên, một số chi tiết phải được xem xét. Mã Elisp sau đây cho phép bạn ghi bộ đệm calc-trail hiện tại vào đĩa C-x C-svà bạn có thể đọc lại nội dung này ở vị trí con trỏ hiện tại với C-x i.

Sau đó, bạn có thể sử dụng các calc-trail-modeliên kết để đánh giá các phần của lệnh calc đọc vào.

(defvar-local calc-trail-buffer-file-name nil
  "Like `buffer-file-name' for calc-trail buffers.")

(defun calc-trail-save (&optional filename)
  "Save current calc trail buffer.
To be used in `write-contents-functions'.
Append with current prefix arg."
  (interactive "FCalc Trail File: ")
  (unless filename
    (setq calc-trail-buffer-file-name
      (expand-file-name (setq filename
                  (read-file-name "Calc Trail File: " nil calc-trail-buffer-file-name)))))
    (when (null (derived-mode-p 'calc-trail-mode))
    (user-error "Saving calc trail buffers requires calc-trail-mode"))
  (save-point
   (save-restriction
     (widen)
     (let* ((b-trail (progn (goto-char 1) (1+ (line-end-position))))
        (b (progn (goto-char (max (or (and (use-region-p) (region-beginning)) (point-min)) b-trail))
              (line-beginning-position)))
        (e (progn (goto-char (max (or (and (use-region-p) (region-end)) (point-max)) b-trail))
              (line-end-position))))
       (write-region b e filename current-prefix-arg)))))

(defun calc-insert-file (filename)
  "Insert calc-trail file FILENAME at point."
  (interactive "FCalc trail file: ")
  (when (= (line-beginning-position) 1)
    (goto-char (1+ (line-end-position))))
  (goto-char (line-beginning-position
          (if (looking-at "[[:space:]]*$")
          2
        1)))
  (let ((inhibit-read-only t))
    (insert-file-contents filename)
    (when (and (null (looking-at "[[:space:]]*$"))
           (null (looking-back "^[[:space:]]*" (line-beginning-position))))
      (insert "\n"))))

(defun calc-trail-install-save ()
  "Install `calc-trail-save' in `write-contents-functions' of `calc-trail-mode' buffers."
  (push #'calc-trail-save write-contents-functions)
  (local-set-key (kbd "C-x i") #'calc-insert-file))

(add-hook 'calc-trail-mode-hook #'calc-trail-install-save)

-1

bạn có thể sử dụng s pcó nghĩa là (calc-permanent-variable &optional VAR)lưu tất cả các biến thành ~/.emacs.d/calc.elhoặc calc-settings-file.


2
Nhưng điều này chỉ lưu giá trị hiện tại, chứ không phải là lịch sử của các tính toán.
Andrew Swann
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.