Update emacs config
authorJoerg Jaspert <joerg@debian.org>
Thu, 21 Sep 2017 09:10:27 +0000 (11:10 +0200)
committerJoerg Jaspert <joerg@debian.org>
Thu, 21 Sep 2017 09:10:27 +0000 (11:10 +0200)
.emacs.d/config/.gitignore [deleted file]
.emacs.d/config/customized.el
.emacs.d/config/emacs.org
.emacs.d/config/gkar.org [deleted file]
.emacs.d/config/gnus.org [deleted file]
.emacs.d/config/linwsa03.org [deleted file]
.emacs.d/elisp/local/mic-paren.el [deleted file]

diff --git a/.emacs.d/config/.gitignore b/.emacs.d/config/.gitignore
deleted file mode 100644 (file)
index 2bf8461..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-emacs.el
-gkar.ganneff.de.el
-emacs-config-tinyperl-emacs-perl.el
index b5c5538..79de8fb 100644 (file)
      ("personal unread" . "tag:inbox AND (to:joerg@ganneff.de OR to:joerg@debian.org OR to:joerg@debconf.org)"))))
  '(package-selected-packages
    (quote
-    (bbdb-hooks notmuch validate use-package paradox keyfreq)))
+    (eyebrowse arview notmuch validate use-package paradox keyfreq)))
  '(randomsig-files (quote randomsig-search-sigfiles))
  '(randomsig-static-string "bye, Joerg
 ")
index 8690f9f..2dbcca9 100644 (file)
@@ -575,8 +575,11 @@ make up our own.
 #+BEGIN_SRC emacs-lisp
 (bind-key "C-c C-s" 'sort-lines)
 #+END_SRC
-
-
+*** Bind mark-sexp to an easier to reach combo
+[2017-09-01 Fri 09:14]
+#+BEGIN_SRC emacs-lisp
+(bind-key "C-c C-q" 'mark-sexp)
+#+END_SRC
 
 ** Miscellaneous stuff
 *** Isearch related
@@ -1204,10 +1207,14 @@ information in the mode-line in various search modes.
     (validate-setq anzu-search-threshold 1000)
     (set-face-attribute 'anzu-mode-line nil :foreground "yellow" :weight 'bold)))
 #+END_SRC
-** ansible
+** CANCELLED ansible                                             :CANCELLED:
+CLOSED: [2017-08-27 So 15:16]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-27 So 15:16]
+:END:
 [2017-08-26 Sa 14:24]
 Something for that horrible tool
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp :tangle no
 (use-package ansible
   :ensure t)
 #+END_SRC
@@ -1650,54 +1657,6 @@ CLOSED: [2017-08-26 Sa 14:41]
                        (member method '("su" "sudo"))))))))))
 
  #+END_SRC
-** bbdb
- [2017-06-27 Di 23:10]
- #+BEGIN_SRC emacs-lisp
- (use-package bbdb
-   :ensure t
-   :commands (bbdb)
-   :config
-   (progn
-;     (use-package bbdb-hooks)
-     (use-package bbdb-message)
-     (use-package bbdb-gnus)
-     (use-package bbdb-com)
-
-     (add-hook 'gnus-startup-hook 'bbdb-insinuate-gnus)
-     ;(add-hook 'message-setup-hook 'bbdb-define-all-aliases)
-
-     (setq bbdb-add-mails t)
-     (setq bbdb-canonicalize-redundant-mails t)
-     (setq bbdb-complete-mail-allow-cycling t)
-     (setq bbdb-complete-name-allow-cycling t)
-     (setq bbdb-default-area-code 661)
-     (setq bbdb-dial-local-prefix "0")
-     (setq bbdb-file-coding-system 'utf-8)
-     (setq bbdb-hashtable-size 104729)
-     (setq bbdb-ignore-messages-alist '(("To" . "\\(\\(\\(joerg\\)\\(\\.jaspert\\)?\\)\\|root\\|gnus\\)@\\(debian\\.org\\|ganneff\\.de\\|debconf\\.org\\|spi-inc\\.org\\)")))
-     (setq bbdb-new-mails-primary t)
-     (setq bbdb-notice-auto-save-file t)
-     (setq bbdb-notice-mail-hook 'bbdb-auto-notes-hook)
-     (setq bbdb-phone-style nil)
-     (setq bbdb-pop-up-window-size 6)
-     (setq bbdb-user-mail-names "\\(\\(\\(joerg\\)\\(\\.jaspert\\)?\\)\\|root\\|gnus\\)@\\(debian\\.org\\|ganneff\\.de\\|debconf\\.org\\|spi-inc\\.org\\)")
-     (setq bbdb/gnus-summary-known-poster-mark "+")
-     (setq bbdb/gnus-summary-mark-known-posters t)
-     (setq bbdb/gnus-summary-prefer-real-names t)
-     (setq bbdb/news-auto-create-p 'bbdb-ignore-most-messages-hook)
-     (setq bbdb-auto-notes-rules
-           '(("user-agent" (".*" interface 0))
-             ("Organization"  (".*" company 0))
-             ("x-mailer" (".*" interface 0))
-             ("x-newsreader" (".*" interface 0))
-             ("X-URL"         (".*" url 0))
-             ("newsgroups" ("\\\\([^,]*\\\\),?" posted-to "\\\\1" t))
-             ("xref" ("\\\\b[^ ]+:[0-9]+.*" seen-in 0))))
-     (put 'seen-in 'field-separator "; ")
-     (put 'interface 'field-seperator "; ")
-     )
-   )
- #+END_SRC
 ** CANCELLED browse-kill-ring                                    :CANCELLED:
 CLOSED: [2017-08-26 Sat 14:46]
 :LOGBOOK:
@@ -2578,9 +2537,9 @@ Eww - Emacs browser (needs emacs 24.4 or higher)
    :bind ("C-M-+" . er/expand-region)
    :commands er/expand-region)
  #+END_SRC
-** CANCELLED eyebrowse                                           :CANCELLED:
-CLOSED: [2017-08-26 Sat 15:06]
+** NEXT eyebrowse
 :LOGBOOK:
+- State "NEXT"       from "CANCELLED"  [2017-09-16 Sat 23:06]
 - State "CANCELLED"  from              [2017-08-26 Sat 15:06]
 :END:
  [2017-04-29 Sat 13:18]
@@ -2589,11 +2548,14 @@ CLOSED: [2017-08-26 Sat 15:06]
  managers like i3wm with their workspaces do. It displays their current
  state in the modeline by default. The behaviour is modeled after
  ranger, a file manager written in Python.
- #+BEGIN_SRC emacs-lisp :tangle no
+ #+BEGIN_SRC emacs-lisp
  (use-package eyebrowse
    :ensure t
    :config
    (progn
+     (validate-setq eyebrowse-mode-line-separator " "
+                    eyebrowse-new-workspace t)
+     (eyebrowse-setup-opinionated-keys)
      (eyebrowse-mode t)
      ))
  #+END_SRC
@@ -2733,14 +2695,587 @@ CLOSED: [2017-08-26 Sat 15:07]
    :ensure git-timemachine
    :commands git-timemachine)
  #+END_SRC
-** gnus
+** Mail handling
+*** bbdb
+ [2017-06-27 Di 23:10]
+ #+BEGIN_SRC emacs-lisp
+ (use-package bbdb
+   :ensure t
+   :commands (bbdb bbdb-insinuate-gnus bbdb-initialize)
+   :config
+   (progn
+     (use-package bbdb-message)
+     (use-package bbdb-gnus)
+     (use-package bbdb-com)
+
+     (add-hook 'gnus-startup-hook 'bbdb-insinuate-gnus)
+
+     (setq bbdb-add-mails t)
+     (setq bbdb-canonicalize-redundant-mails t)
+     (setq bbdb-complete-mail-allow-cycling t)
+     (setq bbdb-complete-name-allow-cycling t)
+     (setq bbdb-completion-type 'primary-or-name)
+     (setq bbdb-dwim-net-address-allow-redundancy t)
+     (setq bbdb-default-area-code 661)
+     (setq bbdb-dial-local-prefix "0")
+     (setq bbdb-file-coding-system 'utf-8)
+     (setq bbdb-hashtable-size 104729)
+     (setq bbdb-ignore-messages-alist '(("To" . "\\(\\(\\(joerg\\)\\(\\.jaspert\\)?\\)\\|root\\|gnus|gf\\)@\\(debian\\.org\\|ganneff\\.de\\|debconf\\.org\\|spi-inc\\.org\\|nsb-software.de\\)")))
+     (setq bbdb-new-mails-primary t)
+     (setq bbdb-notice-auto-save-file t)
+     (setq bbdb-notice-mail-hook 'bbdb-auto-notes-hook)
+     (setq bbdb-phone-style nil)
+     (setq bbdb-pop-up-window-size 6)
+     (setq bbdb-user-mail-names "\\(\\(\\(joerg\\)\\(\\.jaspert\\)?\\)\\|root\\|gnus\\|gf\\)@\\(debian\\.org\\|ganneff\\.de\\|debconf\\.org\\|spi-inc\\.org\\|nsb-software.de\\)")
+     (setq bbdb/gnus-summary-known-poster-mark "+")
+     (setq bbdb/gnus-summary-mark-known-posters t)
+     (setq bbdb/gnus-summary-prefer-real-names t)
+     (setq bbdb/news-auto-create-p 'bbdb-ignore-most-messages-hook)
+     (setq bbdb-auto-notes-rules
+           '(("user-agent" (".*" interface 0))
+             ("Organization"  (".*" company 0))
+             ("x-mailer" (".*" interface 0))
+             ("x-newsreader" (".*" interface 0))
+             ("X-URL"         (".*" url 0))
+             ("newsgroups" ("\\\\([^,]*\\\\),?" posted-to "\\\\1" t))
+             ("xref" ("\\\\b[^ ]+:[0-9]+.*" seen-in 0))))
+     (put 'seen-in 'field-separator "; ")
+     (put 'interface 'field-seperator "; ")
+     )
+   )
+ #+END_SRC
+
+*** gnus
  Most of my gnus config is in an own file, [[file:gnus.org][gnus.org]], here I only have
  what I want every emacs to know.
  #+BEGIN_SRC emacs-lisp
-   (bind-key "C-c g" 'gnus) ; Start gnus with M-n
-   (after 'gnus
-     (jj-init-theme)
-   )
+  (use-package gnus
+    :commands (gnus)
+    :bind (("C-c g" . gnus)
+           :map gnus-summary-mode-map
+           ("<f6>" . jj-forward-spam)
+           ("C-<f1>" . jj-move-mail-spambox)
+           ("C-<f2>" . jj-copy-mail-hambox)
+           ("C-c x" . gnus-scum-expunge)
+           :map gnus-group-mode-map
+           ("GG" . notmuch-search)
+           :map notmuch-show-mode-map
+           ("C-c C-c" . lld-notmuch-goto-message-in-gnus)
+           )
+    :init
+    (progn
+      (after 'gnus
+        (jj-init-theme))
+      )
+    :config
+    (progn
+      (bbdb-initialize)
+      ; When emacs exits, gnus does too, no need to ask me
+      (defun exit-gnus-on-exit ()
+        (if (and (fboundp 'gnus-group-exit)
+                 (gnus-alive-p))
+            (with-current-buffer (get-buffer "*Group*")
+              (gnus-group-exit))))
+      (add-hook 'kill-emacs-hook 'exit-gnus-on-exit)
+    
+      ;; prettier summary buffers
+      
+        (setq gnus-sum-thread-tree-indent " ") ;; " "
+        (setq gnus-sum-thread-tree-root "\u229e ") ;; "⊞ "
+        (setq gnus-sum-thread-tree-false-root "\u22a1 ") ;; "⊡ "
+        (setq gnus-sum-thread-tree-single-indent "  ") ;; " "
+        (setq gnus-sum-thread-tree-vertical " \u2502") ;; " │"
+        (setq gnus-sum-thread-tree-leaf-with-other " \u251c\u2500 ") ;; " ├─ "
+        (setq gnus-sum-thread-tree-single-leaf " \u2570\u2500 ") ;; " ╰─ "
+
+      (use-package gnus-cite
+        :config
+        (progn
+          (defface dwa/mail-citation '((((class color)
+                                         (background dark))
+                                        (:background "#383838"))
+                                       (((class color)
+                                         (background light))
+                                        (:background "#efefef")))
+            "Mail citation base face.")
+          (loop for x in gnus-cite-face-list do
+                (set-face-attribute x nil ':inherit 'dwa/mail-citation))))
+
+      (use-package time-date
+        :config
+        (setq message-citation-line-function 'september-citation-line))
+
+      (setq message-subscribed-address-functions
+            '(gnus-find-subscribed-addresses))
+
+      (if (string-match system-name "delenn.ganneff.de")
+          (progn
+            (setq imap-ssl-program "openssl s_client -no_ssl2 -no_ssl3 -tls1 -connect %s:%p")
+
+            (use-package notmuch
+              :config
+              (setq notmuch-search-oldest-first nil))
+            (use-package org-gnus)
+          
+            (setq gnus-secondary-select-methods
+                  '((nnml "")
+
+                    (nnimap "nsb"
+                            (nnimap-address "localhost")
+                            (nnimap-user "nsb@auth")
+                            (nnimap-nov-is-evil t)
+                            (nnimap-stream network)
+                            (nnir-search-engine notmuch)
+                            )
+                    (nnimap "gmail"
+                            (nnimap-address "localhost")
+                            (nnimap-user "gmail@auth")
+                            (nnimap-stream network)
+                            (nnimap-nov-is-evil t)
+                            (nnir-search-engine notmuch)
+                            )
+                    ))
+            ;;** Von wo holt Gnus News
+            (setq gnus-select-method '(nnimap "ganneff"
+                                              (nnimap-address "localhost")
+                                              (nnimap-user "ganneff@auth")
+                                              (nnimap-stream network)
+                                              (nnimap-nov-is-evil t)
+                                              (nnir-search-engine notmuch)
+                                              ))
+            ;;** Kopien aller Mails/News speichern
+            (setq gnus-message-archive-group
+                  '((if (message-news-p)
+                        "nnfolder+archive:Sentnews"
+                      "nnimap+ganneff:Sentmail")))
+            )
+        )
+      (setq nnir-mail-backend (nth 1 gnus-secondary-select-methods))
+
+      ;;** dont always read the active file.
+      (setq gnus-read-active-file 'some)
+
+      ;;** nnimap nich cachen, ebenso nnml
+      (setq gnus-uncacheable-groups "^\\(nnml\\|nnimap\\)")
+
+      ;;** Bei langsamer Anbindung dies auf t setzen
+      (setq gnus-asynchronous t)
+
+      ;;** Mein Gnus soll regelmaessig nach neuen Mails/News schauen.
+      (gnus-demon-add-handler 'us-get-only-mail 20 10)
+      (gnus-demon-init)
+
+      ;; Set the default value of `mm-discouraged-alternatives'.
+      (eval-after-load "gnus-sum"
+        '(add-to-list
+          'gnus-newsgroup-variables
+          '(mm-discouraged-alternatives
+            . '("text/html" "text/richtext"))))
+
+      ;; Display `text/html' parts in `nnrss' groups only.
+      (add-to-list
+       'gnus-parameters
+       '("\\`nnrss:" (mm-discouraged-alternatives nil)))
+
+      ;;** Message Size Limit
+      (setq message-send-mail-partially-limit 5000000)
+
+      (setq message-send-mail-function 'message-send-mail-with-sendmail)
+      (setq smtpmail-default-smtp-server "localhost")
+      (setq message-sendmail-envelope-from 'header)
+
+      ;;** Keinen Sender Header zufuegen !
+      (add-to-list 'message-syntax-checks '(sender . disabled))
+
+      ;;** Auto-Subscribe
+      (setq gnus-auto-subscribed-groups
+            (concat gnus-auto-subscribed-groups
+                    "\\|^nnimap*"))
+
+      ;;** Kaputte Subjects Aw: Statt Re: fixen:
+      (setq message-subject-re-regexp "^[     ]*\\([RrAaFf][EeWw]:[   ]*\\)*[         ]*")
+
+      ;;** Immer Gruppen nach Topics anzeigen
+      (add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
+
+      ;;** Summary Anzeige umdefinieren.
+      (setq gnus-summary-line-format "%U%R%z (%4k) %uy%* %B%(%[ %-22,22f %]%) %s\n")
+      (setq gnus-summary-gather-subject-limit 'fuzzy)
+
+      ;;** Und die Gruppenanzeige will ich auch anders. Will sehen wann ich zuletzt da reingesehen hab.
+      (setq gnus-group-line-format
+            "%M%S%p%P %4ux/%4i/%6R: %(%-55,55ug%3O%)%l <%2,2~(cut 6)d.%2,2~(cut 4)d.%2,2~(cut 2)d>\n")
+
+      ;;** Different topic lines
+      (setq gnus-topic-line-format "%i[ %u&topic-line; ] %v\n")
+
+      ;;** Für die umdefinierte Gruppenanzeige muss Gnus aber einen Timestamp in der Gruppe speichern.
+      (add-hook 'gnus-select-group-hook 'gnus-group-set-timestamp)
+
+      ;;** Ich will manchmal den Empfänger statt des Absenders sehen
+      (setq gnus-extra-headers '(To Newsgroups Newsgroup Cc))
+      (setq nnmail-extra-headers gnus-extra-headers)
+      (setq gnus-ignored-from-addresses '("\\(\\(\\(joerg\\)\\(\\.jaspert\\)?\\)\\|root\\|gf\\)@\\(debian\\.org\\|ganneff\\.de\\|debconf\\.org\\|spi-inc\\.org\\|nsb-software\\.de\\|dlh\\.de\\)"))
+
+      ;; Don't send to these address in wide reply.
+      (setq message-dont-reply-to-names  (append '("notifications@github\\.com"
+                                                   ".*@noreply\\.github\\.com"
+                                                   )
+                                          gnus-ignored-from-addresses))
+
+      ;;** Threads um 2 Zeichen einruecken.
+      (setq gnus-thread-indent-level 1)
+
+      ;;** Posting Styles. Nettes Feature
+      (setq gnus-posting-styles
+            '(
+              (".*"
+               (from "Joerg Jaspert <joerg@ganneff.de>")) ; Globale Einstellung
+              ("Allgemein.Sabrina"
+               (from "Joerg (悠軻) Jaspert <joerg@debian.org>"))
+              ("Debian.Private"
+               (from "Joerg Jaspert <joerg@debian.org>")
+               (signature-file "~/.signature.private"))
+              ("dlh"
+               (from "Joerg Jaspert <joerg@nsb-software.de>")
+               (signature-file "~/.signature.nsb")
+               (organization "NSB Nguyen Softwareentwicklung & beratung GmbH")
+               (gcc "nnimap+nsb:Sent"))
+              ("nnimap\\+nsb:.*"
+               (from "Joerg Jaspert <joerg@nsb-software.de>")
+               (signature-file "~/.signature.nsb")
+               (organization "NSB Nguyen Softwareentwicklung & beratung GmbH")
+               (gcc "nnimap+nsb:Sent"))
+              ("nnimap\\+nsb:shared.gf.*"
+               (from "Joerg Jaspert <gf@nsb-software.de>"))
+              ("Debian"
+               (from "Joerg Jaspert <joerg@debian.org>"))
+              ("Debian.AM"
+               (Gcc "nnimap+ganneff:Debian.AM"))
+              ("Debian.DAM"
+               (reply-to "Debian Account Managers <da-manager@debian.org>"))
+              ("Debconf"
+               (from "Joerg Jaspert <joerg@debconf.org>"))
+              ("Bugs"
+               (from "Joerg Jaspert <joerg@debian.org>"))
+              ("SPI"
+               (from "Joerg Jaspert <joerg@debian.org>"))
+              ))
+
+
+      ;;** Ich will die Header in den Nachrichten sehen die ich schreibe.
+      (setq message-generate-headers-first t)
+
+      ;;** Und immer schoen Header zufuegen.
+      (setq message-default-headers (concat "Organization: Ganneff\n"))
+      (add-hook 'message-send-hook 'my-message-add-content)
+
+      ;;** Und Courtesy-Mails wollen wir schon mal grad gar nicht
+      (add-hook 'message-header-setup-hook 'my-message-header-setup-hook)
+
+      ;;** Antworten auf meine Nachrichten hervorheben, hochscoren
+      (add-hook 'message-sent-hook 'gnus-score-followup-article)
+      (add-hook 'message-sent-hook 'gnus-score-followup-thread)
+
+      ;;** In Forwards bitte das Subject aufraeumen
+      (setq message-wash-forwarded-subjects t)
+
+      ;;** Zitieren ohne Sig. Ausser Idioten sind zu doof die korrekt abzutrennen.
+      (setq message-cite-function 'message-cite-original-without-signature)
+
+      ;;** Grosse Newsgroups. Gnus fragt da laestigerweise immer nach.
+      ;;** Aber da ich viele grosse Gruppen und nen schnellen Rechner habe
+      ;;** soll der erst recht spaet nachfragen. Erst wenns wirklich fies wird. 
+      (setq gnus-large-newsgroup "15000")
+
+      ;;** Beim Betreten einer Gruppe keinen Artikel auswählen. Gegen Adaptive Scoring iss des !
+      (setq gnus-auto-select-first nil)
+
+      ;;** Wenn ich in einer Gruppe fertig bin soll Gnus nich fragen ob ich in
+      ;;** die naechste will. Es soll einfach tun.
+      (setq gnus-auto-select-next 'quietly)
+
+      ;;** Hervorhebungen (Unterstrichen und Fett bei "_X_" und "*X*")
+      (add-hook 'gnus-article-display-hook 'gnus-article-emphasize t)
+
+      ;;** Gnus Visible Headers
+      (setq gnus-visible-headers
+            '("^From:"
+              "^Newsgroups:"
+              "^Subject:"
+              "^Date:"
+              "^Followup-To:"
+              "^Reply-To:"
+              "^Organization:"
+              "^Summary:"
+              "^Keywords:"
+              "^To:"
+              "^[BGF]?Cc:"
+              "^Posted-To:"
+              "^Mail-Copies-To:"
+              "^Apparently-To:"
+              "^X-Gnus-Warning:"
+              "^Resent-From:"
+              "^Xref:"
+              "^X-Spam-Status:"
+              "^X-Sent:"
+              "^X-Mailer:"
+              "^X-Newsreader:"
+              "^X-User-Agent:"
+              "^User-Agent:"))
+
+      ;;; Order of headers
+      (setq gnus-sorted-header-list '("^From:"
+                                      "^Subject:"
+                                      "^Summary:"
+                                      "^Keywords:"
+                                      "^Newsgroups:"
+                                      "^Followup-To:"
+                                      "^To:"
+                                      "^Cc:"
+                                      "^Date:"
+                                      "^Organization:"
+                                      "^User-Agent:"
+                                      "^X-Mailer:"
+                                      "^X-Newsreader:"))
+
+      ;;** Automagischen Zeilenumbruch bei News/Mailangabe nach 72 Zeichen. SO wies sein soll.
+      (add-hook 'message-mode-hook
+                (lambda ()
+                  (setq fill-column 72)
+                  (turn-on-auto-fill)
+                  (epa-mail-mode 1)
+                  ))
+
+      ;;** Save gnus score files. Ziemlich doof wenn nicht
+      (setq gnus-save-score t)
+
+      ;;** Score Einstellungen. Welches Global File und woher die Scores holen.
+      (setq gnus-global-score-files '("~/News/all.SCORE"))
+      (setq gnus-score-find-score-files-function '(gnus-score-find-bnews bbdb/gnus-score))
+
+      ;;** Adaptives Scoring
+      (setq gnus-use-adaptive-scoring t)
+      (defvar gnus-default-adaptive-score-alist
+        '((gnus-unread-mark)
+          (gnus-ticked-mark (from 5))
+          (gnus-dormant-mark (from 6))
+          (gnus-del-mark (subject -5))
+          (gnus-read-mark (from 5) (subject 3))
+          (gnus-expirable-mark (from -2) (subject -2))
+          (gnus-killed-mark (from -2) (subject -4))
+          (gnus-kill-file-mark)
+          (gnus-ancient-mark)
+          (gnus-low-score-mark)
+          (gnus-catchup-mark (subject -3))
+          ))
+
+      ;;** Damit ich nicht mit Megabytegrossen Scorefiles rummachen muss, muss bei Adaptive-Scoring
+      ;;** der Kram automagisch gelöscht werden. Sonst hats keinen Sinn ! 
+      (setq gnus-decay-scores t)
+
+      ;;** Artikel mit weniger Score werden nicht angezeigt
+      (setq gnus-summary-expunge-below -1000)
+
+      ;;** work around unimplemented handling of multiple similar attachments
+      ;;** (recommended by ShengHuo Zhu Fri 20 Jul 2001 13:14)
+      (setq gnus-mime-display-multipart-related-as-mixed t)
+
+      ;;** Bilderchen direkt anzeigen.
+      (setq mm-inline-large-images t)
+
+      ;;** ueberfluessige Leerzeilen loeschen
+      (setq gnus-treat-strip-trailing-blank-lines t)
+      (setq gnus-treat-strip-leading-blank-lines t)
+
+      ;;** Falsch gebaute Attachments ? Nich mit mir. Nuja, UUE wech. Was solls. Will ich eh nich haben
+      (setq mm-uu-configure-list '((uu . disabled)))
+
+      (use-package message-utils
+        :commands (message-mark-inserted-region message-mark-insert-file message-strip-subject-was message-change-subject message-xpost-fup2 message-add-archive-header message-reduce-to-to-cc)
+        :bind ((:map message-mode-map
+                     ("C-c m" . message-mark-inserted-region)
+                     ("C-c f" . message-mark-insert-file)
+                     ("C-c x" . message-xpost-fup2)
+                     ("C-c s" . message-change-subject)
+                     ("C-c a" . message-add-archive-header)
+                     ("C-c t" . message-reduce-to-to-cc)
+                     )))
+      (add-hook 'message-header-setup-hook 'message-strip-subject-was)
+      (add-hook 'message-setup-hook 'message-utils-setup)
+
+      ;;** Nun das Paket um einfachst Fussnoten eingeben zu können.
+      (use-package footnote
+        :commands (footnote-mode)
+        :config
+        (setq footnote-body-tag-spacing 1
+              footnote-spaced-footnotes nil
+              footnote-style 'numeric-latin
+              footnote-section-tag "Fussnoten: "))
+      (add-hook 'message-mode-hook 'footnote-mode)
+
+      ;;** Meine Smileys mag ich gelb
+      (use-package smiley
+        :init
+        (progn
+          (setq gnus-treat-display-smileys t)
+          (setq smiley-flesh-color "Yellow")
+          (setq smiley-data-directory "~/emacs/etc/smilies/")))
+
+      (use-package mml-sec
+        :commands (sign-or-crypt)
+        :config
+        (progn
+          (setq mm-verify-option 'always)
+          ;; Keine extra Signatur erzeugen.
+          (mml-signencrypt-style "pgpmime" 'combined)
+          (setq mml-secure-openpgp-sign-with-sender 't)
+          (setq gpg-unabbrev-trust-alist
+                '(("TRUST_UNDEFINED" . trust-undefined)
+                  ("TRUST_NEVER"     . trust-none)
+                  ("TRUST_MARGINAL"  . trust-marginal)
+                  ("TRUST_FULLY"     . trust-full)
+                  ("TRUST_ULTIMATE"  . trust-ultimate)))
+          ))
+      (add-hook 'gnus-message-setup-hook 'sign-or-crypt)
+
+      ;;** utf-8, coding systems
+      (setq mm-coding-system-priorities
+            '(iso-latin-1 iso-latin-9 utf-8))
+
+      (unify-8859-on-encoding-mode 1)
+      (unify-8859-on-decoding-mode 1)
+      (prefer-coding-system 'latin-9)
+      (prefer-coding-system 'latin-1)
+      (prefer-coding-system 'utf-8)
+
+      ;;** org-mode
+      (add-hook 'message-mode-hook 'orgstruct++-mode 'append)
+      (add-hook 'message-mode-hook 'orgtbl-mode 'append)
+
+      (use-package message-x
+        :ensure t)
+
+      (use-package randomsig
+        :bind ((:map message-mode-map
+                ("C-c s" . randomsig-replace-sig)
+                ("C-c S" . randomsig-select-sig)
+                :map gnus-summary-save-map
+                ("-" 'gnus/randomsig-summary-read-sig)
+                ))
+        :config
+        (progn
+          (setq randomsig-dir "/home/joerg/sigs")
+          (setq message-signature 'randomsig-signature)))
+    
+      (use-package sieve
+        :mode ("\\.siv\\'" . sieve-mode)
+        :config
+        (require 'gnus-sieve)
+      )
+
+      (setq gnus-use-correct-string-widths nil)
+
+      (setq nnrss-wash-html-in-text-plain-parts t)
+      (setq canlock-password "canlockjjaspert")
+      (setq canlock-sha1-function (quote canlock-sha1-with-openssl))
+      (setq canlock-sha1-function-for-verify (quote canlock-sha1-with-openssl))
+      (setq gnus-agent nil)
+      (setq gnus-article-banner-alist (quote ((banner-perl . "^--.?
+  .+
+  .+
+  .+
+  .+
+  .+
+  Die Nutzung von.+html") (banner-debian . "^--.?
+  To UNSUBSCRIBE.*
+  .*@lists.debian.org$") (banner-debian-de . "^--.?
+  -+
+  Um sich aus der Liste auszutragen.+
+  .+
+  .+
+  .+
+  -+$\\|[0-9]+ eingetragene Mitglieder in dieser Liste.") (banner-sourceforge . "^_+
+  .+@lists.sourceforge.net
+  http://lists.sourceforge.net.+
+  .+
+  $") (banner-amavis . "^_+
+  .+AMaViS-.*
+  .*
+  .*
+  .*amavis-faq.php3$"))))
+      (setq gnus-article-sort-functions (quote (gnus-article-sort-by-number gnus-article-sort-by-score gnus-article-sort-by-date)))
+      (setq gnus-article-x-face-command (quote gnus-display-x-face-in-from))
+      (setq gnus-boring-article-headers (quote (empty newsgroups followup-to reply-to)))
+      (setq gnus-build-sparse-threads nil)
+      (setq gnus-buttonized-mime-types '("multipart/signed"))
+      (setq
+       ;; collaps long citations
+       ;; (w/ `gnus-treat-hide-citation t' or `W W c'):
+       gnus-cited-closed-text-button-line-format
+       "%(%{... [ %n lines (%l chars) of citation hidden, click here to expand ] ...%}%)\n"
+       gnus-cited-lines-visible '(3 . 6) ; (top . bottom)
+       ;; [...]
+       gnus-treat-hide-citation t)
+
+      (setq gnus-default-article-saver (quote gnus-summary-save-in-file))
+                                          ; (setq gnus-default-charset (quote iso-8859-1))
+      (setq gnus-generate-tree-function (quote gnus-generate-vertical-tree))
+      (setq gnus-group-charset-alist (quote (("\\(^\\|:\\)hk\\>\\|\\(^\\|:\\)tw\\>\\|\\<big5\\>" cn-big5) ("\\(^\\|:\\)cn\\>\\|\\<chinese\\>" cn-gb-2312) ("\\(^\\|:\\)fj\\>\\|\\(^\\|:\\)japan\\>" iso-2022-jp-2) ("\\(^\\|:\\)tnn\\>\\|\\(^\\|:\\)pin\\>\\|\\(^\\|:\\)sci.lang.japan" iso-2022-7bit) ("\\(^\\|:\\)relcom\\>" koi8-r) ("\\(^\\|:\\)fido7\\>" koi8-r) ("\\(^\\|:\\)\\(cz\\|hun\\|pl\\|sk\\|hr\\)\\>" iso-8859-2) ("\\(^\\|:\\)israel\\>" iso-8859-1) ("\\(^\\|:\\)han\\>" euc-kr) ("\\(^\\|:\\)alt.chinese.text.big5\\>" chinese-big5) ("\\(^\\|:\\)soc.culture.vietnamese\\>" vietnamese-viqr) ("\\(^\\|:\\)\\(comp\\|rec\\|alt\\|sci\\|soc\\|news\\|gnu\\|bofh\\)\\>" iso-8859-1))))
+      (setq gnus-group-name-charset-group-alist (quote ((".*" . iso-8859-1))))
+      (setq gnus-group-name-charset-method-alist (quote ((nntp . iso-8859-1))))
+      (setq gnus-group-posting-charset-alist (quote (("^\\(no\\|fr\\)\\.[^,]*\\(,[
+  ]*\\(no\\|fr\\)\\.[^,]*\\)*$" iso-8859-1 (iso-8859-1)) ("^\\(fido7\\|relcom\\)\\.[^,]*\\(,[
+  ]*\\(fido7\\|relcom\\)\\.[^,]*\\)*$" koi8-r (koi8-r)) (message-this-is-mail nil nil) (message-this-is-news nil t))))(setq gnus-gcc-mark-as-read t)
+      (setq gnus-list-identifiers "\\[\\(a-zA-Z\\)+\\]")
+      (setq gnus-message-replyencrypt nil)
+      (setq gnus-message-replysign nil)
+      (setq gnus-novice-user nil)
+      (setq gnus-refer-thread-limit t)
+      (setq gnus-save-duplicate-list t)
+      (setq gnus-simplify-ignored-prefixes nil)
+      (setq gnus-summary-exit-hook (quote (gnus-summary-bubble-group)))
+      (setq gnus-summary-mode-line-format "Gnus: %g [%A] %Z - killed: %E")
+      (setq gnus-suppress-duplicates t)
+      (setq gnus-thread-indent-level 2)
+      (setq gnus-thread-sort-functions (quote (gnus-thread-sort-by-number gnus-thread-sort-by-score gnus-thread-sort-by-date)))
+      (setq gnus-treat-capitalize-sentences nil)
+      (setq gnus-treat-date-local (quote head))
+      (setq gnus-treat-display-picons nil)
+      (setq gnus-treat-display-xface (quote head))
+      (setq gnus-treat-fill-article nil)
+      (setq gnus-treat-fill-long-lines nil)
+      (setq gnus-treat-from-picon (quote head))
+      (setq gnus-treat-mail-picon (quote head))
+      (setq gnus-treat-newsgroups-picon (quote head))
+      (setq gnus-treat-strip-pgp (quote head))
+      (setq gnus-treat-unsplit-urls t)
+      (setq gnus-treat-x-pgp-sig (quote head))
+      (setq gnus-use-picons t)
+      (setq gnus-uu-post-encode-method (quote gnus-uu-post-encode-mime))
+      (setq message-archive-note "X-No-Archive: Yes")
+                                          ;(setq message-default-charset (quote iso-8859-1))
+      (setq message-make-forward-subject-function (quote message-forward-subject-fwd))
+      (setq message-max-buffers 5)
+      (setq message-send-hook (quote (my-message-add-content)))
+      (setq message-subscribed-regexps (quote (".*@lists.*" ".*@postfix.org" ".*@nongnu.org")))
+      (setq message-use-followup-to (quote use))
+      (setq mm-automatic-display (quote ("text/plain" "text/enriched" "text/richtext" "image/jpeg" "text/x-vcard" "image/pjepg" "image/.*" "message/delivery-status" "multipart/.*" "message/rfc822" "text/x-patch" "application/pgp-signature" "application/emacs-lisp" "application/x-pkcs7-signature" "application/pkcs7-signature" "application/x-pkcs7-mime" "application/pkcs7-mime" "application/pgp")))
+      (setq mm-body-charset-encoding-alist (quote ((iso-2022-jp . 7bit) (iso-2022-jp-2 . 7bit) (iso-8859-1 . 8bit) (iso-8859-15 . 8bit))))
+      (setq mm-decrypt-option (quote known))
+      (setq mm-inlined-types (quote ("image/jpeg" "image/.*" "text/.*" "message/delivery-status" "message/rfc822" "message/partial" "message/external-body" "application/emacs-lisp" "application/x-emacs-lisp" "application/pgp-signature" "application/x-pkcs7-signature" "application/pkcs7-signature" "application/x-pkcs7-mime" "application/pkcs7-mime" "application/pgp")))
+      (setq mm-verify-option (quote always))
+      (setq nnimap-authinfo-file "~/.nnimap")
+      (setq gnus-save-newsrc-file nil)
+      (setq gnus-read-newsrc-file nil)
+      (setq gnus-always-read-dribble-file t)
+
+      (setq gnus-refer-article-method
+            '(current
+              (nnweb "refer" (nnweb-type dejanews))))
+
+      ))
+
  #+END_SRC
 ** go-mode
  [2017-03-11 Sat 20:06]
@@ -5704,12 +6239,12 @@ CLOSED: [2017-08-26 Sat 15:30]
    (progn
      (add-hook 'web-mode-hook
                (lambda ()
-                 (validate-setq web-mode-markup-indent-offset 2)
-                 (validate-setq web-mode-css-indent-offset 2)
-                 (validate-setq web-mode-code-indent-offset 2)
-                 (validate-setq web-mode-enable-css-colorization t)
-                 (validate-setq web-mode-enable-comment-keywords t)
-                 (validate-setq web-mode-enable-current-element-highlight t))))
+                 (setq web-mode-markup-indent-offset 2)
+                 (setq web-mode-css-indent-offset 2)
+                 (setq web-mode-code-indent-offset 2)
+                 (setq web-mode-enable-css-colorization t)
+                 (setq web-mode-enable-comment-keywords t)
+                 (setq web-mode-enable-current-element-highlight t))))
    :config
    (progn
      (validate-setq web-mode-enable-current-element-highlight t)
diff --git a/.emacs.d/config/gkar.org b/.emacs.d/config/gkar.org
deleted file mode 100644 (file)
index 1a7d315..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-#+STARTUP: align fold nodlcheck hidestars oddeven lognotestate
-#+TITLE:     gkar.ganneff.de.org - Ganneffs configuration, host specific file for gkar
-#+DATE:      %Y-%m-%d
-#+SETUPFILE: ~/.emacs.d/elisp/org-templates/level-0.org
-
-* Machine specific config
-** gnus
-*** Mail access
-First specific point is how I access my mail. I am using gnus, and I
-have two hosts to get data from.
-#+BEGIN_SRC emacs-lisp
-(setq gnus-secondary-select-methods
-      '((nnml "")
-        (nnimap "gkar"
-                (nnimap-address "localhost")
-                (nnimap-server-port 993)
-                (nnimap-nov-is-evil t)
-                (nnimap-stream ssl)
-                ;(nnimap-fetch-partial-articles "text/")
-                ;(nnimap-stream shell)
-                ;(nnir-search-engine imap)
-                    )
-        (nnimap "fry"
-                (nnimap-address "fry.nsb-software.de")
-                (nnimap-server-port 993)
-                (nnimap-stream ssl)
-                (nnimap-nov-is-evil t)
-                ;(nnimap-fetch-partial-articles "text/")
-                (nnir-search-engine imap)
-                )
-        ))
-#+END_SRC
-
-Together with the above I do have a =~/.authinfo= file which has lines
-of the form
-#+BEGIN_EXAMPLE
-machine HOSTNAME login USERNAME password PASSWORD port XXX
-#+END_EXAMPLE
-where you obviously replace the placeholders. You should ensure that
-this file has mode 600 to not have others grab your passwords[fn:1]. Or
-leave it away entirely, then =gnus= will ask you every time you connect.
-
-*** Search
-On my desktop I have a notmuch instance running which I use instead of
-nnir or direct imap searches. It is much better, though for that it has
-its drawbacks - like building up an own database of mail. Which is the
-reason only my desktop uses it.
-#+BEGIN_SRC emacs-lisp :tangle yes
-(require 'notmuch)
-(add-hook 'gnus-group-mode-hook 'lld-notmuch-shortcut)
-(define-key notmuch-show-mode-map (kbd "C-c C-c") 'lld-notmuch-goto-message-in-gnus)
-(setq notmuch-fcc-dirs nil)
-;(setq notmuch-fcc-dirs
-;      (quote
-;       (("da-manager@debian.org" . ".Sentmail.DAM")
-;        (".*" . ".Sentmail"))))
-(setq notmuch-saved-searches
-   (quote
-    (("inbox" . "tag:inbox")
-     ("unread" . "tag:unread")
-     ("personal unread" . "tag:inbox AND (to:joerg@ganneff.de OR to:joerg@debian.org OR to:joerg@debconf.org)"))))
-
-(defvar notmuch-hello-refresh-count 0)
-
-(defun notmuch-hello-refresh-status-message ()
-  (unless no-display
-    (let* ((new-count
-            (string-to-number
-             (car (process-lines notmuch-command "count"))))
-           (diff-count (- new-count notmuch-hello-refresh-count)))
-      (cond
-       ((= notmuch-hello-refresh-count 0)
-        (message "You have %s messages."
-                 (notmuch-hello-nice-number new-count)))
-       ((> diff-count 0)
-        (message "You have %s more messages since last refresh."
-                 (notmuch-hello-nice-number diff-count)))
-       ((< diff-count 0)
-        (message "You have %s fewer messages since last refresh."
-                 (notmuch-hello-nice-number (- diff-count)))))
-      (setq notmuch-hello-refresh-count new-count))))
-
-(add-hook 'notmuch-hello-refresh-hook 'notmuch-hello-refresh-status-message)
-#+END_SRC
-
-*** Outgoing mail copies
-When I send a mail (or post to a newsgroup) I want copies of that.
-#+BEGIN_SRC emacs-lisp
-  (setq gnus-message-archive-group
-        '((if (message-news-p)
-              "nnfolder+archive:Sentnews"
-            "nnimap+gkar:Sentmail")))
-#+END_SRC
-
-* Footnotes
-
-[fn:1] And of course have different passwords for imap than for your login.
-
-
diff --git a/.emacs.d/config/gnus.org b/.emacs.d/config/gnus.org
deleted file mode 100644 (file)
index ca24ded..0000000
+++ /dev/null
@@ -1,322 +0,0 @@
-#+STARTUP: align fold nodlcheck hidestars oddeven lognotestate
-#+TITLE:     gnus.org - Ganneffs gnus configuration
-#+DATE:      %Y-%m-%d
-#+SETUPFILE: ~/.emacs.d/elisp/org-templates/level-0.org
-
-* Preface
-:PROPERTIES:
-:ID: d7915b79-2c7b-4613-bfeb-552ded0580c0
-:END:
-Whatever. My gnus config.
-* Functions
-
-* Settings
-#+BEGIN_SRC emacs-lisp
-(setq gnus-init-file "~/.gnus")
-(require 'gnus-load)
-#+END_SRC
-
-
-* Interface
-** Language/i18n stuff
-In this day and age, we should be able to do utf8. Though whenever
-possible we should use the smallest encoding able to represent our
-stuff.
-
-#+BEGIN_SRC emacs-lisp
-(setq mm-coding-system-priorities '(iso-latin-1 iso-latin-9 utf-8))
-(unify-8859-on-encoding-mode 1)
-(unify-8859-on-decoding-mode 1)
-(prefer-coding-system 'latin-9)
-(prefer-coding-system 'latin-1)
-(prefer-coding-system 'utf-8)
-#+END_SRC
-
-** Display/Look&Feel/"Design" stuff
-*** Topic
-Topic mode lets me sort Groups into topics.
-#+BEGIN_SRC emacs-lisp
-(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
-#+END_SRC
-
-And we want a slightly different look too.
-#+BEGIN_SRC emacs-lisp
-(setq gnus-topic-line-format "%i[ %u&topic-line; ] %v\n")
-#+END_SRC
-*** Summary
-How to display summary lines
-#+BEGIN_SRC emacs-lisp
-(setq gnus-summary-line-format "%U%R%z (%4k) %uy%* %B%(%[ %-22,22f %]%) %s\n")
-#+END_SRC
-
-Use a fuzzy algorithm when comparing subjects while building up thread
-display.
-#+BEGIN_SRC emacs-lisp
-(setq gnus-summary-gather-subject-limit 'fuzzy)
-#+END_SRC
-
-Hilighting the full line of our position in the summary buffer
-#+BEGIN_SRC emacs-lisp
-(require 'highline)
-(add-hook 'gnus-summary-mode-hook 'highline-mode)
-#+END_SRC
-
-When a article (a mail) gets a score below this value, it is expunged
-without me needing to do anything. Or the need to see it.
-#+BEGIN_SRC emacs-lisp
-(setq gnus-summary-expunge-below -1000)
-#+END_SRC
-
-I can mark mail and move them to a spam/ham folder, from which my
-various spamassassins get trained later.
-#+BEGIN_SRC emacs-lisp
-(add-hook 'gnus-summary-mode-hook
-                 (lambda ()
-                       (local-set-key [C-f1] (quote jj-move-mail-spambox))))
-
-(add-hook 'gnus-summary-mode-hook
-                 (lambda ()
-                       (local-set-key [C-f2] (quote jj-copy-mail-hambox))))
-#+END_SRC
-
-**** Spam forward to some anti-spambot
-I know the following can be done with much nicer code, but meh.
-#+BEGIN_SRC emacs-lisp
-(add-hook 'gnus-summary-mode-hook
-         (lambda ()
-           (local-set-key (kbd "<f7> d") (quote jj-forward-ham-lists-debconf))))
-
-(add-hook 'gnus-summary-mode-hook
-         (lambda ()
-           (local-set-key (kbd "<f8> d") (quote jj-forward-spam-lists-debconf))))
-
-(add-hook 'gnus-summary-mode-hook
-         (lambda ()
-           (local-set-key (kbd "<f7> o") (quote jj-forward-ham-lists-oftc))))
-
-(add-hook 'gnus-summary-mode-hook
-         (lambda ()
-           (local-set-key (kbd "<f8> o") (quote jj-forward-spam-lists-oftc))))
-
-(add-hook 'gnus-summary-mode-hook
-         (lambda ()
-           (local-set-key (kbd "<f7> s") (quote jj-forward-ham-lists-spi))))
-
-(add-hook 'gnus-summary-mode-hook
-         (lambda ()
-           (local-set-key (kbd "<f8> s") (quote jj-forward-spam-lists-spi))))
-#+END_SRC
-
-
-*** Group lines
-I redefine the group-line-format to include a date when I last visited a
-group.
-#+BEGIN_SRC emacs-lisp
-(setq gnus-group-line-format
-      "%M%S%p%P %4y/%4i/%6t: %(%-45,45G%3O%)%l <%2,2~(cut 6)d.%2,2~(cut 4)d.%2,2~(cut 2)d>\n")
-#+END_SRC
-
-To have the data needed for the /%d/ format modifier we need to help it
-along and actually store this timestamp.
-#+BEGIN_SRC emacs-lisp
-(add-hook 'gnus-select-group-hook 'gnus-group-set-timestamp)
-#+END_SRC
-
-** Keyboard changes without a better place to go to
-*** Miscellaneous
-
-* Mail config
-A part of this is done in my host specific config file, as the ways of
-accessing mail differ based on the host I am using.
-
-** General
-- How do I want to connect to ssl and shell based imap servers.
-  #+BEGIN_SRC emacs-lisp
-  (setq imap-ssl-program "openssl s_client -tls1 -connect %s:%p")
-  (setq imap-shell-program "MAIL=maildir:$HOME/Maildir /usr/lib/dovecot/imap")
-  #+END_SRC
-
-- Nowadays I am not really reading news - so I point it at a nondefined
-  place.
-  #+BEGIN_SRC emacs-lisp
-    (setq gnus-select-method (list 'nnspool (system-name)))
-#+END_SRC
-
-#+BEGIN_SRC emacs-lisp
-  (require 'org-gnus )
-     
-  (setq nnir-mail-backend (nth 1 gnus-secondary-select-methods))
-#+END_SRC
-
-* Encryption/Signature related
-#+BEGIN_SRC emacs-lisp
-(require 'mml-sec)
-(setq mm-verify-option 'always)
-;; Keine extra Signatur erzeugen.
-(mml-signencrypt-style "pgpmime" 'combined)
-(add-hook 'gnus-message-setup-hook 'sign-or-crypt)
-#+END_SRC
-
-
-* Extra packages
-The following packages add features I want to use with gnus. And while a
-number of them might be usable without gnus (think bbdb), I usually do
-not use them outside, so they are here. Otherwise, they would appear in
-[[file:emacs.org][emacs.org]]…
-
-** bbdb
-Load it.
-#+BEGIN_SRC emacs-lisp
-(require 'bbdb)
-(require 'bbdb-hooks)
-(require 'bbdb-gnus)
-(require 'bbdb-com)
-(require 'bbdb-autoloads)
-#+END_SRC
-
-And ensure it is active when we need it.
-#+BEGIN_SRC emacs-lisp
-(add-hook 'gnus-startup-hook 'bbdb-insinuate-gnus)
-(add-hook 'message-setup-hook 'bbdb-define-all-aliases)
-#+END_SRC
-
-#+BEGIN_SRC emacs-lisp
-(setq bbdb-complete-name-allow-cycling t)
-(setq bbdb-hashtable-size 104729)
-#+END_SRC
-
-#+BEGIN_SRC emacs-lisp
-  (setq bbdb-notice-hook 'bbdb-auto-notes-hook)
-  (setq bbdb-pop-up-target-lines 6)
-  (setq bbdb-use-pop-up t)
-  (setq bbdb-file-coding-system 'utf-8)
-  (setq bbdb-default-area-code 661)
-  (setq bbdb-dial-local-prefix "0")
-  (setq bbdb-canonicalize-redundant-nets-p t)
-  (setq bbdb-notice-auto-save-file t)
-  (setq bbdb-north-american-phone-numbers-p nil)
-  (setq bbdb-offer-save t)
-  (setq bbdb-always-add-addresses t)
-  (setq bbdb-new-nets-always-primary t)
-  (setq bbdb-complete-name-allow-cycling t)
-  (setq bbdb-user-mail-names "\\(\\(\\(joerg\\)\\(\\.jaspert\\)?\\)\\|root\\|gnus\\)@\\(debian\\.org\\|ganneff\\.de\\|debconf\\.org\\|spi-inc\\.org\\)")
-  (setq bbdb-ignore-most-messages-alist '(("To" . "\\(\\(\\(joerg\\)\\(\\.jaspert\\)?\\)\\|root\\|gnus\\)@\\(debian\\.org\\|ganneff\\.de\\|debconf\\.org\\|spi-inc\\.org\\)")))
-  (setq bbdb/news-auto-create-p 'bbdb-ignore-most-messages-hook)
-  (setq bbdb/gnus-summary-known-poster-mark "+")
-  (setq bbdb/gnus-summary-mark-known-posters t)
-  (setq bbdb/gnus-summary-prefer-real-names t)
-#+END_SRC
-
-#+BEGIN_SRC emacs-lisp
-  (setq bbdb-auto-notes-alist
-        '(("user-agent" (".*" interface 0))
-          ("Organization"  (".*" company 0))
-          ("x-mailer" (".*" interface 0))
-          ("x-newsreader" (".*" interface 0))
-          ("X-URL"         (".*" url 0))
-          ("newsgroups" ("\\\\([^,]*\\\\),?" posted-to "\\\\1" t))
-          ("xref" ("\\\\b[^ ]+:[0-9]+.*" seen-in 0))))
-  (put 'seen-in 'field-separator "; ")
-  (put 'interface 'field-seperator "; ")
-#+END_SRC
-
-The following ensures that our bbdb entries have timestamps.
-#+BEGIN_SRC emacs-lisp
-(add-hook 'bbdb-create-hook 'bbdb-creation-date-hook)
-(add-hook 'bbdb-change-hook 'bbdb-timestamp-hook)
-#+END_SRC
-
-** message-utils, message-x
-#+BEGIN_SRC emacs-lisp
-(autoload 'message-mark-inserted-region "message-utils" nil t)
-(autoload 'message-mark-insert-file "message-utils" nil t)
-(autoload 'message-strip-subject-was "message-utils" nil t)
-(autoload 'message-change-subject "message-utils" nil t)
-(autoload 'message-xpost-fup2 "message-utils" nil t)
-(autoload 'message-add-archive-header "message-utils" nil t)
-(autoload 'message-reduce-to-to-cc "message-utils" nil t)
-(define-key message-mode-map '[(control c) m] 'message-mark-inserted-region)
-(define-key message-mode-map '[(control c) f] 'message-mark-insert-file)
-(define-key message-mode-map '[(control c) x] 'message-xpost-fup2)
-(define-key message-mode-map '[(control c) s] 'message-change-subject)
-(define-key message-mode-map '[(control c) a] 'message-add-archive-header)
-(define-key message-mode-map '[(control c) t] 'message-reduce-to-to-cc)
-(add-hook 'message-header-setup-hook 'message-strip-subject-was)
-(add-hook 'message-setup-hook 'message-utils-setup)
-#+END_SRC
-
-#+BEGIN_SRC emacs-lisp
-  (require 'message-x)
-  (setq message-x-body-function '(lambda () (interactive) (hippie-expand nil)))
-#+END_SRC
-** footnote                                                          :FIXME:
-This might be entirely replac(ed|able) by org-modes footnote handling.
-#+BEGIN_SRC emacs-lisp
-(require 'footnote)
-(setq footnote-body-tag-spacing 1
-      footnote-spaced-footnotes nil
-      footnote-style 'numeric-latin
-      footnote-section-tag "Fussnoten: ")
-(add-hook 'message-mode-hook 'footnote-mode)
-#+END_SRC
-
-** smiley
-#+BEGIN_SRC emacs-lisp
-(require 'smiley)
-(setq gnus-treat-display-smileys t)
-(setq smiley-flesh-color "Yellow")
-#+END_SRC
-** org-mode
-#+BEGIN_SRC emacs-lisp
-(add-hook 'message-mode-hook 'orgstruct++-mode 'append)
-(add-hook 'message-mode-hook 'orgtbl-mode 'append)
-;(require 'org-mime)
-;(add-hook 'message-mode-hook
-;          '(lambda () (local-set-key (kbd "C-c M-o") 'org-mime-htmlize))
-;          'append)
-#+END_SRC
-** random-sig
-#+BEGIN_SRC emacs-lisp
-(require 'randomsig)
-(define-key message-mode-map (kbd "C-c s") 'randomsig-replace-sig)
-(define-key message-mode-map (kbd "C-c S") 'randomsig-select-sig)
-(require 'gnus-sum) ; probably required for `gnus-summary-save-map'
-(define-key gnus-summary-save-map "-" 'gnus/randomsig-summary-read-sig)
-(setq randomsig-dir "/home/joerg/sigs")
-(setq message-signature 'randomsig-signature)
-#+END_SRC
-
-** sieve
-#+BEGIN_SRC emacs-lisp
-(require 'sieve)
-(setq auto-mode-alist (cons '("\\.siv\\'" . sieve-mode) auto-mode-alist))
-(require 'gnus-sieve)
-#+END_SRC
-
-** whatever
-#+BEGIN_SRC emacs-lisp
-(require 'gnus-BTS)
-#+END_SRC
-#+BEGIN_SRC emacs-lisp
-(require 'epg-config)
-(setq mml2015-use 'epg)
-(setq mml2015-cache-passphrase t)
-(setq mml2015-passphrase-cache-expiry '36000)
-(setq mml2015-sign-with-sender t)
-(setq gnus-message-replyencrypt t)
-(setq gnus-message-replysign t)
-(setq gnus-message-replysignencrypted t)
-(setq gnus-treat-x-pgp-sig t)
-(setq mm-verify-option 'always)
-(setq mm-decrypt-option 'always)
-(setq gnus-buttonized-mime-types '("multipart/alternative" "multipart/encrypted" "multipart/signed"))
-(setq epg-debug nil)
-
-(setq mml2015-encrypt-to-self t)
-(setq mml2015-passphrase-cache-expiry 600)
-(setq mml2015-signers (quote ("0xB12525C4")))
-(setq gnus-picon-databases (quote ("/usr/lib/picon" "/usr/local/faces" "/usr/share/picons")))
-(setq gnus-summary-muttprint-program "muttprint -x -l de -e local -2 -z 10 -c auto")
-#+END_SRC
-
diff --git a/.emacs.d/config/linwsa03.org b/.emacs.d/config/linwsa03.org
deleted file mode 100644 (file)
index 89082e2..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-#+STARTUP: align fold nodlcheck hidestars oddeven lognotestate
-#+TITLE:     linws03.cms.fra.dlh.de.org - Ganneffs configuration, host specific file for linws03
-#+DATE:      %Y-%m-%d
-#+SETUPFILE: ~/.emacs.d/elisp/org-templates/level-0.org
-
-* Machine specific config
-** cedet, jdee
-Collection of Emacs Development Environment Tools, see [[http://cedet.sourceforge.net/setup.shtml][CEDET]]
-
-#+BEGIN_SRC emacs-lisp-off :tangle no
-;(load-file "~/.emacs.d/elisp/cedet/common/cedet.el")
-(add-to-list 'load-path "~/.emacs.d/elisp/cedet/common/")
-(require 'cedet)
-;(global-ede-mode 1)                      ; Enable the Project management system
-
-(require 'semantic-load)
-(require 'senator)
-(require 'semantic-sb)
-(require 'semantic-ia)
-(require 'semantic-wisent)
-;(require 'semantic/wisent/java-tags)
-
-(semantic-load-enable-code-helpers)      ; Enable prototype help and smart completion
-(global-srecode-minor-mode 1)            ; Enable template insertion menu
-
-(setq semantic-default-submodes '(global-semantic-idle-scheduler-mode
-                                  global-semanticdb-minor-mode
-                                  global-semantic-idle-summary-mode
-                                  global-semantic-decoration-mode
-                                  global-semantic-highlight-func-mode
-                                  global-semantic-stickyfunc-mode
-                                  global-semantic-idle-tag-highlight-mode
-                                  global-semantic-mru-bookmark-mode))
-(setq semantic-load-turn-everything-on t)
-;;  ;(semantic-mode 1)
-
-(add-hook 'semantic-init-hooks 'senator-minor-mode)
-
-;; Use the full Java 1.5 grammer to parse Java
-(autoload 'wisent-java-default-setup "wisent" "Hook run to setup Semantic in 'java-mode'." nil nil)
-
-(setq jde-auto-parse-enable nil)
-(setq jde-enable-senator nil)
-(load "jde-autoload")
-
-(setq defer-loading-jde t)
-
-(setq jde-check-version-flag nil)
-(define-obsolete-function-alias 'make-local-hook 'ignore "21.1")
-(unless (fboundp 'semantic-format-prototype-tag-java-mode)
-  (defalias 'semantic-format-prototype-tag-java-mode 'semantic-format-tag-prototype-java-mode))
-(autoload 'jde-mode "jde" "JDE mode." t)
-(setq auto-mode-alist
-      (append '(("\\.java\\'" . jde-mode)) auto-mode-alist))
-(setq  jde-jdk `("1.6"))
-
-;; Location of you emacs directory
-(setq my-emacs-dir (concat (getenv "HOME") "/.emacs.d/tmp/emacs-jde"))
-
-;; save all the semantic.cache files to one place
-(when (locate-library "semantic")
-  (let ((semcach (concat my-emacs-dir "/semantic-cache")))
-    (unless (file-directory-p semcach)
-      (make-directory semcach))
-    (setq semanticdb-default-save-directory semcach)))
-#+END_SRC
-
-** org-mode
-I want some extra templates for org-capture, which I don't need to
-see at home. (Or want different there).
-#+BEGIN_SRC emacs-lisp :tangle yes
-(nconc org-capture-templates
-       '(
-         ("f" "Firewall request" entry (file+headline "~/org/dlh.org" "Firewall")
-          "* TODO Firewall Request, RT: %?\nAdded: %U\n"
-          :clock-in t :clock-resume t)
-         ("i" "Ticket" entry (file+headline "~/org/dlh.org" "RT Ticket")
-          "* TODO RT: %a\nAdded: %U\n\n%?\n"
-          :clock-in t :clock-resume t :jump-to-captured t)
-         ("m" "Meeting" entry (file+headline "~/org/dlh.org" "Meetings")
-          "* TODO %?\nSCHEDULED: %^{Please specify meeting date/time}t\nAdded: %U\n"
-          :clock-in t :clock-resume t :jump-to-captured t)
-         ("a" "iFlight related" entry (file+headline "~/org/dlh.org" "iFlight")
-          "* TODO %?\nAdded: %U\n\n \n"
-          :clock-in t :clock-resume t :jump-to-captured t :prepend t)
-         ("u" "Puppet Todo" entry (file "~/git/puppet/TODO.org")
-          "* %?\nAdded: %U\n\n \n")
-         ))
-#+END_SRC
-
-** ecb
-Emacs Code Browser, see [[http://ecb.sourceforge.net/][ECB - Emacs Code Browser]]
-#+BEGIN_SRC emacs-lisp :tangle no
-(load-file "~/.emacs.d/elisp/ecb/ecb.el")
-(require 'ecb-autoloads)
-#+END_SRC
-* Footnotes
-
diff --git a/.emacs.d/elisp/local/mic-paren.el b/.emacs.d/elisp/local/mic-paren.el
deleted file mode 100644 (file)
index f55dc42..0000000
+++ /dev/null
@@ -1,1315 +0,0 @@
-;;; mic-paren.el --- advanced highlighting of matching parentheses
-
-;;; Copyright (C) 2008, 2012, 2013 Thien-Thi Nguyen
-;;; Copyright (C) 1997 Mikael Sjödin (mic@docs.uu.se)
-
-;; Version: 3.11
-;; Released: 2013-09-20
-;; Author: Mikael Sjödin (mic@docs.uu.se)
-;;         Klaus Berndl  <berndl@sdm.de>
-;;         Jonathan Kotta <jpkotta@gmail.com>
-;; Maintainer: ttn
-;; Keywords: languages, faces, parenthesis, matching
-;;
-;; This program contains additional code by:
-;; - Vinicius Jose Latorre <vinicius@cpqd.br>
-;; - Steven L Baur <steve@xemacs.org>
-;; - Klaus Berndl  <berndl@sdm.de>
-;; - ttn
-;;
-;; mic-paren.el is free software
-;;
-;; This file is *NOT* (yet?) 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, 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 GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; ----------------------------------------------------------------------
-;; Short Description:
-;;
-;; Load this file, activate it and Emacs will display highlighting on
-;; whatever parenthesis (and paired delimiter if you like this) matches
-;; the one before or after point.  This is an extension to the paren.el
-;; file distributed with Emacs.  The default behaviour is similar to
-;; paren.el but more sophisticated.  Normally you can try all default
-;; settings to enjoy mic-paren.
-;;
-;; Some examples to try in your ~/.emacs:
-;;
-;;  (add-hook 'LaTeX-mode-hook
-;;            (function (lambda ()
-;;                        (paren-toggle-matching-quoted-paren 1)
-;;                        (paren-toggle-matching-paired-delimiter 1))))
-;;
-;;  (add-hook 'c-mode-common-hook
-;;            (function (lambda ()
-;;                         (paren-toggle-open-paren-context 1))))
-;;
-;; If you use CUA mode, these might be useful, too:
-;;
-;;  (put 'paren-forward-sexp 'CUA 'move)
-;;  (put 'paren-backward-sexp 'CUA 'move)
-;;
-;; ----------------------------------------------------------------------
-;; Installation:
-;;
-;; o Place this file in a directory in your `load-path' and byte-compile
-;;   it.  If there are warnings, please report them to ttn.
-;; o Put the following in your .emacs file:
-;;      (require 'mic-paren) ; loading
-;;      (paren-activate)     ; activating
-;;      ;;; set here any of the customizable variables of mic-paren:
-;;      ;;; ...
-;; o Restart your Emacs; mic-paren is now installed and activated!
-;; o To list the possible customizations type `C-h f paren-activate' or
-;;   go to the customization group `mic-paren-matching'.
-;;
-;; ----------------------------------------------------------------------
-;; Long Description:
-;;
-;; mic-paren.el is an extension and replacement to the packages paren.el
-;; and stig-paren.el for Emacs.  When mic-paren is active Emacs normal
-;; parenthesis matching is deactivated.  Instead parenthesis matching will
-;; be performed as soon as the cursor is positioned at a parenthesis.  The
-;; matching parenthesis (or the entire structured expression between the
-;; parentheses) is highlighted until the cursor is moved away from the
-;; parenthesis.  Features include:
-;; o Both forward and backward parenthesis matching (simultaneously if
-;;   cursor is between two expressions).
-;; o Indication of mismatched parentheses.
-;; o Recognition of "escaped" (also often called "quoted") parentheses.
-;; o Recognition of SML-style "sexp-ish" comment syntax.
-;;   NB: This support is preliminary; there are still problems
-;;       when the parens in the comment span multiple lines, etc.
-;; o Option to match "escaped" parens too, especially in (La)TeX-mode
-;;   (e.g., matches expressions like "\(foo bar\)" properly).
-;; o Offers two functions as replacement for `forward-sexp' and
-;;   `backward-sexp' which handle properly quoted parens (s.a.).  These
-;;   new functions can automatically be bounded to the original binding
-;;   of the standard `forward-sexp' and `backward-sexp' functions.
-;; o Option to activate matching of paired delimiter (i.e., characters with
-;;   syntax '$').  This is useful for writing in LaTeX-mode for example.
-;; o Option to select in which situations (always, never, if match, if
-;;   mismatch) the entire expression should be highlighted or only the
-;;   matching parenthesis.
-;; o Message describing the match when the matching parenthesis is off-screen
-;;   (vertical and/or horizontal).  Message contains either the linenumber or
-;;   the number of lines between the two matching parens.  Option to select in
-;;   which cases this message should be displayed.
-;; o Optional delayed highlighting (useful on slow systems),
-;; o Functions to activate/deactivate mic-paren.el are provided.
-;; o Numerous options to control the behaviour and appearance of
-;;   mic-paren.el.
-;;
-;; mic-paren.el was originally developed and tested under Emacs 19.28 -
-;; 20.3.  Since then, support for Emacs 19 and 20 has bit-rotted (not
-;; dropped completely, but not tested against changes, either), and
-;; will probably be removed without warning in a future version.  This
-;; version was developed and tested under Emacs 23.0.60 (wip).  XEmacs
-;; compatibility has been provided by Steven L Baur <steve@xemacs.org>.
-;; Jan Dubois (jaduboi@ibm.net) provided help to get mic-paren to work in
-;; OS/2.
-;;
-;; This file (and other wonderful stuff) can be obtained from
-;; the Emacs Wiki: <http://www.emacswiki.org/>
-;;
-;; ----------------------------------------------------------------------
-;; Available customizable options:
-;; - `paren-priority'
-;; - `paren-overlay-priority'
-;; - `paren-sexp-mode'
-;; - `paren-highlight-at-point'
-;; - `paren-highlight-offscreen'
-;; - `paren-display-message'
-;; - `paren-message-linefeed-display'
-;; - `paren-message-no-match'
-;; - `paren-message-show-linenumber'
-;; - `paren-message-truncate-lines'
-;; - `paren-max-message-length'
-;; - `paren-ding-unmatched'
-;; - `paren-delay'
-;; - `paren-dont-touch-blink'
-;; - `paren-match-face'
-;; - `paren-mismatch-face'
-;; - `paren-no-match-paren'
-;; - `paren-bind-modified-sexp-functions'
-;; Available customizable faces:
-;; - `paren-face-match'
-;; - `paren-face-mismatch'
-;; - `paren-face-no-match'
-;; Available commands:
-;; - `paren-activate'
-;; - `paren-deactivate'
-;; - `paren-toggle-matching-paired-delimiter'
-;; - `paren-toggle-matching-quoted-paren'
-;; - `paren-toggle-open-paren-context'
-;; - `paren-forward-sexp'
-;; - `paren-backward-sexp'
-;; ----------------------------------------------------------------------
-;;
-;; IMPORTANT NOTES (important for people who have customized mic-paren
-;;                  from within elisp):
-;; - In version >= 3.3 the prefix "mic-" has been removed from the
-;;   command-names `mic-paren-forward-sexp' and `mic-paren-backward-sexp'.
-;;   Now all user-functions and -options begin with the prefix "paren-"
-;;   because this package should be a replacement of the other
-;;   paren-packages like paren.el and stig-paren.el!
-;; - In version >= 3.2 the prefix "mic-" has been removed from the
-;;   command-names `mic-paren-toggle-matching-quoted-paren' and
-;;   `mic-paren-toggle-matching-paired-delimiter'.
-;; - In versions >= 3.1 mic-paren is NOT auto-activated after loading.
-;; - In versions >= 3.0 the variable `paren-face' has been renamed to
-;;   `paren-match-face'.
-;;
-;; ----------------------------------------------------------------------
-;; Versions:
-;; v3.11   + Added support for recognizing SML-style comments as a sexp.
-;;           Thanks to Leo Liu, Stefan Monnier.
-;;
-;; v3.10   + Added message-length clamping (var `paren-max-message-length').
-;;           Thanks to Jonathan Kotta.
-;;
-;; v3.9    + Fixed XEmacs bug in `define-mic-paren-nolog-message'.
-;;           Thanks to Sivaram Neelakantan.
-;;
-;; v3.8    + Maintainership (crassly) grabbed by ttn.
-;;         + License now GPLv3+.
-;;         + Byte-compiler warnings eliminated; if you see one, tell me!
-;;         + Dropped funcs: mic-char-bytes, mic-char-before.
-;;         + Docstrings, messages, comments revamped.
-;;
-;; v3.7    + Removed the message "You should be in LaTeX-mode!".
-;;         + Fixed a bug in `paren-toggle-matching-quoted-paren'.
-;;         + Fixed some misspellings in the comments and docs.
-;;
-;; v3.6    + Fixed a very small bug in `mic-paren-horizontal-pos-visible-p'.
-;;         + The informational messages like "Matches ... [+28]" which are
-;;           displayed if the matching paren is offscreen, do not longer
-;;           wasting the log.
-;;
-;; v3.5    + No mic-paren-messages are displayed if we are in isearch-mode.
-;;         + Matching quoted parens is switched on if entering a minibuffer.
-;;           This is useful for easier inserting regexps, e.g., with
-;;           `query-replace-regexp'.  Now \(...\) will be highlighted
-;;           in the minibuffer.
-;;         + New option `paren-message-show-linenumber': You can determine
-;;           the computation of the offscreen-message-linenumber.  Either the
-;;           number of lines between the two matching parens or the absolute
-;;           linenumber.  (Thank you for the idea and a first implementation
-;;           to Eli Barzilay <eli@barzilay.org>.)
-;;         + New option `paren-message-truncate-lines': If mic-paren messages
-;;           should be truncated or not (has only an effect in GNU Emacs 21).
-;;           (Thank you for the idea and a first implementation to Eli
-;;           Barzilay <eli@barzilay.org>.)
-;;
-;; v3.4    + Corrected some bugs in the backward-compatibility for older
-;;           Emacsen.  Thanks to Tetsuo Tsukamoto <czkmt@remus.dti.ne.jp>.
-;;
-;; v3.3    + Now the priority of the paren-overlays can be customized
-;;           (option `paren-overlay-priority').  For a description of the
-;;           priority of an overlay see in the emacs-lisp-manual the node
-;;           "Overlays".  This option is mainly useful for experienced
-;;           users which use many packages using overlays to perform their
-;;           tasks.
-;;         + Now you can determine what line-context will be displayed if
-;;           the matching open paren is offscreen.  In functional
-;;           programming languages like lisp it is useful to display the
-;;           following line in the echo-area if the opening matching paren
-;;           has no preceding text in the same line.
-;;           But in procedural languages like C++ or Java it is convenient
-;;           to display the first previous non empty line in this case
-;;           instead of the following line.  Look at the new variable
-;;           `paren-open-paren-context-backward' and the related toggling
-;;           function `paren-toggle-open-paren-context' for a detailed
-;;           description of this new feature.
-;;         + In addition to the previous described new feature you can
-;;           specify how a linefeed in the message (e.g., if the matching
-;;           paren is offscreen) is displayed.  This is mainly because the
-;;           standard echo-area display of a linefeed (^J) is bad to read.
-;;           Look at the option `paren-message-linefeed-display'.
-;;         + Solved a little bug in the compatibility-code for Emacsen
-;;           not supporting current customize-feature.
-;;         + Removed the prefix "mic-" from the commands
-;;           `mic-paren-forward-sexp' and `mic-paren-backward-sexp'.
-;;           For an explanation look at comments for version v3.2.
-;;
-;; v3.2    + The prefix "mic-" has been removed from the commands
-;;           `mic-paren-toggle-matching-quoted-paren' and
-;;           `mic-paren-toggle-matching-paired-delimiter'.  This is for
-;;           consistency.  Now all user-variables, -faces and -commands
-;;           begin with the prefix "paren-" and all internal functions
-;;           and variables begin with the prefix "mic-paren-".
-;;         + Now you can exactly specify in which situations the whole
-;;           sexp should be highlighted (option `paren-sexp-mode'):
-;;           Always, never, if match or if mismatch.  Tested with Gnus
-;;           Emacs >= 20.3.1 and XEmacs >= 21.1.
-;;
-;; v3.1    + From this version on mic-paren is not autoloaded.  To
-;;           activate it you must call `paren-activate' (either in your
-;;           .emacs or manually with M-x).  Therefore the variable
-;;           `paren-dont-activate-on-load' ise obsolet and has been
-;;           removed.
-;;         + Now mic-paren works also in older Emacsen without the
-;;           custom-feature.  If the actual custom-library is provided
-;;           mic-paren use them and is full customizable otherwise normal
-;;           defvars are used for the options.
-;;         + Fix of a bug displaying a message if the matching paren is
-;;           horizontal out of view.
-;;         + All new features are now tested with XEmacs >= 21.1.6.
-;;
-;; v3.0    + Checking if matching paren is horizontally offscreen (in
-;;           case of horizontal scrolling).  In that case the message is
-;;           displayed in the echo-area (anlogue to vertical offscreen).
-;;           In case of horizontal offscreen closing parenthesis the
-;;           displayed message is probably wider than the frame/window.
-;;           So you can only read the whole message if you are using a
-;;           package like mscroll.el (scrolling long messages) in GNU
-;;           Emacs.
-;;         + Now full customizable, means all user-options and -faces now
-;;           can be set with the custom-feature of Emacs.  On the other
-;;           hand, this means this version of mic-paren only works with an
-;;           Emacs which provides the custom-package!
-;;         + In case of the matching paren is offscreen now the displayed
-;;           message contains the linenumber of the matching paren too.
-;;         This version is only tested with Gnu Emacs >= 20.4 and not with
-;;         any XEmacs!
-;;         Implemented by Klaus Berndl <berndl@sdm.de>.
-;;
-;; v2.3    No additional feature but replacing `char-bytes' and
-;;         `char-before' with `mic-char-bytes' and `mic-char-before' to
-;;         prevent a clash in the global-namespace.  Now the new
-;;         features of v2.1 and v2.2 are also tested with XEmacs!
-;;
-;; v2.2    Adding the new feature for matching paired delimiter.  Not
-;;         tested with XEmacs.  Implemented by Klaus Berndl <berndl@sdm.de>
-;;
-;; v2.1    Adding the new feature for matching escaped parens too.  Not
-;;         tested with XEmacs.  Implemented by Klaus Berndl <berndl@sdm.de>.
-;;
-;; v2.0    Support for MULE and Emacs 20 multibyte characters added.
-;;         Inspired by the suggestion and code of Saito Takaaki
-;;         <takaaki@is.s.u-tokyo.ac.jp>.
-;;
-;; v1.9    Avoids multiple messages/dings when point has not moved.  Thus,
-;;         mic-paren no longer overwrites messages in minibuffer.  Inspired by
-;;         the suggestion and code of Eli Barzilay <eli@barzilay.org>.
-;;
-;; v1.3.1  Some spelling corrected (from Vinicius Jose Latorre
-;;         <vinicius@cpqd.br> and Steven L Baur <steve@xemacs.org>).
-;;
-;; v1.3    Added code from Vinicius Jose Latorre <vinicius@cpqd.br> to
-;;         highlight unmatched parentheses (useful in minibuffer).
-;;
-;; v1.2.1  Fixed stuff to work with OS/2 emx-emacs:
-;;          - checks if `x-display-colour-p' is bound before calling it;
-;;          - changed how X/Lucid Emacs is detected.
-;;         Added automatic load of the timer-feature (plus variable to
-;;         disable the loading).
-
-;;; Code:
-
-(defvar mic-paren-version "3.11"
-  "Version of mic-paren.")
-
-(eval-when-compile (require 'cl))
-
-;;; ======================================================================
-;; Compatibility stuff
-;; BLOB to make custom stuff work even without customize
-(eval-and-compile
-  (condition-case ()
-      (require 'custom)
-    (error nil))
-  (unless (fboundp 'defgroup)
-    (defmacro defgroup (&rest rest) nil))
-  (unless (fboundp 'defcustom)
-    (defmacro defcustom (sym val str &rest rest)
-      `(defvar ,sym ,val ,str)))
-  (unless (fboundp 'defface)
-    (defmacro defface (sym val str &rest rest)
-      `(defvar ,sym (make-face ',sym) ,str))))
-
-;;; ======================================================================
-;;; here begin the user options
-
-(defgroup mic-paren-matching nil
-  "Enable advanced (un)matching of parens and expressions."
-  :prefix "paren-"
-  :group 'paren-matching)
-
-(defcustom paren-priority 'both
-  "*Control behavior in a \"abutted close-open\" situation.
-This occurs when point is between a closing and an opening
-parenthesis, such as: (A B)(C D)
-                           ^
-                         point
-close -- highlight the parenthesis matching the close-parenthesis
-         before the point (highlight opening paren before A).
-open  -- highlight the parenthesis matching the open-parenthesis after
-         the point (highlight closing paren after D).
-both  -- highlight both parenthesis matching the parenthesis beside
-         the point (highlight opening before A and closing after D)."
-  :type '(choice (const :tag "Match close" close)
-                 (const :tag "Match open" open)
-                 (const :tag "Match both" both))
-  :group 'mic-paren-matching)
-
-(defcustom paren-overlay-priority 999
-  "*Non-negative integer to specify paren overlay priority.
-For details, see info node `(elisp) Overlays'.
-Normally you don't want to change the default value!"
-  :set (function
-        (lambda (symbol value)
-          (set symbol (if (< value 0) (* -1 value) value))))
-  :initialize 'custom-initialize-default
-  :type 'integer
-  :group 'mic-paren-matching)
-
-(defcustom paren-sexp-mode nil
-  "*Control in which situations the whole sexp should be highlighted.
-This means the whole s-expression between the matching parentheses is
-highlighted instead of only the matching/mismatching parenthesis.
-
-t        -- Always highlight the whole s-expression.
-nil      -- Never highlight the whole s-expression.
-match    -- Highlight the whole s-expression only if the parens match.
-mismatch -- Highlight the whole s-expression only if the parens don't match."
-  :type '(choice (const :tag "Never sexp-mode" nil)
-                 (const :tag "Always sexp-mode" t)
-                 (const :tag "If match" match)
-                 (const :tag "If mismatch" mismatch))
-  :group 'mic-paren-matching)
-
-(defcustom paren-highlight-at-point t
-  "*Non-nil highlights both parens when point is after the close-paren.
-If nil, only the open parenthesis is highlighted."
-  :type '(choice (const :tag "Highlight both" t)
-                 (const :tag "Highlight open" nil))
-  :group 'mic-paren-matching)
-
-(defcustom paren-highlight-offscreen nil
-  "*Non-nil enables highlighting text not visible in the current buffer.
-
-This is useful if you regularly display the current buffer in
-multiple windows or frames (e.g., if you use Follow mode, by
-andersl@csd.uu.se).  Note: this option may slow down your Emacs.
-
-This variable is ignored (treated as non-nil) if you set
-`paren-sexp-mode' to non-nil."
-  :type 'boolean
-  :group 'mic-paren-matching)
-
-(defcustom paren-display-message 'only
-  "*Display message if matching parenthesis is off-screen.
-Possible settings are:
-always -- message is always displayed regardless if offscreen or not
-only   -- message is only displayed when matching is offscreen
-never  -- never a message is displayed."
-  :type '(choice (const :tag "Display always" always)
-                 (const :tag "Display if offscreen" only)
-                 (const :tag "No Message display" never))
-  :group 'mic-paren-matching)
-
-(defcustom paren-message-linefeed-display " RET "
-  "*String for displaying a linefeed in the matching paren context message.
-There are three predefined values:
-- Displays linefeeds with \" RET \" in the message.
-- Displays linefeeds with a SPACE in the message.
-- Displays linefeeds in the standard-form, means with \"^J\".
-But you can also specify any user-defined string for it.
-
-For further explanations about message displaying look at
-`paren-display-message'."
-  :type '(choice (const :tag "Display with \"RET\"" :value " RET ")
-                 (const :tag "Display with a SPACE" :value " ")
-                 (const :tag "Standard" :value "^J")
-                 (string :tag "User defined"))
-  :group 'mic-paren-matching)
-
-(defcustom paren-message-show-linenumber 'sexp
-  "*Determine the computation of the offscreen-message-linenumber.
-
-If the matching paren is offscreen, then maybe a message with the
-context of the matching paren and it's linenumber is displayed
-\(depends on the setting in `paren-display-message').  Here the
-computation of the linenumber can be determined:
-
-sexp -- Display the number of lines between the matching parens.  Then the
-        number of lines is displayed as negative number if the matching paren
-        is somewhere above.  Otherwise the number has a positive sign.
-
-absolute -- Display the absolute linenumber of the machting paren computed
-            from the beginning of the buffer."
-  :type '(choice (const :tag "Count accros sexp" sexp)
-                 (const :tag "Absolute number" absolute))
-  :group 'mic-paren-matching)
-
-(defcustom paren-message-no-match t
-  "*Display message if no matching parenthesis is found."
-  :type '(choice (const :tag "Display message" t)
-                 (const :tag "No message" nil))
-  :group 'mic-paren-matching)
-
-(defcustom paren-message-truncate-lines t
-  "*Non nil means truncate lines for all messages mic-paren can display.
-This option has only an effect with GNU Emacs 21.x!"
-  :type 'boolean
-  :group 'mic-paren-matching)
-
-(defcustom paren-max-message-length 0
-  "*If positive, the max length `mic-paren-nolog-message' should output.
-The length is reduced by removing the middle section of the message.
-A value of zero means do not modify the message."
-  :type 'integer
-  :group 'mic-paren-matching)
-
-(defcustom paren-ding-unmatched nil
-  "*Non-nil means make noise in unmatched situations.
-An unmatched situation occurs if the cursor is at an unmatched
-parenthesis or no matching parenthesis is found.
-Even if nil, typing an unmatched parenthesis produces a ding."
-  :type 'boolean
-  :group 'mic-paren-matching)
-
-(defcustom paren-delay nil
-  "*This variable controls when highlighting is done.
-The variable has different meaning in different versions of Emacs.
-
-In Emacs 19.29 and below:
-  This variable is ignored.
-
-In Emacs 19.30:
-  A value of nil will make highlighting happen immediately \(this may slow
-  down your Emacs if running on a slow system).  Any non-nil value will
-  delay highlighting for the time specified by post-command-idle-delay.
-
-In Emacs 19.31 and above:
-  A value of nil will make highlighting happen immediately \(this may slow
-  down your Emacs if running on a slow system).  If not nil, the value
-  should be a number \(possible a floating point number if your Emacs
-  support floating point numbers).  The number is the delay in seconds
-  before mic-paren performs highlighting.
-
-If you change this variable when mic-paren is active you have to
-re-activate \(with M-x paren-activate) mic-paren for the change to take
-effect."
-  :type '(choice (number :tag "Delay time")
-                 (const :tag "No delay" nil))
-  :group 'mic-paren-matching)
-
-(defcustom paren-dont-touch-blink nil
-  "*Non-nil means not to change the value of `blink-matching-paren'.
-This takes effect when mic-paren is activated or deactivated.  If nil
-mic-paren turns of blinking when activated and turns on blinking when
-deactivated."
-  :type 'boolean
-  :group 'mic-paren-matching)
-
-(defcustom paren-dont-load-timer (not (string-match "XEmacs\\|Lucid"
-                                                    emacs-version))
-  "*Non-nil inhibits loading `timer'.
-
-\(I have no idea why Emacs user ever want to set this to non-nil but I hate
-packages which loads/activates stuff I don't want to use so I provide this
-way to prevent the loading if someone doesn't want timers to be loaded.)"
-  :type 'boolean
-  :group 'mic-paren-matching)
-
-(defcustom paren-bind-modified-sexp-functions t
-  "*Automatic binding of the new sexp-functions to the old bindings.
-If non nil mic-paren checks at load-time the keybindings for the functions
-`forward-sexp' and `backward-sexp' and binds the modified sexp-functions
-`paren-forward-sexp' and `paren-backward-sexp' to exactly these
-bindings if and only if matching quoted/escaped parens is turned on by
-`paren-toggle-matching-quoted-paren'.  These new bindings are done only
-in a buffer-local keymap, therefore if you activate the quoted matching
-only in some modes from within a hook only in these buffers the new
-bindings are active and in all other not.
-
-If you deactivate the quoted matching feature by
-`paren-toggle-matching-quoted-paren' then `forward-sexp' and
-`backward-sexp' will be bound again to their original key-bindings!"
-  :type 'boolean
-  :group 'mic-paren-matching)
-
-;;; ------------------------------
-;;; Faces
-;;; ------------------------------
-
-(defface paren-face-match
-  '((((class color)) (:background "turquoise"))
-    (t (:background "gray")))
-  "Mic-paren mode face used for a matching paren."
-  :group 'faces
-  :group 'mic-paren-matching)
-
-(defface paren-face-mismatch
-  '((((class color)) (:foreground "white" :background "purple"))
-    (t (:reverse-video t)))
-  "Mic-paren mode face used for a mismatching paren."
-  :group 'faces
-  :group 'mic-paren-matching)
-
-(defface paren-face-no-match
-  '((((class color)) (:foreground "black" :background "yellow"))
-    (t (:reverse-video t)))
-  "Mic-paren mode face used for an unmatched paren."
-  :group 'faces
-  :group 'mic-paren-matching)
-
-(defcustom paren-match-face 'paren-face-match
-  "*Face to use for showing the matching parenthesis."
-  :type 'face
-  :group 'mic-paren-matching)
-
-(defcustom paren-mismatch-face 'paren-face-mismatch
-  "*Face to use when highlighting a mismatched parenthesis."
-  :type 'face
-  :group 'mic-paren-matching)
-
-(defcustom paren-no-match-face 'paren-face-no-match
-  "*Face to use when highlighting an unmatched parenthesis."
-  :type 'face
-  :group 'mic-paren-matching)
-
-;;; End of User Options
-;;; ======================================================================
-
-;;; Below there are only variables and options which either should be not
-;;; set directly but with toggle-functions or pure internal variables.
-
-(defvar paren-match-quoted-paren nil
-  "*Non-nil enables matching properly quoted (or escaped) parens.
-E.g., \"\\\(x-3y + z = 7\\\)\"\) in a TeX file.  GNU Emacs can not match
-quoted parens, so we must temporally deactivate the quoting until emacs
-has done its sexp-parsing.  Therefore emacs itself does not \(can not!\)
-take into consideration if either both matched parens are quoted or none.
-But nevertheless we do this!  Only symmetric balanced parens are matched;
-either both matching parens must be quoted or none, otherwise they we will
-be highlighted as mismatched.
-
-This package offers also two slightly modified versions of sexp traversal
-functions: `paren-forward-sexp' and `paren-backward-sexp'.  These versions
-can also jump to escaped/quoted parens.
-
-If this variable is not nil and `paren-bind-modified-sexp-functions' is
-set to non nil, then `paren-toggle-matching-quoted-paren' will also toggle
-the original binding of `forward-sexp' and `backward-sexp' between the
-original functions and the modified equivalents.
-
-Do NOT set this variable directly but use
-`paren-toggle-matching-quoted-paren' to activate/deactivate/toggle this
-feature!  The best method is to do this in a mode hook, e.g.:
-\(add-hook \'LaTeX-mode-hook
-          \(function \(lambda \(\)
-                      \(paren-toggle-matching-quoted-paren 1\)\)\)\)")
-
-(make-variable-buffer-local 'paren-match-quoted-paren)
-
-(defvar paren-match-paired-delimiter nil
-  "*Non-nil enables matching of characters with syntax \"$\".
-E.g., in LaTeX \"$...$\" is equivalent to \"\\(...\\)\".
-Unlike to parens quoted/escaped paired delimiter will never match.
-
-Do NOT set this variable directly but use
-`paren-toggle-matching-paired-delimiter' to activate/deactivate/toggle
-this feature!  The best method is to do this in a mode hook, e.g.:
-\(add-hook \'LaTeX-mode-hook
-          \(function \(lambda \(\)
-                      \(paren-toggle-matching-paired-delimiter 1\)\)\)\)")
-
-(make-variable-buffer-local 'paren-match-paired-delimiter)
-
-(defvar paren-open-paren-context-backward nil
-  "*Controls which context of the matching open paren will be displayed.
-This takes effect if the matching open paren is offscreen or
-`paren-display-message' is `always' (see `paren-display-message')
-and the matching open paren has no previous text in the same line.
-Possible values:
-nil -- Contents of the **next** not empty and not whitespace-line will be
-  displayed.  This value is useful for example in functional programming
-  languages like (emacs)lisp.
-not-nil -- Contents of the first **previous** not empty and not only
-  whitespace-line will be displayed.  This value is useful for example in
-  procedural programming languages like C, C++, Java etc.
-
-Lets take a look at a short example:
-In languages like C++ we often have situations like
-  if \(i > VALUE\)
-  \{
-      // some code
-  \}
-With a value non nil the displayed opening-brace context would be
-\"if \(i > VALUE\)^J\{\" but with nil it would be \"\{^J // some code\"
-which would be in C++ lesser useful as the non nil version.
-\(The ^J stands for a newline in the buffer\).
-
-Do NOT set this variable directly but use `paren-toggle-open-paren-context'
-to change the value of this option!  The best method is to do this in a
-mode hook, e.g.:
-\(add-hook \'c-common-mode-hook
-           \(function \(lambda \(\)
-                         \(paren-toggle-open-paren-context 1\)\)\)\)")
-
-(make-variable-buffer-local 'paren-open-paren-context-backward)
-
-(defconst mic-paren-original-keybinding-of-sexp-functions
-  (list (car (where-is-internal 'forward-sexp))
-        (car (where-is-internal 'backward-sexp))))
-
-;;; Compatibility.
-;;; Try to make mic-paren work in different Emacs flavours.
-
-;; XEmacs compatibility (mainly by Steven L Baur <steve@xemacs.org>).
-(eval-and-compile
-  (if (string-match "\\(Lucid\\|XEmacs\\)" emacs-version)
-      (progn
-        (fset 'mic-make-overlay 'make-extent)
-        (fset 'mic-delete-overlay 'delete-extent)
-        (fset 'mic-overlay-put 'set-extent-property)
-        (fset 'mic-cancel-timer 'delete-itimer)
-        (fset 'mic-run-with-idle-timer 'start-itimer))
-    (fset 'mic-make-overlay 'make-overlay)
-    (fset 'mic-delete-overlay 'delete-overlay)
-    (fset 'mic-overlay-put 'overlay-put)
-    (fset 'mic-cancel-timer 'cancel-timer)
-    (fset 'mic-run-with-idle-timer 'run-with-idle-timer)))
-
-(defun paren-clamp-string-maybe (str)
-  "Remove the middle of STR if it exceeds `paren-max-message-length'.
-However, if STR is `nil' or `paren-max-message-length' is zero,
-simply return STR."
-  (if (or (not str) (zerop paren-max-message-length))
-      str
-    (let ((len (string-width str)))
-      (if (<= len paren-max-message-length)
-          str
-        (let* ((sep "[...]")
-               (cut (ash (- paren-max-message-length
-                            (string-width sep))
-                         -1)))
-          (concat (substring str 0 cut)
-                  sep
-                  (substring str (- len cut))))))))
-
-(eval-when-compile
-  (defmacro define-mic-paren-nolog-message (yes no)
-    `(defun mic-paren-nolog-message (&rest args)
-       "Work like `message' but without logging.
-See variable `paren-max-message-length'."
-       (let ((msg (paren-clamp-string-maybe
-                   (cond ((or (null args)
-                              (null (car args)))
-                          nil)
-                         ((null (cdr args))
-                          (car args))
-                         (t
-                          (apply 'format args))))))
-         (if msg ,yes ,no)
-         msg))))
-
-(eval-and-compile
-  (if (and (fboundp 'display-message)
-           (fboundp 'clear-message))
-      ;; Some GNU Emacs versions need the `eval' so as to avoid saying:
-      ;; > the following functions are not known to be defined:
-      ;; >         display-message, clear-message
-      (eval '(define-mic-paren-nolog-message
-               (display-message 'no-log msg)
-               (clear-message 'no-log)))
-    (define-mic-paren-nolog-message
-      (let (message-log-max) (message "%s" msg))
-      (message nil))))
-
-;;; ======================================================================
-;;; Pure Internal variables
-
-(defvar mic-paren-overlays (vector (mic-make-overlay 1 1)
-                                   (mic-make-overlay 1 1)
-                                   (mic-make-overlay 1 1))
-  "Vector of of the form [BACKW POINT FOREW].
-
-BACKW: Overlay for the open-paren which matches the close-paren
-       before point.  When in sexp-mode this is the overlay for
-       the expression before point.
-
-POINT: Overlay for the close-paren before point.
-       This is not used when is sexp-mode.
-
-FOREW: Overlay for the close-paren which matches the open-paren
-       after point.  When in sexp-mode this is the overlay for
-       the expression after point.")
-
-(defvar mic-paren-idle-timer nil
-  "Idle-timer.
-Used only in Emacs 19.31 and above (and if paren-delay is nil).")
-
-(defvar mic-paren-previous-location [nil nil nil]
-  "Where point was the last time mic-paren performed some action.
-This is is a vector of the form [POINT BUFFER WINDOW].")
-
-;;; ======================================================================
-;;; User Functions
-
-;;;###autoload
-(defun paren-activate ()
-  "Activate mic-paren parenthesis highlighting.
-Note: This also deactivates the paren.el
-and stig-paren.el packages if they are active!
-
-The following options are available via the customize-feature:
-  `paren-priority'
-  `paren-overlay-priority'
-  `paren-sexp-mode'
-  `paren-highlight-at-point'
-  `paren-highlight-offscreen'
-  `paren-display-message'
-  `paren-message-linefeed-display'
-  `paren-message-no-match'
-  `paren-message-show-linenumber'
-  `paren-message-truncate-lines'
-  `paren-ding-unmatched'
-  `paren-delay'
-  `paren-dont-touch-blink'
-  `paren-match-face'
-  `paren-mismatch-face'
-  `paren-no-match-face'
-  `paren-bind-modified-sexp-functions'
-
-The following options are settable via toggling functions \(look at the
-documentation of these options for the names of these functions\):
-  `paren-match-quoted-paren'
-  `paren-match-paired-delimiter'
-  `paren-open-paren-context-backward'"
-  (interactive)
-  ;; Deactivate mic-paren.el (to remove redundant hooks).
-  (paren-deactivate)
-  ;; Deactivate paren.el if loaded.
-  (when (boundp 'post-command-idle-hook)
-    (remove-hook 'post-command-idle-hook 'show-paren-command-hook))
-  (remove-hook 'post-command-hook 'show-paren-command-hook)
-  (and (boundp 'show-paren-overlay)
-       show-paren-overlay
-       (mic-delete-overlay show-paren-overlay))
-  (and (boundp 'show-paren-overlay-1)
-       show-paren-overlay-1
-       (mic-delete-overlay show-paren-overlay-1))
-  ;; Deactivate stig-paren.el if loaded.
-  (when (boundp 'post-command-idle-hook)
-    (remove-hook 'post-command-idle-hook 'stig-paren-command-hook))
-  (remove-hook 'post-command-hook 'stig-paren-command-hook)
-  (remove-hook 'post-command-hook 'stig-paren-safe-command-hook)
-  (remove-hook 'pre-command-hook 'stig-paren-delete-overlay)
-  ;; Deactivate Emacs standard parenthesis blinking.
-  (or paren-dont-touch-blink
-      (setq blink-matching-paren nil))
-
-  (cond(
-        ;; If timers are available use them
-        ;; (Emacs 19.31 and above).
-        (featurep 'timer)
-        (if (numberp paren-delay)
-            (setq mic-paren-idle-timer
-                  (mic-run-with-idle-timer paren-delay t
-                                           'mic-paren-command-idle-hook))
-          (add-hook 'post-command-hook 'mic-paren-command-hook)))
-       ;; If the idle hook exists assume it is functioning and use it
-       ;; (Emacs 19.30).
-       ((and (boundp 'post-command-idle-hook)
-             (boundp 'post-command-idle-delay))
-        (if paren-delay
-            (add-hook 'post-command-idle-hook 'mic-paren-command-idle-hook)
-          (add-hook 'post-command-hook 'mic-paren-command-hook)))
-       ;; Check if we (at least) have `post-comand-hook', and use it
-       ;; (Emacs 19.29 and below).
-       ((boundp 'post-command-hook)
-        (add-hook 'post-command-hook 'mic-paren-command-hook))
-       ;; Not possible to install mic-paren hooks
-       (t (error "Cannot activate mic-paren in this Emacs version")))
-  ;; We want matching quoted parens in the minibuffer to ease inserting
-  ;; paren-expressions in a regexp.
-  (add-hook 'minibuffer-setup-hook
-            'mic-paren-minibuffer-setup-hook)
-  (add-hook 'minibuffer-exit-hook
-            'mic-paren-minibuffer-exit-hook))
-
-;;;###autoload
-(defun paren-deactivate ()
-  "Deactivate mic-paren parenthesis highlighting."
-  (interactive)
-  ;; Deactivate (don't bother to check where/if mic-paren is acivte, just
-  ;; delete all possible hooks and timers).
-  (when (boundp 'post-command-idle-hook)
-    (remove-hook 'post-command-idle-hook 'mic-paren-command-idle-hook))
-  (when mic-paren-idle-timer
-    (mic-cancel-timer mic-paren-idle-timer))
-  (remove-hook 'post-command-hook 'mic-paren-command-hook)
-  (remove-hook 'minibuffer-setup-hook
-               'mic-paren-minibuffer-setup-hook)
-  (remove-hook 'minibuffer-exit-hook
-               'mic-paren-minibuffer-exit-hook)
-  ;; Remove any old highlight.
-  (mic-delete-overlay (aref mic-paren-overlays 0))
-  (mic-delete-overlay (aref mic-paren-overlays 1))
-  (mic-delete-overlay (aref mic-paren-overlays 2))
-
-  ;; Reactivate Emacs standard parenthesis blinking.
-  (or paren-dont-touch-blink
-      (setq blink-matching-paren t)))
-
-;;;###autoload
-(defun paren-toggle-matching-paired-delimiter (arg &optional no-message)
-  "Toggle matching paired delimiter.
-Force on with positive ARG.  Use this in mode hooks to activate or
-deactivate paired delimiter matching.  If optional second argument
-NO-MESSAGE is non-nil then don't display a message about the
-current activation state of the paired-delimiter-matching feature."
-  (interactive "P")
-  (setq paren-match-paired-delimiter (if (numberp arg)
-                                         (> arg 0)
-                                       (not paren-match-paired-delimiter)))
-  (unless no-message
-    (message "Matching paired delimiter is %s"
-             (if paren-match-paired-delimiter
-                 "ON"
-               "OFF"))))
-
-;;;###autoload
-(defun paren-toggle-matching-quoted-paren (arg &optional no-message)
-  "Toggle matching quoted parens.
-Force on with positive ARG.  Use this in mode hooks to activate or
-deactivate quoted paren matching.  If optional second argument
-NO-MESSAGE is non-nil then don't display a message about the
-current activation state of the quoted-paren-matching feature."
-  (interactive "P")
-  (setq paren-match-quoted-paren (if (numberp arg)
-                                     (> arg 0)
-                                   (not paren-match-quoted-paren)))
-  ;; If matching quoted parens is active now bind the original binding
-  ;; of forward-sexp and backward-sexp to the modified versions
-  ;; `paren-forward-sexp' and `paren-backward-sexp'.  If not, bind
-  ;; it back to the original `forward-sexp' and `backward-sexp'.
-  (let ((f (car mic-paren-original-keybinding-of-sexp-functions))
-        (b (cadr mic-paren-original-keybinding-of-sexp-functions))
-        (funs (if paren-match-quoted-paren
-                  '(paren-forward-sexp . paren-backward-sexp)
-                '(forward-sexp . backward-sexp))))
-    (when (and paren-bind-modified-sexp-functions b f)
-      (local-set-key f (car funs))
-      (local-set-key b (cdr funs))))
-  (unless no-message
-    (message "Matching quoted parens is %s"
-             (if paren-match-quoted-paren
-                 "ON"
-               "OFF"))))
-
-;;;###autoload
-(defun paren-toggle-open-paren-context (arg)
-  "Toggle whether or not to determine context of the matching open-paren.
-Force backward context with positive ARG.  Use this in mode-hooks.
-See `paren-open-paren-context-backward'."
-  (interactive "P")
-  (setq paren-open-paren-context-backward
-        (if (numberp arg)
-            (> arg 0)
-          (not paren-open-paren-context-backward))))
-
-;;;###autoload
-(defun paren-forward-sexp (&optional arg)
-  "Act like `forward-sexp' but also handle quoted parens.
-See `paren-match-quoted-paren'."
-  (interactive "p")
-  (or arg (setq arg 1))
-  (let* ((uncharquote-diff (if (< arg 0) 2 1))
-         (match-check-diff (if (< arg 0) 1 2))
-         (charquote (mic-paren-uncharquote (- (point) uncharquote-diff)))
-         match-pos mismatch)
-    ;; We must encapsulate this in condition-case so we regain control
-    ;; after error and we can undo our unquoting if any done before!
-    (condition-case ()
-        (setq match-pos (scan-sexps (point) arg))
-      (error nil))
-    (mic-paren-recharquote charquote)
-    (if (not match-pos)
-        (buffer-end arg)
-      (setq mismatch (mic-paren-fcq-mismatch (- match-pos match-check-diff)
-                                             charquote))
-      (if mismatch
-          (forward-sexp arg)
-        (goto-char match-pos)))))
-
-;;;###autoload
-(defun paren-backward-sexp (&optional arg)
-  "Act like `backward-sexp' but also match quoted parens.
-See `paren-match-quoted-paren'."
-  (interactive "p")
-  (or arg (setq arg 1))
-  (paren-forward-sexp (- arg)))
-
-;;; ======================================================================
-;;; Internal functions
-
-(defun mic-paren-command-idle-hook ()
-  (condition-case paren-error
-      (mic-paren-highlight)
-    (error
-     (unless (window-minibuffer-p (selected-window))
-       (message "mic-paren caught error (please report): %s"
-                paren-error)))))
-
-(defun mic-paren-command-hook ()
-  (or executing-kbd-macro
-      ;; NB: This might cause trouble since the function is unreliable.
-      (input-pending-p)
-      (mic-paren-command-idle-hook)))
-
-(defun mic-paren-minibuffer-setup-hook ()
-  (paren-toggle-matching-quoted-paren 1 t))
-
-(defun mic-paren-minibuffer-exit-hook ()
-  (paren-toggle-matching-quoted-paren -1 t))
-
-(defun mic-paren-fcq-mismatch (pos charquote)
-  (not (zerop (logxor (if (mic-paren-is-following-char-quoted pos) 1 0)
-                      (if charquote 1 0)))))
-
-(defun mic-paren-highlight ()
-  "Do everything: highlighting, dinging, messages, cleaning-up.
-This is the main function of mic-paren."
-  ;; Remove any old highlighting.
-  (mic-delete-overlay (aref mic-paren-overlays 0))
-  (mic-delete-overlay (aref mic-paren-overlays 1))
-  (mic-delete-overlay (aref mic-paren-overlays 2))
-
-  (let ((loc mic-paren-previous-location)
-        charquote two opos matched-paren mismatch face visible)
-
-    (flet ((highlight-p
-            (pos prio which)
-            (let ((fcq (mic-paren-is-following-char-quoted pos))
-                  (right-prio (eq prio paren-priority))
-                  (get-c-0 (if which 'preceding-char 'following-char))
-                  (get-c-1 (if which 'following-char 'preceding-char)))
-              (or (and (eq (char-syntax (funcall get-c-0))
-                           (if which ?\) ?\())
-                       (not (and (eq (char-syntax (funcall get-c-1))
-                                     (if which ?\( ?\)))
-                                 right-prio))
-                       (or paren-match-quoted-paren
-                           (not fcq)))
-                  (and paren-match-paired-delimiter
-                       (eq (char-syntax (funcall get-c-0)) ?\$)
-                       (not (and (eq (char-syntax (funcall get-c-1)) ?\$)
-                                 right-prio))
-                       (not fcq)))))
-
-           (comment-style
-            ()
-            (or (get major-mode 'mic-paren-comment-style)
-                (put major-mode 'mic-paren-comment-style
-                     ;; Tested (lightly) w/ SML, Modula-2, Pascal.
-                     (flet ((sub (str pos) (condition-case ()
-                                               (aref str (if (> 0 pos)
-                                                             (+ (length str)
-                                                                pos)
-                                                           pos))
-                                             (error 0))))
-                       (if (string= "()" (string (sub comment-start 0)
-                                                 (sub comment-end -1)))
-                           'sexp
-                         'normal)))))
-
-           (sexp-ish-comment-edge
-            (p mult)
-            (and (eq 'sexp (comment-style))
-                 (if (> 0 mult)
-                     (prog1 (nth 8 (syntax-ppss (1- p)))
-                       (forward-char 1))
-                   ;; hmmm
-                   (save-match-data
-                     (looking-at (regexp-quote comment-start))))))
-
-           (find-other-paren
-            (forwardp)
-            (let ((mult (if forwardp 1 -1)))
-              ;; Find the position of the other paren.
-              (save-excursion
-                (save-restriction
-                  (when blink-matching-paren-distance
-                    (let ((lim (+ (point) (* blink-matching-paren-distance
-                                             mult))))
-                      (narrow-to-region (if forwardp
-                                            (point-min)
-                                          (max lim (point-min)))
-                                        (if forwardp
-                                            (min lim (point-max))
-                                          (point-max)))))
-                  (condition-case ()
-                      (setq opos (let ((p (point)))
-                                   (if (not (sexp-ish-comment-edge p mult))
-                                       (scan-sexps p mult)
-                                     (forward-comment mult)
-                                     (point))))
-                    (error nil))))
-              ;; We must call matching-paren because `scan-sexps' doesn't
-              ;; care about the kind of paren (e.g., matches '( and '}).
-              ;; However, `matching-paren' only returns the character
-              ;; displaying the matching paren in buffer's syntax-table
-              ;; (regardless of the buffer's current contents!).  Below we
-              ;; compare the results of `scan-sexps' and `matching-paren'
-              ;; and if different we display a mismatch.
-              (let ((c (funcall (if forwardp
-                                    'following-char
-                                  'preceding-char))))
-                (setq matched-paren (matching-paren c))
-                ;; matching-paren can only handle chars with syntax ) or (.
-                (when (eq (char-syntax c) ?\$)
-                  (setq matched-paren c)))
-              ;; If we have changed the syntax of the escape or quote-char
-              ;; we must undo this and we can do this first now.
-              (mic-paren-recharquote charquote)
-              opos))
-
-           (nov
-            (place b e face)
-            (let ((ov (mic-make-overlay b e)))
-              (mic-overlay-put ov 'face face)
-              (mic-overlay-put ov 'priority paren-overlay-priority)
-              (aset mic-paren-overlays
-                    (cdr (assq place '((backw . 0)
-                                       (point . 1)
-                                       (forew . 2))))
-                    ov)))
-
-           (new-location-p
-            ()
-            (not (and (eq (point)           (aref loc 0))
-                      (eq (current-buffer)  (aref loc 1))
-                      (eq (selected-window) (aref loc 2)))))
-
-           (ding-maybe
-            (ok)
-            (and ok paren-ding-unmatched
-                 (new-location-p)
-                 (ding)))
-
-           (sorry
-            (place b e)
-            ;; Highlight unmatched paren.
-            (nov place b e paren-no-match-face)
-            ;; Print no-match message.
-            (and paren-message-no-match
-                 (not (window-minibuffer-p (selected-window)))
-                 (not isearch-mode)
-                 (new-location-p)
-                 (mic-paren-nolog-message "No %sing parenthesis found"
-                                          (if (eq 'backw place)
-                                              "open"
-                                            "clos")))
-            (ding-maybe paren-message-no-match))
-
-           (set-mismatch/face/visible
-            (c-at ofs)
-            (setq mismatch (or (not matched-paren)
-                               (/= matched-paren (funcall c-at opos))
-                               (mic-paren-fcq-mismatch (+ opos ofs) charquote))
-                  face (if mismatch
-                           paren-mismatch-face
-                         paren-match-face)
-                  visible (when (pos-visible-in-window-p opos)
-                            (save-excursion
-                              (goto-char opos)
-                              (let ((hrel (- (current-column)
-                                             (window-hscroll))))
-                                (and (<             -1 hrel)
-                                     (> (window-width) hrel)))))))
-
-           (sexp-mode-p
-            ()
-            (case paren-sexp-mode
-              (match (not mismatch))
-              (mismatch mismatch)
-              ((nil t) paren-sexp-mode)))
-
-           (finish
-            (get-message)
-            ;; Print messages if match is offscreen.
-            (and (not (eq paren-display-message 'never))
-                 (or (not visible) (eq paren-display-message 'always))
-                 (not (window-minibuffer-p (selected-window)))
-                 (not isearch-mode)
-                 (new-location-p)
-                 (let ((message-truncate-lines paren-message-truncate-lines))
-                   (mic-paren-nolog-message
-                    "%s %s"
-                    (if mismatch "MISMATCH:" "Matches")
-                    (funcall get-message opos))))
-            ;; Ding if mismatch.
-            (ding-maybe mismatch)))
-
-      ;; Handle backward highlighting.
-      (when (highlight-p (- (point) 2) 'open t)
-        (setq charquote (mic-paren-uncharquote (- (point) 2)))
-        (if (not (find-other-paren nil))
-            (sorry 'backw (point) (1- (point)))
-          (set-mismatch/face/visible 'char-after -1)
-          (when (or visible paren-highlight-offscreen paren-sexp-mode)
-            (let ((sexp-mismatch (sexp-mode-p)))
-              (nov 'backw opos (if sexp-mismatch
-                                   (point)
-                                 (1+ opos))
-                   face)
-              (when (and (not sexp-mismatch)
-                         paren-highlight-at-point)
-                (nov 'point (1- (point)) (point) face))))
-          (finish 'mic-paren-get-matching-open-text)))
-
-      ;; Handle forward highlighting.
-      (when (highlight-p (1- (point)) 'close nil)
-        (setq charquote (mic-paren-uncharquote (1- (point))))
-        (if (not (find-other-paren t))
-            (sorry 'forew (point) (1+ (point)))
-          (set-mismatch/face/visible 'char-before -2)
-          (when (or visible paren-highlight-offscreen paren-sexp-mode)
-            (nov 'forew (if (sexp-mode-p)
-                            (point)
-                          (1- opos))
-                 opos face))
-          (finish 'mic-paren-get-matching-close-text))))
-
-    ;; Store the point's position.
-    (unless (window-minibuffer-p (selected-window))
-      (aset loc 0 (point))
-      (aset loc 1 (current-buffer))
-      (aset loc 2 (selected-window)))))
-
-(defun mic-paren-get-matching-open-text (open)
-  "Return a string with the context around OPEN-paren.
-If there's stuff on this line preceding the paren, then
-display text from beginning of line to paren.
-
-If, however, the paren is at the beginning of a line (means only
-whitespace before the paren), then skip whitespace forward and
-display text from paren to end of the next line containing
-non-space text.  But if `paren-open-paren-context-backward' is
-non-nil, then skip whitespaces backward and display text from
-beginning of previous line to paren."
-  (let* ((loc (if (eq paren-message-show-linenumber 'sexp)
-                  (point) (point-min)))
-         (str (save-excursion
-                (goto-char open)
-                (if (save-excursion
-                      (skip-chars-backward " \t")
-                      (not (bolp)))
-                    (progn
-                      (beginning-of-line)
-                      (format "%s... [%s%d-]"
-                              (buffer-substring (point) (1+ open))
-                              (if (eq paren-message-show-linenumber 'sexp)
-                                  "-" "")
-                              (count-lines loc open)))
-                  (let (paren-context-string)
-                    (if (not paren-open-paren-context-backward)
-                        (progn
-                          (forward-char 1)
-                          (skip-chars-forward "\n \t")
-                          (end-of-line)
-                          (setq paren-context-string
-                                (buffer-substring open (point))))
-                      (skip-chars-backward "\n \t")
-                      (beginning-of-line)
-                      (setq paren-context-string
-                            (buffer-substring (point) (1+ open))))
-                    (format "%s [%s%d]"
-                            paren-context-string
-                            (if (eq paren-message-show-linenumber 'sexp)
-                                "-" "")
-                            (count-lines loc open)))))))
-    (while (string-match "[\n]" str)
-      (setq str (replace-match paren-message-linefeed-display nil t str)))
-    str))
-
-(defun mic-paren-get-matching-close-text (close)
-  "Return a string with the context around CLOSE-paren.
-The whole line up until the close-paren with \"...\"
-appended if there is more text after the close-paren."
-  (let* ((loc (if (eq paren-message-show-linenumber 'sexp)
-                  (point) (point-min)))
-         (str (save-excursion
-                (goto-char close)
-                (forward-char -1)
-                (skip-chars-backward "\n \t")
-                (beginning-of-line)
-                (format "%s%s [%s%d]"
-                        (buffer-substring (point) close)
-                        (progn
-                          (goto-char close)
-                          (if (looking-at "[ \t]*$")
-                              ""
-                            "..."))
-                        (if (eq paren-message-show-linenumber 'sexp)
-                            "+" "")
-                        (count-lines loc close)))))
-    (while (string-match "[\n]" str)
-      (setq str (replace-match paren-message-linefeed-display nil t str)))
-    str))
-
-(defun mic-paren-is-following-char-quoted (pos)
-  "Return t if character at POS escapes or quotes the following char."
-  (let ((n 0))
-    (while (and (<= (point-min) pos)
-                (memq (char-syntax (char-after pos)) '(?\\ ?/)))
-      (setq n (1+ n)
-            pos (1- pos)))
-    (not (zerop (% n 2)))))
-
-(defun mic-paren-uncharquote (pos)
-  "Modify syntax of character at POS, maybe.
-If the syntax of character C at POS is escape or quote and if the
-character is not escaped or quoted itself then modify its syntax to
-punctuation and return the list (C SYNTAX-STRING-OF-C); otherwise nil."
-  (when (and (<= (point-min) pos)
-             paren-match-quoted-paren
-             (mic-paren-is-following-char-quoted pos))
-    (let ((c (char-after pos)))
-      (modify-syntax-entry c ".")
-      (list c (char-to-string (char-syntax c))))))
-
-(defun mic-paren-recharquote (charquote)
-  "Modify syntax entry according to CHARQUOTE.
-If CHARQUOTE is nil, do nothing.  Otherwise, it
-should be a list of the form (CHAR SYNTAX-STRING)."
-  (when charquote
-    (apply 'modify-syntax-entry charquote)))
-
-;;; ======================================================================
-;;; Initialization when loading
-
-;;; Try to load the timer feature if it's not already loaded.
-(or paren-dont-load-timer
-    (featurep 'timer)
-    (condition-case ()
-        (require 'timer)
-      (error nil)))
-
-(provide 'mic-paren)
-(provide 'paren)
-
-;;; Local variables:
-;;; coding: utf-8
-;;; End:
-;;; mic-paren.el ends here