Збереження сліду Calc для подальшого використання


12

Чи є можливість зберегти слід калькулятора Emacs (як файл) та відновити його пізніше? Якщо ні, чи повинна вона бути особливістю?

Наприклад, коли у мене незавершений розрахунок, але мені потрібно відключити Emacs, було б чудово, якщо я можу продовжувати і далі.

Другий випадок: я роблю деякі обчислення і хочу зберігати те, як я це зробив, щоб згодом перевірити, чи правильно я це зробив чи потрібно його змінювати.

Друга причина - чому я використовую MATLAB (я знаю, занадто багато) для невеликих обчислень, просто я можу їх відновити. Але я хотів би використовувати лише Emacs Calc!

Дякую за відповіді


1
Може бути, вбудований режим - це те, що вам потрібно?
npostavs

Я знаю, що Calc добре поєднується з клавіатурними макросами і навіть розширює їх. Я не бачу, чому ви не можете зберегти їх як звичайні kmacros. Ви також пробували GNU Octave? Він, як правило, сумісний з Matlab і постачається з режимом emacs.
Кевін Холмс

1
Я вірю, що src-блоки Org (крім вбудованого режиму) для calc стануть дорогою, особливо для вашого другого випадку. На жаль, блок-код src ще не є досить складним для більш ніж базових матеріалів. Перегляньте: home.fnal.gov/~neilsen/notebook/orgExamples/…
Dieter.Wilhelm

@estownya - Будь ласка, опублікуйте приклад коду виклику з відповіддю, поверненим calc
Меліорат

Ну, Calc Trail - це буфер, як і будь-який інший. Ви можете переключитися на нього та C-x C-wвиписати його. Я не думаю, що існує який-небудь простий спосіб відновити весь стан Calc, коли ви хочете перезавантажити.
КАРТА

Відповіді:


0

Оскільки обробка сліду обчислення є текстовою, то можна по суті використовувати write-regionі insert-file-contents.

Проте деякі деталі повинні бути враховані. Наведений нижче код Elisp дозволяє записати поточний буфер calc-trail на диск, C-x C-sі ви можете прочитати цей матеріал у поточному положенні курсора C-x i.

Після цього ви можете використовувати calc-trail-modeприв'язки для оцінки частин команд зчитування читання.

(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

Ви можете використовувати, s pщо означає, (calc-permanent-variable &optional VAR)щоб зберегти всю змінну до ~/.emacs.d/calc.elабо calc-settings-file.


2
Але це просто зберігає поточну величину, а не історію розрахунків.
Ендрю Сванн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.