Support for turning off auto-repeat

This commit is contained in:
Kovid Goyal 2016-11-30 08:03:29 +05:30
parent 256a5318f1
commit f25b2d241f
4 changed files with 18 additions and 8 deletions

View File

@ -226,7 +226,7 @@ PyTypeObject ChangeTracker_Type;
typedef struct {
bool mLNM, mIRM, mDECTCEM, mDECSCNM, mDECOM, mDECAWM, mDECCOLM,
bool mLNM, mIRM, mDECTCEM, mDECSCNM, mDECOM, mDECAWM, mDECCOLM, mDECARM,
mBRACKETED_PASTE, mFOCUS_TRACKING, mMOUSE_BUTTON_TRACKING,
mMOUSE_MOTION_TRACKING, mMOUSE_SGR_MODE, mMOUSE_MOVE_TRACKING;
} ScreenModes;

View File

@ -30,10 +30,15 @@
// on the screen.
#define DECCOLM (3 << 5)
// Scroll speed
#define DECSCLM (4 << 5)
// *Screen Mode*: toggles screen-wide reverse-video mode.
#define DECSCNM (5 << 5)
// Auto-repeat of keys
#define DECARM (8 << 5)
/* *Origin Mode*: allows cursor addressing relative to a user-defined
origin. This mode resets when the terminal is powered up or reset.
It does not affect the erase in display (ED) function.

View File

@ -11,7 +11,7 @@
#include "tracker.h"
#include "modes.h"
static const ScreenModes empty_modes = {0, .mDECAWM=true, .mDECTCEM=true};
static const ScreenModes empty_modes = {0, .mDECAWM=true, .mDECTCEM=true, .mDECARM=true};
// Constructor/destructor {{{
@ -305,6 +305,7 @@ set_mode_from_const(Screen *self, unsigned int mode, bool val) {
switch(mode) {
SIMPLE_MODE(LNM)
SIMPLE_MODE(IRM)
SIMPLE_MODE(DECARM)
SIMPLE_MODE(BRACKETED_PASTE)
SIMPLE_MODE(MOUSE_BUTTON_TRACKING)
SIMPLE_MODE(MOUSE_MOVE_TRACKING)
@ -313,7 +314,8 @@ set_mode_from_const(Screen *self, unsigned int mode, bool val) {
SIMPLE_MODE(FOCUS_TRACKING)
case DECCKM:
break; // we ignore this mode
case DECSCLM:
break; // we ignore these modes
case DECTCEM:
self->modes.mDECTCEM = val;
if ((val && self->cursor->hidden) || (!val && !self->cursor->hidden)) {
@ -918,6 +920,7 @@ MODE_GETTER(mouse_button_tracking_enabled, MOUSE_BUTTON_TRACKING)
MODE_GETTER(mouse_motion_tracking_enabled, MOUSE_MOTION_TRACKING)
MODE_GETTER(mouse_move_tracking_enabled, MOUSE_MOVE_TRACKING)
MODE_GETTER(mouse_in_sgr_mode, MOUSE_SGR_MODE)
MODE_GETTER(auto_repeat_enabled, DECARM)
static PyObject*
@ -1086,6 +1089,7 @@ static PyMethodDef methods[] = {
MND(set_scroll_cell_data, METH_VARARGS)
MND(apply_selection, METH_VARARGS)
MND(in_bracketed_paste_mode, METH_NOARGS)
MND(auto_repeat_enabled, METH_NOARGS)
MND(focus_tracking_enabled, METH_NOARGS)
MND(mouse_button_tracking_enabled, METH_NOARGS)
MND(mouse_motion_tracking_enabled, METH_NOARGS)

View File

@ -274,11 +274,12 @@ class TabManager(Thread):
if not passthrough:
return
if window:
if window.char_grid.scrolled_by and key not in MODIFIER_KEYS:
window.scroll_end()
data = interpret_key_event(key, scancode, mods)
if data:
window.write_to_child(data)
if window.screen.auto_repeat_enabled() or action == GLFW_PRESS:
if window.char_grid.scrolled_by and key not in MODIFIER_KEYS:
window.scroll_end()
data = interpret_key_event(key, scancode, mods)
if data:
window.write_to_child(data)
def on_focus(self, window, focused):
w = self.active_window