aboutsummaryrefslogtreecommitdiff
path: root/input_field.c
diff options
context:
space:
mode:
Diffstat (limited to 'input_field.c')
-rw-r--r--input_field.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/input_field.c b/input_field.c
index ae5ae43..aa522dc 100644
--- a/input_field.c
+++ b/input_field.c
@@ -90,6 +90,31 @@ bool type_key(client_state* state, xkb_keysym_t keysym) {
return true;
}
+ // paste
+ if (keysym == XKB_KEY_v && ctrl) {
+ FILE* fp = popen("wl-paste --no-newline --type text/plain 2>/dev/null", "r");
+ if (!fp) return false;
+
+ char* buffer = NULL;
+ size_t size = 0;
+ ssize_t len = getdelim(&buffer, &size, '\0', fp);
+ int status = pclose(fp);
+
+ if (status != 0 || len <= 0) {
+ free(buffer);
+ return false;
+ }
+
+ for (size_t i = 0; i < len; ++i) {
+ array_add(state->input_buffer, buffer[i]);
+ }
+
+ update_text_buffer(state);
+
+ free(buffer);
+ return false;
+ }
+
// submit line
if (keysym == XKB_KEY_Return || keysym == XKB_KEY_KP_Enter) {
submit_line(state);