Enregistrement de la trace Calc pour une utilisation ultérieure

12

Existe-t-il une possibilité d'enregistrer Emacs Calculator Trail (sous forme de fichier) et de le restaurer ultérieurement? Si ce n'est pas le cas, devrait-il être présenté?

Par exemple, lorsque j'ai un calcul incomplet mais que je dois arrêter mes Emacs, ce serait bien si je pouvais continuer après.

Deuxième cas: je fais quelques calculs et je veux enregistrer comment je l'ai fait, pour vérifier plus tard si je l'ai fait correctement ou si je dois le modifier.

La deuxième raison est pourquoi j'utilise MATLAB (je sais, trop) pour de petits calculs, juste pour que je puisse les restaurer. Mais je voudrais utiliser Emacs Calc uniquement!

Merci pour les réponses

estownya
la source
1
Peut-être que le mode intégré est ce que vous voulez?
npostavs
Je sais que Calc est bien intégré aux macros de clavier et les étend même. Je ne vois pas pourquoi vous ne pouvez pas les enregistrer en tant que kmacros ordinaires. Avez-vous également essayé GNU Octave? Il est censé être principalement compatible avec Matlab et est livré avec un mode emacs.
Kevin Holmes
1
Je crois que les blocs src d'Org (en plus du mode intégré) pour calc seront la voie à suivre, en particulier pour votre deuxième cas. Malheureusement, le code de bloc src n'est pas (encore) assez sophistiqué pour plus que des choses de base. Veuillez consulter: home.fnal.gov/~neilsen/notebook/orgExamples/…
Dieter.Wilhelm
@estownya - Veuillez poster un exemple de code calc avec la réponse renvoyée par calc.
Melioratus
Eh bien, le Calc Trail est un tampon comme les autres. Vous pouvez y basculer et l' C-x C-wécrire. Je ne pense pas qu'il existe un moyen facile de reconstruire tout l'état de Calc lorsque vous souhaitez recharger.
MAP

Réponses:

0

Puisque le traitement de la trace calc est basé sur du texte, on peut essentiellement utiliser write-regionet insert-file-contents.

Néanmoins, certains détails doivent être pris en considération. Le code Elisp suivant vous permet d'écrire la mémoire tampon de calc-trail actuelle sur le disque avec C-x C-set vous pouvez relire ces éléments à la position actuelle du curseur avec C-x i.

Ensuite, vous pouvez utiliser les calc-trail-modeliaisons pour évaluer des parties des commandes de calcul en lecture.

(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)
Tobias
la source
-1

vous pouvez utiliser s pce qui signifie (calc-permanent-variable &optional VAR)pour enregistrer toutes les variables dans ~/.emacs.d/calc.elou calc-settings-file.

gholk
la source
2
Mais cela enregistre simplement la valeur actuelle, plutôt que l'historique des calculs.
Andrew Swann