Ejemplo n.º 1
0
Archivo: mev.c Proyecto: Cordia/vte
static void
reset(void)
{
	decset(tracking_x10, FALSE);
	decset(tracking_mouse, FALSE);
	decset(tracking_hilite, FALSE);
	decset(tracking_cell_motion, FALSE);
	decset(tracking_all_motion, FALSE);
	fflush(stdout);
}
Ejemplo n.º 2
0
/* Reset all of the keyboard modes. */
static void
reset(void)
{
	g_print(MODE_NORMAL_KEYPAD);
	decset(MODE_APPLICATION_CURSOR_KEYS, FALSE);
	decset(MODE_SUN_FUNCTION_KEYS, FALSE);
	decset(MODE_HP_FUNCTION_KEYS, FALSE);
	decset(MODE_XTERM_FUNCTION_KEYS, FALSE);
	decset(MODE_VT220_FUNCTION_KEYS, FALSE);
	reset_scrolling_region();
	restore_cursor();
}
Ejemplo n.º 3
0
Archivo: mev.c Proyecto: adsr/vte
static void
reset(void)
{
        reset_mouse_tracking_mode();
        decset(tracking_focus, FALSE);
        fflush(stdout);
}
Ejemplo n.º 4
0
Archivo: mev.c Proyecto: Cordia/vte
static void
clear(void)
{
	fprintf(stdout, "%s",
		_VTE_CAP_ESC "7"
		_VTE_CAP_CSI "8;1H"
		_VTE_CAP_CSI "1J"
		_VTE_CAP_CSI "2K"
		_VTE_CAP_CSI "1;1H");
	reset();
	switch (tracking_mode) {
	case tracking_x10:
		fprintf(stdout, "X10 tracking enabled.\r\n");
		decset(tracking_x10, TRUE);
		break;
	case tracking_mouse:
		fprintf(stdout, "Mouse tracking enabled.\r\n");
		decset(tracking_mouse, TRUE);
		break;
	case tracking_hilite:
		fprintf(stdout, "Hilite tracking enabled.\r\n");
		decset(tracking_hilite, TRUE);
		break;
	case tracking_cell_motion:
		fprintf(stdout, "Cell motion tracking enabled.\r\n");
		decset(tracking_cell_motion, TRUE);
		break;
	case tracking_all_motion:
		fprintf(stdout, "All motion tracking enabled.\r\n");
		decset(tracking_all_motion, TRUE);
		break;
	default:
		fprintf(stdout, "Tracking disabled.\r\n");
		break;
	}
	fprintf(stdout, "A - X10.\r\n");
	fprintf(stdout, "B - Mouse tracking.\r\n");
	fprintf(stdout, "C - Hilite tracking [FIXME: NOT IMPLEMENTED].\r\n");
	fprintf(stdout, "D - Cell motion tracking.\r\n");
	fprintf(stdout, "E - All motion tracking.\r\n");
	fprintf(stdout, "%s", _VTE_CAP_ESC "8");
	fflush(stdout);
}
Ejemplo n.º 5
0
Archivo: mev.c Proyecto: adsr/vte
static void
clear(void)
{
	fprintf(stdout, "%s",
		_VTE_CAP_ESC "7"
		_VTE_CAP_CSI "11;1H"
		_VTE_CAP_CSI "1J"
		_VTE_CAP_CSI "2K"
		_VTE_CAP_CSI "1;1H");
	reset_mouse_tracking_mode();
	switch (tracking_mode) {
	case tracking_x10:
		fprintf(stdout, "X10 tracking enabled.\r\n");
		decset(tracking_x10, TRUE);
		break;
	case tracking_mouse:
		fprintf(stdout, "Mouse tracking enabled.\r\n");
		decset(tracking_mouse, TRUE);
		break;
	case tracking_hilite:
		fprintf(stdout, "Hilite tracking enabled.\r\n");
		decset(tracking_hilite, TRUE);
		break;
	case tracking_cell_motion:
		fprintf(stdout, "Cell motion tracking enabled.\r\n");
		decset(tracking_cell_motion, TRUE);
		break;
	case tracking_all_motion:
		fprintf(stdout, "All motion tracking enabled.\r\n");
		decset(tracking_all_motion, TRUE);
		break;
	case tracking_xterm_ext:
		fprintf(stdout, "Xterm 1006 mouse tracking extension enabled.\r\n");
		decset(tracking_xterm_ext, TRUE);
		break;
	case tracking_urxvt:
		fprintf(stdout, "rxvt-unicode 1015 mouse tracking extension enabled.\r\n");
		decset(tracking_urxvt, TRUE);
		break;
	default:
		fprintf(stdout, "Tracking disabled.\r\n");
		break;
	}
        fprintf(stdout, "Tracking focus %s.\r\n", tracking_focus_mode ? "enabled":"disabled");
	fprintf(stdout, "A - X10.\r\n");
	fprintf(stdout, "B - Mouse tracking.\r\n");
	fprintf(stdout, "C - Hilite tracking [FIXME: NOT IMPLEMENTED].\r\n");
	fprintf(stdout, "D - Cell motion tracking.\r\n");
	fprintf(stdout, "E - All motion tracking.\r\n");
	fprintf(stdout, "F - Xterm 1006 extension.\r\n");
	fprintf(stdout, "G - rxvt-unicode extension.\r\n");
	fprintf(stdout, "I - Focus tracking.\r\n");
	fprintf(stdout, "Q - Quit.\r\n");
	fprintf(stdout, "%s", _VTE_CAP_ESC "8");
	fflush(stdout);
}
Ejemplo n.º 6
0
Archivo: mev.c Proyecto: adsr/vte
static void
reset_mouse_tracking_mode(void)
{
	decset(tracking_x10, FALSE);
	decset(tracking_mouse, FALSE);
	decset(tracking_hilite, FALSE);
	decset(tracking_cell_motion, FALSE);
	decset(tracking_all_motion, FALSE);
	decset(tracking_xterm_ext, FALSE);
	decset(tracking_urxvt, FALSE);
	fflush(stdout);
}
Ejemplo n.º 7
0
Archivo: mev.c Proyecto: adsr/vte
static gboolean
parse(void)
{
	GByteArray *bytes;
	guchar buffer[64];
	gsize i, length;
	gboolean ret = FALSE;

	bytes = g_byte_array_new();
	if ((length = read(STDIN_FILENO, buffer, sizeof(buffer))) > 0) {
		g_byte_array_append(bytes, buffer, length);
	}

	i = 0;
	while (i < bytes->len) {
		switch (bytes->data[i]) {
		case 'A':
		case 'a':
			tracking_mode = (tracking_mode == tracking_x10) ?
					0 : tracking_x10;
			i++;
			break;
		case 'B':
		case 'b':
			tracking_mode = (tracking_mode == tracking_mouse) ?
					0 : tracking_mouse;
			i++;
			break;
		case 'C':
		case 'c':
			tracking_mode = (tracking_mode == tracking_hilite) ?
					0 : tracking_hilite;
			i++;
			break;
		case 'D':
		case 'd':
			tracking_mode = (tracking_mode == tracking_cell_motion) ?
					0 : tracking_cell_motion;
			i++;
			break;
		case 'E':
		case 'e':
			tracking_mode = (tracking_mode == tracking_all_motion) ?
					0 : tracking_all_motion;
			i++;
			break;
		case 'F':
		case 'f':
			tracking_mode = (tracking_mode == tracking_xterm_ext) ?
					0 : tracking_xterm_ext;
			i++;
			break;
		case 'G':
		case 'g':
			tracking_mode = (tracking_mode == tracking_urxvt) ?
					0 : tracking_urxvt;
			i++;
			break;
		case 'I':
		case 'i':
			tracking_focus_mode = !tracking_focus_mode;
                        decset(tracking_focus, tracking_focus_mode);
			i++;
			break;
		case 'Q':
		case 'q':
			ret = TRUE;
			i++;
			break;
		case '\033': {
                        gsize consumed = parse_esc(&bytes->data[i], bytes->len - i);
                        if (consumed > 0) {
                                i += consumed;
                                break;
                        }
                        /* else fall-trough */
                }
		default:
                        i += print_data(&bytes->data[i], bytes->len - i);
			fprintf(stdout, "\r\n");
			break;
		}
	}
	fflush(stdout);
	g_byte_array_free(bytes, TRUE);

	return ret;
}
Ejemplo n.º 8
0
int
main(int argc, char **argv)
{
	char c;
	guint i;
	struct termios tcattr;
	GByteArray *bytes;
	gboolean done = FALSE, saved = FALSE;
	struct timeval tv;
	fd_set readset;

	/* Start up: save the cursor location and put the terminal in
	 * raw mode. */
	bytes = g_byte_array_new();
	save_cursor();
	if (tcgetattr(STDIN_FILENO, &tcattr) != 0) {
		perror("tcgetattr");
		return 1;
	}
	original = tcattr;
	signal(SIGINT, sigint_handler);
	/* Here we approximate what cfmakeraw() would do, for the benefit
	 * of systems which don't actually provide the function. */
	tcattr.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP |
			    INLCR | IGNCR | ICRNL | IXON);
	tcattr.c_oflag &= ~(OPOST);
	tcattr.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
	tcattr.c_cflag &= ~(CSIZE | PARENB);
	tcattr.c_cflag |= CS8;
#ifdef HAVE_CFMAKERAW
	cfmakeraw(&tcattr);
#endif
	if (tcsetattr(STDIN_FILENO, TCSANOW, &tcattr) != 0) {
		perror("tcsetattr");
		return 1;
	}

	/* Switch to the alternate screen, clear it, and reset the keyboard. */
	decset(MODE_ALTERNATE_SCREEN, TRUE);
	clear();
	reset();

	/* Main processing loop. */
	while (!done) {
		print_help();
		set_scrolling_region();
		if (saved) {
			restore_cursor();
		}

		/* Read a single byte. */
		if (read(STDIN_FILENO, &c, 1) != 1) {
			done = TRUE;
		}
		switch (c) {
		case 'A':
		case 'a':
			keypad_mode = 1 - keypad_mode;
			if (keypad_mode == normal) {
				g_print(MODE_NORMAL_KEYPAD);
			} else {
				g_print(MODE_APPLICATION_KEYPAD);
			}
			break;
		case 'B':
		case 'b':
			cursor_mode = 1 - cursor_mode;
			decset(MODE_APPLICATION_CURSOR_KEYS,
			       cursor_mode == application);
			break;
		case 'C':
		case 'c':
			sun_fkeys = !sun_fkeys;
			decset(MODE_SUN_FUNCTION_KEYS, sun_fkeys);
			break;
		case 'D':
		case 'd':
			hp_fkeys = !hp_fkeys;
			decset(MODE_HP_FUNCTION_KEYS, hp_fkeys);
			break;
		case 'E':
		case 'e':
			xterm_fkeys = !xterm_fkeys;
			decset(MODE_XTERM_FUNCTION_KEYS, xterm_fkeys);
			break;
		case 'F':
		case 'f':
			vt220_fkeys = !vt220_fkeys;
			decset(MODE_VT220_FUNCTION_KEYS, vt220_fkeys);
			break;
		case 'R':
		case 'r':
			keypad_mode = cursor_mode = normal;
			sun_fkeys = hp_fkeys = xterm_fkeys = vt220_fkeys = FALSE;
			reset();
			break;
		case 'Q':
		case 'q':
			done = TRUE;
			break;
		case 0x0c: /* ^L */
			clear();
			if (saved) {
				restore_cursor();
				saved = FALSE;
			}
			break;
		default:
			/* We get here if it's not one of the keys we care
			 * about, so it might be a sequence. */
			if (saved) {
				restore_cursor();
			}
			g_byte_array_append(bytes, &c, 1);
			/* Wait for up to just under 1/50 second. */
			tv.tv_sec = 0;
			tv.tv_usec = 1000000 / 50;
			FD_ZERO(&readset);
			FD_SET(STDIN_FILENO, &readset);
			while (select(STDIN_FILENO + 1,
				      &readset, NULL, NULL, &tv) == 1) {
				if (read(STDIN_FILENO, &c, 1) == 1) {
					g_byte_array_append(bytes, &c, 1);
				} else {
					break;
				}
				tv.tv_sec = 0;
				tv.tv_usec = 1000000 / 50;
				FD_ZERO(&readset);
				FD_SET(STDIN_FILENO, &readset);
			}
			/* Clear this line, and print the sequence. */
			g_print(ESC "[K");
			for (i = 0; i < bytes->len; i++) {
				if (bytes->data[i] == 27) {
					g_print("<ESC> ");
				} else
				if ((((guint8)bytes->data[i]) < 32) ||
				    (((guint8)bytes->data[i]) > 126)) {
					g_print("<0x%02x> ", bytes->data[i]);
				} else {
					g_print("`%c' ", bytes->data[i]);
				}
			}
			g_print("\r\n");
			g_byte_array_set_size(bytes, 0);
			save_cursor();
			saved = TRUE;
			break;
		}
		reset_scrolling_region();
	}

	decset(MODE_ALTERNATE_SCREEN, FALSE);

	if (tcsetattr(STDIN_FILENO, TCSANOW, &original) != 0) {
		perror("tcsetattr");
		return 1;
	}

	g_byte_array_free(bytes, TRUE);

	reset();

	return 0;
}