บันทึกเส้นทางการคำนวณเพื่อใช้ในภายหลัง


12

มีความเป็นไปได้ในการบันทึก Emacs Calculator Trail (เป็นไฟล์) และกู้คืนในภายหลังหรือไม่? ถ้าไม่มันควรจะเป็นคุณสมบัติ?

ตัวอย่างเช่นเมื่อฉันมีการคำนวณที่ไม่สมบูรณ์ แต่ต้องปิด Emacs ของฉันมันจะดีมากถ้าฉันสามารถดำเนินการต่อในภายหลัง

กรณีที่สอง: ฉันทำการคำนวณบางอย่างและต้องการเก็บวิธีที่ฉันทำเพื่อตรวจสอบในภายหลังว่าฉันทำถูกต้องหรือต้องการแก้ไข

เหตุผลที่สองคือเหตุผลที่ฉันใช้ MATLAB (ฉันรู้มากเกินไป) สำหรับการคำนวณเพียงเล็กน้อยเพื่อให้ฉันสามารถกู้คืนได้ แต่ฉันต้องการใช้ Emacs Calc เท่านั้น!

ขอบคุณสำหรับคำตอบ


1
บางทีโหมดฝังตัวเป็นสิ่งที่คุณต้องการ?
npostavs

ฉันรู้ว่า Calc สามารถใช้งานร่วมกับคีย์บอร์ดมาโครได้เป็นอย่างดี ฉันไม่เห็นสาเหตุที่คุณไม่สามารถบันทึกเป็น kmacros ปกติได้ คุณเคยลอง GNU Octave บ้างหรือไม่? มันควรจะเข้ากันได้กับ Matlab เป็นส่วนใหญ่และมาพร้อมกับโหมด emacs
Kevin Holmes

1
ฉันเชื่อว่าบล็อก src ของ Org (นอกเหนือจากโหมดฝังตัว) สำหรับการคำนวณจะเป็นวิธีที่จะไปโดยเฉพาะอย่างยิ่งสำหรับกรณีที่สองของคุณ น่าเสียดายที่โค้ดบล็อก src นั้นยังไม่ซับซ้อนพอสำหรับสิ่งที่มากกว่าพื้นฐาน โปรดดูได้ที่: home.fnal.gov/~neilsen/notebook/orgExamples/ …
Dieter.Wilhelm

@estownya - โปรดโพสต์โค้ดตัวอย่าง calc พร้อมคำตอบที่ส่งคืนโดย calc
Melioratus

Calc Trail นั้นเป็นบัฟเฟอร์เหมือนกัน คุณสามารถสลับไปที่มันและC-x C-wเขียนมันออกมา ฉันไม่คิดว่าจะมีวิธีง่ายๆในการสร้างสถานะ Calc ใหม่ทั้งหมดเมื่อคุณต้องการโหลดซ้ำ
MAP

คำตอบ:


0

ตั้งแต่การประมวลผลของเส้นทางขจัดตะกรันที่มีข้อความตามหลักหนึ่งสามารถใช้และwrite-regioninsert-file-contents

อย่างไรก็ตามรายละเอียดบางอย่างจะต้องได้รับการพิจารณา รหัส Elisp ต่อไปนี้จะช่วยให้คุณเขียนบัฟเฟอร์คำนวณเส้นทางปัจจุบันไปยังดิสก์ด้วยและคุณสามารถอ่านกลับสิ่งนี้ที่ตำแหน่งของเคอร์เซอร์ปัจจุบันด้วยC-x C-sC-x i

หลังจากนั้นคุณสามารถใช้การcalc-trail-modeเชื่อมโยงเพื่อประเมินชิ้นส่วนของคำสั่งการอ่านเข้า

(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.elcalc-settings-file


2
แต่นี่จะเป็นการบันทึกค่าปัจจุบันแทนที่จะบันทึกประวัติของการคำนวณ
Andrew Swann
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.