Salvando a trilha do Calc para uso posterior


12

Existe a possibilidade de salvar o Emacs Calculator Trail (como um arquivo) e restaurá-lo mais tarde? Caso contrário, deve ser um recurso?

Por exemplo, quando eu tenho um cálculo incompleto, mas preciso desligar meu Emacs, seria ótimo se eu pudesse continuar depois.

Segundo caso: faço alguns cálculos e quero armazenar como o fiz, para depois verificar se fiz corretamente ou se preciso modificá-lo.

A segunda razão é por que eu uso o MATLAB (eu sei demais) para pequenos cálculos, apenas para restaurá-los. Mas eu gostaria de usar apenas o Emacs Calc!

Obrigado pelas respostas


1
Talvez o Modo Incorporado seja o que você deseja?
npostavs

Eu sei que o Calc está bem integrado às macros do teclado e até as estende. Não vejo por que você não pode salvá-los como kmacros regulares. Você também já experimentou o GNU Octave? Ele deve ser compatível principalmente com o Matlab e vem com o modo emacs.
21415 Kevin Kevin

1
Acredito que os blocos src da Org (além do modo incorporado) para o calc serão o caminho a percorrer, especialmente no seu segundo caso. Infelizmente, o código do bloco src ainda não é sofisticado o suficiente para mais do que coisas básicas.
Dieter.Wilhelm

@estownya - Por favor, poste um exemplo de código calc com a resposta retornada por calc.
Melioratus

Bem, o Calc Trail é um buffer como qualquer outro. Você pode mudar C-x C-wpara escrever e escrever. Eu não acho que exista uma maneira fácil de reconstruir todo o estado Calc quando você quiser recarregar.
MAPA

Respostas:


0

Como o processamento da trilha de cálculo é baseado em texto, é possível usar essencialmente write-regione insert-file-contents.

No entanto, alguns detalhes devem ser considerados. O código Elisp a seguir permite gravar o buffer de trilha de cálculo atual no disco C-x C-se você pode ler esse material na posição atual do cursor com C-x i.

Depois, você pode usar as calc-trail-modeligações para avaliar partes dos comandos de leitura de 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

você pode usar o s pque significa (calc-permanent-variable &optional VAR)salvar todas as variáveis ​​em ~/.emacs.d/calc.elou calc-settings-file.


2
Mas isso apenas salva o valor atual, e não o histórico dos cálculos.
Andrew Swann
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.