Einfaches Beispiel für elisp: auto-save

Es ist für elisp nicht einfach, einen einfachen und praktischen Code zu finden. Der folgende Code ist nicht mein Original, aber basierend auf meinem eigenen Verständnis wurden einige Kommentare hinzugefügt und korrigiert. Die Ehre geht an den ursprünglichen Autor, danke dem ursprünglichen Autor für sein Open-Source-Geist!

Anrufbeschreibung:

Speichern Sie den folgenden Code als auto-save.el

Schreiben Sie init.el

(erfordert 'automatisches Speichern)

Das ist es.

Das Folgende ist der Inhalt von auto-save.el.

;; Unser Auto-Save prüft jede Sekunde für Sie. Wenn Sie feststellen, dass sich die Datei geändert hat, wird sie stillschweigend für Sie gespeichert. Haben Sie keine Angst vor einem Stromausfall, und Sie werden Ihre Arbeit nicht verlieren.

;; Die Funktion der folgenden Codezeile ist:
;; Verhindert, dass Emacs beim Speichern von Dateien viele Müll-#foo#-Dateien erzeugt. Diese Art von Dateien ist am ärgerlichsten, nicht nur nutzlos, sondern verschmutzt sogar das Code-Verzeichnis Löschen Das Löschen tut weh
;; Mit unserem eleganten Auto-Save, lass das emacs Auto-Save ruhen! Denn es ist zu Blödsinn.

;; auto-save-default ist eine von emacs selbst definierte Variable, die nichts mit unserem automatischen Speichern zu tun hat
(setq auto-save-default nil)

;; Das Schlüsselwort defgroup bedeutet, eine Arbeitsgruppe zu definieren, und die grafische Modulkonfiguration kann durchgeführt werden, wenn der Befehl Alt + x customize-group ausgeführt wird ;;
Der erste Parameter ist der Name des Moduls, z
2. Der Parameter stellt den Standardzustand des Moduls dar. In Elisp bedeutet t true und nil false
;; der dritte Parameter ist die Textinterpretation des Moduls
;; der vierte Parameter bedeutet, dass die Gruppe my-auto-save bereitgestellt wird extern
(defgroup my -auto-save nil
  "Datei automatisch speichern, wenn Emacs im Leerlauf ist."
  :group 'my-auto-save)

;; Das Schlüsselwort defcustom bedeutet, eine Variable zu definieren, die vom Benutzer angepasst werden kann. Wenn der Benutzer Alt + x customize-variable ausführt, kann der Wert der auto-save-idle-Variable geändert werden. ;; Der Unterschied zwischen defcustom und defvar wird
hauptsächlich verwendet, defcustom wird verwendet, um einige Parameter bereitzustellen, damit Benutzer den Variableninhalt in Emacs grafisch anpassen können, ;;
defvar hat nur den Variablennamen und den Listeninhalt und wird im Allgemeinen verwendet, um Variablenwerte innerhalb der Funktion zu speichern, und ist nicht an den Benutzer zur Anpassung ausgegeben
;; der erste Der Parameter ist der Name der Variablen autos-save-idle
;; Der zweite Parameter ist der Wert der Variablen, hier definieren wir ihn als 1, was bedeutet, dass die Verzögerung Sekunden des automatischen Speicherns ist 1
;; Der dritte Parameter ist die Erklärung der Variablen, im Allgemeinen in Alt Wenn + x Beschreibungsvariable, wird die Dokumentbeschreibung der spezifischen Variablen angezeigt
;; Der vierte Parameter wird verwendet, um den Typ von zu definieren die Variable, die hier als Integer definiert ist, damit beim Customizing nur der Integer-Typ korrekt gespeichert wird
;; Der fünfte Parameter gibt an, dass diese Variable zur Gruppe my-auto-save gehört. Die Hauptfunktion besteht darin, alle zu setzen Variablen derselben Gruppe in einer Schnittstelle, wenn Customize-Group (
defcustom auto-save-idle 1
  "Die Leerlaufsekunden zum automatischen Speichern der Datei."
  :type 'integer
  :group 'my-auto-save)

;; Die Rolle von autos-save-slient ist eine boolesche Wertvariable. Wenn sie auf null gesetzt ist, bedeutet dies, dass jedes Mal, wenn sie automatisch gespeichert wird, sie im Minibuffer angezeigt wird. ;; Wenn sie auf t gesetzt ist, es wird heruntergefahren, lass mich
leise schreiben Code, sei leise ...
(defcustom auto-save-silent nil
  "Nichts zu schmutzigem Minipuffer, wenn diese Option nicht null ist."
  :type 'boolean
  :group 'my-auto-save)


;; Der High-Energy-Core-Code voraus, bitte fokussieren
(defun auto-save-buffers ()
  ;; Alle Funktionen, die Sie nach Alt + x aufrufen können, müssen manuell hinzugefügt werden (interaktiv), ansonsten kann dieser Code nur in Elisp verwendet werden Im Interpreter ausführen, kann aber nicht direkt vom Benutzer über Alt + x aufgerufen werden,
  ;; Genau wie die Bedeutung des Wortes interaktiv, rufen Sie diese Funktion
  (interaktiv) auf, wenn Sie interagieren möchten
 ;; Erstellen Sie die Variable autosave-buffer-list zum Speichern Alle Pufferlisten, die durchlaufen werden müssen
  (let ((autosave-buffer-list))
    ;; Das Schlüsselwort save-excursion bedeutet, dass alle Codes in save-excursion den Emacs vor save-excursion nicht beeinflussen ;;Sie können verstehen dass die
    Bedeutung dieses Schlüsselworts darin besteht, die Szene zu schützen;)
    (save-excursion
      ;; Die Funktion von dolist ist die gleiche wie foreach in vielen Sprachen, return die Buffer-List-Funktion Alle Puffer in der Schleife werden der Variablen buf zugewiesen ,
      ;; und der Code, der buf betrifft, wird im Bereich von dolist ausgeführt
      (dolist (buf (buffer-list))
        ;; Den Puffer des aktuellen Codes auf den Wert der buf-Variablen setzen. Wenn es keine vorherige Sicherungsexkursion gibt, werden Sie feststellen, dass emacs immer schnell alle Puffer umschaltet (
        set-buffer buf)
        ;; Wenn der aktuelle Puffer hat eine zugeordnete Datei ( Pufferdateiname), und wenn der aktuelle Puffer vom Benutzer geändert wurde (Puffer-modifiziert-p), wird er automatisch gespeichert ( wenn (
        und (Pufferdateiname) (Puffer-modifiziert -p))
            (progn
              ;; Schiebt den Namen des aktuellen Puffers in die Autosave-Buffer-List-Liste für spätere Speicheraufforderungen
              (push (buffer-name) autosave-buffer-list)
              (if auto-save-slient
                  ;; if auto-save-slient Wenn diese Variable wahr ist, werden keine Speicherinformationen angezeigt,
                  ;; weil die Emacs-Speicherfunktion (basic-save-buffer) selbst Ihnen mitteilen wird, dass die Datei gespeichert wurde,
                  ;; also verwenden wir with -temp-message mit leerem String, um den Basis-Save-Buffer-Code daran zu hindern, irgendetwas im Minibuffer anzuzeigen
                  (with-temp-message ""
                    (basic-save-buffer))
                (basic-save-buffer))
              )))
      ;; es sei denn, Mittel zur Ausführung, wenn auto-save-slient falsch ist
      (es sei denn, auto-save-slient
        ;; cond ist die Elisp-Version von switch, die zum Vergleichen und Ausführen von bedingten Anweisungen verwendet wird
        (cond
         ;; wenn es keine Datei in der Autosave-Buffer-Liste gibt, die gespeichert werden muss, stören wir den Benutzer nicht, geben Sie einfach weiter by silently
         ; ; Wenn es eine Datei zum Speichern gibt, sagen wir Saved ...
         ((= (length autosave-buffer-list) 1)
          (message "# Saved %s" (auto autosave-buffer-list)))
         ; ; Wenn mehrere Dateien gespeichert werden müssen, sagen Sie Saved ... files
         ((> (length autosave-buffer-list) 1)
          (Meldung "# Saved %d files: %s"
                   (länge autosave-buffer-list)
                   (mapconcat 'identity autosave-buffer-list ", "))))) ))
      )

(defun auto-save-enable ()
  (interaktiv)
  ;; Die Funktion run-with-idle-timer bedeutet, dass die Funktion auto-save-buffers nach der durch auto-save-idle definierten Beschreibung automatisch ausgeführt wird
  ;; #' bedeutet Say dass der dritte Parameter von run-with-idle-timer eine Funktion anstelle eines allgemeinen Parameters ist
  ;; Idle Timer wird alle 1 Sekunde eine Auto-Save-Buffer-Funktion ausführen (Auto-Save-Idle)
  ;; Idle Timer To keep sein Handle, damit es später gelöscht werden kann.
  (setq auto-save-handle (run-with-idle-timer auto-save-idle t #'auto-save-buffers)) ( setq auto-save-running 1)
  )

(defun auto-save-disable()
  (interaktiv)
  (if (/= auto-save-running 0)
    (cancel-timer auto-save-handle)
    (setq auto-save-running 0)))
(auto-save- aktivieren)
(biete 'auto-save')

おすすめ

転載: blog.csdn.net/hejinjing_tom_com/article/details/129337492