diff lisp/erc/erc-spelling.el @ 68451:fc745b05e928

Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22 Creator: Michael Olson <mwolson@gnu.org> Install ERC.
author Miles Bader <miles@gnu.org>
date Sun, 29 Jan 2006 13:08:58 +0000
parents
children 86c478cccc57
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/erc/erc-spelling.el	Sun Jan 29 13:08:58 2006 +0000
@@ -0,0 +1,93 @@
+;;; erc-spelling.el --- use flyspell in ERC
+
+;; Copyright (C) 2005, 2006  Free Software Foundation, Inc.
+
+;; Author: Jorgen Schaefer <forcer@forcix.cx>
+;; Keywords: irc
+;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcSpelling
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+
+;; This is an ERC module to enable flyspell mode in ERC buffers. This
+;; ensures correct behavior of flyspell, and even sets up a
+;; channel-local dictionary if so required.
+
+;;; Code:
+
+(require 'erc)
+(require 'flyspell)
+
+;;;###autoload (autoload 'erc-spelling-mode "erc-spelling" nil t)
+(define-erc-module spelling nil
+  "Enable flyspell mode in ERC buffers."
+  ;; Use erc-connect-pre-hook instead of erc-mode-hook as pre-hook is
+  ;; called AFTER the server buffer is initialized.
+  ((add-hook 'erc-connect-pre-hook 'erc-spelling-init)
+   (mapc (lambda (buffer)
+           (with-current-buffer buffer (erc-spelling-init)))
+         (erc-buffer-list)))
+  ((remove-hook 'erc-connect-pre-hook 'erc-spelling-init)
+   (mapc (lambda (buffer)
+           (with-current-buffer buffer (flyspell-mode 0)))
+         (erc-buffer-list))))
+
+(defcustom erc-spelling-dictionaries nil
+  "An alist mapping buffer names to dictionaries.
+The `car' of every cell is a buffer name, the `cadr' is the
+string name of an associated dictionary.
+The dictionary is inherited from server buffers, so if you want a
+default dictionary for some server, you can use a server buffer
+name here."
+  :type '(choice (const nil)
+                 (repeat (cons (string :tag "Buffer name")
+                               (string :tag "Dictionary"))))
+  :group 'erc-spelling)
+
+(defun erc-spelling-init ()
+  "Enable flyspell mode in an ERC buffer."
+  (let ((name (downcase (buffer-name)))
+        (dicts erc-spelling-dictionaries))
+    (while (and dicts
+                (not (string= name (downcase (caar dicts)))))
+      (setq dicts (cdr dicts)))
+    (setq ispell-local-dictionary
+          (if dicts
+              (cadr (car dicts))
+            (let ((server (erc-server-buffer)))
+              (if server
+                  (with-current-buffer server
+                    ispell-local-dictionary)
+                nil)))))
+  (setq flyspell-generic-check-word-p 'erc-spelling-flyspell-verify)
+  (flyspell-mode 1))
+
+(put 'erc-mode
+     'flyspell-mode-predicate
+     'erc-spelling-flyspell-verify)
+
+(defun erc-spelling-flyspell-verify ()
+  "Flyspell only the input line, nothing else."
+  (> (point)
+     erc-input-marker))
+
+(provide 'erc-spelling)
+
+;; arch-tag: 04ae1c46-0fd1-4e1a-8b80-55bfa471c945
+;;; erc-spelling.el ends here