Zapisywanie szlaku Calc do późniejszego wykorzystania

12

Czy można zapisać ślad kalkulatora Emacsa (jako plik) i przywrócić go później? Jeśli nie, to czy powinna to być funkcja?

Na przykład, gdy mam niepełne obliczenia, ale muszę wyłączyć Emacsa, byłoby świetnie, gdybym mógł kontynuować.

Drugi przypadek: wykonuję obliczenia i chcę zapisać sposób, w jaki to zrobiłem, aby później sprawdzić, czy zrobiłem to poprawnie lub czy muszę to zmodyfikować.

Drugim powodem jest to, że używam MATLAB (wiem za dużo) do małych obliczeń, tylko po to, aby je przywrócić. Ale chciałbym używać tylko Emacsa Calc!

Dziękuję za odpowiedzi

estownya
źródło
1
Może Tryb Embedded jest tym, czego chcesz?
npostavs
Wiem, że Calc jest dobrze zintegrowany z makrami klawiatury, a nawet je rozszerza. Nie rozumiem, dlaczego nie możesz zapisać ich jako zwykłych kmacros. Czy próbowałeś także GNU Octave? Ma być w większości kompatybilny z Matlab i ma tryb emacs.
Kevin Holmes
1
Wierzę, że bloki src Orga (oprócz trybu osadzonego) dla calc będą właściwą drogą, szczególnie w drugim przypadku. Niestety, kod blokowy src nie jest (jeszcze) wystarczająco zaawansowany, aby mógł pomieścić coś więcej niż podstawowe rzeczy. Proszę spojrzeć na: home.fnal.gov/~neilsen/notebook/orgExamples/…
Dieter.Wilhelm
@estownya - Proszę zamieścić przykładowy kod obliczeniowy z odpowiedzią zwróconą przez calc.
Melioratus,
Cóż, Calc Trail jest buforem jak każdy inny. Możesz się na to przełączyć i C-x C-wwypisać. Nie sądzę, że istnieje jakikolwiek łatwy sposób na zrekonstruowanie całego stanu Calc, kiedy chcesz ponownie załadować.
MAP

Odpowiedzi:

0

Ponieważ przetwarzanie ścieżki obliczeniowej jest oparte na tekście, można zasadniczo użyć write-regioni insert-file-contents.

Niemniej jednak należy wziąć pod uwagę niektóre szczegóły. Poniższy kod Elisp pozwala zapisać bieżący bufor kalendarza na dysk za pomocą C-x C-si można odczytać te rzeczy przy bieżącej pozycji kursora za pomocą C-x i.

Następnie można użyć calc-trail-modepowiązań do oceny części wczytanych poleceń obliczeniowych.

(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)
Tobiasz
źródło
-1

możesz użyć, s pco oznacza (calc-permanent-variable &optional VAR)zapisanie wszystkich zmiennych w ~/.emacs.d/calc.ellub calc-settings-file.

gholk
źródło
2
Ale to tylko zapisuje bieżącą wartość, a nie historię obliczeń.
Andrew Swann,