d216ba8149
The PART suppression, the colored nick support, and the ability to fill the buffer window with the messages got me to convert.
161 lines
5.3 KiB
Org Mode
161 lines
5.3 KiB
Org Mode
#+TITLE: IRC and Bitlbee Interface
|
|
#+AUTHOR: Howard X. Abrams
|
|
#+DATE: 2020-12-10
|
|
#+FILETAGS: :emacs:
|
|
|
|
A literate programming configuration file for IRC communiction.
|
|
|
|
#+BEGIN_SRC emacs-lisp :exports none
|
|
;;; ha-irc.el --- configuration for IRC communication. -*- lexical-binding: t; -*-
|
|
;;
|
|
;; © 2020-2022 Howard X. Abrams
|
|
;; This work is licensed under a Creative Commons Attribution 4.0 International License.
|
|
;; See http://creativecommons.org/licenses/by/4.0/
|
|
;;
|
|
;; Author: Howard X. Abrams <http://gitlab.com/howardabrams>
|
|
;; Maintainer: Howard X. Abrams
|
|
;; Created: December 10, 2020
|
|
;;
|
|
;; This file is not part of GNU Emacs.
|
|
;;
|
|
;; *NB:* Do not edit this file. Instead, edit the original literate file at:
|
|
;; ~/other/hamacs/ha-irc.org
|
|
;; And tangle the file to recreate this one.
|
|
;;
|
|
;;; Code:
|
|
#+END_SRC
|
|
* Introduction
|
|
My IRC /needs/ are basic, but I'm not sure which I want to use.
|
|
** ERC
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package erc-hl-nicks
|
|
:after erc)
|
|
|
|
(use-package erc-image
|
|
:after erc)
|
|
|
|
(use-package erc
|
|
:commands erc
|
|
:config
|
|
(setq
|
|
erc-nick "howard-abrams"
|
|
erc-user-full-name "Howard Abrams"
|
|
erc-prompt ">>"
|
|
erc-prompt-for-nickserv-password nil
|
|
erc-auto-query 'bury
|
|
erc-join-buffer 'bury
|
|
erc-interpret-mirc-color t
|
|
erc-rename-buffers t
|
|
erc-hide-list '("JOIN" "PART" "QUIT")
|
|
erc-track-enable-keybindings nil
|
|
erc-track-visibility nil ; Only use the selected frame for visibility
|
|
erc-fill-column 120
|
|
erc-fill-function 'erc-fill-static
|
|
erc-fill-static-center 20
|
|
erc-autojoin-channels-alist '(("howardabrams.com" "#emacs" "#org-mode"))
|
|
erc-quit-reason (lambda (s) (or s "Fading out..."))
|
|
erc-modules
|
|
'(autoaway autojoin button completion fill irccontrols keep-place
|
|
list match menu move-to-prompt netsplit networks noncommands
|
|
readonly ring stamp track hl-nicks)))
|
|
|
|
(defun ha-erc-connect-irc ()
|
|
"Connect to my favorite IRC server with ERC."
|
|
(interactive)
|
|
(let* ((auth-results (auth-source-search :host "howardabrams.com" :port 7777 :max 1))
|
|
(auth-first (first auth-results))
|
|
(username (plist-get auth-first :user))
|
|
(password (funcall (plist-get auth-first :secret))))
|
|
(erc :server "howardabrams.com" :port 7777)
|
|
(sit-for 1)
|
|
(erc-cmd-QUOTE (format "PASS %s:%s" username password))))
|
|
#+END_SRC
|
|
|
|
I like to make sure the text formats to the size of the window:
|
|
#+BEGIN_SRC emacs-lisp
|
|
(defun ha-erc-resize-text ()
|
|
"Resize the ERC text to fill the current window."
|
|
(interactive)
|
|
(setq erc-fill-column (1- (window-width))))
|
|
#+END_SRC
|
|
|
|
* ZNC Server
|
|
I'm using my own ZNC server, and I need to log in with a password stored in my GPG auth storage:
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(defun ha-erc-reconnect-password ()
|
|
"Send the reconnection password string."
|
|
(interactive)
|
|
|
|
(let* ((auth-results (auth-source-search :host "howardabrams.com" :port 7777 :max 1))
|
|
(auth-first (first auth-results))
|
|
(username (plist-get auth-first :user))
|
|
(password (funcall (plist-get auth-first :secret))))
|
|
(erc-cmd-QUOTE (format "PASS %s:%s" username password))))
|
|
#+END_SRC
|
|
|
|
* Key Bindings
|
|
Quick way to start and jump to my IRC world.
|
|
#+BEGIN_SRC emacs-lisp
|
|
(defun ha-irc-persp-start ()
|
|
"Create an IRC workspace and start my IRC client."
|
|
(interactive)
|
|
(persp-switch "irc")
|
|
(ha-erc-connect-irc))
|
|
|
|
(defun ha-irc-persp-switch ()
|
|
"Switch to the IRC workspace and load the next buffer."
|
|
(interactive)
|
|
(persp-switch "irc")
|
|
(call-interactively 'erc-track-switch-buffer))
|
|
#+END_SRC
|
|
|
|
And some global keys to display them:
|
|
#+BEGIN_SRC emacs-lisp
|
|
(ha-leader
|
|
"a i" '("irc switch" . ha-irc-persp-switch)
|
|
"a I" '("irc start" . ha-irc-persp-start))
|
|
#+END_SRC
|
|
|
|
Let's create a leader for this mode:
|
|
#+BEGIN_SRC emacs-lisp
|
|
(general-create-definer ha-irc-leader
|
|
:states '(normal visual motion)
|
|
:keymaps '(erc-mode-map)
|
|
:prefix "SPC m"
|
|
:global-prefix "<f17>"
|
|
:non-normal-prefix "S-SPC")
|
|
#+END_SRC
|
|
|
|
And a quick shortcut to call it:
|
|
#+BEGIN_SRC emacs-lisp
|
|
(ha-irc-leader
|
|
"o" '("next channel" . erc-track-switch-buffer)
|
|
"w" '("resize text" . ha-erc-resize-text)
|
|
"r" '("reconnect" . ha-erc-connect-irc)
|
|
"p" '("send password" . ha-erc-reconnect-password))
|
|
#+END_SRC
|
|
* Display Configuration
|
|
Using the [[https://github.com/seagle0128/doom-modeline][Doom Modeline]] to add notifications:
|
|
#+BEGIN_SRC emacs-lisp
|
|
(setq doom-modeline-irc t
|
|
doom-modeline-irc-stylize 'identity)
|
|
#+END_SRC
|
|
* Technical Artifacts :noexport:
|
|
This will =provide= a code name, so that we can =require= this.
|
|
|
|
#+BEGIN_SRC emacs-lisp :exports none
|
|
(provide 'ha-irc)
|
|
;;; ha-irc.el ends here
|
|
#+END_SRC
|
|
|
|
#+DESCRIPTION: A literate programming configuration file for IRC.
|
|
|
|
#+PROPERTY: header-args:sh :tangle no
|
|
#+PROPERTY: header-args:emacs-lisp :tangle yes
|
|
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
|
|
|
|
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil
|
|
#+OPTIONS: skip:nil author:nil email:nil creator:nil timestamp:nil
|
|
#+INFOJS_OPT: view:nil toc:nil ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js
|