diff --git a/i3-vim-focus/i3-vim-focus-c b/i3-vim-focus/i3-vim-focus-c new file mode 100755 index 0000000..46925e5 Binary files /dev/null and b/i3-vim-focus/i3-vim-focus-c differ diff --git a/i3-vim-focus/main.c b/i3-vim-focus/main.c new file mode 100644 index 0000000..7bfc0ed --- /dev/null +++ b/i3-vim-focus/main.c @@ -0,0 +1,63 @@ +/* File: i3_vim_focus.c + * + * Compile with: + * gcc -lX11 -lxdo -o i3_vim_focus i3_vim_focus.c $(pkg-config --libs --cflags i3ipc-glib-1.0) + * + */ + +#include + +#include +#include + +#include + +#include +#include + +int main(int argc, char *argv[]) { + + char cmd[20]; + + unsigned char *name; + int name_len; + int name_type; + Window window_ret; + + i3ipcConnection *conn; + gchar *reply; + + if(argc < 2){ + printf("Missing argument\n"); + return 1; + } + + xdo_t *xdo = xdo_new(NULL); + xdo_get_active_window(xdo, &window_ret); + xdo_get_window_name(xdo, window_ret, &name, &name_len, &name_type); + + if(strstr(name, "VIM")) + { + strcpy(cmd, "Escape+g+w+"); + + + strcat(cmd, (argv[1][0] == 'l')? "h" : + (argv[1][0] == 'd')? "j" : + (argv[1][0] == 'u')? "k" : + "l" ); + + xdo_send_keysequence_window(xdo, window_ret, cmd, 0); + } + else + { + conn = i3ipc_connection_new(NULL, NULL); + strcpy(cmd, "focus "); + strcat(cmd, argv[1]); + reply = i3ipc_connection_message(conn, I3IPC_MESSAGE_TYPE_COMMAND, cmd, NULL); + g_free(reply); + g_object_unref(conn); + } + + XFree(name); + return 0; +} diff --git a/i3-vim-focus/src/main.rs b/i3-vim-focus/src/main.rs index 1da1274..975b320 100644 --- a/i3-vim-focus/src/main.rs +++ b/i3-vim-focus/src/main.rs @@ -111,8 +111,8 @@ fn xdo_i3_calls(name: &str, direction: Direction, move_window: bool) -> Result format!("Escape+g+m+{}", direction.to_vim_direction()), - false => format!("Escape+g+w+{}", direction.to_vim_direction()), + true => format!("escape+g+m+{}", direction.to_vim_direction()), + false => format!("escape+g+w+{}", direction.to_vim_direction()), }; let mods = xdo.get_active_modifiers()?; window.clear_active_modifiers(&mods)?;