emacs-elpa-diffs
[Top][All Lists]
Advanced

[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)
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]