URI: 
       Making the copy and pasting consistent. - st - simple terminal
  HTML git clone https://git.parazyd.org/st
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 4018b2c5075c1cab603ca137ef5f6d68b9cee483
   DIR parent ddd429ea2478beeb7d17d9b548abd9173049dcc6
  HTML Author: Christoph Lohmann <20h@r-36.net>
       Date:   Sat, 13 Apr 2013 08:48:17 +0200
       
       Making the copy and pasting consistent.
       
       The copying and pasting in the terminald and GUI world is flawed. Due to the
       discussion on the mailinglist it seems that sending '\n' is what GUIs expect
       and '\r' what terminal applications want. St now implements that behaviour.
       
       Diffstat:
         M st.c                                |      35 +++++++++++++++++++++++++++----
       
       1 file changed, 31 insertions(+), 4 deletions(-)
       ---
   DIR diff --git a/st.c b/st.c
       @@ -788,9 +788,18 @@ selcopy(void) {
                                        memcpy(ptr, p, size);
                                        ptr += size;
                                }
       -                        /* \n at the end of every selected line except for the last one */
       +
       +                        /*
       +                         * Copy and pasting of line endings is inconsistent
       +                         * in the inconsistent terminal and GUI world.
       +                         * The best solution seems like to produce '\n' when
       +                         * something is copied from st and convert '\n' to
       +                         * '\r', when something to be pasted is received by
       +                         * st.
       +                         * FIXME: Fix the computer world.
       +                         */
                                if(is_selected && y < sel.e.y)
       -                                *ptr++ = '\r';
       +                                *ptr++ = '\n';
                        }
                        *ptr = 0;
                }
       @@ -801,7 +810,7 @@ void
        selnotify(XEvent *e) {
                ulong nitems, ofs, rem;
                int format;
       -        uchar *data;
       +        uchar *data, *last, *repl;
                Atom type;
        
                ofs = 0;
       @@ -812,7 +821,25 @@ selnotify(XEvent *e) {
                                fprintf(stderr, "Clipboard allocation failed\n");
                                return;
                        }
       -                ttywrite((const char *) data, nitems * format / 8);
       +
       +                /*
       +                 * As seen in selcopy:
       +                 * Line endings are inconsistent in the terminal and GUI world
       +                 * copy and pasting. When receiving some selection data,
       +                 * replace all '\n' with '\r'.
       +                 * FIXME: Fix the computer world.
       +                 */
       +                repl = data;
       +                last = data + nitems * format / 8;
       +                while((repl = memchr(repl, '\n', last - repl))) {
       +                        *repl++ = '\r';
       +                }
       +
       +                last = data + nitems * format / 8;
       +                repl = data;
       +
       +
       +                ttywrite((const char *)data, nitems * format / 8);
                        XFree(data);
                        /* number of 32-bit chunks returned */
                        ofs += nitems * format / 32;