--- /dev/null
+<!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 <<a href="mailto:steve@sxemacs.org">steve@sxemacs.org</a>>
+;; Maintainer: Steve Youngs <<a href="mailto:steve@sxemacs.org">steve@sxemacs.org</a>>
+;; Created: <2007-12-02>
+;; Time-stamp: <Thursday Apr 9, 2020 19:11:39 steve>
+;; Download: <<a href="https://downloads.sxemacs.org/SYinits">https://downloads.sxemacs.org/SYinits</a>>
+;; HTMLised: <<a href="https://www.sxemacs.org/SYinits/16-riece.html">https://www.sxemacs.org/SYinits/16-riece.html</a>>
+;; 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">&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">&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">&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">&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">&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) => 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 => %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> (< (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">&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<TAB> MyNick:<SPC></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">\\></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" <<a href="mailto:marcus@sxemacs.org">marcus@sxemacs.org</a>> 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 ?< "<span class="string">w </span>" table)
+ (modify-syntax-entry ?, "<span class="string">w </span>" table)
+ (modify-syntax-entry ?> "<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">&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">&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">&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">&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">&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">&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 © 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>