From 7741fa25a23f2bd38fdb093c201726c4b04bfa75 Mon Sep 17 00:00:00 2001 From: Jack Jamison Date: Mon, 20 Oct 2025 17:25:11 -0400 Subject: clipboard (depend on wl-paste) --- README.md | 8 ++++---- input_field.c | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index dd94445..0ef4d5c 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,13 @@ To build: `make` - [X] scrolling - [X] special mode if there is no stdin - [x] sort filtering by match % -- [ ] cursor +- [x] cursor - [ ] page scroll +- [ ] unicode +- [ ] emacs keybindings +- [ ] protocol clipboard - [ ] fuzzy filter - [ ] "prompt" -- [ ] cursor -- [ ] emacs keybindings - [ ] config file - [ ] input fluff -- [ ] unicode - [ ] kerning 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); -- cgit v1.2.3