[LINUX] Der Arbeitsbereich von Emacs perspektive.el ist einfacher zu verwenden

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.

Am Anfang

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 **.

Vorteile von EXWM

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.

Probleme mit EXWM

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.

Dunkles GNOME-Leben

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)

Begonnen mit perspektive.el

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.

Endlich das Hauptthema

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). ** **.

Methode

Überlegen Sie angemessen, wie Sie dies erreichen können.

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.

ich werde schreiben

Abgeschlossener Zustand

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")

Erstellen eines Arbeitsbereichs

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.

Versuchen Sie es mit

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.

Einführung der Komposition

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

abschließend

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

Der Arbeitsbereich von Emacs perspektive.el ist einfacher zu verwenden
Wird nicht empfohlen, pip direkt zu verwenden?
Vereinfachen Sie die Verwendung der Klickfunktion von SikuliX
[Pandas] Was ist set_option?
Verwendung ist und == in Python
Spielen wir mit JNetHack 3.6.2, das einfacher zu kompilieren ist!
Scraping mit Python-Selen ist alt! ?? ・ ・ ・ Verwendung von Pyppeteer
Betreff: Python Lambda ist nutzlos ^ H ^ H ^ H ^ H ^ H Schwer zu bedienen
Verwendung von xml.etree.ElementTree
Wie benutzt man Python-Shell
Hinweise zur Verwendung von tf.data
Verwendung von virtualenv
Wie benutzt man Seaboan?
Verwendung von Image-Match
Wie man Shogun benutzt
Verwendung von Pandas 2
Verwendung von Virtualenv
Verwendung von numpy.vectorize
Verwendung von pytest_report_header
Einfach zu bedienende Flasche
Wie man teilweise verwendet
Wie man Bio.Phylo benutzt
Verwendung von SymPy
Wie man x-means benutzt
Verwendung von WikiExtractor.py
Verwendung von IPython
Verwendung von virtualenv
Wie benutzt man Matplotlib?
Verwendung von iptables
Wie benutzt man numpy?
Gründe für die Verwendung von log
Verwendung von TokyoTechFes2015
Wie benutzt man venv
Verwendung des Wörterbuchs {}
Wie benutzt man Pyenv?
Einfach zu bedienendes SQLite3
Verwendung der Liste []
Wie man Python-Kabusapi benutzt
Python-How zur Verwendung von Pyinstaller
Verwendung von OptParse
Verwendung von return
Stellen Sie Elpy Emacs vor
Wie man Imutils benutzt
Die Verwendung von icrawler zum Sammeln von Daten zum maschinellen Lernen wurde vereinfacht
VIM ist gut zu bedienen - zumindest ein Anfang, um es zu benutzen
Das Deep Learning-Framework "CNTK" von Microsoft ist jetzt mit Python kompatibel, was die Verwendung erheblich vereinfacht