From: "Jim C. Brown" <jma5@umd.edu>
To: art yerkes <ayerkes@speakeasy.net>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] Patch: Ctrl+Ins to copy console on windows
Date: Mon, 21 Nov 2005 18:41:48 -0500 [thread overview]
Message-ID: <20051121234148.GA26125@jbrown.mylinuxbox.org> (raw)
In-Reply-To: <20051120110326.3fc18bf7.ayerkes@speakeasy.net>
[-- Attachment #1: Type: text/plain, Size: 1486 bytes --]
On Sun, Nov 20, 2005 at 11:03:26AM -0800, art yerkes wrote:
> > > 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.
> > >
> > > +static void console_copy()
> > > +{
> > > +#ifdef _WIN32
> >
> Unfortunately, I only implemented copying for windows. I'm not sure
> how the clipboard works on other platforms, but they can be added in
> the console_copy function.
>
Thank you! This is great.
I've attached a modified version, which is more generic. Instead of copying to
the clipboard, it saves a copy of the text into a file named qemu-clip.txt
(in the working directory of qemu). Should work on all platforms. Needs a lot
of work (being able to specify the name of the file, append instead of overwrite,
etc.) but should make it easy to "cheat copy" (save it to a file and then copy
the text via a word processor).
I'll see if I can make it copy into the X clipboard directly (the entire
X clipboard system is built in a weird way though).
> --
> 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
I'll try this soon.
--
Infinite complexity begets infinite beauty.
Infinite precision begets infinite perfection.
[-- Attachment #2: qemu-put-console.diff --]
[-- Type: text/plain, Size: 2626 bytes --]
diff -ur qemu/console.c qemu.new/console.c
--- qemu/console.c Thu Jan 27 23:09:49 2005
+++ qemu.new/console.c Mon Nov 21 18:33:15 2005
@@ -406,6 +406,56 @@
console_show_cursor(s, 1);
}
+static void console_copy()
+{
+ TextConsole *s;
+ int i, j, copytotal = 0, lastline = 0, row;
+ FILE *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( (copydest = fopen("qemu-clip.txt","w")) == NULL ) { printf("error opening qemu-clip.txt\n"); return; }
+
+ // 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) )
+ fputc(ch, copydest);
+ else
+ fputc(' ', copydest);
+ }
+ // fputc('\r', copydest); /* don't need this since we've opened in text mode */
+ fputc('\n', copydest);
+ }
+
+ //fputc(0, copydest);
+
+ // Now set the clipboard
+ fclose(copydest);
+}
+
static void console_scroll(int ydelta)
{
TextConsole *s;
@@ -641,6 +691,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 */
diff -ur qemu/sdl.c qemu.new/sdl.c
--- qemu/sdl.c Sat Nov 5 09:56:28 2005
+++ qemu.new/sdl.c Mon Nov 21 18:28:02 2005
@@ -391,6 +387,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 {
diff -ur qemu/vl.h qemu.new/vl.h
--- qemu/vl.h Tue Nov 15 18:19:19 2005
+++ qemu.new/vl.h Mon Nov 21 18:28:36 2005
@@ -193,6 +193,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);
prev parent reply other threads:[~2005-11-21 23:42 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-20 11:25 [Qemu-devel] Patch: Ctrl+Ins to copy console on windows art yerkes
2005-11-20 17:45 ` Johannes Schindelin
2005-11-20 19:03 ` art yerkes
2005-11-21 23:41 ` Jim C. Brown [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20051121234148.GA26125@jbrown.mylinuxbox.org \
--to=jma5@umd.edu \
--cc=ayerkes@speakeasy.net \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).