<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.comp.misc.suckless">
    <title>gmane.comp.misc.suckless</title>
    <link>http://blog.gmane.org/gmane.comp.misc.suckless</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12396"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12391"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12386"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12384"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12364"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12358"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12353"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12345"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12343"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12342"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12340"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12337"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12336"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12329"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12325"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12324"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12323"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12305"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12298"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.misc.suckless/12296"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12396">
    <title>[tabbed] buttonpress on border bug</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12396</link>
    <description>&lt;pre&gt;tabbed recieves buttonpress events on the border, with a negative x value. 
The consequence is that tabbed interprets this as a press on the leftmost 
item in the tab bar. Patch attached.

Sincerely,
David


&lt;/pre&gt;</description>
    <dc:creator>David Dufberg Tøttrup</dc:creator>
    <dc:date>2013-05-18T16:24:17</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12391">
    <title>gettext-stub</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12391</link>
    <description>&lt;pre&gt;http://penma.de/code/gettext-stub/


&lt;/pre&gt;</description>
    <dc:creator>hiro</dc:creator>
    <dc:date>2013-05-16T11:09:22</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12386">
    <title>[dwm] Running dwm in KDE</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12386</link>
    <description>&lt;pre&gt;When I'm on school computers, I run dwm on top of gnome by doing
something like: 
pkill -9 metacity &amp;amp;&amp;amp; dwm
And then I have some rules set to move all the taskbars and things to
workspace 9. It works pretty well.

I've been given a laptop for work that's running Kubuntu. In the KDE
world is there something similar to metacity that I can kill so that I
can start dwm? 

&lt;/pre&gt;</description>
    <dc:creator>Martin Miller</dc:creator>
    <dc:date>2013-05-15T23:44:59</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12384">
    <title>trying to get surf working on Raspberry pi</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12384</link>
    <description>&lt;pre&gt;Hello

i've been building my Raspberry pi system for months now using
http://crux-arm.nu/SupportedDevices/Raspberrypi as base. crux has only
minimal stuff to build on and thus is the best system for me ( it is
really difficult to find minimalist enough system now-a-days ).

i've buit x.org, git, dwm, st and some other things - removed udev and
using devtmpfs, edited startup scripts for my taste ( only some rc.*
files, no directories, etc.).

i also built webkitgtk-2.0.1 with only webkitgtk1 ( and glib, cairo,
atk, gnutls, openssl, gstreamer, gtk2, ....) but surf only gives me
'segmentation' error - no idea why = nothing on syslog, etc...

/mc
---keep-IT-simple---


&lt;/pre&gt;</description>
    <dc:creator>matti christensen</dc:creator>
    <dc:date>2013-05-15T08:28:21</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12364">
    <title>upload via html?</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12364</link>
    <description>&lt;pre&gt;Hi suckless users,
I was wondering what tool or method you would use to purpose simple file
upload on your server (via an html form as example)? CGI? PHP? Other?

Regards,
&lt;/pre&gt;</description>
    <dc:creator>Thuban</dc:creator>
    <dc:date>2013-05-13T16:17:37</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12358">
    <title>surf: typo in  manpage</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12358</link>
    <description>&lt;pre&gt;hopefully the right way to report this. applying the following patch the  
manpage formats as it should:

8&amp;lt;-----------------------------------
diff --git a/surf.1 b/surf.1
index 89276a0..4f66ca9 100644
--- a/surf.1
+++ b/surf.1
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -103,7 +103,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; Zooms page out
  .B Ctrl\-Shift\-q
  Resets Zoom
  .TP
-.B Ctrl\-f and Ctrl\-\\
+.B Ctrl\-f and Ctrl\-/
  Opens the search-bar.
  .TP
  .B Ctrl\-n
8&amp;lt;-----------------------------------

currently, the corresponding line renders as "Ctrl-f and Ctrl-" when  
calling `man surf'

j.


&lt;/pre&gt;</description>
    <dc:creator>j. van den hoff</dc:creator>
    <dc:date>2013-05-11T15:14:01</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12353">
    <title>st slow startup</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12353</link>
    <description>&lt;pre&gt;Hi,

as others also have noticed, Xft based st starts slow on some
systems. For me it helps if FcFontSort() is done lazily as shown
below.

Regards,
Johannes


diff --git a/st.c b/st.c
index 50090a4..425f669 100644
--- a/st.c
+++ b/st.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2643,10 +2643,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; xloadfont(Font *f, FcPattern *pattern) {
 if(!match)
 return 1;
 
-if(!(f-&amp;gt;set = FcFontSort(0, match, FcTrue, 0, &amp;amp;result))) {
-FcPatternDestroy(match);
-return 1;
-}
+f-&amp;gt;set = NULL;
 
 if(!(f-&amp;gt;match = XftFontOpenPattern(xw.dpy, match))) {
 FcPatternDestroy(match);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2666,6 +2663,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; xloadfont(Font *f, FcPattern *pattern) {
 return 0;
 }
 
+int
+xloadfontset(Font *f) {
+FcResult result;
+
+if(!(f-&amp;gt;set = FcFontSort(0, f-&amp;gt;pattern, FcTrue, 0, &amp;amp;result))) {
+return 1;
+}
+return 0;
+}
+
 void
 xloadfonts(char *fontstr, int fontsize) {
 FcPattern *pattern;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2987,7 +2994,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
 r.width = width;
 XftDrawSetClipRectangles(xw.draw, winx, winy, &amp;amp;r, 1);
 
-fcsets[0] = font-&amp;gt;set;
 for(xp = winx; bytelen &amp;gt; 0;) {
 /*
  * Search for the range in the to be printed string of glyphs
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3045,6 +3051,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
 
 /* Nothing was found. */
 if(i &amp;gt;= frclen) {
+if (!font-&amp;gt;set)
+xloadfontset(font);
+fcsets[0] = font-&amp;gt;set;
+
 /*
  * Nothing was found in the cache. Now use
  * some dozen of Fontconfig calls to get the


&lt;/pre&gt;</description>
    <dc:creator>Johannes Hofmann</dc:creator>
    <dc:date>2013-05-09T21:42:50</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12345">
    <title>[xssstate] Use correct format strings</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12345</link>
    <description>&lt;pre&gt;Both idle and til_or_since are defined as unsigned longs.

---
 xssstate.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/xssstate.c b/xssstate.c
index 57536b2..1eeca29 100644
--- a/xssstate.c
+++ b/xssstate.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -88,14 +88,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; main(int argc, char *argv[]) {
 printf("0\n");
 break;
 case ScreenSaverOff:
-printf("%ld\n", info-&amp;gt;til_or_since);
+printf("%lu\n", info-&amp;gt;til_or_since);
 break;
 case ScreenSaverDisabled:
 printf("-1\n");
 break;
 }
 } else if (showidle) {
-printf("%ld\n", info-&amp;gt;idle);
+printf("%lu\n", info-&amp;gt;idle);
 }
 
 
&lt;/pre&gt;</description>
    <dc:creator>Petr Šabata</dc:creator>
    <dc:date>2013-05-07T14:16:44</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12343">
    <title>[tabbed] 0.5 release</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12343</link>
    <description>&lt;pre&gt;Greetings comrades,

here's the 0.5 release of tabbed.

Features:
* -n flag for WM_CLASS
* title handling now works for umlauts too
* -r flag to specify the position in the commandline where to place the window
  id
* last selection of a tab has been reworked to be more correct
* avoid flashing of windows when they are reloaded too fast
* speed up rework of the internal data structured
* tabbed should scale to the cloud now
* tabbed now has fullscreen support (F11)
* -c option will close tabbed after the last client is closed
* the -p option allows to specify the relative and absolute position of where
  to place new tabs in the tab list 
* a TODO file was added

Thanks to all the contributors!

http://tools.suckless.org/tabbed/


Sincerely,

Christoph Lohmann



&lt;/pre&gt;</description>
    <dc:creator>Christoph Lohmann</dc:creator>
    <dc:date>2013-05-06T18:19:35</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12342">
    <title>[xssstate] 1.0 release</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12342</link>
    <description>&lt;pre&gt;Greetings comrades,

I  am  glad to announce xssstate 1.0. Well, it was released too, but now
with official tarball.

http://tools.suckless.org/xssstate


Sincerely,

Christoph Lohmann



&lt;/pre&gt;</description>
    <dc:creator>Christoph Lohmann</dc:creator>
    <dc:date>2013-05-06T18:13:40</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12340">
    <title>packaging stuff</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12340</link>
    <description>&lt;pre&gt;Greetings fellow comrades,
I would like to propose:
1. A tarball for xssstate. This would make packaging/porting it for
distributions easier and seems cleaner in general.

2. A new release of tabbed. I don't know if there are any big changes
planned for tabbed 0.5, but as there is no TODO file in the repo and the
last commit was some time ago, I assume this is not the case.
Currently you have to use the git version to run surf-open.sh and some
other useful changes have been made since the last release. A new
version would also make it possible for packagers to distribute
surf-open.sh together with surf.

Cheers,
Maximilian D.


&lt;/pre&gt;</description>
    <dc:creator>Maximilian Dietrich</dc:creator>
    <dc:date>2013-05-06T14:15:51</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12337">
    <title>[surf] Setting up ssl correctly in debian</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12337</link>
    <description>&lt;pre&gt;So I recently installed Debian Wheezy.

I'm using the default surf configuration, but when I visit 
https://www.google.com I get a "U" for untrusted rather than the 
expected "T". Trying with chromium confirms that it should be 
recognised as secure. Other websites show the same (untrusted rather 
than trusted).

I remember looking a while ago at adding reasons for untrusted, 
which newer versions of glib or whatever do expose, but I don't 
think I ever did the work.

Is something misconfigured? Does the trusted / untrusted status 
thing work for others? I do have the ca-certificates package 
installed. This is with the latest git checkout.

Thanks.


&lt;/pre&gt;</description>
    <dc:creator>Nick</dc:creator>
    <dc:date>2013-05-06T09:13:37</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12336">
    <title>[st] minor fix</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12336</link>
    <description>&lt;pre&gt;Hi,

there is a small glitch in the error handling of the select() call
in st.c. See patch below.

Regards,
Johannes

diff --git a/st.c b/st.c
index 5251e70..689de26 100644
--- a/st.c
+++ b/st.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3481,7 +3481,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; run(void) {
 FD_SET(cmdfd, &amp;amp;rfd);
 FD_SET(xfd, &amp;amp;rfd);
 
-switch(select(MAX(xfd, cmdfd)+1, &amp;amp;rfd, NULL, NULL, tv) &amp;lt; 0) {
+switch(select(MAX(xfd, cmdfd)+1, &amp;amp;rfd, NULL, NULL, tv)) {
 case -1:
 if(errno == EINTR)
 continue;


&lt;/pre&gt;</description>
    <dc:creator>Johannes Hofmann</dc:creator>
    <dc:date>2013-05-06T08:03:05</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12329">
    <title>Call for configurations</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12329</link>
    <description>&lt;pre&gt;Hi there,

today I decided to make

  http://git.suckless.org/dextra

world-writable.

I invite everybody to contribute your config files into the dextra
repository, eg. for dwm/dmenu/st/surf/etc.

Thanks in advance,
Anselm


&lt;/pre&gt;</description>
    <dc:creator>Anselm R Garbe</dc:creator>
    <dc:date>2013-05-05T16:09:11</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12325">
    <title>[st][patch] not roll our own utf functions</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12325</link>
    <description>&lt;pre&gt;From c40205fe15f0da048128f8735fd2140605de5e9e Mon Sep 17 00:00:00 2001
From: Strake &amp;lt;strake888&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date: Sun, 5 May 2013 09:35:58 -0500
Subject: [PATCH] not roll our own utf functions

---
 README    |   2 +-
 config.mk |   2 +-
 st.c      | 129 +++++---------------------------------------------------------
 3 files changed, 11 insertions(+), 122 deletions(-)

diff --git a/README b/README
index 25606a2..2bbb859 100644
--- a/README
+++ b/README
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -5,7 +5,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; st is a simple virtual terminal emulator for X which sucks less.

 Requirements
 ------------
-In order to build st you need the Xlib header files.
+In order to build st you need libutf and the Xlib header files.


 Installation
diff --git a/config.mk b/config.mk
index 9431de2..36a0424 100644
--- a/config.mk
+++ b/config.mk
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -14,7 +14,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; X11LIB = /usr/X11R6/lib
 INCS = -I. -I/usr/include -I${X11INC} \
        `pkg-config --cflags fontconfig` \
        `pkg-config --cflags freetype2`
-LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 -lutil -lXext -lXft \
+LIBS = -L/usr/lib -lc -lutf -L${X11LIB} -lX11 -lutil -lXext -lXft \
        `pkg-config --libs fontconfig`  \
        `pkg-config --libs freetype2`

diff --git a/st.c b/st.c
index 8cf3483..da0b6b7 100644
--- a/st.c
+++ b/st.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -19,6 +19,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include &amp;lt;sys/wait.h&amp;gt;
 #include &amp;lt;time.h&amp;gt;
 #include &amp;lt;unistd.h&amp;gt;
+#include &amp;lt;utf.h&amp;gt;
 #include &amp;lt;X11/Xatom.h&amp;gt;
 #include &amp;lt;X11/Xlib.h&amp;gt;
 #include &amp;lt;X11/Xutil.h&amp;gt;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -394,10 +395,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void selcopy(void);
 static void selscroll(int, int);
 static void selsnap(int, int *, int *, int);

-static int utf8decode(char *, long *);
-static int utf8encode(long *, char *);
 static int utf8size(char *);
-static int isfullutf8(char *, int);

 static ssize_t xwrite(int, char *, size_t);
 static void *xmalloc(size_t);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -506,115 +504,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; xcalloc(size_t nmemb, size_t size) {
 }

 int
-utf8decode(char *s, long *u) {
-uchar c;
-int i, n, rtn;
-
-rtn = 1;
-c = *s;
-if(~c &amp;amp; B7) { /* 0xxxxxxx */
-*u = c;
-return rtn;
-} else if((c &amp;amp; (B7|B6|B5)) == (B7|B6)) { /* 110xxxxx */
-*u = c&amp;amp;(B4|B3|B2|B1|B0);
-n = 1;
-} else if((c &amp;amp; (B7|B6|B5|B4)) == (B7|B6|B5)) { /* 1110xxxx */
-*u = c&amp;amp;(B3|B2|B1|B0);
-n = 2;
-} else if((c &amp;amp; (B7|B6|B5|B4|B3)) == (B7|B6|B5|B4)) { /* 11110xxx */
-*u = c &amp;amp; (B2|B1|B0);
-n = 3;
-} else {
-goto invalid;
-}
-
-for(i = n, ++s; i &amp;gt; 0; --i, ++rtn, ++s) {
-c = *s;
-if((c &amp;amp; (B7|B6)) != B7) /* 10xxxxxx */
-goto invalid;
-*u &amp;lt;&amp;lt;= 6;
-*u |= c &amp;amp; (B5|B4|B3|B2|B1|B0);
-}
-
-if((n == 1 &amp;amp;&amp;amp; *u &amp;lt; 0x80) ||
-   (n == 2 &amp;amp;&amp;amp; *u &amp;lt; 0x800) ||
-   (n == 3 &amp;amp;&amp;amp; *u &amp;lt; 0x10000) ||
-   (*u &amp;gt;= 0xD800 &amp;amp;&amp;amp; *u &amp;lt;= 0xDFFF)) {
-goto invalid;
-}
-
-return rtn;
-invalid:
-*u = 0xFFFD;
-
-return rtn;
-}
-
-int
-utf8encode(long *u, char *s) {
-uchar *sp;
-ulong uc;
-int i, n;
-
-sp = (uchar *)s;
-uc = *u;
-if(uc &amp;lt; 0x80) {
-*sp = uc; /* 0xxxxxxx */
-return 1;
-} else if(*u &amp;lt; 0x800) {
-*sp = (uc &amp;gt;&amp;gt; 6) | (B7|B6); /* 110xxxxx */
-n = 1;
-} else if(uc &amp;lt; 0x10000) {
-*sp = (uc &amp;gt;&amp;gt; 12) | (B7|B6|B5); /* 1110xxxx */
-n = 2;
-} else if(uc &amp;lt;= 0x10FFFF) {
-*sp = (uc &amp;gt;&amp;gt; 18) | (B7|B6|B5|B4); /* 11110xxx */
-n = 3;
-} else {
-goto invalid;
-}
-
-for(i=n,++sp; i&amp;gt;0; --i,++sp)
-*sp = ((uc &amp;gt;&amp;gt; 6*(i-1)) &amp;amp; (B5|B4|B3|B2|B1|B0)) | B7; /* 10xxxxxx */
-
-return n+1;
-invalid:
-/* U+FFFD */
-*s++ = '\xEF';
-*s++ = '\xBF';
-*s = '\xBD';
-
-return 3;
-}
-
-/* use this if your buffer is less than UTF_SIZ, it returns 1 if you can decode
-   UTF-8 otherwise return 0 */
-int
-isfullutf8(char *s, int b) {
-uchar *c1, *c2, *c3;
-
-c1 = (uchar *)s;
-c2 = (uchar *)++s;
-c3 = (uchar *)++s;
-if(b &amp;lt; 1) {
-return 0;
-} else if((*c1&amp;amp;(B7|B6|B5)) == (B7|B6) &amp;amp;&amp;amp; b == 1) {
-return 0;
-} else if((*c1&amp;amp;(B7|B6|B5|B4)) == (B7|B6|B5) &amp;amp;&amp;amp;
-    ((b == 1) ||
-    ((b == 2) &amp;amp;&amp;amp; (*c2&amp;amp;(B7|B6)) == B7))) {
-return 0;
-} else if((*c1&amp;amp;(B7|B6|B5|B4|B3)) == (B7|B6|B5|B4) &amp;amp;&amp;amp;
-    ((b == 1) ||
-    ((b == 2) &amp;amp;&amp;amp; (*c2&amp;amp;(B7|B6)) == B7) ||
-    ((b == 3) &amp;amp;&amp;amp; (*c2&amp;amp;(B7|B6)) == B7 &amp;amp;&amp;amp; (*c3&amp;amp;(B7|B6)) == B7))) {
-return 0;
-} else {
-return 1;
-}
-}
-
-int
 utf8size(char *s) {
 uchar c = *s;

&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1230,7 +1119,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; ttyread(void) {
 char *ptr;
 char s[UTF_SIZ];
 int charsize; /* size of utf8 char in bytes */
-long utf8c;
+Rune utf8c;
 int ret;

 /* append read bytes to unprocessed bytes */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1240,9 +1129,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; ttyread(void) {
 /* process every complete utf8 char */
 buflen += ret;
 ptr = buf;
-while(buflen &amp;gt;= UTF_SIZ || isfullutf8(ptr,buflen)) {
-charsize = utf8decode(ptr, &amp;amp;utf8c);
-utf8encode(&amp;amp;utf8c, s);
+while(buflen &amp;gt;= UTF_SIZ || fullrune(ptr, buflen)) {
+charsize = chartorune(&amp;amp;utf8c, ptr);
+runetochar(s, &amp;amp;utf8c);
 tputc(s, charsize);
 ptr += charsize;
 buflen -= charsize;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2866,7 +2755,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; xdraws(char *s, Glyph base, int x, int y, int
charlen, int bytelen) {
 int frp, frcflags;
 int u8fl, u8fblen, u8cblen, doesexist;
 char *u8c, *u8fs;
-long u8char;
+Rune u8char;
 Font *font = &amp;amp;dc.font;
 FcResult fcres;
 FcPattern *fcpattern, *fontpattern;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2982,7 +2871,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; xdraws(char *s, Glyph base, int x, int y, int
charlen, int bytelen) {
 u8fl = 0;
 for(;;) {
 u8c = s;
-u8cblen = utf8decode(s, &amp;amp;u8char);
+u8cblen = chartorune(&amp;amp;u8char, s);
 s += u8cblen;
 bytelen -= u8cblen;

&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3354,7 +3243,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; kpress(XEvent *ev) {
 KeySym ksym;
 char xstr[31], buf[32], *customkey, *cp = buf;
 int len, ret;
-long c;
+Rune c;
 Status status;
 Shortcut *bp;

&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3384,7 +3273,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; kpress(XEvent *ev) {
 if(IS_SET(MODE_8BIT)) {
 if(*xstr &amp;lt; 0177) {
 c = *xstr | B7;
-ret = utf8encode(&amp;amp;c, cp);
+ret = runetochar(cp, &amp;amp;c);
 cp += ret;
 len = 0;
 }
&lt;/pre&gt;</description>
    <dc:creator>Strake</dc:creator>
    <dc:date>2013-05-05T14:33:46</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12324">
    <title>[st][patch] SWAP macro</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12324</link>
    <description>&lt;pre&gt;From d3455f61a5caaf5d94e2b6c1056fb03713772029 Mon Sep 17 00:00:00 2001
From: Strake &amp;lt;strake888&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date: Tue, 30 Apr 2013 23:53:04 -0500
Subject: [PATCH] swap

---
 st.c | 38 ++++++++++----------------------------
 1 file changed, 10 insertions(+), 28 deletions(-)

diff --git a/st.c b/st.c
index 5251e70..8cf3483 100644
--- a/st.c
+++ b/st.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -72,6 +72,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; char *argv0;
 #define DEFAULT(a, b)     (a) = (a) ? (a) : (b)
 #define BETWEEN(x, a, b)  ((a) &amp;lt;= (x) &amp;amp;&amp;amp; (x) &amp;lt;= (b))
 #define LIMIT(x, a, b)    (x) = (x) &amp;lt; (a) ? (a) : (x) &amp;gt; (b) ? (b) : (x)
+#define SWAP(t, x, y)     { t __SWAP_TEMPORARY; __SWAP_TEMPORARY =
(x); (x) = (y); (y) = __SWAP_TEMPORARY; }
 #define ATTRCMP(a, b) ((a).mode != (b).mode || (a).fg != (b).fg ||
(a).bg != (b).bg)
 #define IS_SET(flag) ((term.mode &amp;amp; (flag)) != 0)
 #define TIMEDIFF(t1, t2) ((t1.tv_sec-t2.tv_sec)*1000 +
(t1.tv_usec-t2.tv_usec)/1000)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1358,10 +1359,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; tnew(int col, int row) {

 void
 tswapscreen(void) {
-Line *tmp = term.line;
-
-term.line = term.alt;
-term.alt = tmp;
+SWAP(Line *, term.line, term.alt);
 term.mode ^= MODE_ALTSCREEN;
 tfulldirt();
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1369,16 +1367,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; tswapscreen(void) {
 void
 tscrolldown(int orig, int n) {
 int i;
-Line temp;

 LIMIT(n, 0, term.bot-orig+1);

 tclearregion(0, term.bot-n+1, term.col-1, term.bot);

 for(i = term.bot; i &amp;gt;= orig+n; i--) {
-temp = term.line[i];
-term.line[i] = term.line[i-n];
-term.line[i-n] = temp;
+SWAP(Line, term.line[i], term.line[i-n]);

 term.dirty[i] = 1;
 term.dirty[i-n] = 1;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1390,15 +1385,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; tscrolldown(int orig, int n) {
 void
 tscrollup(int orig, int n) {
 int i;
-Line temp;
 LIMIT(n, 0, term.bot-orig+1);

 tclearregion(0, orig, term.col-1, orig+n-1);

 for(i = orig; i &amp;lt;= term.bot-n; i++) {
- temp = term.line[i];
- term.line[i] = term.line[i+n];
- term.line[i+n] = temp;
+ SWAP(Line, term.line[i], term.line[i+n]);

  term.dirty[i] = 1;
  term.dirty[i+n] = 1;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1531,12 +1523,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; tsetchar(char *c, Glyph *attr, int x, int y) {

 void
 tclearregion(int x1, int y1, int x2, int y2) {
-int x, y, temp;
+int x, y;

 if(x1 &amp;gt; x2)
-temp = x1, x1 = x2, x2 = temp;
+SWAP(int, x1, x2);
 if(y1 &amp;gt; y2)
-temp = y1, y1 = y2, y2 = temp;
+SWAP(int, y1, y2);

 LIMIT(x1, 0, term.col-1);
 LIMIT(x2, 0, term.col-1);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1711,15 +1703,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; tsetattr(int *attr, int l) {

 void
 tsetscroll(int t, int b) {
-int temp;
-
 LIMIT(t, 0, term.row-1);
 LIMIT(b, 0, term.row-1);
-if(t &amp;gt; b) {
-temp = t;
-t = b;
-b = temp;
-}
+if(t &amp;gt; b) SWAP(int, b, t);
 term.top = t;
 term.bot = b;
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2886,7 +2872,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; xdraws(char *s, Glyph base, int x, int y, int
charlen, int bytelen) {
 FcPattern *fcpattern, *fontpattern;
 FcFontSet *fcsets[] = { NULL };
 FcCharSet *fccharset;
-Colour *fg, *bg, *temp, revfg, revbg;
+Colour *fg, *bg, revfg, revbg;
 XRenderColor colfg, colbg;
 Rectangle r;

&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2954,11 +2940,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; xdraws(char *s, Glyph base, int x, int y, int
charlen, int bytelen) {
 }
 }

-if(base.mode &amp;amp; ATTR_REVERSE) {
-temp = fg;
-fg = bg;
-bg = temp;
-}
+if(base.mode &amp;amp; ATTR_REVERSE) SWAP(Colour *, fg, bg);

 if(base.mode &amp;amp; ATTR_BLINK &amp;amp;&amp;amp; term.mode &amp;amp; MODE_BLINK)
 fg = bg;
&lt;/pre&gt;</description>
    <dc:creator>Strake</dc:creator>
    <dc:date>2013-05-05T13:34:56</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12323">
    <title>[stali] Status of the project?</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12323</link>
    <description>&lt;pre&gt;What's the current status of stali?

I've seen that Anselm R Garbe will have a talk on it's state and its
future, I've noted though that stali isn't available in the git repo so is
it still in brainstorming phase?


Also, just a quick question regarding its design. Will it be usable by
default or do I have to install X11 and dwm myself? I hope not.

Thanks, klrr.
&lt;/pre&gt;</description>
    <dc:creator>KarlOskar Rikås</dc:creator>
    <dc:date>2013-05-04T19:20:55</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12305">
    <title>[sic][PATCH]Colors</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12305</link>
    <description>&lt;pre&gt;Hi,

I installed sic and it's a great tiny software. I love it.
Here a patch, which includes colors. You can easily tweak colors yourself.
Maybe, you don't need colors, but it helps a lot and I wanted to share it.
Here the colors:

Channel: bold magenta
Date: bold cyan
JOIN/QUIT/NOTICE messages: bold blue
Username: green

--
H.Mo.
&lt;/pre&gt;</description>
    <dc:creator>Hugues Moretto-Viry</dc:creator>
    <dc:date>2013-05-01T12:25:02</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12298">
    <title>rio for linux</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12298</link>
    <description>&lt;pre&gt;I don't love X11, and I'm wondering if anyone has ported or made anything
in the sprit of rio / 9wm to run on top of Linux framebuffer.  I realise
rio relies on Plan 9 dynamic namespaces and such, but we might be able to
do something similar on Linux.

Would this be worthwhile, or not?

I know few graphical Linux apps would work on it directly.  But we
could run / port a terminal, and also various framebuffer and SDL apps.
Not sure about GL, how to do that sensibly - maybe just support
full-screen.  Could also hack up X protocol support for it.

Sam


&lt;/pre&gt;</description>
    <dc:creator>Sam Watkins</dc:creator>
    <dc:date>2013-05-01T05:30:00</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12296">
    <title>[ii]Help with my frontend</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12296</link>
    <description>&lt;pre&gt;Hi guys,

I installed ii and now I'm trying to create a little shell (mksh) frontend
for it. I saw the existing frontends on the wiki, but I prefer creating
another one from scratch.
It will perfectly fit my needs.

I use "tail -f" on the out file, but I would like to ask you, if you know a
prompt (I don't know how to call it) like the one included with less.
I want to include this prompt at the bottom of the terminal (running tail
-f).
Any ideas?

Best Regards

--
H.Mo.
&lt;/pre&gt;</description>
    <dc:creator>Hugues Moretto-Viry</dc:creator>
    <dc:date>2013-04-29T18:13:04</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.misc.suckless/12295">
    <title>[sbase][PATCH] Added POSIX paste(1) command implementation.</title>
    <link>http://comments.gmane.org/gmane.comp.misc.suckless/12295</link>
    <description>&lt;pre&gt;This commit adds a simple implementation of the POSIX
standard paste(1) command, and its man page.
TODO and Makefile have been updated accordingly.
---
 Makefile |   1 +
 TODO     |   2 -
 paste.1  | 122 +++++++++++++++++++++++++++++++++
 paste.c  | 231 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 354 insertions(+), 2 deletions(-)
 create mode 100644 paste.1
 create mode 100644 paste.c

diff --git a/Makefile b/Makefile
index c3c36fe..4e1f3e6 100644
--- a/Makefile
+++ b/Makefile
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -43,6 +43,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; SRC = \
 mv.c       \
 nl.c       \
 nohup.c    \
+paste.c    \
 pwd.c      \
 rm.c       \
 sleep.c    \
diff --git a/TODO b/TODO
index 20be4b8..d6b9e0b 100644
--- a/TODO
+++ b/TODO
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -28,8 +28,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; md5sum [-c] [file...]
 
 nice [-n N] [command]
 
-paste [-s] [-d list] [file...]
-
 printenv [variable...]
 
 printf [format] [data...]
diff --git a/paste.1 b/paste.1
new file mode 100644
index 0000000..983b41f
--- /dev/null
+++ b/paste.1
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,122 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+.TH PASTE 1 paste-VERSION "Apr 2013"
+.SH NAME
+paste \- merge corresponding or subsequent lines of files
+.SH "SYNOPSIS"
+.PP
+.B paste
+[
+.B \-s
+]
+[
+.B \-d
+.I list
+]
+.I file...
+.SH DESCRIPTION
+The
+.B paste
+utility concatenates the corresponding lines of the given input files,
+and writes the resulting lines to standard output. The default operation
+of
+.B paste
+concatenates the corresponding  lines of the input files.
+The newline of every line except the line  from the last input file is
+replaced with a tab.
+If an end-of-file condition is detected on one or more input files, 
+but not all input files,
+.B paste
+behaves as though empty lines were read from the files on which
+end-of-file was detected, unless the
+.B \-s
+option is specified.
+.SH OPTIONS
+.TP
+.B \-d list
+unless a backslash character appears in
+.I list
+each character is an element specifying a delimiter.
+If a backslash character appears, that and one or more characters 
+following it are an element specifying a delimiter.
+These elements specify one or more characters to use, 
+instead of the default tab, to replace the newline of the input 
+lines. The elements in
+.I list
+are used circularly; that is, when the 
+.I list
+is exhausted the first element from the list is reused.
+When the
+.B \-s 
+option is specified, the last newline in a file is not be modified.
+The delimiter is reset to the first element of list after each file
+operand is processed.
+If a backslash character appears in list, it and the character following
+it represents the following delimiters:
+.RS
+.TP
+.I \en
+newline character
+.TP
+.I \et
+tab character
+.TP
+.I \e\e
+backslash character
+.TP
+.I \e0
+empty string (not a null character)
+.TP
+If Any other characters follow the backslash, results are unspecified.
+.RE
+.TP
+.B \-s
+concatenate all of the lines of each separate input file in command line 
+order. The newline of every line except the last line in each input file
+are replaced with the tab, unless otherwise specified by the 
+.B \-d
+option.
+.PP
+If '\-' is specified for one or more input files, the standard input is
+used; standard input is read one line at a time, circularly for each
+instance of '\-'.
+.SH EXIT VALUES
+The
+.B paste
+utility exits 0 on successful completion, and &amp;gt;0 if an error
+occurs.
+.SH ENVIRONMENT VARIABLES
+The following environment variables affect the execution:
+.TP
+.B LANG
+provide a default value for the internationalization variables
+that are unset or null.
+.TP
+.B LC_ALL
+if set to a non-empty string value, override the values of all the
+other internationalization variables.
+.TP
+.B LC_CTYPE
+determine the locale for the interpretation of sequences of bytes
+of text data as characters (for example, single-byte as opposed to
+multi-byte characters in arguments and input files).
+.TP
+.B LC_MESSAGES
+determine the locale that should be used to affect the format and
+contents of diagnostic messages written to standard error.
+.SH CONFORMING TO
+The
+.B paste
+utility is IEEE Std 1003.2 (POSIX.2) compatible.
+.SH EXAMPLES
+.TP
+.I "ls | paste - - - -"
+.PP
+Write out a directory in four columns.
+.TP
+.I "paste -s -d '\et\en' file"
+.PP
+Combine pairs of lines from a file into single lines.
+.SH AUTHOR
+Written by Lorenzo Cogotti.
+.SH SEE ALSO
+.BR cut(1)
+.BR lam(1)
diff --git a/paste.c b/paste.c
new file mode 100644
index 0000000..0d0bcdb
--- /dev/null
+++ b/paste.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,231 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+/* See LICENSE file for copyright and license details. */
+#include &amp;lt;locale.h&amp;gt;
+#include &amp;lt;stdbool.h&amp;gt;
+#include &amp;lt;stdlib.h&amp;gt;
+#include &amp;lt;stdio.h&amp;gt;
+#include &amp;lt;string.h&amp;gt;
+#include &amp;lt;unistd.h&amp;gt;
+#include &amp;lt;wchar.h&amp;gt;
+#include "util.h"
+
+typedef struct {
+FILE *fp;
+const char *name;
+} Fdescr;
+
+static void eusage(void);
+static size_t unescape(wchar_t *);
+static wint_t in(Fdescr *);
+static void out(wchar_t);
+static void sequential(Fdescr *, int, const wchar_t *, size_t);
+static void parallel(Fdescr *, int, const wchar_t *, size_t);
+
+int
+main(int argc, char **argv) {
+const char *adelim = NULL;
+bool seq = false;
+wchar_t *delim;
+size_t len;
+Fdescr *dsc;
+int i, c;
+
+setlocale(LC_CTYPE, "");
+
+while((c = getopt(argc, argv, "sd:")) != -1)
+switch(c) {
+case 's':
+seq = true;
+break;
+case 'd':
+adelim = optarg;
+break;
+case '?':
+default:
+eusage();
+break;
+}
+
+argc -= optind;
+argv += optind;
+if(argc == 0)
+eusage();
+
+/* populate delimeters */
+if(!adelim)
+adelim = "\t";
+
+len = mbstowcs(NULL, adelim, 0);
+if(len == (size_t)-1)
+eprintf("invalid delimiter\n");
+
+delim = malloc((len + 1) * sizeof(*delim));
+if(!delim)
+eprintf("out of memory\n");
+
+mbstowcs(delim, adelim, len);
+len = unescape(delim);
+if(len == 0)
+eprintf("no delimiters specified\n");
+
+/* populate file list */
+dsc = malloc(argc * sizeof(*dsc));
+if(!dsc)
+eprintf("out of memory\n");
+
+for(i = 0; i &amp;lt; argc; i++) {
+const char *name = argv[i];
+
+if(strcmp(name, "-") == 0)
+dsc[i].fp = stdin;
+else
+dsc[i].fp = fopen(name, "r");
+
+if(!dsc[i].fp)
+eprintf("can't open '%s':", name);
+
+dsc[i].name = name;
+}
+
+if(seq)
+sequential(dsc, argc, delim, len);
+else
+parallel(dsc, argc, delim, len);
+
+for(i = 0; i &amp;lt; argc; i++) {
+if(dsc[i].fp != stdin)
+(void)fclose(dsc[i].fp);
+}
+
+free(delim);
+free(dsc);
+return 0;
+}
+
+static void
+eusage(void) {
+eprintf("usage: paste [-s][-d list] file...\n");
+}
+
+static size_t
+unescape(wchar_t *delim) {
+wchar_t c;
+size_t i;
+size_t len;
+
+for(i = 0, len = 0; (c = delim[i++]) != '\0'; len++) {
+if(c == '\\') {
+switch(delim[i++]) {
+case 'n':
+delim[len] = '\n';
+break;
+case 't':
+delim[len] = '\t';
+break;
+case '0':
+delim[len] = '\0';
+break;
+case '\\':
+delim[len] = '\\';
+break;
+case '\0':
+default:
+/* POSIX: unspecified results */
+return len;
+}
+} else
+delim[len] = c;
+}
+
+return len;
+}
+
+static wint_t
+in(Fdescr *f) {
+wint_t c = fgetwc(f-&amp;gt;fp);
+
+if(c == WEOF &amp;amp;&amp;amp; ferror(f-&amp;gt;fp))
+eprintf("'%s' read error:", f-&amp;gt;name);
+
+return c;
+}
+
+static void
+out(wchar_t c) {
+putwchar(c);
+if(ferror(stdout))
+eprintf("write error:");
+}
+
+static void
+sequential(Fdescr *dsc, int len, const wchar_t *delim, size_t cnt) {
+int i;
+
+for(i = 0; i &amp;lt; len; i++) {
+size_t d = 0;
+wint_t c, last = WEOF;
+
+while((c = in(&amp;amp;dsc[i])) != WEOF) {
+if(last == '\n') {
+if(delim[d] != '\0')
+out(delim[d]);
+
+d++;
+d %= cnt;
+}
+
+if(c != '\n')
+out((wchar_t)c);
+
+last = c;
+}
+
+if(last == '\n')
+out((wchar_t)last);
+}
+}
+
+static void
+parallel(Fdescr *dsc, int len, const wchar_t *delim, size_t cnt) {
+int last;
+
+do {
+int i;
+
+last = 0;
+for(i = 0; i &amp;lt; len; i++) {
+wint_t c;
+wchar_t d = delim[i % cnt];
+
+do {
+wint_t o = in(&amp;amp;dsc[i]);
+
+c = o;
+switch(c) {
+case WEOF:
+if(last == 0)
+break;
+
+o = '\n';
+/* fallthrough */
+case '\n':
+if(i != len - 1)
+o = d;
+
+break;
+default:
+break;
+}
+
+if(o != WEOF) {
+/* pad with delimiters up to this point */
+while(++last &amp;lt; i) {
+if(d != '\0')
+out(d);
+}
+
+out((wchar_t)o);
+}
+} while(c != '\n' &amp;amp;&amp;amp; c != WEOF);
+}
+} while(last &amp;gt; 0);
+}
&lt;/pre&gt;</description>
    <dc:creator>Lorenzo Cogotti</dc:creator>
    <dc:date>2013-04-29T16:54:36</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.misc.suckless">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.comp.misc.suckless</link>
  </textinput>
</rdf:RDF>
