[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/eev 19623c4 05/64: Rewrote eev-rcirc.el.
From: |
Stefan Monnier |
Subject: |
[elpa] externals/eev 19623c4 05/64: Rewrote eev-rcirc.el. |
Date: |
Sun, 7 Apr 2019 16:59:02 -0400 (EDT) |
branch: externals/eev
commit 19623c4693869cdee24f88191058e749410f1c09
Author: Eduardo Ochs <address@hidden>
Commit: Eduardo Ochs <address@hidden>
Rewrote eev-rcirc.el.
---
eejump.el | 4 +-
eev-rcirc.el | 177 +++++++++++++++++++++++++++++++++++++----------------------
2 files changed, 115 insertions(+), 66 deletions(-)
diff --git a/eejump.el b/eejump.el
index 38d660e..b50ec93 100644
--- a/eejump.el
+++ b/eejump.el
@@ -19,7 +19,7 @@
;;
;; Author: Eduardo Ochs <address@hidden>
;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version: 2013jan04
+;; Version: 2013sep08
;; Keywords: e-scripts
;;
;; Latest version: <http://angg.twu.net/eev-current/eejump.el>
@@ -86,6 +86,8 @@ See: (find-eejump-intro \"\\neejump\\n\")"
(defun eejump-5 () (find-eev-intro))
(defun eejump-50 () (find-eev "eev-readme.el"))
(defun eejump-59 () (find-eev-update-links))
+(defun eejump-6 () (find-freenode "#eev"))
+(defun eejump-66 () (find-freenode-3a "#eev"))
(defun eejump-55 () (find-fline "~/.emacs"))
(defun eejump-552 () (find-eev "eev2-all.el"))
diff --git a/eev-rcirc.el b/eev-rcirc.el
index fbd5f7d..e6bc17e 100644
--- a/eev-rcirc.el
+++ b/eev-rcirc.el
@@ -19,7 +19,7 @@
;;
;; Author: Eduardo Ochs <address@hidden>
;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version: 2013aug16
+;; Version: 2013sep08
;; Keywords: e-scripts
;;
;; Latest version: <http://angg.twu.net/eev-current/eev-rcirc.el>
@@ -30,90 +30,137 @@
;;; Commentary:
+;; Here we implement a very thin eev-ish layer on top of rcirc. The
+;; main goal is:
+;;
+;; instant gratification and irc-ing for late-night zombie-mode
+;; half-brain-dead hackers
+;;
+;; which, in practical terms, means the following. Suppose that we
+;; want to ask something on the channel #foobar of Freenode; we run
+;; `M-x find-freenode-links', adjust the intended channel name to
+;; #foobar, and set `M-99j' and `M-9j' to the right hyperlinks. Then,
+;; if we are in a buffer called "stuff", `M-99j' would create this
+;; window setting:
+;;
+;; _____________________
+;; | | |
+;; | | freenode |
+;; | | server |
+;; | stuff | buffer |
+;; | |__________|
+;; | | |
+;; | | #foobar |
+;; |__________|__________|
+;;
+;; which is great for following in real-time the connection being
+;; established - I find this essential for when it is very late at
+;; night and I am half-brain-dead -, and `M-9j' just switches to the
+;; buffer of the channel #foobar.
+;; Conventions on arguments:
+;; CHANNELS can be a list ("#foo" "#bar") or a string like "#foo #bar";
+;; If CHANNEL is a string starting with "#", it is a channel to /join;
+;; if CHANNEL is a string not starting with "#", it is a nick to /query;
+;; if CHANNEL is nil, that means to use the server buffer.
-
-;; When we run (rcirc-connect "irc.freenode.net" ...)
-;; and the buffer "*irc.freenode.net*" already exists, `rcirc-connect'
-;; does nasty things; so it's better to run
-;; (eepitch '(ee-rcirc-connect))
-;; instead.
+;; Building blocks:
;;
-;; Actually we want to do another trick too. Killing the buffer
-;; "*irc.freenode.net*" is too expensive, as reconnection takes about
-;; 10 seconds; so we set `eepitch-kill' to something different from
-;; the default, which is `(eepitch-kill-buffer)'.
-
-(defun ee-rcirc-serverbuf (server) (format "*%s*" server))
-(defun ee-rcirc-channelbuf (server channel) (format "address@hidden" channel
server))
-(defun ee-rcirc-connected (server)
- (and (get-buffer (ee-rcirc-serverbuf server))
- (rcirc-buffer-process (ee-rcirc-serverbuf server))))
-
-(defun ee-rcirc-connect (server channels)
- "Connect to an irc server (if not already connected).
-TODO: if we are already connected to SERVER, just connect to CHANNELS."
- (if (not (ee-rcirc-connected server))
- (rcirc-connect server nil nil nil nil channels))
- (switch-to-buffer (ee-rcirc-serverbuf server)))
+(defun ee-rcirc-buffer (server &optional channel)
+ "Return the name of an rcirc server (or channel, or chat) buffer."
+ (if channel (format "address@hidden" channel server) (format "*%s*" server)))
+(defun ee-rcirc-process (server)
+ (get-buffer-process (ee-rcirc-buffer server)))
+(defun ee-rcirc-connected (server)
+ "Return non-nil if we are already connected to SERVER."
+ (and (get-buffer (ee-rcirc-buffer server))
+ (rcirc-buffer-process (ee-rcirc-buffer server))))
-;; Hyperlinks to rcirc buffers
-;;
-(defun find-rcirc-buffer (server channels &optional channel &rest
pos-spec-list)
- "Connect to an irc server (if not already connected) and switch to CHANNEL.
-If CHANNEL is a string starting with \"#\", it is a channel to /join;
-if CHANNEL is a string not starting with \"#\", it is a nick to /query;
-if CHANNEL is nil, that means to use the server buffer."
- (ee-rcirc-connect server channels)
+(defun ee-rcirc-connect (server channels)
+"Connect to the irc server SERVER, if not already connected, and join
CHANNELS."
+ (if (not (ee-rcirc-connected server))
+ (rcirc-connect server nil nil nil nil (ee-split channels))))
+
+(defun ee-rcirc-join-channels (server channels)
+ "Join CHANNELS on server SERVER (which we must be already connected to)."
+ (rcirc-join-channels (ee-rcirc-process server) (ee-split channels)))
+
+(defun ee-rcirc-join-channel (server channel)
+ "Join CHANNEL on server SERVER (which we must be already connected to).
+CHANNEL can also be nil, meaning the server buffer, or a nick to /query."
+ (switch-to-buffer (ee-rcirc-buffer server))
(if channel
(if (equal "#" (substring channel 0 1))
(rcirc-cmd-join channel)
- (rcirc-cmd-query channel)))
- (apply 'ee-goto-position pos-spec-list))
+ (rcirc-cmd-query channel))))
-(defvar ee-freenode-server "irc.freenode.net")
-(defvar ee-freenode-channels '("#eev"))
-
-(defun find-freenode (&optional channel &rest pos-spec-list)
- (apply 'find-rcirc-buffer
- ee-freenode-server ee-freenode-channels channel pos-spec-list))
-
-;; (find-freenode "#eev")
-;; (find-freenode "#org-mode")
-;; (find-freenode "edrx")
-
-
-;; (find-freenode)
+;; Medium-level
+;;
+(defun find-rcirc-buffer0 (server &optional channel &rest pos-spec-list)
+ "Switch to the buffer for CHANNEL on SERVER. Make no attempt to (re)connect."
+ (apply 'find-ebuffer (ee-rcirc-buffer server channel) pos-spec-list))
+(defun find-rcirc-buffer (server ichannels achannels channel &rest
pos-spec-list)
+ "Switch to the buffer for CHANNEL on SERVER.
+When not connected connect to SERVER, taking the initial list of
+channels from ICHANNELS; always make sure that we are connected
+to ACHANNELS and to CHANNEL, and switch to the buffer for
+CHANNEL."
+ (ee-rcirc-connect server (ee-split ichannels))
+ (ee-rcirc-join-channels server (ee-split achannels))
+ (ee-rcirc-join-channel server channel)
+ (apply 'find-rcirc-buffer0 server channel pos-spec-list))
-;; Support for eepitch'ing to rcirc buffers
+;; High-level
;;
-(defun ee-rcirc-sexp (server channel)
- `(find-ebuffer ,(ee-rcirc-channelbuf server channel)))
-
-(defun eepitch-kill-rcirc (server)
- (message "Not killing: %S" (ee-rcirc-serverbuf server)))
-
-(defun eepitch-rcirc-server (server channels)
- "Connect to the irc server SERVER if not already connected, and to CHANNELS."
- (interactive)
- (eepitch `(ee-rcirc-connect ,server ',channels))
- (setq eepitch-kill `(eepitch-kill-rcirc ,server))
- (ee-rcirc-sexp server (car channels))) ; easter egg (use M-1 C-x C-e)
-
-(defun eepitch-freenode (&optional channels) (interactive)
- (eepitch-rcirc-server "irc.freenode.net" (or channels '("#eev"))))
+(defvar ee-freenode-server "irc.freenode.net")
+(defvar ee-freenode-ichannels "#eev #rcirc")
+(defvar ee-freenode-achannels "#eev #rcirc")
-(defun eepitch-ircgnome (&optional channels) (interactive)
- (eepitch-rcirc-server "irc.gnome.org" (or channels '("#docs"))))
+(defun find-freenode (&optional channel &rest pos-spec-list)
+ (apply 'find-rcirc-buffer
+ ee-freenode-server
+ ee-freenode-ichannels
+ ee-freenode-achannels channel pos-spec-list))
+(defun find-freenode-3a (channel)
+ (find-3a nil '(find-freenode) '(find-freenode channel)))
+;; (find-find-links-links "{k}" "freenode" "channel")
+;;
+(defun ee-irc-channel-around-point ()
+ (ee-stuff-around-point "#A-Za-z0-9_"))
+
+(defun find-freenode-links (&optional channel &rest pos-spec-list)
+"Visit a temporary buffer containing hyperlinks for foo."
+ (interactive (list (ee-irc-channel-around-point)))
+ (setq channel (or channel "{channel}"))
+ (apply 'find-elinks
+ `((find-freenode-links ,channel)
+ ;; Convention: the first sexp always regenerates the buffer.
+ (find-efunction 'find-freenode-links)
+ ""
+ (setq ee-freenode-ichannels ,ee-freenode-ichannels)
+ (setq ee-freenode-achannels ,ee-freenode-achannels)
+ ""
+ (find-freenode ,channel)
+ (find-freenode-3a ,channel)
+ (defun eejump-9 () (find-freenode ,channel))
+ (defun eejump-99 () (find-freenode-3a ,channel))
+ ""
+ ,(ee-template0 "\
+")
+ )
+ pos-spec-list))
+
+;; Tests: (find-freenode-links)
+;; (find-freenode-links "#eev")
(provide 'eev-rcirc)
- [elpa] branch externals/eev created (now fb9f4c6), Stefan Monnier, 2019/04/07
- [elpa] externals/eev 99d0c67 03/64: Changes in `find-videos-intro'; `ee-copy-after-and' -> `ee-copy-rest', Stefan Monnier, 2019/04/07
- [elpa] externals/eev 5320469 04/64: `eepitch-do' and `find-wget', Stefan Monnier, 2019/04/07
- [elpa] externals/eev 834e074 10/64: `find-customizegroup', Stefan Monnier, 2019/04/07
- [elpa] externals/eev 301db1e 13/64: Make some arguments optional, Stefan Monnier, 2019/04/07
- [elpa] externals/eev 95397ce 02/64: Added `ee-copy-after-and' and `find-eejumps', Stefan Monnier, 2019/04/07
- [elpa] externals/eev b30a527 15/64: Corrected typos in `find-eev-quick-intro'., Stefan Monnier, 2019/04/07
- [elpa] externals/eev 19623c4 05/64: Rewrote eev-rcirc.el.,
Stefan Monnier <=
- [elpa] externals/eev 70964f1 20/64: Add `find-eev-install-intro' and `find-eev-install-links', Stefan Monnier, 2019/04/07
- [elpa] externals/eev 23f0366 22/64: Added instructions for using the git repository., Stefan Monnier, 2019/04/07
- [elpa] externals/eev 4b2e5aa 18/64: Added eev-codings.el, started to convert files to UTF-8, Stefan Monnier, 2019/04/07
- [elpa] externals/eev 2009036 21/64: Added text to `find-escripts-intro', Stefan Monnier, 2019/04/07
- [elpa] externals/eev e4964a3 06/64: Rewrote `find-brxxx-intro'., Stefan Monnier, 2019/04/07
- [elpa] externals/eev 4a7bfcf 11/64: High-level words for `find-wset' (code and docs), Stefan Monnier, 2019/04/07
- [elpa] externals/eev a334821 08/64: `ee-mplayer-{audio, video}-options', `find-here-links', Stefan Monnier, 2019/04/07
- [elpa] externals/eev d77a040 24/64: Added `find-sh-at-dir'; added new sections to `find-eev-quick-intro', Stefan Monnier, 2019/04/07
- [elpa] externals/eev 1b0d1dd 25/64: Added several sections to `find-eev-quick-intro'., Stefan Monnier, 2019/04/07
- [elpa] externals/eev b17c70b 29/64: Small changes in README.md, Stefan Monnier, 2019/04/07