Сохранение Calc Trail для последующего использования

12

Есть ли возможность сохранить Emacs Calculator Trail (в виде файла) и восстановить его позже? Если нет, то должно ли это быть функцией?

Например, когда у меня есть неполное вычисление, но мне нужно закрыть Emacs, было бы здорово, если бы я мог продолжить после этого.

Второй случай: я делаю некоторые вычисления и хочу сохранить, как я это сделал, чтобы позже проверить, правильно ли я это сделал или нужно ли его изменить.

Вторая причина заключается в том, что я использую MATLAB (я знаю слишком много) для небольших вычислений, просто чтобы я мог их восстановить. Но я бы хотел использовать только Emacs Calc!

Спасибо за ответы

estownya
источник
1
Может быть, Embedded Mode - это то, что вы хотите?
npostavs
Я знаю, что Calc хорошо интегрируется с клавиатурными макросами и даже расширяет их. Я не понимаю, почему вы не можете сохранить их как обычный kmacros. Также вы пробовали GNU Octave? Предполагается, что он в основном совместим с Matlab и поставляется в режиме emacs.
Кевин Холмс
1
Я полагаю, что блоки src от Org (помимо встроенного режима) для calc будут подходить, особенно для вашего второго случая. К сожалению, блочный код src (пока) не достаточно сложен для чего-то большего, чем базовые вещи. Пожалуйста, посмотрите на: home.fnal.gov/~neilsen/notebook/orgExamples/…
Дитер. Вильгельм,
@estownya - Пожалуйста, опубликуйте пример кода calc с ответом, возвращенным 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привязки для оценки частей читаемых команд calc.

(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.

gholk
источник
2
Но это просто сохраняет текущее значение, а не историю расчетов.
Эндрю Суонн