* riece-unread.el (riece-unread-requires): Require 'riece-history.
[riece] / lisp / riece-yank.el
index e92f499..b6a2115 100644 (file)
@@ -1,4 +1,4 @@
-;;; riece-kill.el --- enter the element in kill-ring
+;;; riece-yank.el --- enter the element of kill-ring
 ;; Copyright (C) 2004 Masatake YAMATO
 
 ;; Author: Masatake YAMATO <jet@gyve.org>
 ;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
-;;
-;; In riece's command buffer, you can send the top element of kill-ring
-;; by C-c y. 
-;; Don't forget do (riece-command-enable-addon 'riece-yank).
-;;
+
+;; NOTE: This is an add-on module for Riece.
+
 ;;; Code:
 (require 'riece-commands)
 
 (defgroup riece-yank nil
-  "Enter the element of `kill-ring'"
+  "Enter the element of kill-ring."
   :tag "Yank"
   :prefix "riece-"
   :group 'riece)
   :type 'number
   :group 'riece-yank)
 
-(defvar riece-yank-enabled nil)
+(defcustom riece-yank-strip-space nil
+  "If non-nil, strip common spaces in front of lines and blank lines
+before/after the first/last non-blank line."
+  :type 'boolean
+  :group 'riece-yank)
+
+(defconst riece-yank-description
+  "Enter the element of kill-ring.")
 
 (defun riece-yank-insinuate ()
   )
 
+(defvar riece-command-mode-map)
 (defun riece-yank-enable ()
-  (define-key riece-command-mode-map "\C-cy" 'riece-command-yank)
-  (setq riece-yank-enabled t))
+  (define-key riece-command-mode-map "\C-cy" 'riece-command-yank))
 (defun riece-yank-disable ()
-  (define-key riece-command-mode-map "\C-cy" 'undefined)
-  (setq riece-yank-enabled nil))
+  (define-key riece-command-mode-map "\C-cy" 'undefined))
+
+(defun riece-yank-strip-space (string)
+  (with-temp-buffer
+    (insert string)
+    (untabify (point-min) (point-max))
+    ;; Delete blank lines before the first non-blank line.
+    (goto-char (point-min))
+    (while (looking-at " *$")
+      (delete-region (point) (progn (forward-line) (point))))
+    ;; Delete blank lines after the last non-blank line.
+    (goto-char (point-max))
+    (while (progn (beginning-of-line) (looking-at " *$"))
+      (delete-region (point) (progn (end-of-line 0) (point))))
+    ;; Delete common spaces in front of lines.
+    (let ((space-width (point-max)))
+      (while (looking-at " +")
+       (setq space-width (min space-width (length (match-string 0))))
+       (forward-line))
+      (goto-char (point-min))
+      (while (not (eobp))
+       (delete-char space-width)
+       (forward-line)))
+    (buffer-string)))
 
-(defun riece-command-yank (prefix)
-  (interactive "sPrefix: ")
+(defun riece-command-yank (arg prefix)
+  (interactive "P\nsPrefix: ")
   (when (or (not prefix)
            (string= prefix ""))
     (setq prefix " "))
         msg)
     (unless kill
       (error "Nothing to send in kill-ring"))
+    (if riece-yank-strip-space
+       (setq kill (riece-yank-strip-space kill)))
     (setq msg (split-string kill "\n"))
     (when (y-or-n-p (format "Send \"%s\"\n? " kill))
       (mapcar
        (lambda (x) 
-        (riece-command-send-message (concat prefix x) nil)
+        (riece-command-send-message (concat prefix x) arg)
         ;; Without next line, you will be kicked out from ircd.
-        ;; It may means "Don't send much data at once."
+        ;; It may mean "Don't send much data at once."
         (sit-for riece-yank-tick))
        msg))))