mirror of
https://github.com/rbreaves/kinto.git
synced 2025-08-14 06:39:16 +02:00
- Basic cleanup of old files
This commit is contained in:
86
kinto_old/defaults.json
Normal file
86
kinto_old/defaults.json
Normal file
@@ -0,0 +1,86 @@
|
||||
{"defaultapps":[{
|
||||
"name":"term",
|
||||
"appnames":[ "Gnome-terminal","konsole","io.elementary.terminal","terminator","sakura","guake","tilda","xterm","eterm","kitty" ]
|
||||
}],
|
||||
"defaulttypes":["windows","mac","chromebook"],
|
||||
"defaults":[{
|
||||
"id": 1,
|
||||
"name":"Windows",
|
||||
"type":"windows",
|
||||
"active": false,
|
||||
"description":"Standard Windows 104 Keyboards",
|
||||
"gui":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen",
|
||||
"term":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen",
|
||||
"xkb_symbols_gui":"+altwin(ctrl_alt_win)+mac_gui(mac_levelssym)+mac_gui(mac_appcycle)",
|
||||
"xkb_symbols_term":"+altwin(swap_alt_win)+mac_term(mac_win)+mac_term(mac_global)",
|
||||
"xkb_types_gui":"+mac_gui(addmac_levels)",
|
||||
"xkb_types_term":"+mac_term(addmac_levels)"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name":"Mac - hid driver (Recommended - Also supports Windows keyboards)",
|
||||
"type":"mac",
|
||||
"active": false,
|
||||
"description":"Standard Mac Keyboards with Apple driver",
|
||||
"gui":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen",
|
||||
"term":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen",
|
||||
"xkb_symbols_gui":"+altwin(ctrl_alt_win)+mac_gui(mac_levelssym)+mac_gui(mac_appcycle)",
|
||||
"xkb_symbols_term":"+altwin(swap_alt_win)+mac_term(mac_win)+mac_term(mac_global)",
|
||||
"xkb_types_gui":"+mac_gui(addmac_levels)",
|
||||
"xkb_types_term":"+mac_term(addmac_levels)",
|
||||
"hack": "echo '1' | sudo tee -a /sys/module/hid_apple/parameters/swap_opt_cmd;echo 'options hid_apple swap_opt_cmd=1' | sudo tee -a /etc/modprobe.d/hid_apple.conf;sudo update-initramfs -u -k all"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name":"Mac Only (VMs & non-official Apple keyboards)",
|
||||
"type":"mac",
|
||||
"active": true,
|
||||
"description":"Standard Mac Keyboards",
|
||||
"gui":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen",
|
||||
"term":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen",
|
||||
"xkb_symbols_gui":"+ctrl(swap_lwin_lctl)+ctrl(swap_rwin_rctl)+mac_gui(mac_levelssym)+mac_gui(mac_appcycle)",
|
||||
"xkb_symbols_term":"+altwin(alt_super_win)+mac_term(mac_apple)+mac_term(mac_global)",
|
||||
"xkb_types_gui":"+mac_gui(addmac_levels)",
|
||||
"xkb_types_term":"+mac_term(addmac_levels)"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name":"Chromebook (xfce)",
|
||||
"type":"chromebook",
|
||||
"active": false,
|
||||
"description":"Standard Chromebook Keyboards",
|
||||
"gui":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen",
|
||||
"term":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen",
|
||||
"xkb_symbols_gui":"+chromebook(swap_lalt_lctrl)+mac_gui(mac_levelssym)+mac_gui(mac_appcycle_chromebook)",
|
||||
"xkb_symbols_term":"+altwin(swap_alt_win)+mac_term_chromebook(mac_levelssym)",
|
||||
"xkb_types_gui":"+mac_gui(addmac_levels)",
|
||||
"xkb_types_term":"+mac_term(addmac_levels)"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name":"Chromebook (xfce) - Windows",
|
||||
"type":"chromebook",
|
||||
"active": false,
|
||||
"description":"Chromebook with Windows 104 Keyboard",
|
||||
"gui":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen; setxkbmap -device $usbid -option altwin:ctrl_alt_win",
|
||||
"term":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen",
|
||||
"fallbackgui":"xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen",
|
||||
"xkb_symbols_gui":"+chromebook(swap_lalt_lctrl)+mac_gui(mac_levelssym)+mac_gui(mac_appcycle_chromebook)",
|
||||
"xkb_symbols_term":"+altwin(swap_alt_win)+mac_term_chromebook(mac_levelssym)",
|
||||
"xkb_types_gui":"+mac_gui(addmac_levels)",
|
||||
"xkb_types_term":"+mac_term(addmac_levels)"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name":"Chromebook (xfce) - Mac",
|
||||
"type":"chromebook",
|
||||
"active": false,
|
||||
"description":"Chromebook with Mac Keyboard",
|
||||
"gui":"setxkbmap -option;setxkbmap -option ctrl:swap_lwin_lctl; xkbcomp -w0 -i $internalid -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen",
|
||||
"term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen",
|
||||
"xkb_symbols_gui":"+chromebook(swap_lalt_lctrl)+mac_gui(mac_levelssym)+mac_gui(mac_appcycle_chromebook)",
|
||||
"xkb_symbols_term":"+altwin(swap_alt_win)+mac_term_chromebook(mac_levelssym)",
|
||||
"xkb_types_gui":"+mac_gui(addmac_levels)",
|
||||
"xkb_types_term":"+mac_term(addmac_levels)"
|
||||
}]
|
||||
}
|
26
kinto_old/keyswap_service.sh
Normal file
26
kinto_old/keyswap_service.sh
Normal file
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
|
||||
systemctl --user stop keyswap >/dev/null 2>&1
|
||||
systemctl --user disable keyswap >/dev/null 2>&1
|
||||
systemctl --user stop keyswap.timer >/dev/null 2>&1
|
||||
systemctl --user disable keyswap.timer >/dev/null 2>&1
|
||||
mkdir -p ~/.config/systemd/user
|
||||
mkdir -p ~/.config/autostart
|
||||
cp ./system-config/keyswap.service ~/.config/systemd/user/keyswap.service
|
||||
cp ./system-config/kinto.desktop ~/.config/autostart/kinto.desktop
|
||||
cp ./system-config/keyswap.timer ~/.config/systemd/user/keyswap.timer
|
||||
cp ./kintox11/binary/kintox11 ~/.config/kinto/kintox11
|
||||
cp ./system-config/xactive.sh ~/.config/kinto/xactive.sh
|
||||
cp ./system-config/caret_status.sh ~/.config/kinto/caret_status.sh
|
||||
cp ./system-config/cleanup.sh ~/.config/kinto/cleanup.sh
|
||||
cp ./system-config/.firefox-nw ~/.config/kinto/.firefox-nw
|
||||
sed -i "s/{username}/`whoami`/g" ~/.config/systemd/user/keyswap.service
|
||||
sed -i "s/{displayid}/`echo "$DISPLAY"`/g" ~/.config/systemd/user/keyswap.service
|
||||
# if [ "${#DISPLAY}" -gt 2 ]
|
||||
# then
|
||||
sed -i "s/#Environment/Environment/g" ~/.config/systemd/user/keyswap.service
|
||||
# fi
|
||||
systemctl --user daemon-reload
|
||||
sed -i "s/ExecStart=/ExecStart=${swapcmd}/g" ~/.config/systemd/user/keyswap.service
|
||||
systemctl --user enable keyswap.timer
|
||||
systemctl --user start keyswap
|
BIN
kinto_old/kintox11/binary/kintox11
Normal file
BIN
kinto_old/kintox11/binary/kintox11
Normal file
Binary file not shown.
5
kinto_old/kintox11/src/Makefile
Normal file
5
kinto_old/kintox11/src/Makefile
Normal file
@@ -0,0 +1,5 @@
|
||||
CFLAGS=-g $(shell pkg-config --cflags json-c xmu)
|
||||
LDFLAGS=-g $(shell pkg-config --libs json-c xmu)
|
||||
|
||||
all:
|
||||
$(CC) kintox11.c $(CFLAGS) $(LDFLAGS) -lm -lpthread -o kintox11
|
694
kinto_old/kintox11/src/kintox11.c
Normal file
694
kinto_old/kintox11/src/kintox11.c
Normal file
@@ -0,0 +1,694 @@
|
||||
// -*- coding:utf-8-unix; mode:c; -*-
|
||||
// Kinto x11 command line
|
||||
/*
|
||||
Reference material
|
||||
get the active window on X window system
|
||||
http://k-ui.jp/blog/2012/05/07/get-active-window-on-x-window-system/
|
||||
*/
|
||||
// To compile without static libraries
|
||||
// gcc kintox11.c -lX11 -lXmu -ljson-c
|
||||
//
|
||||
// To compile with static library json-c
|
||||
// Make sure archive with object files exist ar -t /usr/local/lib/libjson-c.a
|
||||
// gcc -L/usr/local/lib/ kintox11.c -ljson-c -lXmu -lXt -lX11 -O2 -o kintox11
|
||||
//
|
||||
|
||||
#define _GNU_SOURCE 1
|
||||
#include <pthread.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include <locale.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <unistd.h>
|
||||
#include <X11/Xlib.h> // `apt-get install libx11-dev`
|
||||
#include <X11/Xmu/WinUtil.h> // `apt-get install libxmu-dev`
|
||||
#include <json-c/json.h> // `apt install libjson-c-dev`
|
||||
#include <sys/select.h>
|
||||
#include <math.h>
|
||||
#include <sys/time.h>
|
||||
#ifdef WIN32
|
||||
#include <windows.h>
|
||||
#elif _POSIX_C_SOURCE >= 199309L
|
||||
#include <time.h> // for nanosleep
|
||||
#else
|
||||
#include <unistd.h> // for usleep
|
||||
#endif
|
||||
|
||||
const char *eventNames[34] = {"None","KeyPress","KeyRelease","ButtonPress","ButtonRelease","MotionNotify","EnterNotify","LeaveNotify","FocusIn","FocusOut","KeymapNotify","Expose","GraphicsExpose","NoExpose","VisibilityNotify","CreateNotify","DestroyNotify","UnmapNotify","MapNotify","MapRequest","ReparentNotify","ConfigureNotify","ConfigureRequest","ResizeRequest","CirculateNotify","CirculateRequest","PropertyNotify","SelectionClear","SelectionRequest","SelectionNotify","ColormapNotify","ClientMessage","MappingNotify"};
|
||||
|
||||
#define NUM_THREADS 2
|
||||
typedef struct threadArgs * ThreadArgs;
|
||||
struct threadArgs{
|
||||
char *run_onInput;
|
||||
char *run_offInput;
|
||||
};
|
||||
|
||||
long long timeInMilliseconds(void) {
|
||||
struct timeval tv;
|
||||
|
||||
gettimeofday(&tv,NULL);
|
||||
return (((long long)tv.tv_sec)*1000)+(tv.tv_usec/1000);
|
||||
}
|
||||
|
||||
bool debug;
|
||||
bool input_check = 0;
|
||||
long long int event_ts;
|
||||
int last_event;
|
||||
|
||||
Display* d;
|
||||
Window w;
|
||||
XEvent e;
|
||||
|
||||
// cross-platform sleep function
|
||||
void sleep_ms(int milliseconds) {
|
||||
#ifdef WIN32
|
||||
Sleep(milliseconds);
|
||||
#elif _POSIX_C_SOURCE >= 199309L
|
||||
struct timespec ts;
|
||||
ts.tv_sec = milliseconds / 1000;
|
||||
ts.tv_nsec = (milliseconds % 1000) * 1000000;
|
||||
nanosleep(&ts, NULL);
|
||||
#else
|
||||
usleep(milliseconds * 1000);
|
||||
#endif
|
||||
}
|
||||
|
||||
char *trimwhitespace(char *str){
|
||||
char *end;
|
||||
// Trim leading space
|
||||
while(isspace((unsigned char)*str)) str++;
|
||||
if(*str == 0) // All spaces?
|
||||
return str;
|
||||
// Trim trailing space
|
||||
end = str + strlen(str) - 1;
|
||||
while(end > str && isspace((unsigned char)*end)) end--;
|
||||
// Write new null terminator character
|
||||
end[1] = '\0';
|
||||
return str;
|
||||
}
|
||||
|
||||
int check_caret(){
|
||||
int caretint;
|
||||
char * fpname;
|
||||
fpname = malloc(sizeof(char)*20);
|
||||
strcpy(fpname,"/tmp/kinto/caret");
|
||||
if( access( fpname, F_OK ) != -1 ) {
|
||||
char *buffer = NULL;
|
||||
size_t size = 0;
|
||||
FILE *fp = fopen(fpname, "r");
|
||||
if (fp == NULL){
|
||||
return (0);
|
||||
}
|
||||
fseek(fp, 0, SEEK_END);
|
||||
size = ftell(fp);
|
||||
rewind(fp);
|
||||
buffer = malloc((size + 1) * sizeof(*buffer));
|
||||
fread(buffer, size, 1, fp);
|
||||
buffer[size] = '\0';
|
||||
trimwhitespace(buffer);
|
||||
caretint = atoi(buffer);
|
||||
fclose(fp);
|
||||
if(caretint == 1){
|
||||
// printf("caret: %s\n", buffer);
|
||||
return 1;
|
||||
}
|
||||
// printf("found nothing\n");
|
||||
return 0;
|
||||
}
|
||||
else{
|
||||
// printf("file %s does not exist\n",fpname);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void *inputToggle(void *argStruct) {
|
||||
ThreadArgs args = argStruct;
|
||||
|
||||
char * onInput;
|
||||
char * offInput;
|
||||
onInput = malloc(sizeof(char)*400);
|
||||
offInput = malloc(sizeof(char)*400);
|
||||
onInput = args->run_onInput;
|
||||
offInput = args->run_offInput;
|
||||
|
||||
Bool ran_onInput = 0;
|
||||
|
||||
while(input_check){
|
||||
if(check_caret() && ran_onInput == 0){
|
||||
if(debug == true){
|
||||
printf("run_onInput: %s\n",onInput);
|
||||
}
|
||||
system(onInput);
|
||||
ran_onInput = 1;
|
||||
}
|
||||
else if(!check_caret() && ran_onInput == 1){
|
||||
if(debug == true){
|
||||
printf("run_offInput: %s\n",offInput);
|
||||
}
|
||||
system(offInput);
|
||||
ran_onInput = 0;
|
||||
}
|
||||
sleep_ms(100);
|
||||
}
|
||||
pthread_exit(NULL);
|
||||
}
|
||||
|
||||
void *nextPlease(void *threadid) {
|
||||
long tid;
|
||||
tid = (long)threadid;
|
||||
|
||||
// printf("Next Please Thread ID, %ld\n", tid);
|
||||
|
||||
// Reference http://www.rahul.net/kenton/xproto/xevents_errors.html
|
||||
// event type 17 - DestroyNotify
|
||||
// event type 18 - UnmapNotify
|
||||
// event type 22 - ConfigureNotify
|
||||
// Dismiss the following events by initiating another XNextEvent
|
||||
XNextEvent(d, &e);
|
||||
while(e.type != ConfigureNotify || (e.type == ConfigureNotify && last_event == ConfigureNotify && timeInMilliseconds()-event_ts < 419)){
|
||||
XNextEvent(d, &e);
|
||||
}
|
||||
// Unset input thread
|
||||
input_check = 0;
|
||||
last_event = e.type;
|
||||
|
||||
if(debug == true){
|
||||
printf(" event: %s %d\n",eventNames[e.type-1],e.type);
|
||||
printf(" duration: %lldms\n",timeInMilliseconds()-event_ts);
|
||||
}
|
||||
event_ts = timeInMilliseconds();
|
||||
|
||||
pthread_exit(NULL);
|
||||
}
|
||||
|
||||
char * append(char * string1, char * string2){
|
||||
char * result = NULL;
|
||||
asprintf(&result, "%s,%s", string1, string2);
|
||||
return result;
|
||||
}
|
||||
|
||||
static int wait_fd(int fd, double seconds){
|
||||
struct timeval tv;
|
||||
fd_set in_fds;
|
||||
FD_ZERO(&in_fds);
|
||||
FD_SET(fd, &in_fds);
|
||||
tv.tv_sec = trunc(seconds);
|
||||
tv.tv_usec = (seconds - trunc(seconds))*1000000;
|
||||
return select(fd+1, &in_fds, 0, 0, &tv);
|
||||
}
|
||||
|
||||
Bool xerror = False;
|
||||
|
||||
int in_int(int a[],int size,int item){
|
||||
int i,pos=-1;
|
||||
for(i=0;i< size;i++)
|
||||
{
|
||||
if(a[i]==item)
|
||||
{
|
||||
pos=i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return pos;
|
||||
}
|
||||
|
||||
int in(const char **arr, int len, char *target) {
|
||||
int i;
|
||||
for(i = 0; i < len; i++) {
|
||||
if(strncmp(arr[i], target, strlen(target)) == 0) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int strcicmp(char const *a, char const *b){
|
||||
for (;; a++, b++) {
|
||||
int d = tolower((unsigned char)*a) - tolower((unsigned char)*b);
|
||||
if (d != 0 || !*a)
|
||||
return d;
|
||||
}
|
||||
}
|
||||
|
||||
Display* open_display(){
|
||||
int i;
|
||||
Display* d = XOpenDisplay(NULL);
|
||||
for (i = 0; i < 60; i++) {
|
||||
if(d == NULL){
|
||||
printf("fail to open X server display...\n");
|
||||
}
|
||||
else{
|
||||
break;
|
||||
}
|
||||
sleep(1);
|
||||
}
|
||||
if(d == NULL){
|
||||
printf("fail to open X server display for 1 minute...\n");
|
||||
printf("Kintox11 is now exiting...\n");
|
||||
exit(1);
|
||||
}
|
||||
return d;
|
||||
}
|
||||
|
||||
int handle_error(Display* display, XErrorEvent* error){
|
||||
printf("X11 error: type=%d, serial=%lu, code=%d\n",
|
||||
error->type, error->serial, (int)error->error_code);
|
||||
xerror = True;
|
||||
return 1;
|
||||
}
|
||||
|
||||
Window get_focus_window(Display* d, int etype, char const *eventName, char const *current_app, bool debug){
|
||||
Window w;
|
||||
int revert_to;
|
||||
|
||||
if(debug == true){
|
||||
printf("\n get focus window\n");
|
||||
}
|
||||
|
||||
if(!(etype == DestroyNotify || etype == UnmapNotify)) {
|
||||
XGetInputFocus(d, &w, &revert_to); // see man
|
||||
if(debug == true){
|
||||
printf(" -%s: event: %d, window_id: %ld\n",current_app,etype,w);
|
||||
}
|
||||
}
|
||||
|
||||
if(xerror){
|
||||
printf("*Error getting focused window, e.type: %d, current_app: %s\n",etype,current_app);
|
||||
exit(1);
|
||||
}else if(w == None){
|
||||
printf("*no focus window, e.type: %d, current_app: %s\n",etype,current_app);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
// get the top window.
|
||||
// a top window have the following specifications.
|
||||
// * the start window is contained the descendent windows.
|
||||
// * the parent window is the root window.
|
||||
Window get_top_window(Display* d, Window start, int etype, char const *eventName, char const *current_app, bool debug){
|
||||
Window w = start;
|
||||
Window parent = start;
|
||||
Window root = None;
|
||||
Window *children;
|
||||
unsigned int nchildren;
|
||||
Status s;
|
||||
char * ws;
|
||||
char * wstr;
|
||||
ws = malloc(sizeof(char)*4096);
|
||||
wstr = malloc(sizeof(char)*100);
|
||||
// strcpy(wstr,"test,");
|
||||
|
||||
if(debug == true){
|
||||
printf("\n get top window\n");
|
||||
}
|
||||
// Checking for Destroy and Unmap Notify events here too
|
||||
// Sometimes they still get passed through and if so need
|
||||
// to be ignored or XQueryTree will cause a segmentation fault
|
||||
while (parent != root && parent != 0 && !(etype == DestroyNotify || etype == UnmapNotify)) {
|
||||
w = parent;
|
||||
|
||||
s = XQueryTree(d, w, &root, &parent, &children, &nchildren); // see man
|
||||
|
||||
sprintf(wstr, "%ld", w);
|
||||
if ((ws != NULL) && (ws[0] == '\0')) {
|
||||
strcpy(ws,wstr);
|
||||
}
|
||||
else{
|
||||
ws = append(ws, wstr);
|
||||
}
|
||||
|
||||
if (s)
|
||||
XFree(children);
|
||||
|
||||
if(xerror){
|
||||
printf("*fail to get top window: %ld, e.type: %d, current_app: %s\n",w,etype,current_app);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(debug == true){
|
||||
printf(" -%s: event: %d, window_id: %s\n",current_app,etype,ws);
|
||||
}
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
// search a named window (that has a WM_STATE prop)
|
||||
// on the descendent windows of the argment Window.
|
||||
Window get_named_window(Display* d, Window start, int etype, char const *eventName, char const *current_app, bool debug){
|
||||
Window w;
|
||||
|
||||
if(debug == true){
|
||||
printf("\n get named window\n");
|
||||
}
|
||||
// printf("getting named window ... ");
|
||||
w = XmuClientWindow(d, start); // see man
|
||||
|
||||
if(debug == true){
|
||||
printf(" -%s: event: %d, window_id: %ld\n\n",current_app,etype,w);
|
||||
}
|
||||
// if(w == start)
|
||||
// printf("fail\n");
|
||||
// printf("success (window: %d)\n", (int) w);
|
||||
return w;
|
||||
}
|
||||
|
||||
const char * str_window_class(Display* d, Window w, char *prior_app ){
|
||||
Status s;
|
||||
XClassHint* class;
|
||||
|
||||
class = XAllocClassHint(); // see man
|
||||
if(xerror){
|
||||
// printf("ERROR: XAllocClassHint\n");
|
||||
}
|
||||
|
||||
s = XGetClassHint(d, w, class); // see man
|
||||
if(xerror || s){
|
||||
char * app_class;
|
||||
app_class = malloc(sizeof(char)*100);
|
||||
strcpy(app_class,class->res_class);
|
||||
// printf("\tname: %s\n\tclass: %s\n", class->res_name, class->res_class);
|
||||
return app_class;
|
||||
}else{
|
||||
// char * error_msg;
|
||||
// error_msg = malloc(sizeof(char)*50);
|
||||
// strcpy(error_msg, "ERROR: XGetClassHint");
|
||||
return prior_app;
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]){
|
||||
|
||||
XInitThreads();
|
||||
|
||||
if(argc < 2){
|
||||
debug = false;
|
||||
}
|
||||
if(argc > 1 && (strcmp(argv[1], "-d") == 0 || strcmp(argv[1], "--debug") == 0 )){
|
||||
debug = true;
|
||||
printf("Running in debug mode\n");
|
||||
}
|
||||
|
||||
FILE *fp;
|
||||
char buffer[10240];
|
||||
struct json_object *parsed_json, *config, *config_obj,
|
||||
*config_obj_name, *config_obj_run, *config_obj_run_oninput,
|
||||
*config_obj_run_offinput, *config_obj_de, *config_obj_appnames,
|
||||
*appnames_obj, *init, *de, *de_obj, *de_obj_id, *de_obj_active,
|
||||
*de_obj_run, *de_obj_runterm,*de_obj_rungui;
|
||||
|
||||
int arraylen;
|
||||
int appnames_len, init_len, de_len, config_de_len;
|
||||
int system(const char *command);
|
||||
|
||||
size_t i,n,r;
|
||||
|
||||
printf("Importing user_config.json...\n");
|
||||
fp = fopen("user_config.json","r");
|
||||
fread(buffer, 10240, 1, fp);
|
||||
fclose(fp);
|
||||
|
||||
parsed_json = json_tokener_parse(buffer);
|
||||
|
||||
config = json_object_object_get(parsed_json, "config");
|
||||
init = json_object_object_get(parsed_json, "init");
|
||||
de = json_object_object_get(parsed_json, "de");
|
||||
|
||||
arraylen = json_object_array_length(config);
|
||||
init_len = json_object_array_length(init);
|
||||
de_len = json_object_array_length(de);
|
||||
|
||||
const char *name_array[arraylen];
|
||||
const char *run_array[arraylen];
|
||||
const char *run_oninput_array[arraylen];
|
||||
const char *run_offinput_array[arraylen];
|
||||
int init_array[init_len];
|
||||
|
||||
int de_id_array[de_len];
|
||||
Bool de_active_array[de_len];
|
||||
const char *de_run_array[de_len];
|
||||
const char *de_runterm_array[de_len];
|
||||
const char *de_rungui_array[de_len];
|
||||
|
||||
// Grab all de variable info needed
|
||||
for (i = 0; i < de_len; i++) {
|
||||
de_obj = json_object_array_get_idx(de, i);
|
||||
de_obj_id = json_object_object_get(de_obj, "id");
|
||||
de_id_array[i] = json_object_get_int(de_obj_id);
|
||||
de_obj_active = json_object_object_get(de_obj, "active");
|
||||
de_active_array[i] = json_object_get_int(de_obj_active);
|
||||
de_obj_run = json_object_object_get(de_obj, "run");
|
||||
de_run_array[i] = json_object_get_string(de_obj_run);
|
||||
de_obj_runterm = json_object_object_get(de_obj, "run_term");
|
||||
de_runterm_array[i] = json_object_get_string(de_obj_runterm);
|
||||
de_obj_rungui = json_object_object_get(de_obj, "run_gui");
|
||||
de_rungui_array[i] = json_object_get_string(de_obj_rungui);
|
||||
// printf("de_run_array[%ld]: %s\n",i,de_run_array[i]);
|
||||
}
|
||||
// de ends
|
||||
|
||||
int appnames_max = 0;
|
||||
int config_de_max = 0;
|
||||
|
||||
for (i = 0; i < arraylen; i++) {
|
||||
config_obj = json_object_array_get_idx(config, i);
|
||||
config_obj_appnames = json_object_object_get(config_obj, "appnames");
|
||||
config_obj_de = json_object_object_get(config_obj, "de");
|
||||
|
||||
appnames_len = json_object_array_length(config_obj_appnames);
|
||||
if (appnames_len > appnames_max){
|
||||
appnames_max = appnames_len;
|
||||
}
|
||||
config_de_len = json_object_array_length(config_obj_de);
|
||||
if(config_de_len > config_de_max){
|
||||
config_de_max = config_de_len;
|
||||
}
|
||||
}
|
||||
|
||||
const char *appnames_array[arraylen][appnames_max];
|
||||
int config_de_array[arraylen][config_de_max];
|
||||
|
||||
for (i = 0; i < arraylen; i++) {
|
||||
config_obj = json_object_array_get_idx(config, i);
|
||||
|
||||
config_obj_name = json_object_object_get(config_obj, "name");
|
||||
config_obj_run = json_object_object_get(config_obj, "run");
|
||||
config_obj_run_oninput = json_object_object_get(config_obj, "run_onInput");
|
||||
config_obj_run_offinput = json_object_object_get(config_obj, "run_offInput");
|
||||
|
||||
name_array[i] = json_object_get_string(config_obj_name);
|
||||
run_array[i] = json_object_get_string(config_obj_run);
|
||||
run_oninput_array[i] = json_object_get_string(config_obj_run_oninput);
|
||||
run_offinput_array[i] = json_object_get_string(config_obj_run_offinput);
|
||||
// printf("%s\n%s\n", json_object_get_string(config_obj_name), json_object_get_string(config_obj_run));
|
||||
|
||||
config_obj_appnames = json_object_object_get(config_obj, "appnames");
|
||||
appnames_len = json_object_array_length(config_obj_appnames);
|
||||
for (n = 0; n < appnames_len; n++) {
|
||||
// printf("name_array[i]: %s\n",name_array[i]);
|
||||
if(!strcicmp(name_array[i], "gui")){
|
||||
appnames_array[i][n] = NULL;
|
||||
// printf("%s i:%ld n:%ld %s\n",name_array[i],i,n,appnames_array[i][n]);
|
||||
}
|
||||
else{
|
||||
appnames_array[i][n] = json_object_get_string(json_object_array_get_idx(config_obj_appnames, n));
|
||||
//printf("%s i:%ld n:%ld %s\n",name_array[i],i,n,appnames_array[i][n]);
|
||||
}
|
||||
}
|
||||
if(appnames_max > appnames_len){
|
||||
for (n = appnames_len; n < appnames_max; n++){
|
||||
appnames_array[i][n] = NULL;
|
||||
//printf("%s i:%ld n:%ld %s\n",name_array[i],i,n,appnames_array[i][n]);
|
||||
}
|
||||
}
|
||||
|
||||
config_obj_de = json_object_object_get(config_obj, "de");
|
||||
config_de_len = json_object_array_length(config_obj_de);
|
||||
for (n = 0; n < config_de_max; n++) {
|
||||
if(n < config_de_len){
|
||||
// printf("de value: %d\n",json_object_get_int(json_object_array_get_idx(config_obj_de, n)));
|
||||
config_de_array[i][n] = json_object_get_int(json_object_array_get_idx(config_obj_de, n));
|
||||
}
|
||||
else{
|
||||
// printf("de -1 value: %d\n",json_object_get_int(json_object_array_get_idx(config_obj_de, n)));
|
||||
config_de_array[i][n] = -1;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
printf("Data from user_config.json imported successfully.\n");
|
||||
|
||||
for (i = 0; i < init_len; i++) {
|
||||
init_array[i] = json_object_get_int(json_object_array_get_idx(init, i));
|
||||
int de_id_idx = in_int(de_id_array, de_len, init_array[i]);
|
||||
printf("Running init command: %s\n",de_run_array[de_id_idx]);
|
||||
system(de_run_array[de_id_idx]);
|
||||
}
|
||||
|
||||
char *name;
|
||||
|
||||
// for XmbTextPropertyToTextList
|
||||
setlocale(LC_ALL, ""); // see man locale
|
||||
|
||||
d = open_display();
|
||||
XSelectInput(d, DefaultRootWindow(d), SubstructureNotifyMask);
|
||||
XSetErrorHandler(handle_error);
|
||||
|
||||
char * run_normal;
|
||||
char * run_onInput;
|
||||
char * run_offInput;
|
||||
char * prior_app;
|
||||
char * current_app;
|
||||
char * prior_category;
|
||||
char * current_category;
|
||||
run_onInput = malloc(sizeof(char)*400);
|
||||
run_offInput = malloc(sizeof(char)*400);
|
||||
run_normal = malloc(sizeof(char)*400);
|
||||
prior_app = malloc(sizeof(char)*100);
|
||||
current_app = malloc(sizeof(char)*100);
|
||||
prior_category = malloc(sizeof(char)*100);
|
||||
current_category = malloc(sizeof(char)*100);
|
||||
strcpy(prior_app,"none");
|
||||
strcpy(prior_category,"none");
|
||||
|
||||
int remap_bool = 2;
|
||||
|
||||
printf("Starting keyswap...\n");
|
||||
|
||||
// get active window
|
||||
w = get_focus_window(d, 0, eventNames[0], current_app, debug);
|
||||
w = get_top_window(d, w, 0, eventNames[0], current_app, debug);
|
||||
w = get_named_window(d, w, 0, eventNames[0], current_app, debug);
|
||||
|
||||
// XFetchName(d, w, &name);
|
||||
// printf("window:%#x name:%s\n", w, name);
|
||||
printf("First window name: %s \n\n",str_window_class(d, w,prior_app));
|
||||
|
||||
int breakouter;
|
||||
last_event=0;
|
||||
event_ts = timeInMilliseconds();
|
||||
|
||||
for (;;)
|
||||
{
|
||||
strcpy(current_app,str_window_class(d, w,prior_app));
|
||||
int category_idx;
|
||||
// printf("current: %s\n",current_app);
|
||||
breakouter = 0;
|
||||
|
||||
// Cycle through category name array
|
||||
// printf("%d\n",arraylen);
|
||||
for(i = 0; i < arraylen; ++i){
|
||||
// Cycle through the maximum App name array in each category
|
||||
for(n = 0; n < appnames_max; ++n){
|
||||
if (appnames_array[i][n] != NULL){
|
||||
// printf("%s\n",appnames_array[i][n]);
|
||||
if(strcicmp(appnames_array[i][n], current_app) == 0){
|
||||
strcpy(current_category,name_array[i]);
|
||||
category_idx = i;
|
||||
// printf("Match found: %s: %s\n",current_category,current_app);
|
||||
breakouter = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if(i == arraylen-1 && breakouter==0){
|
||||
// printf("No match found, default to gui");
|
||||
strcpy(current_category,"gui");
|
||||
category_idx = in(name_array, arraylen, current_category);
|
||||
// printf("Match found: %s: %s\n",current_category,current_app);
|
||||
break;
|
||||
}
|
||||
else if(appnames_array[i][n] == NULL){
|
||||
break;
|
||||
}
|
||||
if(breakouter==1){
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(strcicmp(prior_category, current_category) != 0){
|
||||
// printf("prior: %s, current: %s\n",prior_category,current_category);
|
||||
// printf("%d,%d,%d,%d\n",strcicmp(prior_category, "gui"),strcicmp(current_category, "firefox"),strcicmp(current_category, "gui"),strcicmp(prior_category, "firefox"));
|
||||
// printf("%d,%d\n",(strcicmp(prior_category, "gui") != 0 && strcicmp(prior_category, "firefox") != 0),(strcicmp(current_category, "gui") != 0 && strcicmp(current_category, "firefox") != 0));
|
||||
printf("%s: %s\n",current_category,current_app);
|
||||
// Make sure we're not switching between 2 GUI keymaps
|
||||
// Firefox & Standard GUI apps
|
||||
// strcicmp returns 0 for matches, <>0 for non-match
|
||||
if((strcicmp(prior_category, "gui") != 0 && strcicmp(prior_category, "firefox") != 0) || (strcicmp(current_category, "gui") != 0 && strcicmp(current_category, "firefox") != 0)){
|
||||
if(debug == true){
|
||||
printf("run: %s\n",run_array[category_idx]);
|
||||
}
|
||||
system(run_array[category_idx]);
|
||||
}
|
||||
strcpy(run_normal,run_array[category_idx]);
|
||||
strcpy(run_onInput,run_oninput_array[category_idx]);
|
||||
strcpy(run_offInput,run_offinput_array[category_idx]);
|
||||
system(run_offInput);
|
||||
for(r = 0; r < config_de_max; r++){
|
||||
if(config_de_array[category_idx][r] != -1){
|
||||
int de_id_idx = in_int(de_id_array, de_len, config_de_array[category_idx][r]);
|
||||
if(strcicmp(current_category, "term") == 0){
|
||||
if(debug == true){
|
||||
printf("Running de term command: %s\n",de_runterm_array[de_id_idx]);
|
||||
}
|
||||
system(de_runterm_array[de_id_idx]);
|
||||
}
|
||||
else{
|
||||
if(debug == true){
|
||||
printf("Running de gui command: %s\n",de_rungui_array[de_id_idx]);
|
||||
}
|
||||
system(de_rungui_array[de_id_idx]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(strcicmp(prior_app, current_app) != 0){
|
||||
int indent = strlen(current_category)+2;
|
||||
printf("%*c%s\n", indent, ' ',current_app);
|
||||
}
|
||||
|
||||
fflush(stdout);
|
||||
|
||||
strcpy(prior_app,current_app);
|
||||
strcpy(prior_category,current_category);
|
||||
|
||||
if(strlen(run_onInput) > 0){
|
||||
input_check = 1;
|
||||
}
|
||||
else{
|
||||
input_check = 0;
|
||||
}
|
||||
|
||||
pthread_t threads[NUM_THREADS];
|
||||
int rc;
|
||||
int i;
|
||||
ThreadArgs args = (ThreadArgs)malloc(sizeof(struct threadArgs));
|
||||
args->run_onInput = run_onInput;
|
||||
args->run_offInput = run_offInput;
|
||||
for( i = 0; i < NUM_THREADS; i++ ) {
|
||||
|
||||
if(i==0){
|
||||
rc = pthread_create(&threads[i], NULL, inputToggle, args);
|
||||
}
|
||||
else{
|
||||
rc = pthread_create(&threads[i], NULL, nextPlease, (void *)&i);
|
||||
}
|
||||
if (rc) {
|
||||
printf("Error:unable to create thread, %d\n", rc);
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
// wait for threads to close before continuing
|
||||
for (int i = 0; i < NUM_THREADS; i++) {
|
||||
pthread_join(threads[i], NULL);
|
||||
}
|
||||
|
||||
w = get_focus_window(d, e.type, eventNames[e.type-1], current_app, debug);
|
||||
w = get_top_window(d, w, e.type, eventNames[e.type-1], current_app, debug);
|
||||
w = get_named_window(d, w, e.type, eventNames[e.type-1], current_app, debug);
|
||||
}
|
||||
}
|
57
kinto_old/prekinto.py
Normal file
57
kinto_old/prekinto.py
Normal file
@@ -0,0 +1,57 @@
|
||||
class bcolors:
|
||||
HEADER = '\033[95m'
|
||||
OKBLUE = '\033[94m'
|
||||
OKGREEN = '\033[92m'
|
||||
WARNING = '\033[93m'
|
||||
FAIL = '\033[91m'
|
||||
ENDC = '\033[0m'
|
||||
BOLD = '\033[1m'
|
||||
UNDERLINE = '\033[4m'
|
||||
CBOLD = '\033[1m'
|
||||
CITALIC = '\033[3m'
|
||||
CURL = '\033[4m'
|
||||
CBLINK = '\033[5m'
|
||||
CBLINK2 = '\033[6m'
|
||||
CSELECTED = '\033[7m'
|
||||
|
||||
CBLACK = '\033[30m'
|
||||
CRED = '\033[31m'
|
||||
CGREEN = '\033[32m'
|
||||
CYELLOW = '\033[33m'
|
||||
CBLUE = '\033[34m'
|
||||
CVIOLET = '\033[35m'
|
||||
CBEIGE = '\033[36m'
|
||||
CWHITE = '\033[37m'
|
||||
|
||||
CBLACKBG = '\033[40m'
|
||||
CREDBG = '\033[41m'
|
||||
CGREENBG = '\033[42m'
|
||||
CYELLOWBG = '\033[43m'
|
||||
CBLUEBG = '\033[44m'
|
||||
CVIOLETBG = '\033[45m'
|
||||
CBEIGEBG = '\033[46m'
|
||||
CWHITEBG = '\033[47m'
|
||||
|
||||
CGREY = '\033[90m'
|
||||
CRED2 = '\033[91m'
|
||||
CGREEN2 = '\033[92m'
|
||||
CYELLOW2 = '\033[93m'
|
||||
CBLUE2 = '\033[94m'
|
||||
CVIOLET2 = '\033[95m'
|
||||
CBEIGE2 = '\033[96m'
|
||||
CWHITE2 = '\033[97m'
|
||||
|
||||
CGREYBG = '\033[100m'
|
||||
CREDBG2 = '\033[101m'
|
||||
CGREENBG2 = '\033[102m'
|
||||
CYELLOWBG2 = '\033[103m'
|
||||
CBLUEBG2 = '\033[104m'
|
||||
CVIOLETBG2 = '\033[105m'
|
||||
CBEIGEBG2 = '\033[106m'
|
||||
CWHITEBG2 = '\033[107m'
|
||||
|
||||
def yn_choice(message, default='y'):
|
||||
choices = 'Y/n' if default.lower() in ('y', 'yes') else 'y/N'
|
||||
choice = input("%s (%s) " % (message, choices))
|
||||
values = ('y', 'yes', '') if choices == 'Y/n' else ('y', 'yes')
|
||||
return choice.strip().lower() in values
|
7
kinto_old/system-config/.chrome-nw
Normal file
7
kinto_old/system-config/.chrome-nw
Normal file
@@ -0,0 +1,7 @@
|
||||
"xdotool key --delay 0 --clearmodifiers Alt+Left"
|
||||
Control + Left + Release
|
||||
#Home + release
|
||||
|
||||
"xdotool key --delay 0 --clearmodifiers Alt+Right"
|
||||
Control + Right + Release
|
||||
#End + release
|
5
kinto_old/system-config/.chrome-ww
Normal file
5
kinto_old/system-config/.chrome-ww
Normal file
@@ -0,0 +1,5 @@
|
||||
"xdotool key --delay 0 --clearmodifiers Home"
|
||||
Control + Left + Release
|
||||
|
||||
"xdotool key --delay 0 --clearmodifiers End"
|
||||
Control + Right + Release
|
7
kinto_old/system-config/.firefox-nw
Normal file
7
kinto_old/system-config/.firefox-nw
Normal file
@@ -0,0 +1,7 @@
|
||||
#"xte 'keydown Control_L' 'key bracketleft' 'keyup Control_L'"
|
||||
"xdotool key --delay 0 --clearmodifiers Control_L+bracketleft"
|
||||
Home + Release
|
||||
|
||||
#"xte 'keydown Control_R' 'key bracketright' 'keyup Control_R'"
|
||||
"xdotool key --delay 0 --clearmodifiers Control_L+bracketright"
|
||||
End + Release
|
1
kinto_old/system-config/budgie-daemon_10.5.1.md5
Normal file
1
kinto_old/system-config/budgie-daemon_10.5.1.md5
Normal file
@@ -0,0 +1 @@
|
||||
3cd35e15350ca7dac0c3cbfce1c661f7 /usr/bin/budgie-daemon
|
1
kinto_old/system-config/budgie-desktop_10.5.1.md5
Normal file
1
kinto_old/system-config/budgie-desktop_10.5.1.md5
Normal file
@@ -0,0 +1 @@
|
||||
8660c2f8e0a9d3cff896254f6c0f9159 /usr/bin/budgie-desktop
|
10
kinto_old/system-config/caret_status.sh
Normal file
10
kinto_old/system-config/caret_status.sh
Normal file
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
mkdir -p /tmp/kinto
|
||||
|
||||
IBUSADD=$(cat ~/.config/ibus/bus/`ls ~/.config/ibus/bus -1rt | tail -n1` | awk -F'IBUS_ADDRESS=' '{print $2}' | xargs)
|
||||
dbus-monitor --address $IBUSADD "path='/org/freedesktop/IBus/Panel',interface='org.freedesktop.IBus.Panel',member='FocusOut'" 2> /dev/null | grep --line-buffered -o -P '(?<=object path \"/org/freedesktop/IBus/InputContext_).*(?=[\"])' |
|
||||
while read ln
|
||||
do
|
||||
printf '%s\n' "$ln" > /tmp/kinto/caret
|
||||
done
|
78
kinto_old/system-config/caret_status_xkey.sh
Normal file
78
kinto_old/system-config/caret_status_xkey.sh
Normal file
@@ -0,0 +1,78 @@
|
||||
#!/bin/bash
|
||||
|
||||
for pid in $(pidof -x caret_status_xkey.sh); do
|
||||
if [ $pid != $$ ]; then
|
||||
echo "[$(date)] : caret_status_xkey.sh : Process is already running with PID $pid"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
mkdir -p /tmp/kinto/xkeysnail
|
||||
echo "0" > /tmp/kinto/caret
|
||||
|
||||
millitime=`date +%s%3N`
|
||||
echo "$millitime" > /tmp/kinto/millitime
|
||||
|
||||
IBUSADD=$(cat ~/.config/ibus/bus/`ls ~/.config/ibus/bus -1rt | tail -n1` | awk -F'IBUS_ADDRESS=' '{print $2}' | xargs)
|
||||
dbus-monitor --address $IBUSADD "path='/org/freedesktop/IBus/Panel',interface='org.freedesktop.IBus.Panel',member='FocusOut'" 2> /dev/null | grep --line-buffered -o -P '(?<=object path \"/org/freedesktop/IBus/InputContext_).*(?=[\"])' |
|
||||
while read ln
|
||||
do
|
||||
newtime=`date +%s%3N`
|
||||
difftime=$(( newtime - millitime ))
|
||||
millitime="$newtime"
|
||||
echo "$millitime" > /tmp/kinto/millitime
|
||||
appname=$(xprop -id `xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | awk '{print $5}'` | grep "WM_CLASS(STRING)" | awk '{print substr($4,2,length($4)-2)}')
|
||||
if [ "${ln}" == "1" ]; then
|
||||
appname=$(xprop -id `xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | awk '{print $5}'` | grep "WM_CLASS(STRING)" | awk '{print substr($4,2,length($4)-2)}')
|
||||
if [ "${appname}" == "Firefox" ]; then
|
||||
# echo "ff ww"
|
||||
printf 'ff ww %s\n' "1" > /tmp/kinto/caret
|
||||
elif [ "${appname}" == "Chromium" ] || [ "${appname}" == "Chromium-browser" ] || [ "${appname}" == "Google-chrome" ] || [ "${appname}" == "Epiphany" ]; then
|
||||
# echo "chrome ww"
|
||||
printf 'chrome ww %s\n' "1" > /tmp/kinto/caret
|
||||
else
|
||||
echo "reset" > /tmp/kinto/caret
|
||||
fi
|
||||
else
|
||||
if [ "${appname}" == "Firefox" ]; then
|
||||
# echo "ff nw"
|
||||
printf 'ff nw\n' > /tmp/kinto/caret
|
||||
elif [ "${appname}" == "Chromium" ] || [ "${appname}" == "Chromium-browser" ] || [ "${appname}" == "Google-chrome" ] || [ "${appname}" == "Epiphany" ]; then
|
||||
# echo "chrome nw"
|
||||
printf 'chrome nw\n' > /tmp/kinto/caret
|
||||
else
|
||||
echo "reset" > /tmp/kinto/caret
|
||||
fi
|
||||
fi
|
||||
|
||||
done&
|
||||
|
||||
while (true);do
|
||||
sleep 0.2
|
||||
appname2=$(xprop -id `xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | awk '{print $5}'` | grep "WM_CLASS(STRING)" | awk '{print substr($4,2,length($4)-2)}')
|
||||
check=$(cat /tmp/kinto/caret)
|
||||
millitime=$(cat /tmp/kinto/millitime)
|
||||
newtime=`date +%s%3N`
|
||||
difftime=$(( newtime - millitime ))
|
||||
if (( $difftime > 200 )); then
|
||||
if [ "${check}" == "ff nw" ] && [ "${lastcheck}" != 1 ]; then
|
||||
echo "firefox no wordwise"
|
||||
# Sets new config
|
||||
perl -pi -e "s/[^\n]\s{3}(K.*)(# Chrome-nw)/ # \$1\$2/g;s/[^\n]\s{3}#\s(K.*)(# Firefox-nw)/ \$1\$2/g;s/[^\n]\s{3}(K.*)(# Beginning of Line)/ # \$1\$2/g;s/[^\n]\s{3}(K.*)(# End of Line)/ # \$1\$2/g" /tmp/kinto/xkeysnail/kinto.py 2>/dev/null
|
||||
lastcheck=1
|
||||
ww=0
|
||||
elif [ "${check}" == "chrome nw" ] && [ "${lastcheck}" != 2 ]; then
|
||||
echo "chrome no wordwise"
|
||||
# Sets new config
|
||||
perl -pi -e "s/[^\n]\s{3}(K.*)(# Firefox-nw)/ # \$1\$2/g;s/[^\n]\s{3}(K.*)(# Beginning of Line)/ # \$1\$2/g;s/[^\n]\s{3}(K.*)(# End of Line)/ # \$1\$2/g;s/[^\n]\s{3}#\s(K.*)(# Chrome-nw)/ \$1\$2/g" /tmp/kinto/xkeysnail/kinto.py 2>/dev/null
|
||||
lastcheck=2
|
||||
ww=0
|
||||
elif ([ "${check}" != "chrome nw" ] && [ "${check}" != "ff nw" ] && [ "${lastcheck}" != 3 ]) || ([ "${appname2}" != "Firefox" ] && [ "${appname2}" != "Chromium" ] && [ "${appname2}" != "Chromium-browser" ] && [ "${appname2}" != "Google-chrome" ] && [ "${appname2}" != "Epiphany" ] && [ "${check}" == "reset" ] && [ "${lastcheck}" != 3 ]); then
|
||||
echo "wordwise"
|
||||
# Sets original config
|
||||
perl -pi -e "s/[^\n]\s{3}(K.*)(# Firefox-nw)/ # \$1\$2/g;s/[^\n]\s{3}#\s(K.*)(# Beginning of Line)/ \$1\$2/g;s/[^\n]\s{3}#\s(K.*)(# End of Line)/ \$1\$2/g;s/[^\n]\s{3}(K.*)(# Chrome-nw)/ # \$1\$2/g" /tmp/kinto/xkeysnail/kinto.py 2>/dev/null
|
||||
# cp /home/ryan/.config/kinto/kinto.py /tmp/kinto/xkeysnail/kinto.py
|
||||
lastcheck=3
|
||||
fi
|
||||
fi
|
||||
done
|
10
kinto_old/system-config/cleanup.sh
Normal file
10
kinto_old/system-config/cleanup.sh
Normal file
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
setxkbmap -option
|
||||
# force command to run silently and report true
|
||||
killall xbindkeys > /dev/null 2>&1 || :
|
||||
# rm /tmp/kinto/caret
|
||||
|
||||
gsettings set org.gnome.desktop.wm.keybindings switch-applications "['<Alt>Tab']"
|
||||
gsettings set org.gnome.desktop.wm.keybindings switch-applications-backward "['<Shift><Alt>Tab']"
|
||||
pkill -f /.config/kinto/xactive.sh
|
3630
kinto_old/system-config/keyboard.ids
Normal file
3630
kinto_old/system-config/keyboard.ids
Normal file
File diff suppressed because it is too large
Load Diff
16
kinto_old/system-config/keyswap.service
Normal file
16
kinto_old/system-config/keyswap.service
Normal file
@@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=keyswap for Terminal and GUI
|
||||
PartOf=graphical-session.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Restart=always
|
||||
# eg DISPLAY=:0.0
|
||||
#Environment=DISPLAY={displayid}
|
||||
RestartSec=1
|
||||
WorkingDirectory={homedir}/.config/kinto
|
||||
ExecStart=/bin/bash -c "{homedir}/.config/kinto/xactive.sh carrots"
|
||||
ExecStop=/bin/bash {homedir}/.config/kinto/cleanup.sh
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
11
kinto_old/system-config/keyswap.timer
Normal file
11
kinto_old/system-config/keyswap.timer
Normal file
@@ -0,0 +1,11 @@
|
||||
# keyswap.timer
|
||||
[Unit]
|
||||
Description=Runs the keyswap.service 5 seconds after boot up
|
||||
|
||||
[Timer]
|
||||
#OnBootSec=5s
|
||||
OnActiveSec=5s
|
||||
Unit=keyswap.service
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
40
kinto_old/system-config/keyswap_toggle.sh
Normal file
40
kinto_old/system-config/keyswap_toggle.sh
Normal file
@@ -0,0 +1,40 @@
|
||||
#!/bin/bash
|
||||
# Manual keyswap
|
||||
systemtype=$1
|
||||
internalid=$2
|
||||
usbid=$3
|
||||
swapbehavior=$4
|
||||
|
||||
swapcmd_term="setxkbmap -option;setxkbmap -option altwin:swap_alt_win"
|
||||
fallbackcmd_gui=""
|
||||
if [[ "$systemtype" == "windows" || "$systemtype" == "mac" ]]; then
|
||||
swapcmd_gui="setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY"
|
||||
elif [[ "$systemtype" == "mac_only" ]]; then
|
||||
swapcmd_gui="setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY"
|
||||
# Chromebook keyboard options
|
||||
elif [[ "$swapbehavior" == "both_mac" ]]; then
|
||||
swapcmd_gui="setxkbmap -option;setxkbmap -option ctrl:swap_lwin_lctl; xkbcomp -w0 -i $internalid -I$HOME/.xkb ~/.xkb/keymap/kbd.chromebook.gui $DISPLAY"
|
||||
swapcmd_term="setxkbmap -option;setxkbmap -device $internalid -option 'altwin:swap_alt_win'"
|
||||
elif [[ "$swapbehavior" == "both_win" ]]; then
|
||||
swapcmd_gui="setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.chromebook.gui $DISPLAY; setxkbmap -device $usbid -option altwin:ctrl_alt_win"
|
||||
fallbackcmd_gui="setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.chromebook.gui $DISPLAY"
|
||||
elif [[ "$swapbehavior" == "none" ]]; then
|
||||
swapcmd_gui="setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.chromebook.gui $DISPLAY"
|
||||
fi
|
||||
|
||||
if [[ "$systemtype" == "mac_only" ]]; then
|
||||
check=`setxkbmap -query | grep -c 'alt_super_win'`
|
||||
elif [[ "$swapbehavior" == "both_win" ]]; then
|
||||
check=`setxkbmap -query | grep -q 'ctrl_alt_win'; echo $?`
|
||||
else
|
||||
check=`setxkbmap -query | grep -c 'swap_alt_win'`
|
||||
fi
|
||||
|
||||
echo $check
|
||||
if [ $check -eq 0 ]; then
|
||||
echo "internal gui to term"
|
||||
eval "$swapcmd_term"
|
||||
else
|
||||
echo "internal term to gui"
|
||||
eval "$swapcmd_gui"
|
||||
fi
|
8
kinto_old/system-config/kinto.desktop
Normal file
8
kinto_old/system-config/kinto.desktop
Normal file
@@ -0,0 +1,8 @@
|
||||
[Desktop Entry]
|
||||
Name=Kinto
|
||||
GenericName=Kinto
|
||||
Comment=Make Linux Type Like it's a Mac
|
||||
Exec=/bin/bash -c "/bin/sleep 5 && /usr/bin/systemctl --user start keyswap"
|
||||
Terminal=false
|
||||
Type=Application
|
||||
X-GNOME-Autostart-enabled=true
|
10
kinto_old/system-config/xactive.sh
Normal file
10
kinto_old/system-config/xactive.sh
Normal file
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ $# -eq 0 ]
|
||||
then
|
||||
# No arguments
|
||||
./kintox11
|
||||
else
|
||||
./caret_status.sh &
|
||||
./kintox11
|
||||
fi
|
76
kinto_old/user_config.json
Normal file
76
kinto_old/user_config.json
Normal file
@@ -0,0 +1,76 @@
|
||||
{"config":[{
|
||||
"name":"gui",
|
||||
"run":"",
|
||||
"run_onInput":"",
|
||||
"run_offInput": "killall xbindkeys > /dev/null 2>&1",
|
||||
"symbols":"",
|
||||
"types":"",
|
||||
"de":[],
|
||||
"appnames":[ "" ]
|
||||
},
|
||||
{
|
||||
"name":"term",
|
||||
"run":"",
|
||||
"run_onInput":"",
|
||||
"run_offInput": "killall xbindkeys > /dev/null 2>&1",
|
||||
"symbols":"",
|
||||
"types":"",
|
||||
"de":[],
|
||||
"appnames":[ "Gnome-terminal","konsole","io.elementary.terminal","terminator","sakura","guake","tilda","xterm","eterm","kitty","alacritty","mate-terminal","tilix","xfce4-terminal" ]
|
||||
},
|
||||
{
|
||||
"name": "firefox",
|
||||
"run": "",
|
||||
"run_onInput": "pkill -f ~/.config/kinto/.firefox-nw",
|
||||
"run_offInput": "xbindkeys -f $HOME/.config/kinto/.firefox-nw",
|
||||
"symbols": "",
|
||||
"types": "",
|
||||
"de": [],
|
||||
"appnames": [ "Firefox" ]
|
||||
},
|
||||
{
|
||||
"name": "chrome",
|
||||
"run": "",
|
||||
"run_onInput": "xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY",
|
||||
"run_offInput": "xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui.chrome $DISPLAY",
|
||||
"symbols": "",
|
||||
"types": "",
|
||||
"de": [],
|
||||
"appnames": [ "Chromium","Chromium-browser","Google-chrome","Epiphany" ]
|
||||
}],
|
||||
"init": [],
|
||||
"detypes":["gnome2","gnome3","kde4","kde5","xfce","i3wm"],
|
||||
"de":[{
|
||||
"id": 1,
|
||||
"type": ["gnome3"],
|
||||
"active": false,
|
||||
"intent":"init",
|
||||
"name":"gnome-init",
|
||||
"description":"Gnome - Remove Superkey Overlay keybinding to Activities Overview",
|
||||
"run":"gsettings set org.gnome.mutter overlay-key ''",
|
||||
"run_term":"",
|
||||
"run_gui":""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"type": ["gnome3"],
|
||||
"active": false,
|
||||
"intent":"gui_term",
|
||||
"name":"Gnome Activities Overview",
|
||||
"description":"Cmd+Space activates Activities Overview",
|
||||
"run":"",
|
||||
"run_term":"gsettings set org.gnome.desktop.wm.keybindings panel-main-menu \"['<Control><Shift>Space']\"",
|
||||
"run_gui":"gsettings set org.gnome.desktop.wm.keybindings panel-main-menu \"['<Ctrl>Space']\""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"type": ["kde5"],
|
||||
"active": false,
|
||||
"intent":"init",
|
||||
"name":"kde-init",
|
||||
"description":"KDE Plasma 5 - Removes Superkey Overlay from the Launcher Menu",
|
||||
"run":"kwriteconfig5 --file ~/.config/kwinrc --group ModifierOnlyShortcuts --key Meta \"\";qdbus org.kde.KWin /KWin reconfigure",
|
||||
"run_term":"",
|
||||
"run_gui":""
|
||||
}]
|
||||
}
|
Reference in New Issue
Block a user