Skip to content

Commit

Permalink
fix modifiers
Browse files Browse the repository at this point in the history
  • Loading branch information
brotzeit committed Dec 8, 2018
1 parent e4a2089 commit de06238
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 21 deletions.
8 changes: 3 additions & 5 deletions lisp/vterm.el
Original file line number Diff line number Diff line change
Expand Up @@ -183,18 +183,16 @@
(shift (memq 'shift modifiers))
(meta (memq 'meta modifiers))
(ctrl (memq 'control modifiers)))
(let ((key (key-description (vector (event-basic-type last-input-event)))))
(when key
(vterm-send-key key)))))
(when-let ((key (key-description (vector (event-basic-type last-input-event)))))
(vterm-send-key key shift meta ctrl))))

(defun vterm-send-key (key &optional shift meta ctrl)
"Sends KEY to libvterm with optional modifiers SHIFT, META and CTRL."
(let ((inhibit-redisplay t)
(inhibit-read-only t))
(when (and shift (not meta) (not ctrl))
(setq key (upcase key)))
;; (print key)
(vterm-update key)))
(vterm-update key shift meta ctrl)))

(defun vterm--face-color-hex (face attr)
"Return the color of the FACE's ATTR as a hex string."
Expand Down
19 changes: 16 additions & 3 deletions rust_src/src/vterm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ use crate::{
vterm_get_size, vterm_input_write, vterm_new, vterm_obtain_screen, vterm_obtain_state,
vterm_output_get_buffer_current, vterm_screen_flush_damage, vterm_screen_reset,
vterm_screen_set_damage_merge, vterm_set_size, vterm_set_utf8, vterm_state_get_cursorpos,
vterm_state_set_default_colors, vterm_state_set_palette_color, VTermColor, VTermDamageSize,
VTermPos, VTermRect, VTermScreenCell, VTermState,
vterm_state_set_palette_color, VTermColor, VTermDamageSize,
VTermPos, VTermRect, VTermScreenCell, VTermState,VTermModifier
},
threads::ThreadState,
vectors::length,
Expand Down Expand Up @@ -179,7 +179,20 @@ pub fn vterm_update(
let term: *mut Term = global_term;

if string.is_not_nil() {
vterm_process_input(string, shift, meta, ctrl);
let mut modifier = VTermModifier::VTERM_MOD_NONE;
if shift {
modifier = modifier | VTermModifier::VTERM_MOD_SHIFT;
}

if meta {
modifier = modifier | VTermModifier::VTERM_MOD_ALT;
}

if ctrl {
modifier = modifier | VTermModifier::VTERM_MOD_CTRL;
}

vterm_process_input(string, shift, meta, ctrl, modifier);
}

vterm_flush_output(term);
Expand Down
2 changes: 1 addition & 1 deletion src/lisp.h
Original file line number Diff line number Diff line change
Expand Up @@ -4932,7 +4932,7 @@ extern Lisp_Object refresh_lines (Term *term, int start_row, int end_row, int en

extern void vterm_sb_buffer_size (void);

extern unsigned char * vterm_process_input (Lisp_Object input, bool shift , bool meta , bool ctrl );
extern unsigned char * vterm_process_input (Lisp_Object input, bool shift , bool meta , bool ctrl, VTermModifier modifier );

extern size_t get_col_offset(Term *term, int row, int end_col);

Expand Down
16 changes: 4 additions & 12 deletions src/vterm.c
Original file line number Diff line number Diff line change
Expand Up @@ -331,24 +331,16 @@ vterm_sb_buffer_size () {
}

unsigned char *
vterm_process_input (Lisp_Object input, bool shift, bool meta, bool ctrl) {
vterm_process_input (Lisp_Object input, bool shift, bool meta, bool ctrl, VTermModifier modifier) {
Term *term = global_term;

ptrdiff_t len = vterm_string_bytes(input);
char key[len];
unsigned char key[len];

vterm_module_copy_string_contents (input, key, &len);

VTermModifier modifier = VTERM_MOD_NONE;
if (shift)
modifier = modifier | VTERM_MOD_SHIFT;
if (meta)
modifier = modifier | VTERM_MOD_ALT;
if (ctrl)
modifier = modifier | VTERM_MOD_CTRL;
vterm_module_copy_string_contents (input, (char *)key, &len);

// Ignore the final zero byte
term_process_key(term, (unsigned char*) key, len - 1, modifier);
term_process_key(term, key, len - 1, modifier);

return key;
}
Expand Down

0 comments on commit de06238

Please sign in to comment.