Gnus development mailing list
 help / color / mirror / Atom feed
* [patch][gnus-fun] Support for random png Faces
@ 2013-09-09 22:05 Rasmus
  2014-01-31 23:47 ` Lars Ingebrigtsen
  0 siblings, 1 reply; 2+ messages in thread
From: Rasmus @ 2013-09-09 22:05 UTC (permalink / raw)
  To: ding

[-- Attachment #1: Type: text/plain, Size: 486 bytes --]

Hi,

There is already support for random X-Face in Gnus.  This patch adds
support for png faces as well.  Further, support to omit certain faces
in a dir is added.  It works nicely e.g. for posting-styles.

I'd welcome any feedback.

I have mainly tested with png faces as the suggested way of producing
X-Faces (e.g. gnus-convert-pbm-to-x-face-command) didn't work as
expected on my system (with compface 1.5.2 and netpbm 10.61.0).

I have signed copyright paper to Emacs.

–Rasmus


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gnus-fun.el-Random-faces-for-png-Face.patch --]
[-- Type: text/x-diff, Size: 6180 bytes --]

From 22cac76a05e72116e868cf18d86f80ffb93ebf67 Mon Sep 17 00:00:00 2001
From: rasmus <rasmus@gmx.us>
Date: Wed, 4 Sep 2013 19:05:15 +0200
Subject: [PATCH] gnus-fun.el: Random faces for png Face.

---
 lisp/ChangeLog   | 18 +++++++++++
 lisp/gnus-fun.el | 93 ++++++++++++++++++++++++++++++++++++++++++++------------
 2 files changed, 92 insertions(+), 19 deletions(-)

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index dfb4d54..abf1acc 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,21 @@
+2013-09-04  Rasmus Pank Roulund  <emacs@pank.eu>
+
+	* gnus-fun.el (gnus-x-face-omit-files): Regexp to omit matched results
+	from random face commands.
+	(gnus-face-directory): Like `gnus-x-face-directory` for png files and
+	Face.
+	(gnus-face-omit-files): Like `gnus-x-face-omit-files` for Face.
+	(gnus--random-face-with-type): Generic function returning a face-type
+	as a string.
+	(gnus--insert-random-face-with-type): Generic function inserting a face
+	in a message buffer header.
+	(gnus-random-x-face): Rewritten to use `gnus--random-face-with-type`.
+	(gnus-insert-random-x-face-header): Rewritten to use
+	`gnus--insert-random-face-with-type`.
+	(gnus-random-face): Return random (png) Face as string.
+	(nus-insert-random-face-header): Insert random (png) Face in a message
+	buffer.
+
 2013-08-28  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* mm-decode.el (mm-temp-files-delete): Fix file deletion logic.
diff --git a/lisp/gnus-fun.el b/lisp/gnus-fun.el
index 1c9b4ce..4eb726a 100644
--- a/lisp/gnus-fun.el
+++ b/lisp/gnus-fun.el
@@ -44,6 +44,24 @@
   :group 'gnus-fun
   :type 'directory)
 
+(defcustom gnus-x-face-omit-files nil
+  "Regexp to match faces in `gnus-x-face-directory' to be omitted."
+  :version "24.3"
+  :group 'gnus-fun
+  :type 'string)
+
+(defcustom gnus-face-directory (expand-file-name "faces" gnus-directory)
+  "*Directory where Face PNG files are stored."
+  :version "24.3"
+  :group 'gnus-fun
+  :type 'directory)
+
+(defcustom gnus-face-omit-files nil
+  "Regexp to match faces in `gnus-face-directory' to be omitted."
+  :version "24.3"
+  :group 'gnus-fun
+  :type 'string)
+
 (defcustom gnus-convert-pbm-to-x-face-command "pbmtoxbm %s | compface"
   "Command for converting a PBM to an X-Face."
   :version "22.1"
@@ -86,35 +104,57 @@ PNG format."
 		  nil shell-command-switch command)))
 
 ;;;###autoload
-(defun gnus-random-x-face ()
-  "Return X-Face header data chosen randomly from `gnus-x-face-directory'."
-  (interactive)
-  (when (file-exists-p gnus-x-face-directory)
-    (let* ((files (directory-files gnus-x-face-directory t "\\.pbm$"))
-	   (file (nth (random (length files)) files)))
+(defun gnus--random-face-with-type (dir ext omit fun)
+  "Return file from DIR with extension EXT, omitting matches of OMIT, processed by FUN."
+  (when (file-exists-p dir)
+    (let* ((files
+            (remove nil (mapcar
+                         (lambda (f) (unless (string-match (or omit "^$") f) f))
+                         (directory-files dir t ext))))
+           (file (nth (random (length files)) files)))
       (when file
-	(gnus-shell-command-to-string
-	 (format gnus-convert-pbm-to-x-face-command
-		 (shell-quote-argument file)))))))
+        (funcall fun file)))))
 
+;;;###autoload
 (autoload 'message-goto-eoh "message" nil t)
+(autoload 'message-insert-header "message" nil t)
+
+(defun gnus--insert-random-face-with-type (fun type)
+  "Get a random face using FUN and insert it as a header TYPE.
+
+For instance, to insert an X-Face use `gnus-random-x-face' as FUN
+  and \"X-Face\" as TYPE."
+  (let ((data (funcall fun)))
+    (save-excursion
+      (if data
+          (progn (message-goto-eoh)
+                 (insert  type ": " data "\n"))
+	(message
+	 "No face returned by the function %s." (symbol-name fun))))))
+
+
+
+;;;###autoload
+(defun gnus-random-x-face ()
+  "Return X-Face header data chosen randomly from `gnus-x-face-directory'.
+
+Files matching `gnus-x-face-omit-files' are not considered."
+  (interactive)
+  (gnus--random-face-with-type gnus-x-face-directory "\\.pbm$" gnus-x-face-omit-files
+                         (lambda (file)
+                           (gnus-shell-command-to-string
+                            (format gnus-convert-pbm-to-x-face-command
+                                    (shell-quote-argument file))))))
 
 ;;;###autoload
 (defun gnus-insert-random-x-face-header ()
   "Insert a random X-Face header from `gnus-x-face-directory'."
   (interactive)
-  (let ((data (gnus-random-x-face)))
-    (save-excursion
-      (message-goto-eoh)
-      (if data
-	  (insert "X-Face: " data)
-	(message
-	 "No face returned by `gnus-random-x-face'.  Does %s/*.pbm exist?"
-	 gnus-x-face-directory)))))
+  (gnus--insert-random-face-with-type 'gnus-random-x-face 'X-Face))
 
 ;;;###autoload
 (defun gnus-x-face-from-file (file)
-  "Insert an X-Face header based on an image file.
+  "Insert an X-Face header based on an image FILE.
 
 Depending on `gnus-convert-image-to-x-face-command' it may accept
 different input formats."
@@ -126,7 +166,7 @@ different input formats."
 
 ;;;###autoload
 (defun gnus-face-from-file (file)
-  "Return a Face header based on an image file.
+  "Return a Face header based on an image FILE.
 
 Depending on `gnus-convert-image-to-face-command' it may accept
 different input formats."
@@ -191,6 +231,21 @@ FILE should be a PNG file that's 48x48 and smaller than or equal to
 	     (buffer-size)))
     (gnus-face-encode)))
 
+;;;###autoload
+(defun gnus-random-face ()
+  "Return randomly chosen Face from `gnus-face-directory'.
+
+Files matching `gnus-face-omit-files' are not considered."
+  (interactive)
+  (gnus--random-face-with-type gnus-face-directory "\\.png$"
+                         gnus-face-omit-files
+                         'gnus-convert-png-to-face))
+
+;;;###autoload
+(defun gnus-insert-random-face-header ()
+  "Insert a randome Face header from `gnus-face-directory'."
+  (gnus--insert-random-face-with-type 'gnus-random-face 'Face))
+
 (defface gnus-x-face '((t (:foreground "black" :background "white")))
   "Face to show X-Face.
 The colors from this face are used as the foreground and background
-- 
1.8.4


[-- Attachment #3: Type: text/plain, Size: 10 bytes --]


-- 
ツ


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [patch][gnus-fun] Support for random png Faces
  2013-09-09 22:05 [patch][gnus-fun] Support for random png Faces Rasmus
@ 2014-01-31 23:47 ` Lars Ingebrigtsen
  0 siblings, 0 replies; 2+ messages in thread
From: Lars Ingebrigtsen @ 2014-01-31 23:47 UTC (permalink / raw)
  To: Rasmus; +Cc: ding

Rasmus <rasmus@gmx.us> writes:

> I have mainly tested with png faces as the suggested way of producing
> X-Faces (e.g. gnus-convert-pbm-to-x-face-command) didn't work as
> expected on my system (with compface 1.5.2 and netpbm 10.61.0).
>
> I have signed copyright paper to Emacs.

Looks good.  I've now installed this in Ma Gnus 0.10.

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2014-01-31 23:47 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-09-09 22:05 [patch][gnus-fun] Support for random png Faces Rasmus
2014-01-31 23:47 ` Lars Ingebrigtsen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).