Emacs/Konfigurationen

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. ⚓︎ Hauptartikel zu Emacs

  2. ⚓︎ Ein Terminal öffnen

  3. ⚓︎ Einen Editor bedienen

Inhaltsverzeichnis
    1. Start-Screen, Batterielevel, Uhrzeit, Ze...
    2. Zeilen verschieben
    3. DBUS in Emacs
  1. Links
    1. intern
    2. extern

Emacs/emacs_icon.png Der Editor Emacs ist vielfältig konfigurierbar. Hier findet sich eine kleine Auswahl an elisp-Schnipseln, die den Alltag erleichtern.
Die Hauptseite [1] des Artikels findet man unter Emacs.

Start-Screen, Batterielevel, Uhrzeit, Zeilennummern

Die hier angegebenen Optionen werden in der Konfigurationsdatei ~/.emacs eingetragen. t bedeutet dabei true (wahr, an), nil ist false (falsch, aus).

1
2
3
4
5
6
7
8
(custom-set-variables
  ;; …
  '(inhibit-startup-screen t)       ;; Unterdrückt den Startbildschirm
  '(display-time-mode t)            ;; Zeigt die Uhrzeit in der Statusleiste an
  '(display-battery-mode t)         ;; Batteriestatus einblenden, wenn vorhanden
  '(display-line-numbers-type nil)  ;; Zeilennummern ausblenden. Andere erlaubte Werte: t, relative, visual
  ;; …
 )

Zeilen verschieben

Mit folgender Ergänzung in der Konfigurationsdatei ~/emacs, ist es möglich, entweder die aktuelle Zeile, oder den markierten Text mit Hilfe von Alt + / Alt + hoch/runter zu verschieben.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
(defun move-text-internal (arg)
  (cond
   ((and mark-active transient-mark-mode)
    (if (> (point) (mark))
        (exchange-point-and-mark))
    (let ((column (current-column))
          (text (delete-and-extract-region (point) (mark))))
      (forward-line arg)
      (move-to-column column t)
      (set-mark (point))
      (insert text)
      (exchange-point-and-mark)
      (setq deactivate-mark nil)))
   (t
    (let ((column (current-column)))
      (beginning-of-line)
      (when (or (> arg 0) (not (bobp)))
        (forward-line)
        (when (or (< arg 0) (not (eobp)))
          (transpose-lines arg))
        (forward-line -1))
      (move-to-column column t)))))

(defun move-text-down (arg)
  "Move region (transient-mark-mode active) or current line
  arg lines down."
  (interactive "*p")
  (move-text-internal arg))

(defun move-text-up (arg)
  "Move region (transient-mark-mode active) or current line
  arg lines up."
  (interactive "*p")
  (move-text-internal (- arg)))

(provide 'move-text)


(global-set-key [M-up] 'move-text-up)
(global-set-key [M-down] 'move-text-down)

Die Vorlage wurde entnommen von http://www.emacswiki.org/emacs/MoveText 🇬🇧.

DBUS in Emacs

Emacs bietet keine native Unterstützung des DBUS an, jedoch ausreichend Methoden, um diese Funktionalität selbst einstellen zu können. Hier wird ein Minimal-Beispiel dargestellt, welches man als Gerüst für eigene Methoden nutzen kann.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
;;; uu-dbus.el --- description -*- lexical-binding: t; -*-
;;
;; Copyright (C) 2020 Autor
;;
;; Author: Autor <email-adresse@anbieter.tld>
;; Maintainer: Autor
;; Created: March 28, 2020
;; Modified: March 28, 2020
;; Version: 0.0.1
;; Keywords: examples dbus
;; Homepage: https://website.domain
;; Package-Requires: ((emacs 26.3) (cl-lib "0.5"))
;;
;; This file is not part of GNU Emacs.
;;
;; This program is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
;;
;;
;;; Commentary:
;;  "DBus-Beispiel für ubuntuusers.de. Es kann eine Zeichenkette gesetzt und übergeben werden."
;;
;;; Code:

(require 'dbus)
(defvar emacs-uu-aktueller-link
  "Diese Variable enthält den aktuell zu repräsentierenden Link. Kann mittels emacs-uu-setLink geändert werden."
  )

;; Standard setzen
(setq emacs-uu-aktueller-link "https://ubuntuusers.de")

(defun emacs-uu-link ()
  "Gibt den aktuell gespeicherten Link zurück."
  (list :string emacs-uu-aktueller-link ) )

(defun emacs-uu-setLink (nm)
  "Setzt 'emacs-uu-aktueller-link auf NM, falls abweichend."
  (if(string-equal nm emacs-uu-aktueller-link )
      (message "Das ist bereits der Link!")
    (setq emacs-uu-aktueller-link nm)
    (message "Link gesetzt auf:%s" emacs-uu-aktueller-link)))

(dbus-register-method
  :session
  "org.emacs.ubuntuusers"
  "/uu"
  "org.emacs.ubuntuusers"
  "getUrl"
  'emacs-uu-link)

(dbus-register-method
 :session
 "org.emacs.ubuntuusers"
 "/uu"
 "org.emacs.ubuntuusers"
 "setUrl"
 'emacs-uu-setLink)

(defun dbus-emacs-slash-introspect ()
  "DBus: Pfad / durchsuchbar machen."
  '("<!DOCTYPE node PUBLIC '-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
<node>
  <interface name='org.freedesktop.DBus.Introspectable'>
    <method name='Introspect'>
      <arg name='xml_data' type='s' direction='out'/>
    </method>
  </interface>
  <node name='uu' />
</node>
"))

(dbus-register-method
  :session
  "org.emacs.ubuntuusers"
  "/"
  dbus-interface-introspectable
  "Introspect"
  'dbus-emacs-slash-introspect)

(defun dbus-emacs-slash-uu-introspect ()
  "DBus: Pfad /uu mit Interface org.emacs.ubuntuusers.+Methoden durchsuchbar machen."
  '("<!DOCTYPE node PUBLIC '-//freedesktop//DTD D-BUS Object Introspection 1.0//EN' 'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
<node>
  <interface name='org.freedesktop.DBus.Introspectable'>
    <method name='Introspect'>
      <arg name='xml_data' type='s' direction='out'/>
    </method>
  </interface>
  <interface name='org.emacs.ubuntuusers'>
    <method name='getUrl'>
      <arg name='' direction='out' type='s' />
    </method>
    <method name='setUrl'>
      <arg name='link' direction='in' type='s' />
    </method>
  </interface>
</node>"))

(dbus-register-method
  :session
  "org.emacs.ubuntuusers"
  "/uu"
  dbus-interface-introspectable
  "Introspect"
  'dbus-emacs-slash-uu-introspect)

(provide 'uu-dbus)
;;; uu-dbus.el ends here

Beispiel testen:

qdbus org.emacs.uu /UbuntuUsers org.emacs.uu.setUrl https://ubuntuusers.de
qdbus org.emacs.uu /UbuntuUsers org.emacs.uu.showUrl 

intern

extern