This is a small patch to enable copying the current console to the clipboard with Ctrl+Ins. A line break is added after the last nonblank character of each copied line.
-- Here's a simple experiment. Stand on a train track between two locomotives which are pushing on you with equal force in opposite directions. You will exhibit no net motion. None the less, you may soon begin to notice that something important is happening. -- Robert Stirniman
Index: sdl.c =================================================================== RCS file: /cvsroot/qemu/qemu/sdl.c,v retrieving revision 1.23 diff -u -r1.23 sdl.c --- sdl.c 30 Oct 2005 23:19:10 -0000 1.23 +++ sdl.c 20 Nov 2005 11:17:22 -0000 @@ -378,6 +378,7 @@ case SDLK_END: keysym = QEMU_KEY_CTRL_END; break; case SDLK_PAGEUP: keysym = QEMU_KEY_CTRL_PAGEUP; break; case SDLK_PAGEDOWN: keysym = QEMU_KEY_CTRL_PAGEDOWN; break; + case SDLK_INSERT: keysym = QEMU_KEY_CTRL_INS; break; default: break; } } else { Index: vl.h =================================================================== RCS file: /cvsroot/qemu/qemu/vl.h,v retrieving revision 1.91 diff -u -r1.91 vl.h --- vl.h 15 Nov 2005 22:16:05 -0000 1.91 +++ vl.h 20 Nov 2005 11:17:23 -0000 @@ -37,6 +37,9 @@ #include <unistd.h> #include <fcntl.h> #include <sys/stat.h> +#ifdef _WIN32 +#include <windows.h> +#endif #include "audio/audio.h" #ifndef O_LARGEFILE @@ -189,6 +192,7 @@ #define QEMU_KEY_CTRL_END 0xe405 #define QEMU_KEY_CTRL_PAGEUP 0xe406 #define QEMU_KEY_CTRL_PAGEDOWN 0xe407 +#define QEMU_KEY_CTRL_INS 0xe408 void kbd_put_keysym(int keysym); Index: console.c =================================================================== RCS file: /cvsroot/qemu/qemu/console.c,v retrieving revision 1.3 diff -u -r1.3 console.c --- console.c 9 Oct 2004 17:32:58 -0000 1.3 +++ console.c 20 Nov 2005 11:17:23 -0000 @@ -406,6 +406,67 @@ console_show_cursor(s, 1); } +static void console_copy() +{ +#ifdef _WIN32 + TextConsole *s; + int i, j, copytotal = 0, lastline = 0, row; + char *copydest; + HGLOBAL clipbuf; + + s = active_console; + + // Count characters + for( i = 0; i < s->total_height; i++ ) { + row = 0; + for( j = 0; j < s->width; j++ ) { + char ch = s->cells[i * s->width + j].ch; + if( isprint(ch) && !isspace(ch) ) + row = j; + } + if( row != 0 ) + lastline = i; + copytotal += row + strlen("\r\n"); + } + + // Create the clip buffer + if( !OpenClipboard( NULL ) ) return; + + EmptyClipboard(); + clipbuf = GlobalAlloc(GMEM_DDESHARE, copytotal+1); + + if( !clipbuf ) return; + + copydest = (char *)GlobalLock(clipbuf); + + // Copy the actual text + for( i = 0; i < lastline+1; i++ ) { + row = 0; + for( j = 0; j < s->width; j++ ) { + char ch = s->cells[i * s->width + j].ch; + if( isprint(ch) && !isspace(ch) ) + row = j; + } + for( j = 0; j < row; j++ ) { + char ch = s->cells[i * s->width + j].ch; + if( isprint(ch) && !isspace(ch) ) + *copydest++ = ch; + else + *copydest++ = ' '; + } + *copydest++ = '\r'; + *copydest++ = '\n'; + } + + *copydest++ = 0; + + // Now set the clipboard + GlobalUnlock(clipbuf); + SetClipboardData(CF_TEXT,clipbuf); + CloseClipboard(); +#endif +} + static void console_scroll(int ydelta) { TextConsole *s; @@ -641,6 +702,9 @@ case QEMU_KEY_CTRL_PAGEDOWN: console_scroll(10); break; + case QEMU_KEY_CTRL_INS: + console_copy(); + break; default: if (s->fd_read) { /* convert the QEMU keysym to VT100 key string */
_______________________________________________ Qemu-devel mailing list Qemu-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/qemu-devel