From cef58865ec1be83f6a8c3fd5c4aec6fee7ba0e35 Mon Sep 17 00:00:00 2001
From: Peter Vennemann <vennemann@fh-muenster.de>
Date: Thu, 6 Mar 2025 15:09:45 +0100
Subject: [PATCH] Sorting saved buffer.

---
 vocab-trainer.el | 35 ++++++++++++++++++++++-------------
 1 file changed, 22 insertions(+), 13 deletions(-)

diff --git a/vocab-trainer.el b/vocab-trainer.el
index ecf432e..bc42dec 100644
--- a/vocab-trainer.el
+++ b/vocab-trainer.el
@@ -2,13 +2,17 @@
 
 ;; class for single phrase
 (defclass vocab-entry ()
-  ((native :initarg :native :initform "" :type string :documentation "phrase in native lang")
-   (foreign :initarg :foreign :initform "" :type string :documentation "phrase in foreign lang")
-   (score :initarg :score :initform 0 :type integer :documentation "score")))
+  ((native :initarg :native :initform "" :type string
+	   :documentation "phrase in native lang")
+   (foreign :initarg :foreign :initform "" :type string
+	    :documentation "phrase in foreign lang")
+   (score :initarg :score :initform 0 :type integer
+	  :documentation "score")))
 
 ;; class for trainer
 (defclass vocab-trainer ()
-  ((entries :initarg :entries :initform nil :type list :documentation "list of phrases")))
+  ((entries :initarg :entries :initform nil :type list
+	    :documentation "list of phrases")))
 
 (defmethod load-vocab ((trainer vocab-trainer))
   "Reading phrases from current buffer and saving as objecst."
@@ -21,24 +25,28 @@
              (native (nth 0 parts))
              (foreign (nth 1 parts))
              (score (string-to-number (nth 2 parts))))
-        (push (vocab-entry :native native :foreign foreign :score score) (oref trainer entries)))
+        (push (vocab-entry :native native :foreign foreign :score score)
+	      (oref trainer entries)))
       (forward-line 1))))
 
 (defmethod save-vocab ((trainer vocab-trainer))
   "Saving phrases with actual scores back to current buffer."
   (with-current-buffer (current-buffer)
     (erase-buffer)
-    (dolist (entry (oref trainer entries))
-      (insert (format "%s | %s | %d\n"
-                      (oref entry native)
-                      (oref entry foreign)
-                      (oref entry score))))
+    (let ((sorted_entries (cl-sort (copy-sequence (oref trainer entries)) '<
+		      :key (lambda (e) (oref e score)))))
+      (dolist (entry sorted_entries)
+        (insert (format "%s | %s | %d\n"
+                        (oref entry native)
+                        (oref entry foreign)
+                        (oref entry score)))))
     (save-buffer)))
 
 (defmethod select-weakest ((trainer vocab-trainer))
   "Selecting phrases with lowest score."
-  (cl-subseq (cl-sort (copy-sequence (oref trainer entries)) #'< :key (lambda (e) (oref e score))) 
-           0 12))
+  (cl-subseq (cl-sort (copy-sequence (oref trainer entries)) '<
+		      :key (lambda (e) (oref e score))) 
+             0 12))
 
 (defmethod train ((trainer vocab-trainer))
   "Start training."
@@ -53,7 +61,8 @@
               (oset entry score (1+ (oref entry score)))
               (setq words (cdr words)))
           (progn
-	    (message "Wrong! Correct answer: %s (press key...)" (oref entry foreign))
+	    (message "Wrong! Correct answer: %s (press key...)"
+		     (oref entry foreign))
 	    (read-char)
             (oset entry score (1- (oref entry score))))))))
   (save-vocab trainer))
-- 
GitLab