[[Vorlage(Getestet, focal, bionic)]]

{{{#!vorlage Wissen
[:Emacs: Hauptartikel zu Emacs]
[:Terminal: Ein Terminal öffnen]
[:Editor: Einen Editor bedienen]
}}}
[[Inhaltsverzeichnis(2)]]

[[Bild(Emacs/emacs_icon.png, 48, align=left)]]
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).
{{{#!code lisp
(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 [[Vorlage(Tasten, ALT+up)]]/[[Vorlage(Tasten, ALT+down)]] hoch/runter zu verschieben.

{{{#!code lisp
(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] {en}.


== DBUS in Emacs ==

Emacs bietet keine native Unterstützung des [:D-Bus: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.

{{{#!code lisp
;;; 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: {{{#!vorlage befehl
qdbus org.emacs.uu /UbuntuUsers org.emacs.uu.setUrl https://ubuntuusers.de
qdbus org.emacs.uu /UbuntuUsers org.emacs.uu.showUrl
}}}


= Links =
== intern ==
 * [:Emacs:] - Hauptartikel
 * [:Emacs/Erweiterungen:]
 * [:Skripte:] {Übersicht} -  Übersichtsartikel
== extern ==
 * [https://www.gnu.org/software/emacs/manual/html_mono/dbus.html Emacs - DBUS auf gnu.org] {en}
 * [https://www.gnu.org/software/emacs/manual/eintr.html Emacs Lisp auf gnu.org] {en}
 * [https://www.gnu.org/software/emacs/manual/html_node/elisp/Library-Headers.html Library Headers auf gnu.org] {en}

# tag: Editor, Emacs