Dieser Artikel ist der 21. Tag des Emacs Adventskalenders 2019.
Tag 20 @ tachiyamas Artikel Der stärkste Editor Emacs kann Matrix (wie Dinge) tun Ich werde von übernehmen und einen Artikel schreiben.
Emacs ist ein Editor mit über 10.000 integrierten Befehlen und vielen verfügbaren Paketen. Wir Emacs-Benutzer müssen ihre Emacs weiterhin nach ihren Wünschen verbessern, auch wenn sie von anderen Programmierern verspottet werden.
Behalte den Witz hier (ist es nicht ein Witz?)
Kennen Sie das super talentierte Emacs Lisp-Paket EXWM (Emacs X Window Manager)? Dieses Paket dient zum Betreiben von Emacs als gekacheltes Fenstermanager.
Meiner Meinung nach hat EXWM zwei Hauptvorteile. Erstens ** Eine Funktion, die X Window-Anwendungen als Puffer verarbeiten kann **. Und ** das Konzept des Arbeitsbereichs **.
Da die X Window-Anwendung als Emacs-Puffer verwendet werden kann, können Sie die Pufferliste sofort mit "C-x b" anzeigen, wechseln und beenden. EXWM ist ein Paket, das einen der Vorteile der Verwendung von Emacs **, Betrieb mit einer einheitlichen Schnittstelle **, verkörpert.
Als nächstes folgt das Konzept des Arbeitsbereichs: Sie können den Arbeitsbereich mit der Schlüsselbindung von "s-n" (0-9 für n) wechseln. Dies ist sehr praktisch, Arbeitsbereich 1 dient zum Programmieren, Arbeitsbereich 2 ist eine Shell, Arbeitsbereich 3 ist ein Webbrowser usw. Er kann im Gehirn organisiert und aktualisiert werden.
Natürlich gibt es nicht nur Vorteile, sondern auch Unannehmlichkeiten.
Erstens ist es, da es sich um einen Fenstermanager vom Typ EXWM-Kacheln handelt, normalerweise schwierig, wenn es um die Handhabung schwebender Fenster geht. (Gibt es viele Szenen, die Sie schweben möchten?)
Darüber hinaus weist EXWM immer noch eine gewisse Instabilität auf. Abhängig von der Umgebung ist es möglicherweise nicht möglich, eine Tastatureingabe zu starten oder zu starten. Ich benutze es seit ungefähr einem Jahr für Debian-Tests, aber eines Tages wurden plötzlich keine Tastenanschläge mehr akzeptiert.
Ich habe zu GNOME evakuiert, um es später zu beheben, aber bevor ich es wusste, hatte ich GNOME seit mehr als einem halben Jahr verwendet. Ich fand es jedoch immer schwierig, Emacs auf GNOME zu verwenden. Zumal es nur eine Pufferliste gibt, war das Umschalten zwischen ihnen für mich mühsam und unvermeidlich, da ich viele Puffer öffne. Da es nur ein Fenster gibt, ist es auch nicht möglich, eine große Anzahl von Puffern gleichzeitig zu öffnen, was sehr schwierig zu verwenden ist. (Obwohl es viel praktischer ist als ein Editor, der mit V beginnt)
Also habe ich angefangen, perspektivische.el zu verwenden, mit der Sie Puffer gruppieren und zwischen ihnen wechseln können. Es kann einen Arbeitsbereich erstellen und Sie können ihn frei benennen. Und Sie können mit C-c p s <Name>
hin und her wechseln. Dieses Paket hat sich jedoch nicht sehr gut durchgesetzt. Erstens sind die Tastenkombinationen lang, und das Eingeben des Namens ist mühsam, sodass ich dazu neige, Dinge in einem Arbeitsbereich zu erledigen. Deshalb dachte ich wie folgt.
** Ist die Umschaltschlüsselbindung einfach, Sie müssen keinen Namen eingeben und können den Arbeitsbereich nicht in perspektivisch verschieben. ** **.
Deshalb kam mir die Idee. Ich wünschte, ich könnte den Arbeitsbereich von perspektive.el leicht mit s -n
wie EXWM wechseln.
Entscheiden Sie zunächst, was Sie tun möchten.
** Ich möchte in der Lage sein, den Arbeitsbereich von perspektivisch.el mit s-n
zu wechseln (n ist eine Zahl 0-9). ** **.
Überlegen Sie angemessen, wie Sie dies erreichen können.
s-n
zu (persp-switch (int-to-string n))
zu.Es sieht aus wie das. Es ist einfach. Übrigens ist meine Emacs Lisp-Fähigkeit nur durch Lesen verständlich und ich kann sie kaum schreiben. Der Code, den ich dieses Mal geschrieben habe, scheint also weit vom Emacs Lisp-Schreibstil entfernt zu sein ... Wenn Sie einen Rat haben, hinterlassen Sie ihn bitte in den Kommentaren.
Zunächst werde ich den Code von Emacs Lisp schreiben, der wie erwartet funktioniert. Wenn Sie es schnell anzeigen möchten, schreiben Sie diesen Code bitte in init.el. Bitte beachten Sie übrigens, dass die Schlüsselbindung mit M-n
anstelle von s-n
registriert ist.
*** * Zugabe * *** *** Da die cl-Bibliothek standardmäßig aus Emacs 27.0.91 abgeschafft wurde, das neulich veröffentlicht wurde, kann lexical-let nicht mehr verwendet werden. Ich habe den folgenden Code entsprechend geändert. *** ***
(require 'perspective)
(persp-mode 1)
;;Generierung von Arbeitsbereichen
(mapc (lambda (i)
(persp-switch (int-to-string i)))
(number-sequence 0 9))
;;;;Eine Funktion, die eine Funktion zurückgibt, die in der Taste registriert werden soll
;;(defun local-switch-workspace (i)
;; (lexical-let ((index i))
;; (lambda ()
;; (interactive)
;; (persp-switch (int-to-string index)))))
;;
;;Update 2020/04/28
;;
(defun local-switch-workspace (index)
`(lambda ()
(interactive)
(persp-switch (int-to-string ,index))))
;;Registrieren Sie die Schlüsselbindung
(mapc (lambda (i)
(global-set-key (kbd (format "M-%d" i)) (local-switch-workspace i)));;
(number-sequence 0 9))
;Der erste Arbeitsbereich ist"1"Einstellen
(persp-switch "1")
Ich möchte beim Start einen Arbeitsbereich erstellen. Schreiben Sie daher den Prozess zum Erstellen des Arbeitsbereichs direkt in init.el.
;;Generierung von Arbeitsbereichen
(mapc (lambda (i)
(persp-switch (int-to-string i)))
(number-sequence 0 9))
Der Arbeitsbereich wird erstellt, indem der Lambda-Ausdruck und die durch die Zahlenfolge erzeugte Liste von 0 \ ~ 9 als Funktion zum Generieren des Arbeitsbereichs an mapc übergeben werden. mapc ist eine Funktion, die Werte einzeln aus der Liste der zweiten Argumente entnimmt und sie an die Funktion übergibt, die zur Ausführung an das erste Argument übergeben wird. Diese Funktion ist sehr praktisch und wird sehr häufig verwendet.
;;Eine Funktion, die eine Funktion zurückgibt, die in der Taste registriert werden soll
;;(defun local-switch-workspace (i)
;; (lexical-let ((index i))
;; (lambda ()
;; (interactive)
;; (persp-switch (int-to-string index)))))
;;
;;Update 2020/04/28
;;
(defun local-switch-workspace (index)
`(lambda ()
(interactive)
(persp-switch (int-to-string ,index))))
Diese Funktion gibt eine Funktion zurück, die den Arbeitsbereich umschaltet. Es wird angenommen, dass der Rückgabewert dieser Funktion an "global-set-key" übergeben wird. Wenn Sie beispielsweise 1 an diese Funktion übergeben und ausführen, wird die Funktion zurückgegeben, die (persp-switch" 1 ")
ausführt. Sie übergeben diese Funktion an global-set-key
.
Zuerst habe ich versucht, den Lambda-Ausdruck direkt an "global-set-key" zu übergeben, aber es hat nicht funktioniert und ich habe mich für dieses Formular entschieden. Als Ergebnis der Kristallisation der Weisheit erfahrener Emacs Lisp-Programmierer mit Herrn Google wurde es eine Funktion, die "lexikalisch-let" verwendet. Diese Lexik ist erforderlich, um Verschlüsse zu erstellen. Diese Funktion ist jedoch in Emacs 24.1 und höher verfügbar. Seien Sie also vorsichtig, wenn Sie einen früheren Emacs verwenden. Nun, jetzt im Jahr 2019 ist es selten, jemanden zu finden, der eine Version vor Emacs 24.1 verwendet. (Ich benutze Emacs 26.3)
;;Registrieren Sie die Schlüsselbindung
(mapc (lambda (i)
(global-set-key (kbd (format "M-%d" i)) (local-switch-workspace i)))
(number-sequence 0 9))
Hier ist die Schlüsselbindung tatsächlich in "M-n" registriert (n ist eine Zahl von 0 \ ~ 9). Der Inhalt ist einfach: Verwenden Sie mapc, um die Funktion des Rückgabewerts von "local-switch-workspace" in den Tasten 0 \ ~ 9 zu registrieren.
** Das ist seltsam **
Es sollte in s-n
registriert sein, aber es ist in M-n
registriert. Es tut mir Leid. Die "Super-Number" -Schlüsselbindung wurde bei GNOME registriert und konnte nicht an Emacs übergeben werden. Also habe ich mit der Alt-Taste (Meta-Taste) einen Kompromiss geschlossen.
;Der erste Arbeitsbereich ist"1"Einstellen
(persp-switch "1")
Setzen Sie schließlich den Standardarbeitsbereich auf 1 und Sie sind fertig.
Ich benutze es seit ungefähr einer Woche und es wird wirklich gut. Ich denke, dass die EXWM-Arbeitsbereichsumschaltung fast vollständig reproduziert wurde. Da perspektivisch.el hinter den Kulissen ausgeführt wird, besteht der Vorteil, dass die von perspektiv.el bereitgestellten Funktionen unverändert verwendet werden können. Ich bin auch froh, dass ich es als Material für den Adventskalender verwenden konnte.
Abschließend möchte ich die Verwendung vorstellen, die sich beim Autor etabliert hat.
WS1 ~ 4 | WS5 ~ 7 | WS8 ~ 9 |
---|---|---|
Programm+Schale | Sätze und einfache Skripte | Frei |
Wenn Sie den Arbeitsbereich reibungsloser wechseln möchten, schreiben Sie ihn bitte in init.el. Vielleicht wirst du süchtig danach sein (`e ') Peer
Recommended Posts