Add HTML versions of my init files
[website] / SYinits / 16-riece.html
diff --git a/SYinits/16-riece.html b/SYinits/16-riece.html
new file mode 100644 (file)
index 0000000..9c9a428
--- /dev/null
@@ -0,0 +1,931 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!-- Created by htmlize-1.34 in css mode. -->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <title>16-riece.el</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta name="author" content="Steve Youngs" />
+    <meta name="owner" content="steve@sxemacs.org" />
+    <style type="text/css">
+    <!--
+      body {
+        color: #ffffff;
+        background-color: #000000;
+      }
+      .comment {
+        /* font-lock-comment-face */
+        color: #87ceeb;
+      }
+      .doc-string {
+        /* font-lock-doc-string-face */
+        color: #32cd32;
+      }
+      .function-name {
+        /* font-lock-function-name-face */
+        color: #ffff00;
+        font-weight: bold;
+      }
+      .keyword {
+        /* font-lock-keyword-face */
+        color: #fa8072;
+      }
+      .reference {
+        /* font-lock-reference-face */
+        color: #40e0d0;
+      }
+      .string {
+        /* font-lock-string-face */
+        color: #00cd00;
+      }
+      .type {
+        /* font-lock-type-face */
+        color: #1e90ff;
+      }
+      .variable-name {
+        /* font-lock-variable-name-face */
+        color: #ffdab9;
+      }
+      .warning {
+        /* font-lock-warning-face */
+        color: #ff0000;
+        font-weight: bold;
+      }
+
+      a {
+        color: #FF0000;
+        background-color: inherit;
+        font: inherit;
+        font-weight: bold;
+        text-decoration: underline;
+      }
+      a:hover {
+        color: #FFFFFF;
+        background-color: #FD00FD;
+        text-decoration: underline;
+      }
+      .img a:hover {
+        background-color: #000000;
+        text-decoration: none;
+      }
+    -->
+    </style>
+  </head>
+  <body>
+    <pre>
+<span class="comment">;; 16-riece.el --- Riece (IRC) Settings
+</span>
+<span class="comment">;; Copyright (C) 2007 - 2020 Steve Youngs
+</span>
+<span class="comment">;;     Author: Steve Youngs &lt;<a href="mailto:steve&#64;sxemacs.org">steve&#64;sxemacs.org</a>&gt;
+;; Maintainer: Steve Youngs &lt;<a href="mailto:steve&#64;sxemacs.org">steve&#64;sxemacs.org</a>&gt;
+;;    Created: &lt;2007-12-02&gt;
+;; Time-stamp: &lt;Thursday Apr  9, 2020 19:11:39 steve&gt;
+;;   Download: &lt;<a href="https://downloads.sxemacs.org/SYinits">https://downloads.sxemacs.org/SYinits</a>&gt;
+;;   HTMLised: &lt;<a href="https://www.sxemacs.org/SYinits/16-riece.html">https://www.sxemacs.org/SYinits/16-riece.html</a>&gt;
+;;   Git Repo: git clone https://git.sxemacs.org/syinit
+;;   Keywords: init, compile
+</span>
+<span class="comment">;; This file is part of SYinit
+</span>
+<span class="comment">;; Redistribution and use in source and binary forms, with or without
+;; modification, are permitted provided that the following conditions
+;; are met:
+;;
+;; 1. Redistributions of source code must retain the above copyright
+;;    notice, this list of conditions and the following disclaimer.
+;;
+;; 2. Redistributions in binary form must reproduce the above copyright
+;;    notice, this list of conditions and the following disclaimer in the
+;;    documentation and/or other materials provided with the distribution.
+;;
+;; 3. Neither the name of the author nor the names of any contributors
+;;    may be used to endorse or promote products derived from this
+;;    software without specific prior written permission.
+;;
+;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
+;; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+;; DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+;; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+;; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+;; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+;; BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+;; OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+;; IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+</span>
+<span class="comment">;;; Commentary:
+;;
+;;   My Riece settings.
+;;
+;;   Riece is a very nice IRC client for emacs.  Unlike ERC which
+;;   tries to be like "traditional" IRC clients, Riece is much more
+;;   emacs like.
+;;
+</span>
+<span class="comment">;;; Credits:
+;;
+;;   The HTML version of this file was created with Hrvoje Niksic's
+;;   htmlize.el which is part of the XEmacs "text-modes" package.
+;;
+</span>
+<span class="comment">;;; Todo:
+;;
+;;     
+</span>
+<span class="comment">;;; Code:
+</span>(<span class="keyword">require</span> '<span class="reference">riece-options</span>)
+(<span class="keyword">require</span> '<span class="reference">riece-biff</span>)
+(<span class="keyword">require</span> '<span class="reference">riece-log</span>)
+(<span class="keyword">require</span> '<span class="reference">riece</span>)
+
+<span class="comment">;; For flyspell in the command buffer.  See `</span><span class="comment"><span class="reference">sy-riece-command-mode-hooks</span></span><span class="comment">'.
+</span>(or (<span class="keyword">featurep</span> '<span class="reference">overlay</span>)
+    (ignore-errors (<span class="keyword">require</span> '<span class="reference">overlay</span>)))
+(or (<span class="keyword">featurep</span> '<span class="reference">flyspell</span>)
+    (ignore-errors (<span class="keyword">require</span> '<span class="reference">flyspell</span>)))
+
+<span class="comment">;; Misc setq's
+</span>(setq riece-alias-percent-hack-mask "<span class="doc-string">*.net</span>"
+      riece-biff-check-channels '("<span class="string">#sxemacs</span>"
+                                  "<span class="string">#emchat</span>"
+                                  "<span class="string">#xemacs</span>")
+      riece-channel-buffer-mode t
+      riece-ctlseq-colors
+            '("<span class="string">white</span>" "<span class="string">black</span>" "<span class="string">blue</span>" "<span class="string">green</span>" "<span class="string">red</span>" "<span class="string">brown</span>"
+              "<span class="string">purple</span>" "<span class="string">orange</span>" "<span class="string">yellow</span>" "<span class="string">lightgreen</span>" "<span class="string">darkcyan</span>"
+              "<span class="string">cyan</span>" "<span class="string">lightblue</span>" "<span class="string">HotPink</span>" "<span class="string">grey35</span>" "<span class="string">grey</span>")
+      riece-default-channel-binding nil
+      riece-default-coding-system 'utf-8
+      riece-desktop-notify-always t
+      riece-gather-channel-modes t
+      riece-hide-list '(joins parts quits)
+      riece-ignore-discard-message nil
+      riece-keywords
+      '("<span class="string">Bastard</span>" "<span class="string">EMchat</span>" "<span class="string">eMoney</span>" "<span class="string">Gnus</span>" "<span class="string">LFS</span>" "<span class="string">LinuxFromScratch</span>"
+        "<span class="string">LineageOS</span>" "<span class="string">Lineage</span>" "<span class="string">Linux From Scratch</span>" "<span class="string">Riece</span>" "<span class="string">SteveYoungs</span>"
+        "<span class="string">SXEmacs</span>" "<span class="string">XEmacs</span>" "<span class="string">Youngs</span>" "<span class="string">Steve Youngs</span>" "<span class="string">SYWriting</span>"
+        "<span class="string">SY Writing</span>" "<span class="string">Gaiman</span>" "<span class="string">Neil Gaiman</span>" "<span class="string">xwem</span>")
+      riece-layout '"<span class="doc-string">bottom-right</span>"
+      riece-retry-with-new-nickname t
+      riece-server-alist
+      '(("<span class="string">roddenberry.freenode.net</span>" <span class="reference">:host</span> "<span class="string">roddenberry.freenode.net</span>")
+        ("<span class="string">irc.sxemacs.org</span>" <span class="reference">:host</span> "<span class="string">irc.sxemacs.org</span>")
+        ("<span class="string">irc.freenode.net</span>" <span class="reference">:host</span> "<span class="string">irc.freenode.net</span>")
+        ("<span class="string">irc.au.freenode.net</span>" <span class="reference">:host</span> "<span class="string">irc.au.freenode.net</span>")
+        ("<span class="string">irc.nac.net</span>" <span class="reference">:host</span> "<span class="string">irc.nac.net</span>")
+        ("<span class="string">irc.efnet.org</span>" <span class="reference">:host</span> "<span class="string">irc.efnet.org</span>")
+        ("<span class="string">irc.efnet.net</span>" <span class="reference">:host</span> "<span class="string">irc.efnet.net</span>"))
+      riece-user-agent 'emacs-riece-config
+      riece-user-list-buffer-mode t)
+
+<span class="comment">;; Addons
+</span>(riece-command-insinuate-addon 'riece-yank)
+(riece-command-insinuate-addon 'riece-hangman)
+(riece-command-insinuate-addon 'riece-keepalive)
+(riece-command-insinuate-addon 'riece-shrink-buffer)
+(riece-command-insinuate-addon 'riece-xfaceb)
+(riece-command-insinuate-addon 'riece-button)
+(riece-command-insinuate-addon 'riece-epg)
+
+(riece-command-enable-addon 'riece-hangman)
+
+<span class="comment">;; Leave this OFF it is too annoying.  Fun, but annoying.
+;; (riece-command-insinuate-addon 'riece-doctor)
+;; (riece-command-enable-addon 'riece-doctor)
+</span>
+<span class="comment">;; A few handy functions that extend Riece's features a bit.
+</span>(<span class="keyword">defvar</span> <span class="variable-name">riece-unread-channels</span>)
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-clear-unread-chans</span> ()
+  "<span class="doc-string">Get rid of the unread mark on all channels.</span>"
+  (interactive)
+  (<span class="keyword">let</span> ((current riece-current-channel))
+    (setq riece-unread-channels nil)
+    (riece-switch-to-channel current)))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-relist-chans-clear-blanks</span> ()
+  "<span class="doc-string">Relist the channel buffer removing any blanks in the sequence.
+
+When you part from a channel/user you are left with a gap in the
+sequence of channel numbers in the channels buffer.  This removes
+those gaps.</span>"
+  (interactive)
+  (<span class="keyword">let</span> ((current riece-current-channel))
+    (setq riece-current-channels
+          (remove-if #'null riece-current-channels))
+    (riece-switch-to-channel current)))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-command-memoserv</span> (command)
+  "<span class="doc-string">Send COMMAND, a string, to MEMOSERV.
+
+With prefix arg, also /join.</span>"
+  (interactive "<span class="string">sMemoserv: </span>")
+  (<span class="keyword">when</span> current-prefix-arg
+    (riece-command-join (list ["<span class="string">MemoServ</span>" ""])))
+  (riece-send-string (format "<span class="string">MEMOSERV %s\r\n</span>" command)))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-command-chanserv</span> (command)
+  "<span class="doc-string">Send COMMAND, a string, to CHANSERV.
+
+With prefix arg, also /join.</span>"
+  (interactive "<span class="string">sChanserv: </span>")
+  (<span class="keyword">when</span> current-prefix-arg
+    (riece-command-join (list ["<span class="string">ChanServ</span>" ""])))
+  (riece-send-string (format "<span class="string">CHANSERV %s\r\n</span>" command)))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-command-nickserv</span> (command)
+  "<span class="doc-string">Send COMMAND, a string, to NICKSERV.
+
+With prefix arg, also /join.</span>"
+  (interactive "<span class="string">sNickserv: </span>")
+  (<span class="keyword">when</span> current-prefix-arg
+    (riece-command-join (list ["<span class="string">NickServ</span>" ""])))
+  (riece-send-string (format "<span class="string">NICKSERV %s\r\n</span>" command)))
+
+<span class="comment">;; Seems to not exist anymore. </span><span class="comment"><span class="reference">:-</span></span><span class="comment">(
+</span>(<span class="keyword">defun</span> <span class="function-name">sy-riece-command-seenserv</span> (command)
+  "<span class="doc-string">Send COMMAND, a string, to SEENSERV.
+
+SeenServ doesn't actually exist anymore, so this sends `info nick' to
+NickServ which gives us the same info.
+
+With prefix arg, also /join.</span>"
+  (interactive "<span class="string">sLast saw who (nick): </span>")
+  (<span class="keyword">when</span> current-prefix-arg
+    (riece-command-join (list ["<span class="string">NickServ</span>" ""])))
+  (riece-send-string (format "<span class="string">NICKSERV info %s\r\n</span>" command)))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-command-quick-op</span> ()
+  "<span class="doc-string">Request Ops from ChanServ in the current channel.</span>"
+  (interactive)
+  (<span class="keyword">let</span> ((chan (riece-identity-prefix riece-current-channel)))
+    (sy-riece-command-chanserv (format "<span class="string">OP %s</span>" chan))))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-command-mute-user</span> (<span class="type">&amp;optional</span> user unmute)
+  "<span class="doc-string">Set mode +q on USER, effectively muting them.
+
+Optional prefix arg, UNMUTE to let them speak again.</span>"
+  (interactive "<span class="string">i\nP</span>")
+  (<span class="keyword">let</span> ((user (or user
+                  (completing-read
+                   "<span class="string">(Un)Mute user: </span>"
+                   (riece-with-server-buffer
+                       (riece-identity-server riece-current-channel)
+                     (riece-channel-get-users (riece-identity-prefix
+                                               riece-current-channel)))))))
+    (riece-send-string 
+     (format "<span class="string">MODE %s %sq %s\r\n</span>"
+             (riece-identity-prefix riece-current-channel)
+             (<span class="keyword">if</span> (or unmute
+                     current-prefix-arg)
+                 "<span class="string">-</span>"
+               "<span class="string">+</span>")
+             user))))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-list-banned</span> (channel)
+  "<span class="doc-string">List the banned users on CHANNEL, current if omitted.</span>"
+  (interactive "<span class="string">P</span>")
+  (<span class="keyword">let</span> ((channel (<span class="keyword">if</span> current-prefix-arg
+                     (vector (read-string "<span class="string">Channel: </span>") "")
+                   riece-current-channel)))
+    (riece-send-string
+     (format "<span class="string">MODE %s b\r\n</span>" (riece-identity-prefix channel)))))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-command-ban-user</span> (<span class="type">&amp;optional</span> user unban)
+  "<span class="doc-string">Ban USER from current channel.
+
+Optional prefix arg, UNBAN removes the ban.</span>"
+  (interactive "<span class="string">i\nP</span>")
+  (<span class="keyword">let</span> ((user (or user
+                  (completing-read
+                   "<span class="string">(Un)Ban user: </span>"
+                   (riece-with-server-buffer
+                       (riece-identity-server riece-current-channel)
+                     (riece-channel-get-users (riece-identity-prefix
+                                               riece-current-channel))))))
+        reason)
+    (<span class="keyword">if</span> (or unban
+            current-prefix-arg)
+        (riece-send-string
+         (format "<span class="string">MODE %s -b %s\r\n</span>"
+                 (riece-identity-prefix riece-current-channel)
+                 user))
+      (setq reason (read-string "<span class="string">Reason: </span>" nil nil
+                                "<span class="string">Need a reason?  Look in a mirror!</span>"))
+      (riece-send-string
+       (format "<span class="string">MODE %s +b %s\r\n</span>"
+               (riece-identity-prefix riece-current-channel)
+               user))
+      (riece-command-kick user reason))))
+
+<span class="comment">;; Share the muzak!
+</span>(<span class="keyword">defun</span> <span class="function-name">sy-riece-say-now-playing</span> (<span class="type">&amp;optional</span> notice)
+  "<span class="doc-string">Say into the current channel what mp3 is playing.
+
+With non-nil optional prefix arg, NOTICE, send it as a notice.</span>"
+  (interactive "<span class="string">P</span>")
+  (riece-command-send-message
+   (format "<span class="string">NP: %s</span>" (mpd-now-playing)) 
+   (and current-prefix-arg
+        'notice)))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-say-all-purpose</span> (<span class="type">&amp;optional</span> notice)
+  "<span class="doc-string">Send the all-purpose answer to everything.</span>"
+  (interactive "<span class="string">P</span>")
+  (riece-command-send-message "<span class="string">Adolf Hitler in fishnets</span>"
+                              (<span class="keyword">if</span> current-prefix-arg
+                                  'notice
+                                nil)))
+  
+
+<span class="comment">;; Tell the world what we're using.
+</span>(<span class="keyword">defun</span> <span class="function-name">sy-riece-say-version</span> (<span class="type">&amp;optional</span> notice)
+  "<span class="doc-string">Say the version of Riece we are running.
+
+With non-nil prefix arg, NOTICE, send as a notice.</span>"
+  (interactive "<span class="string">P</span>")
+  (riece-command-send-message
+   (format "<span class="string">I'm using: %s</span>" (riece-extended-version))
+   (<span class="keyword">if</span> current-prefix-arg
+       'notice
+     nil)))
+
+<span class="comment">;; say (foo) =&gt; bar
+</span>(<span class="keyword">defun</span> <span class="function-name">sy-riece-send-form</span> ()
+  "<span class="doc-string">Sends a form and it's eval</span>"
+  (interactive)
+  (<span class="keyword">let*</span> ((form (read-string "<span class="string">sexp: </span>"))
+         (value (eval (read form))))
+    (riece-command-send-message (format "<span class="string">%s =&gt; %s</span>" form value)
+                                (<span class="keyword">if</span> current-prefix-arg
+                                    'notice
+                                  nil))))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-make-rot13-translation-table</span> ()
+  "<span class="doc-string">Create a rot13 table.</span>"
+  (<span class="keyword">let</span> ((i -1)
+        (table (make-string 256 0))
+        (a (char-to-int ?a))
+        (A (char-to-int ?A)))
+    (<span class="keyword">while</span> (&lt; (incf i) 256)
+      (aset table i i))
+    (concat
+     (substring table 0 A)
+     (substring table (+ A 13) (+ A 13 (- 26 13)))
+     (substring table A (+ A 13))
+     (substring table (+ A 26) a)
+     (substring table (+ a 13) (+ a 13 (- 26 13)))
+     (substring table a (+ a 13))
+     (substring table (+ a 26) 255))))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-rot13-string</span> (string)
+  "<span class="doc-string">Convert TEXT to rot13-ese.</span>"
+  (<span class="keyword">let</span> ((table (sy-make-rot13-translation-table)))
+    (<span class="keyword">with-temp-buffer</span>
+      (insert string)
+      (translate-region (point-min) (point-max) table)
+      (buffer-string))))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-send-rot13</span> (text)
+  "<span class="doc-string">Talk in rot13-ese.</span>"
+  (interactive "<span class="string">srot13: </span>")
+  (riece-command-send-message
+   (sy-rot13-string text)
+   (<span class="keyword">if</span> current-prefix-arg
+       'notice
+     nil)))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-morse-string</span> (string)
+  "<span class="doc-string">Return STRING in morse code.</span>"
+  (<span class="keyword">with-temp-buffer</span>
+    (insert string)
+    (morse-region (point-min) (point-max))
+    (goto-char (point-min))
+    (<span class="keyword">while</span> (re-search-forward "<span class="string">/</span>" nil t)
+      (replace-match "<span class="string"> </span>"))
+    (buffer-string)))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-send-morse</span> (text)
+  "<span class="doc-string">Talk in morse code.</span>"
+  (interactive "<span class="string">sMorse: </span>")
+  (riece-command-send-message
+   (sy-morse-string text)
+   (<span class="keyword">if</span> current-prefix-arg
+       'notice
+     nil)))
+
+<span class="comment">;; Show off!
+</span>(<span class="keyword">autoload</span> 'riece-command-ctcp-action "<span class="doc-string">riece-ctcp</span>" nil t)
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-show-off</span> ()
+  "<span class="doc-string">Brag about how many channels/people we're talking to.</span>"
+  (interactive)
+  (sy-riece-relist-chans-clear-blanks)
+  (<span class="keyword">let*</span> ((channels riece-current-channels)
+         (numchans (length channels))
+         (numppl 0)
+         currchan)
+    (<span class="keyword">while</span> channels
+      (setq currchan (car channels))
+      (setq numppl (+ numppl
+                      (length (riece-with-server-buffer
+                                  (riece-identity-server currchan)
+                                (riece-channel-get-users 
+                                 (riece-identity-prefix currchan))))))
+      (setq channels (cdr channels)))
+    (riece-command-ctcp-action
+     riece-current-channel
+     (format
+      "<span class="string">is in %d channels, talking to %d people </span><span class="string"><span class="reference">:-P</span></span>"
+      numchans numppl))))
+
+<span class="comment">;; Brag about how long SXEmacs has been up
+</span>(<span class="keyword">defun</span> <span class="function-name">sy-riece-sxe-uptime</span> ()
+  "<span class="doc-string">Display as action SXEmacs uptime.</span>"
+  (interactive)
+  (<span class="keyword">let*</span> ((ut (uptime))
+         (days (car ut))
+         (hours (cadr ut))
+         (minutes (caddr ut))
+         (seconds (cadddr ut)))
+    (riece-command-ctcp-action
+     riece-current-channel
+     (concat "<span class="string">-=[ SXEmacs Uptime: </span>"
+             (<span class="keyword">unless</span> (zerop days)
+               (<span class="keyword">if</span> (eq days 1)
+                   "<span class="string">1 day, </span>"
+                 (concat (number-to-string days) "<span class="string"> days, </span>")))
+             (<span class="keyword">unless</span> (zerop hours)
+               (<span class="keyword">if</span> (eq hours 1)
+                   "<span class="string">1 hour, </span>"
+                 (concat (number-to-string hours) "<span class="string"> hours, </span>")))
+             (<span class="keyword">unless</span> (zerop minutes)
+               (<span class="keyword">if</span> (eq minutes 1)
+                   "<span class="string">1 minute, </span>"
+                 (concat (number-to-string minutes) "<span class="string"> minutes, </span>")))
+             (<span class="keyword">if</span> (zerop seconds)
+                 "<span class="string">and 0 seconds</span>"
+               (<span class="keyword">if</span> (eq seconds 1)
+                   "<span class="string">and 1 second.</span>"
+                 (concat "<span class="string">and </span>"
+                         (number-to-string seconds)
+                         "<span class="string"> seconds</span>")))
+             "<span class="string"> ]=-</span>"))))
+      
+
+<span class="comment">;; segassem desrever eikeeg ylbirreT
+</span>(<span class="keyword">defun</span> <span class="function-name">sy-riece-reverse</span> ()
+  "<span class="doc-string">.sdrawkcab kaepS</span>"
+  (interactive)
+  (<span class="keyword">let</span> ((str (read-string "<span class="string">Say backwards: </span>")))
+    (riece-command-send-message
+     (concat (nreverse (string-to-list str))) nil)))
+
+<span class="comment">;; .oO0{ what's he thinking? }
+</span>(<span class="keyword">defun</span> <span class="function-name">sy-riece-think</span> ()
+  "<span class="doc-string">Send a .oO0{ think balloon action }.</span>"
+  (interactive)
+  (<span class="keyword">let</span> ((think (read-string "<span class="string">What are you thinking? </span>")))
+    (riece-command-ctcp-action
+     riece-current-channel
+     (format "<span class="string">.oO0{ %s }</span>" think))))
+
+<span class="comment">;; When pictures speak louder than words...
+</span>(<span class="keyword">defun</span> <span class="function-name">sy-riece-fuck-you</span> (<span class="type">&amp;optional</span> upyours)
+  "<span class="doc-string">For those occasions where... you know what I mean.</span>"
+  (interactive "<span class="string">P</span>")
+  (<span class="keyword">let</span> ((fuckyou "<span class="string">
+     _                         _
+    |_|                       |_|
+    | |         /^^^\\         | |
+   _| |_      (| \"o\" |)      _| |_
+ _| | | | _    (_---_)    _ | | | |_
+| | | | |' |    _| |_    | `| | | | |
+|          |   /     \\   |          |
+ \\        /  / /(. .)\\ \\  \\        /
+   \\    /  / /  | . |  \\ \\  \\    /
+     \\  \\/ /    ||Y||    \\ \\/  /
+      \\__/      || ||      \\__/
+                () ()
+                || ||
+               ooO Ooo</span>")
+        (upyours "<span class="string">
+    .-.    
+    |U|    
+    | |    
+    | |    
+   _| |_   
+  | | | |-.
+ /|     ` |
+| |       |
+|         |
+\\         /
+ |       | 
+ |       |</span>")
+        (riece-yank-tick 0.1))
+    (<span class="keyword">with-temp-buffer</span>
+      (<span class="keyword">if</span> current-prefix-arg 
+          (insert upyours)
+        (insert fuckyou))
+      (kill-region (point-min) (point-max)))
+    (riece-command-yank nil nil)))
+
+<span class="comment">;; Nick completion.  Lets face it, compared to other IRC clients like
+;; BitchX or even ERC, Riece's nick completion is pretty sucky. </span><span class="comment"><span class="reference">:-</span></span><span class="comment">(
+;; This is my vain attempt to improve it.
+</span>(<span class="keyword">defun</span> <span class="function-name">sy-riece-command-complete-user</span> ()
+  "<span class="doc-string">Like `</span><span class="doc-string"><span class="reference">riece-command-complete-user</span></span><span class="doc-string">' but restrict to current chan.
+
+This version of nick completion maintains the original case of the
+nick being completed.  The version in Riece downcases the completion
+\(could be a bug\).
+
+If the completion is being inserted at column zero, `: ' is appended,
+otherwise ` ' is added.
+
+The following is not yet implemented, but I'd also like to be able to
+complete from the middle of a nick...
+
+  Nickname     User Types      Expands To
+  --------     ----------      ----------
+  MyNick        nic&lt;TAB&gt;       MyNick:&lt;SPC&gt;</span>"
+  (interactive)
+  (<span class="keyword">let*</span> ((completion-ignore-case t)
+         (table (riece-with-server-buffer
+                    (riece-identity-server riece-current-channel)
+                  (riece-channel-get-users (riece-identity-prefix
+                                            riece-current-channel))))
+         (current (or (current-word) ""))
+         (completion (try-completion current table))
+         (all (all-completions current table)))
+    (<span class="keyword">if</span> (eq completion t)
+        nil
+      (<span class="keyword">if</span> (null completion)
+          (message "<span class="string">Can't find completion for \"%s\"</span>" current)
+        (<span class="keyword">if</span> (equal current completion)
+            (with-output-to-temp-buffer "<span class="string">*Help*</span>"
+              (display-completion-list all))
+          (re-search-forward "<span class="string">\\&gt;</span>" nil t)
+          (delete-region (point) (- (point) (length current)))
+          (<span class="keyword">if</span> (eq (point) (point-at-bol))
+              (insert completion "<span class="string">: </span>")
+            (insert completion "<span class="string"> </span>")))))))
+
+<span class="comment">;(defalias 'riece-command-complete-user 'sy-riece-command-complete-user)
+</span>
+<span class="comment">;; "schme" &lt;<a href="mailto:marcus&#64;sxemacs.org">marcus&#64;sxemacs.org</a>&gt; funky cycling completion
+;; Reworked to support cycling in both directions using dllists, plus
+;; other misc improvements by me. </span><span class="comment"><span class="warning">--SY.</span></span><span class="comment">
+</span>(<span class="keyword">defvar</span> <span class="variable-name">riece-me:completion-time</span> 3
+  "<span class="doc-string">Time in seconds before completion list is reset.</span>")
+(<span class="keyword">defvar</span> <span class="variable-name">riece-me:*completion-timer*</span> (make-itimer)
+  "<span class="doc-string">Completion timer.</span>")
+(<span class="keyword">defvar</span> <span class="variable-name">riece-me:*completion-list*</span> nil
+  "<span class="doc-string">Completion list.</span>")
+
+(<span class="keyword">defvar</span> <span class="variable-name">sy-riece-nick-syntax-table</span>
+  (<span class="keyword">let</span> ((table (copy-syntax-table text-mode-syntax-table)))
+    (modify-syntax-entry ?~  "<span class="string">w </span>" table)
+    (modify-syntax-entry ?`  "<span class="string">w </span>" table)
+    (modify-syntax-entry ?-  "<span class="string">w </span>" table)
+    (modify-syntax-entry ?_  "<span class="string">w </span>" table)
+    (modify-syntax-entry ?+  "<span class="string">w </span>" table)
+    (modify-syntax-entry ?{  "<span class="string">w </span>" table)
+    (modify-syntax-entry ?[  "<span class="string">w </span>" table)
+    (modify-syntax-entry ?}  "<span class="string">w </span>" table)
+    (modify-syntax-entry ?]  "<span class="string">w </span>" table)
+    (modify-syntax-entry ?\\ "<span class="string">w </span>" table)
+    (modify-syntax-entry ?|  "<span class="string">w </span>" table)
+    (modify-syntax-entry ?:  "<span class="string">w </span>" table)
+    (modify-syntax-entry ?\; "<span class="string">w </span>" table)
+    (modify-syntax-entry ?'  "<span class="string">w </span>" table)
+    (modify-syntax-entry ?&lt;  "<span class="string">w </span>" table)
+    (modify-syntax-entry ?,  "<span class="string">w </span>" table)
+    (modify-syntax-entry ?&gt;  "<span class="string">w </span>" table)
+    table)
+  "<span class="doc-string">Syntax table used in funky nick cycling completion.</span>")
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-init-completion-timer</span> ()
+  "<span class="doc-string">Initialise the completion timer.</span>"
+  (<span class="keyword">let</span> ((timer riece-me:*completion-timer*))
+    (set-itimer-function timer #'(<span class="keyword">lambda</span> ()
+                                   (setq riece-me:*completion-list* nil)))
+    (set-itimer-value timer riece-me:completion-time)))
+(add-hook 'riece-after-login-hook #'sy-riece-init-completion-timer)
+
+(<span class="keyword">defsubst</span> <span class="function-name">sy-riece-cycle-list</span> (list <span class="type">&amp;optional</span> reverse)
+  "<span class="doc-string">Return a list of head of LIST, and LIST rotated 1 place forward.
+
+If optional argument, REVERSE is non-nil, rotate the list in the other
+direction.</span>"
+  (<span class="keyword">let</span> ((list (apply #'dllist list))
+        name)
+    (<span class="keyword">if</span> reverse
+        (dllist-rrotate list)
+      (dllist-lrotate list))
+    (setq name (dllist-car list))
+    (list name (dllist-to-list list))))
+
+(<span class="keyword">defsubst</span> <span class="function-name">sy-riece-set-completion-timer</span> ()
+  "<span class="doc-string">(Re)set completion timer's value.</span>"
+  (<span class="keyword">let</span> ((timer riece-me:*completion-timer*))
+    (and (itimerp timer)
+         (set-itimer-value timer riece-me:completion-time))))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-complete-user-backwards</span> ()
+  "<span class="doc-string">Complete nick, cycling backwards.
+See `</span><span class="doc-string"><span class="reference">riece-me:command-complete-user</span></span><span class="doc-string">'.</span>"
+  (interactive)
+  (riece-me:command-complete-user 'reverse))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-command-mode-hooks</span> ()
+  "<span class="doc-string">Add some nice stuff in Riece's command buffer.</span>"
+  (<span class="keyword">when</span> (eq major-mode 'riece-command-mode)
+    <span class="comment">;; Define a few keys here so they don't have the `</span><span class="comment"><span class="reference">C-c</span></span><span class="comment">' prefix
+</span>    (local-set-key [iso-left-tab] #'sy-riece-complete-user-backwards)
+    (local-set-key [(super next)] #'riece-command-user-list-scroll-up)
+    (local-set-key [(super prior)] #'riece-command-user-list-scroll-down)
+    (local-set-key [(hyper next)] #'riece-command-scroll-up)
+    (local-set-key [(hyper prior)] #'riece-command-scroll-down)
+    <span class="comment">;; Turn on flyspell mode if available
+</span>    (and (<span class="keyword">featurep</span> (and 'overlay 'flyspell))
+         (flyspell-mode 1))))
+
+(add-hook 'riece-command-mode-hook #'sy-riece-command-mode-hooks)
+
+
+(<span class="keyword">defun</span> <span class="function-name">riece-me:command-complete-user</span> (<span class="type">&amp;optional</span> reverse)
+  "<span class="doc-string">Like `</span><span class="doc-string"><span class="reference">riece-command-complete-user</span></span><span class="doc-string">' but restrict to current chan.
+
+This completion does not pop up any completion buffers, instead it
+cycles through the user names \"in-place\" with each successive TAB.
+
+With non-nil optional argument, REVERSE, the cycling goes in the other
+direction.
+
+If the completion is being inserted at column zero, \": \" is appended,
+otherwise \" \" is added. </span>"
+  (interactive)
+  (<span class="keyword">unless</span> riece-me:*completion-list*
+    (<span class="keyword">unless</span> (itimer-live-p riece-me:*completion-timer*)
+      (sy-riece-set-completion-timer)
+      (activate-itimer riece-me:*completion-timer*))
+    (<span class="keyword">let*</span> ((completion-ignore-case t)
+           (table (riece-with-server-buffer
+                      (riece-identity-server riece-current-channel)
+                    (riece-channel-get-users (riece-identity-prefix
+                                              riece-current-channel))))
+           (current (current-word))
+           (completion (try-completion current table))
+           (all (all-completions current table)))
+      (<span class="keyword">if</span> (null completion)
+          (message "<span class="string">Can't find completion for \"%s\"</span>" current)
+        (setq riece-me:*completion-list* all))))
+  (<span class="keyword">when</span> riece-me:*completion-list*
+    (multiple-value-bind (completion newlist)
+        (sy-riece-cycle-list riece-me:*completion-list* reverse)
+      (setq riece-me:*completion-list* newlist)
+      (with-syntax-table sy-riece-nick-syntax-table
+        (<span class="keyword">unless</span> (string= "" (current-word))
+          (backward-delete-word))
+        (insert completion)
+        (<span class="keyword">let</span> ((nicksuffix "<span class="string"> </span>"))
+          (<span class="keyword">save-excursion</span>
+            (backward-word)
+            (and (bolp)
+                 (setq nicksuffix "<span class="string">: </span>")))
+          (insert nicksuffix)))
+      (sy-riece-set-completion-timer))))
+
+(<span class="keyword">defalias</span> '<span class="function-name">riece-command-complete-user</span> 'riece-me:command-complete-user)
+<span class="comment">;;;
+</span>
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-add-rem-biff-channel</span> (<span class="type">&amp;optional</span> remove)
+  "<span class="doc-string">Add the current channel to the list of channels for riece-biff.
+
+With optional prefix arg, REMOVE, remove the current channel from the
+biff list.</span>"
+  (interactive "<span class="string">P</span>")
+  (<span class="keyword">if</span> (or current-prefix-arg
+          remove)
+      <span class="comment">;; Remove chan.
+</span>      (<span class="keyword">progn</span>
+        (setq riece-biff-check-channels
+              (remove (riece-identity-prefix riece-current-channel)
+                      riece-biff-check-channels))
+        (message "<span class="string">Channel: %s removed from riece-biff channel list.</span>"
+                 (riece-identity-prefix riece-current-channel)))
+    <span class="comment">;; Add chan.
+</span>    (add-to-list 'riece-biff-check-channels
+                 (riece-identity-prefix riece-current-channel))
+    (message "<span class="string">Channel: %s added to riece-biff channel list.</span>"
+             (riece-identity-prefix riece-current-channel))))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-get-sxemacs-topic-version</span> ()
+  "<span class="doc-string">Return the \"version\" section of #sxemacs topic.</span>"
+  (<span class="keyword">let*</span> ((topic (riece-with-server-buffer
+                    (riece-identity-server riece-current-channel)
+                  (riece-channel-get-topic "<span class="string">#sxemacs</span>")))
+         (ver (third (split-string-by-char topic ?\ ))))
+    ver))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-sxemacs-topic-version-update</span> (<span class="type">&amp;optional</span> newver)
+  "<span class="doc-string">*Updates the \"version\" section of #sxemacs topic with NEWVER.
+With a prefix arg, prompt for the new version string.</span>"
+  (interactive "<span class="string">P</span>")
+  (<span class="keyword">let*</span> ((oldver (sy-riece-get-sxemacs-topic-version))
+         (gitver (substring (shell-command-to-string
+                             "<span class="string">( cd ${SXEWD}; git describe master )</span>")
+                            0 -1))
+         (newver (or (and current-prefix-arg
+                          (read-string "<span class="string">New Version: </span>"
+                                       sxemacs-git-version nil
+                                       sxemacs-git-version))
+                     gitver))
+        (chan (riece-identity-prefix riece-current-channel)))
+    (<span class="keyword">unless</span> (string= chan "<span class="string">#sxemacs</span>")
+      (error 'invalid-argument "<span class="string">Wrong channel</span>" chan))
+    (riece-command-send-message
+     (format "<span class="string">,topic change 1 s/%s/%s/</span>" oldver newver) nil)))
+
+<span class="comment">;; Define keys for those functions.
+</span>(<span class="keyword">define-key</span> <span class="variable-name">riece-command-map</span> (kbd "<span class="string">C-c C</span>") #'sy-riece-clear-unread-chans)
+(<span class="keyword">define-key</span> <span class="variable-name">riece-command-map</span> (kbd "<span class="string">C-c r</span>")
+  #'sy-riece-relist-chans-clear-blanks)
+(<span class="keyword">define-key</span> <span class="variable-name">riece-command-map</span> (kbd "<span class="string">C-c m</span>") #'sy-riece-command-mute-user)
+(<span class="keyword">define-key</span> <span class="variable-name">riece-command-map</span> (kbd "<span class="string">C-b</span>") #'sy-riece-command-ban-user)
+(<span class="keyword">define-key</span> <span class="variable-name">riece-command-map</span> (kbd "<span class="string">C-o</span>") #'sy-riece-command-quick-op)
+(<span class="keyword">define-key</span> <span class="variable-name">riece-command-map</span> (kbd "<span class="string">C-c n</span>") #'sy-riece-say-now-playing)
+(<span class="keyword">define-key</span> <span class="variable-name">riece-command-map</span> (kbd "<span class="string">C-c V</span>") #'sy-riece-say-version)
+(<span class="keyword">define-key</span> <span class="variable-name">riece-command-map</span> (kbd "<span class="string">C-c s</span>") #'sy-riece-show-off)
+(<span class="keyword">define-key</span> <span class="variable-name">riece-command-map</span> (kbd "<span class="string">C-c f</span>") #'sy-riece-fuck-you)
+(<span class="keyword">define-key</span> <span class="variable-name">riece-command-map</span> (kbd "<span class="string">C-c b</span>") #'sy-riece-add-rem-biff-channel)
+(<span class="keyword">define-key</span> <span class="variable-name">riece-command-map</span> (kbd "<span class="string">C-c ?</span>") #'sy-riece-think)
+(<span class="keyword">define-key</span> <span class="variable-name">riece-command-map</span> (kbd "<span class="string">C-c R</span>") #'sy-riece-reverse)
+(<span class="keyword">define-key</span> <span class="variable-name">riece-command-map</span> (kbd "<span class="string">C-c T</span>") #'sy-riece-sxemacs-topic-version-update)
+(<span class="keyword">define-key</span> <span class="variable-name">riece-command-map</span> (kbd "<span class="string">C-c U</span>") #'sy-riece-sxe-uptime)
+(<span class="keyword">define-key</span> <span class="variable-name">riece-command-map</span> [a] #'sy-riece-say-all-purpose)
+
+<span class="comment">;; So I can start Riece in a new frame
+</span>(<span class="keyword">defvar</span> <span class="variable-name">riece-frame</span> nil
+  "<span class="doc-string">Frame for Riece.</span>")
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece</span> (<span class="type">&amp;optional</span> ask)
+  "<span class="doc-string">Run Riece in a new frame.
+
+With non-nil optional prefix ASK Riece will prompt for a server to
+connect to.</span>"
+  (interactive "<span class="string">P</span>")
+  (<span class="keyword">let</span> ((riece-server (<span class="keyword">if</span> current-prefix-arg
+                          nil
+                        "<span class="string">irc.sxemacs.org</span>")))
+    (setq riece-frame (new-frame '((name . "<span class="string">RieceFrame</span>")
+                                   (width . 110))))
+    (select-frame riece-frame)
+    (call-interactively 'riece)
+    (focus-frame riece-frame)))
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-exit-hook</span> ()
+  (<span class="keyword">when</span> (frame-live-p riece-frame)
+    (delete-frame riece-frame))
+  (setq riece-frame nil))
+
+(add-hook 'riece-exit-hook #'sy-riece-exit-hook)
+
+<span class="comment">;; riece-startup-channel-list doesn't fit in with the way I do things
+;; and the way freenode functions.  It gets called too damned early.
+;; What follows is my attempt to make Riece behave better with logging
+;; into freenode, registering to nickserv, joining initial channels,
+;; and getting ops with chanserv.
+</span>(<span class="keyword">defvar</span> <span class="variable-name">sy-riece-startup-channel-list</span>
+  '("<span class="string">#sxemacs</span>"
+    "<span class="string">#emchat</span>"
+    "<span class="string">#xemacs</span>"
+    "<span class="string">#emacs</span>"
+    <span class="comment">;"#kde"
+</span>    <span class="comment">;"#kde-devel"
+</span>    "<span class="string">#LineageOS</span>"
+    <span class="comment">;"#LineageOS-dev"
+</span>    "<span class="string">#lxqt</span>"
+    <span class="comment">;"#postgresql"
+</span>    <span class="comment">;"#systemd"
+</span>    "<span class="string">#zsh</span>"
+    )
+  "<span class="doc-string">List of channels to join after logging in and identifying to nickserv.</span>")
+
+<span class="comment">;; Set up channel coding systems
+;;
+;; This is a PITA... turn on utf and can't read iso-8859-1 special
+;; chars, turn it off and can't read utf.  Have I mentioned how much I
+;; hate this crap? </span><span class="comment"><span class="warning">--SY.</span></span><span class="comment">
+</span>(mapcar
+ #'(<span class="keyword">lambda</span> (chan)
+     (<span class="keyword">if</span> (string-match #r"<span class="string">#\(sxemacs\|emchat\)</span>" chan)
+         (push (cons chan 'iso-8859-1) riece-channel-coding-system-alist)
+       (push (cons chan 'utf-8) riece-channel-coding-system-alist)))
+ sy-riece-startup-channel-list)
+
+(<span class="keyword">defun</span> <span class="function-name">sy-riece-login</span> ()
+  (<span class="keyword">progn</span>
+    (riece-send-string (format "<span class="string">PRIVMSG NickServ </span><span class="string"><span class="reference">:identify</span></span><span class="string"> %s\r\n</span>"
+                               (getenv "<span class="string">IRCPASSWD</span>")))
+    (sleep-for 15))
+  (<span class="keyword">let</span> ((channel-list sy-riece-startup-channel-list)
+        entry identity)
+    (<span class="keyword">while</span> channel-list
+      (<span class="keyword">unless</span> (listp (setq entry (car channel-list)))
+        (setq entry (list (car channel-list))))
+      (<span class="keyword">if</span> (equal (riece-identity-server
+                  (setq identity (riece-parse-identity (car entry))))
+                 riece-server-name)
+          (riece-command-join-channel identity (nth 1 entry)))
+      (setq channel-list (cdr channel-list))))
+  (riece-send-string "<span class="string">PRIVMSG ChanServ </span><span class="string"><span class="reference">:op</span></span><span class="string"> #sxemacs\r\n</span>")
+  (riece-send-string "<span class="string">PRIVMSG ChanServ </span><span class="string"><span class="reference">:op</span></span><span class="string"> #emchat\r\n</span>")
+  (riece-send-string "<span class="string">PRIVMSG ChanServ </span><span class="string"><span class="reference">:op</span></span><span class="string"> #xemacs\r\n</span>")
+  (riece-send-string
+   (format "<span class="string">PRIVMSG SXEbot </span><span class="string"><span class="reference">:identify</span></span><span class="string"> SteveYoungs %s\r\n</span>"
+           (getenv "<span class="string">BOTPASSWD</span>"))))
+
+(add-hook 'riece-after-login-hook #'sy-riece-login)
+
+<span class="comment">;; Until I can find a solution to my hook problem (login hook not
+;; running to completion) I use this to finish the job
+</span>(<span class="keyword">defun</span> <span class="function-name">sy-riece-cleanup-login</span> ()
+  (interactive)
+  (<span class="keyword">let</span> ((metachans
+         #r"<span class="string">.*\.freenode\.net\|\(Chan\|Nick\|Memo\|Seen\)Serv\|SXEbot\|freenode-connect</span>"))
+    (mapcar
+     #'(<span class="keyword">lambda</span> (chan-vect)
+         (mapcar
+          #'(<span class="keyword">lambda</span> (chan)
+              (and (string-match metachans chan)
+                   (riece-part-channel chan-vect)))
+          chan-vect))
+     riece-current-channels)
+    (sy-riece-relist-chans-clear-blanks)
+    (riece-command-switch-to-channel-by-number 1)))
+
+<span class="comment">;; CANNOT get this to work from the hook.  I suspect it is a
+;; networking/async/timing thing.  I have it bound to a key
+;; seq... `C-c C-c l', a PITA though.
+;(add-hook 'riece-after-login-hook #'sy-riece-cleanup-login 'append)
+</span>(<span class="keyword">define-key</span> <span class="variable-name">riece-command-map</span> (kbd "<span class="string">C-c l</span>") 'sy-riece-cleanup-login)
+
+<span class="comment">;; Automatically clear Riece Biff indicator by switching to the right
+;; window/frame
+</span>(<span class="keyword">defun</span> <span class="function-name">sy-riece-check-command-buffer</span> ()
+  (and (get-buffer-window (or riece-command-buffer "<span class="string">*Command*</span>"))
+       (riece-biff-clear)))
+
+(<span class="keyword">defadvice</span> <span class="function-name">switch-to-buffer</span> (after riece-update (<span class="type">&amp;rest</span> args) activate)
+  "<span class="doc-string">After switching buffers, check to see if riece-biff should be cleared.
+The riece-biff modeline indicator will only be cleared if
+`</span><span class="doc-string"><span class="reference">riece-command-buffer</span></span><span class="doc-string">' is visible in the selected frame.</span>"
+  (sy-riece-check-command-buffer))
+
+(add-hook 'select-frame-hook #'sy-riece-check-command-buffer)
+
+<span class="comment">;; Easier switch to Riece when running on TTY.
+</span>(<span class="keyword">defun</span> <span class="function-name">sy-switch-to-riece</span> ()
+  "<span class="doc-string">I use this to switch to Riece when I'm on a tty.</span>"
+  (interactive)
+  (<span class="keyword">when</span> (buffer-live-p riece-command-buffer)
+    (pop-to-buffer riece-command-buffer)
+    (riece-command-configure-windows)))
+
+(<span class="keyword">define-key</span> <span class="variable-name">global-tty-map</span> [(control ?c) ?r] #'sy-switch-to-riece)
+
+<span class="comment">;</span><span class="comment"><span class="reference">:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::</span></span><span class="comment">
+</span>(message "<span class="doc-string">Riece settings loaded successfully</span>")
+
+</pre>
+  <!--  SXEmacs Logo -->
+    <div class="img">
+      <a href="https://www.sxemacs.org/" target="_parent">
+       <img style="padding:0px 5px 0px 0px;border:0;width:88px;height:31px"
+         src="/Images/cbsx.png"
+         title="This page was created entirely in SXEmacs"
+         alt="Created with SXEmacs" />
+      </a>
+<!--  End SXEmacs Logo -->
+<!--  Valid XHTML 1.0 -->
+      <a href="http://validator.w3.org/check?uri=https%3a%2f%2fwww.sxemacs.org%2fSYinits%2f16-riece.html" target="_blank">
+       <img style="padding:0px 5px 0px 10px;border:0;width:88px;height:31px"
+         src="/Images/valid-xhtml10.png"
+         title="Valid XHTML 1.0 Transitional!"
+         alt="Valid XHTML 1.0 Transitional!" />
+      </a>
+    </div>
+<!--  End Valid XHTML 1.0 -->
+
+    <h6>Copyright &#169; 2020 Steve Youngs<br />
+     Verbatim copying and distribution is permitted in any medium,
+    providing this notice is preserved.<br />
+<!-- hhmts start -->
+Last modified: Wed Apr 15 18:15:57 AEST 2020
+<!-- hhmts end -->
+   </h6>
+
+</body>
+</html>