From 79fe68dc57d72d4765850eb9aec23675523a1a4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20K=C3=B6lker?= Date: Thu, 1 Oct 2015 18:41:15 +0200 Subject: [PATCH] Towers: allow marking of clues as done with the keyboard --- puzzles.but | 3 ++- towers.c | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/puzzles.but b/puzzles.but index 2c8f91b..113f462 100644 --- a/puzzles.but +++ b/puzzles.but @@ -2652,7 +2652,8 @@ Pressing M will fill in a full set of pencil marks in every square that does not have a main digit in it. Left-clicking a clue will mark it as done (grey it out), or unmark it -if it is already marked. +if it is already marked. Holding Control or Shift and pressing an +arrow key likewise marks any clue in the given direction. (All the actions described in \k{common-actions} are also available.) diff --git a/towers.c b/towers.c index b5092f0..7666af9 100644 --- a/towers.c +++ b/towers.c @@ -1292,6 +1292,7 @@ static char *interpret_move(const game_state *state, game_ui *ui, int x, int y, int button) { int w = state->par.w; + int shift_or_control = button & (MOD_SHFT | MOD_CTRL); int tx, ty; char buf[80]; @@ -1376,6 +1377,20 @@ static char *interpret_move(const game_state *state, game_ui *ui, } } if (IS_CURSOR_MOVE(button)) { + if (shift_or_control) { + int x = ui->hx, y = ui->hy; + switch (button) { + case CURSOR_LEFT: x = -1; break; + case CURSOR_RIGHT: x = w; break; + case CURSOR_UP: y = -1; break; + case CURSOR_DOWN: y = w; break; + } + if (is_clue(state, x, y)) { + sprintf(buf, "%c%d,%d", 'D', x, y); + return dupstr(buf); + } + return NULL; + } move_cursor(button, &ui->hx, &ui->hy, w, w, 0); ui->hshow = ui->hcursor = 1; return "";