ctx = get_ctx();
if (ctx) {
int need_sbar_update = seen_disp_event;
- if ((seen_key_event && (cfg.scroll_on_key)) ||
- (seen_disp_event && (cfg.scroll_on_disp))) {
+ if (seen_disp_event && cfg.scroll_on_disp) {
disptop = 0; /* return to main screen */
- seen_disp_event = seen_key_event = 0;
+ seen_disp_event = 0;
need_sbar_update = TRUE;
}
if (need_sbar_update)
}
/*
+ * Called from front end when a keypress occurs, to trigger
+ * anything magical that needs to happen in that situation.
+ */
+void term_seen_key_event(void)
+{
+ /*
+ * On any keypress, clear the bell overload mechanism
+ * completely, on the grounds that large numbers of
+ * beeps coming from deliberate key action are likely
+ * to be intended (e.g. beeps from filename completion
+ * blocking repeatedly).
+ */
+ beep_overloaded = FALSE;
+ while (beephead) {
+ struct beeptime *tmp = beephead;
+ beephead = tmp->next;
+ sfree(tmp);
+ }
+ beeptail = NULL;
+ nbeeps = 0;
+
+ /*
+ * Reset the scrollback on keypress, if we're doing that.
+ */
+ if (cfg.scroll_on_key) {
+ disptop = 0; /* return to main screen */
+ seen_disp_event = 1;
+ }
+}
+
+/*
* Same as power_on(), but an external function.
*/
void term_pwron(void)
int len;
get_clip(&data, &len);
- if (data) {
+ if (data && len > 0) {
wchar_t *p, *q;
+ term_seen_key_event(); /* pasted data counts */
+
if (paste_buffer)
sfree(paste_buffer);
paste_pos = paste_hold = paste_len = 0;