後で使用するためにCalc Trailを保存する


12

Emacs Calculator Trailを(ファイルとして)保存し、後で復元する可能性はありますか?そうでない場合、それは機能である必要がありますか?

たとえば、計算が不完全であるがEmacsをシャットダウンする必要がある場合、その後続行できれば素晴らしいでしょう。

2番目のケース:いくつかの計算を行い、その方法を保存し、後で正しく実行したか、変更する必要があるかを後で確認します。

2番目の理由は、MATLABを使用して(あまりにも多くのことを知っています)を少しの計算に使用することです。しかし、私はEmacs Calcのみを使用したいと思います!

答えてくれてありがとう


1
たぶん埋め込みモードはあなたが欲しいものですか?
npostavs

Calcはキーボードマクロとうまく統合されており、それらを拡張することさえ知っています。通常のkmacrosとして保存できない理由がわかりません。GNU Octaveも試しましたか?Matlabとほとんど互換性があると想定されており、emacsモードが付属しています。
ケビンホームズ

1
Orgのsrcのsrcブロック(埋め込みモード以外)が、特に2番目のケースでは進むべき道だと思います。残念なことに、srcブロックのコードは(まだ)基本的なもの以上に洗練されていません。:見ていてくださいhome.fnal.gov/~neilsen/notebook/orgExamples/...
Dieter.Wilhelm

@estownya-calcから返された答えとともにcalcコードの例を投稿してください。
Melioratus

さて、Calc Trailは他のバッファと同じです。それに切り替えてC-x C-w書き出すことができます。リロードしたいときに、Calcの状態をすべて再構築する簡単な方法はないと思います。
MAP

回答:


0

CALC証跡の処理をテキスト基づいているので、一方が実質的に使用することができるwrite-regioninsert-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 pwhich を使用し(calc-permanent-variable &optional VAR)て、すべての変数を~/.emacs.d/calc.elまたはに保存できますcalc-settings-file


2
しかし、これは計算の履歴ではなく、現在の値を保存するだけです。
アンドリュースワン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.