Compare commits

..

22 Commits

Author SHA1 Message Date
Ben Reaves
336d883b03 Merge pull request #97 from rbreaves/hotfix
- Added uninstall option for Windows
2020-04-04 21:36:38 -05:00
Ben Reaves
61e357b5da - Added uninstall option for Windows 2020-04-04 21:35:43 -05:00
Ben Reaves
407f781af0 Merge pull request #96 from rbreaves/hotfix
- Added reg file for keyswap removal
2020-04-04 21:27:06 -05:00
Ben Reaves
4250967d5a - Added reg file for keyswap removal 2020-04-04 21:26:11 -05:00
Ben Reaves
c0785ac045 Merge pull request #95 from rbreaves/hotfix
- Windows 10 & WSL Support Added
2020-04-04 21:19:42 -05:00
Ben Reaves
c57b5a3603 - Updated readme to reflect Windows 10 Support 2020-04-04 21:17:49 -05:00
Ben Reaves
4d423de14b - Added Windows 10 Support 2020-04-04 21:12:16 -05:00
Ben Reaves
ca4f9be6ee - Added sharpkeys config and autohotkey script for mac on Windows parity 2020-04-04 16:29:10 -05:00
Ben Reaves
afcb4c3a73 Merge pull request #92 from rbreaves/hotfix
- Minor changes to NextEvent filter and added capslock options
2020-04-03 17:18:40 -05:00
Ben Reaves
2846125c23 - Added more capslock options in response to #91 2020-04-03 17:15:43 -05:00
Ben Reaves
25ce34a2fc - Updated kintox11 to limit window checks to status ConfigureNotify 22 2020-04-02 17:32:39 -05:00
Ben Reaves
e1226afad8 Merge pull request #89 from rbreaves/hotfix
- Partial update for uninstaller
2020-04-02 13:25:45 -05:00
Ben Reaves
ead90abf94 - Partial update for uninstaller 2020-04-02 13:25:03 -05:00
Ben Reaves
5bf6b06917 Merge pull request #88 from indrekj/kitty
Add kitty to terminal emulators list
2020-04-02 10:09:42 -05:00
Indrek Juhkam
e892f045f5 Add kitty to terminal emulators list
See: https://sw.kovidgoyal.net/kitty/
2020-04-02 14:58:47 +03:00
Ben Reaves
c1c473c097 Merge pull request #84 from rbreaves/hotfix
- Updated kintox11 to streamline debug output more
2020-04-01 15:30:24 -05:00
Ben Reaves
969b74adda - Updated kintox11 to streamline debug output more 2020-04-01 15:25:41 -05:00
Ben Reaves
7e6f872983 Update issue templates 2020-04-01 02:38:30 -05:00
Ben Reaves
b50522c5b1 Update issue templates 2020-04-01 02:32:41 -05:00
Ben Reaves
6a887ebdea Update issue templates 2020-04-01 02:27:53 -05:00
Ben Reaves
d7433092ff Update issue templates 2020-04-01 02:25:29 -05:00
Ben Reaves
d670579db8 Update issue templates 2020-04-01 02:21:03 -05:00
26 changed files with 222 additions and 20 deletions

42
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,42 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: rbreaves
---
**Describe the bug**
A clear and concise description of what the bug is.
**Expected behavior**
A clear and concise description of what you expected to happen.
**Install Type:** Bare Metal or VM
**Distro:** Name + Version
**DE:** Gnome, XFCE, KDE
**Branch:** master, dev
**Commit:** git rev-parse --short HEAD
**Kinto Input Caret Status**
```
cat /tmp/kinto/caret
```
**Kinto Standard Log**
```
journalctl --user-unit=keyswap.service -b
```
**Kinto Debug Log (1.0.6-2+)**
```
systemctl --user stop keyswap
cd ~/.config/kinto
./kintox11 --debug
```
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here.

View File

@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: rbreaves
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

10
.github/ISSUE_TEMPLATE/gratitude.md vendored Normal file
View File

@@ -0,0 +1,10 @@
---
name: Gratitude
about: Just wants to give a shout out!
title: ''
labels: gratitude
assignees: rbreaves
---

10
.github/ISSUE_TEMPLATE/question.md vendored Normal file
View File

@@ -0,0 +1,10 @@
---
name: Question
about: Question about Kinto functionality
title: ''
labels: question
assignees: rbreaves
---

View File

@@ -3,6 +3,15 @@ xkb_symbols "swapescape" {
key <CAPS> { [ Escape ] }; key <CAPS> { [ Escape ] };
key <ESC> { [ Caps_Lock ] }; key <ESC> { [ Caps_Lock ] };
}; };
hidden partial modifier_keys
xkb_symbols "caps_shiftlock" {
replace key <CAPS> { [ Shift_Lock ] };
modifier_map Shift { Shift_Lock };
};
hidden partial modifier_keys
xkb_symbols "caps_none" {
key <CAPS> { [ VoidSymbol ] };
};
default partial xkb_symbols "mac_levelssym" { default partial xkb_symbols "mac_levelssym" {
// LEFT to Begin Line or Beginning of word // LEFT to Begin Line or Beginning of word
replace key <LEFT> { replace key <LEFT> {

View File

@@ -28,6 +28,12 @@ Kinto works for standard Windows, Apple and Chromebook keyboards. The following
- IBus* - IBus*
- Fedora/RHEL/Manjaro/Arch/Debian/Ubuntu based distro 16.04+ - Fedora/RHEL/Manjaro/Arch/Debian/Ubuntu based distro 16.04+
- Windows 10 & WSL is now supported
- Powershell - run as Administrator (for install)
- Chocolatey (for install)
- Python (for install)
- Autohotkey
Binary is included and will be installed, but you can also compile kintox11.c on your system. You will need to compile and install json-c first as its libraries will be required to compile and run the program. Binary is included and will be installed, but you can also compile kintox11.c on your system. You will need to compile and install json-c first as its libraries will be required to compile and run the program.
*IBus is needed to support wordwise during browser app usage as the keymap will need to change slightly depending if the cursor/caret is on screen waiting for input. Setup.py will set it but you can manually set it as well or check your current Input Method. *IBus is needed to support wordwise during browser app usage as the keymap will need to change slightly depending if the cursor/caret is on screen waiting for input. Setup.py will set it but you can manually set it as well or check your current Input Method.
@@ -363,7 +369,7 @@ You can also add additional Desktop Environment related tweaks to user_config.js
"name":"term", "name":"term",
"run":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY", "run":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY",
"de":[2], "de":[2],
"appnames":[ "Gnome-terminal","konsole","io.elementary.terminal","terminator","sakura","guake","tilda","xterm","eterm" ], "appnames":[ "Gnome-terminal","konsole","io.elementary.terminal","terminator","sakura","guake","tilda","xterm","eterm","kitty" ],
"run_onInput":"", "run_onInput":"",
"run_offInput": "killall xbindkeys > /dev/null 2>&1", "run_offInput": "killall xbindkeys > /dev/null 2>&1",
"symbols":"", "symbols":"",

View File

@@ -1,6 +1,6 @@
{"defaultapps":[{ {"defaultapps":[{
"name":"term", "name":"term",
"appnames":[ "Gnome-terminal","konsole","io.elementary.terminal","terminator","sakura","guake","tilda","xterm","eterm" ] "appnames":[ "Gnome-terminal","konsole","io.elementary.terminal","terminator","sakura","guake","tilda","xterm","eterm","kitty" ]
}], }],
"defaulttypes":["windows","mac","chromebook"], "defaulttypes":["windows","mac","chromebook"],
"defaults":[{ "defaults":[{

Binary file not shown.

View File

@@ -13,6 +13,7 @@
// gcc -L/usr/local/lib/ kintox11.c -ljson-c -lXmu -lXt -lX11 -O2 -o kintox11 // gcc -L/usr/local/lib/ kintox11.c -ljson-c -lXmu -lXt -lX11 -O2 -o kintox11
// //
#define _GNU_SOURCE 1
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <stdbool.h> #include <stdbool.h>
@@ -27,6 +28,13 @@
#include <math.h> #include <math.h>
#include <sys/time.h> #include <sys/time.h>
char * append(char * string1, char * string2)
{
char * result = NULL;
asprintf(&result, "%s,%s", string1, string2);
return result;
}
long long timeInMilliseconds(void) { long long timeInMilliseconds(void) {
struct timeval tv; struct timeval tv;
@@ -54,7 +62,7 @@ int XNextEventTimeout(Display *d, XEvent *e, double seconds, long long event_ts,
long long int new_ts = timeInMilliseconds(); long long int new_ts = timeInMilliseconds();
// Make sure window dragging or resizing is not occuring // Make sure window dragging or resizing is not occuring
if(!(e->type == 22 && (e->type == last_event) && timeInMilliseconds()-event_ts < 419)){ if(!(e->type == ConfigureNotify && (e->type == last_event) && timeInMilliseconds()-event_ts < 419)){
*event_ts_ptr = new_ts; *event_ts_ptr = new_ts;
*last_event_ptr = e->type; *last_event_ptr = e->type;
break; break;
@@ -184,7 +192,7 @@ Window get_focus_window(Display* d, int etype, char const *eventName, char const
printf("\n get focus window\n"); printf("\n get focus window\n");
} }
if(!(etype == 17 || etype == 18)) { if(!(etype == DestroyNotify || etype == UnmapNotify)) {
XGetInputFocus(d, &w, &revert_to); // see man XGetInputFocus(d, &w, &revert_to); // see man
if(debug == true){ if(debug == true){
printf(" -%s: event: %d, window_id: %ld\n",current_app,etype,w); printf(" -%s: event: %d, window_id: %ld\n",current_app,etype,w);
@@ -213,6 +221,11 @@ Window get_top_window(Display* d, Window start, int etype, char const *eventName
Window *children; Window *children;
unsigned int nchildren; unsigned int nchildren;
Status s; Status s;
char * ws;
char * wstr;
ws = malloc(sizeof(char)*4096);
wstr = malloc(sizeof(char)*100);
// strcpy(wstr,"test,");
if(debug == true){ if(debug == true){
printf("\n get top window\n"); printf("\n get top window\n");
@@ -220,13 +233,17 @@ Window get_top_window(Display* d, Window start, int etype, char const *eventName
// Checking for Destroy and Unmap Notify events here too // Checking for Destroy and Unmap Notify events here too
// Sometimes they still get passed through and if so need // Sometimes they still get passed through and if so need
// to be ignored or XQueryTree will cause a segmentation fault // to be ignored or XQueryTree will cause a segmentation fault
while (parent != root && parent != 0 && !(etype == 17 || etype == 18)) { while (parent != root && parent != 0 && !(etype == DestroyNotify || etype == UnmapNotify)) {
w = parent; w = parent;
s = XQueryTree(d, w, &root, &parent, &children, &nchildren); // see man s = XQueryTree(d, w, &root, &parent, &children, &nchildren); // see man
if(debug == true){ sprintf(wstr, "%ld", w);
printf(" -%s: event: %d, window_id: %ld\n",current_app,etype,w); if ((ws != NULL) && (ws[0] == '\0')) {
strcpy(ws,wstr);
}
else{
ws = append(ws, wstr);
} }
if (s) if (s)
@@ -236,12 +253,11 @@ Window get_top_window(Display* d, Window start, int etype, char const *eventName
printf("*fail to get top window: %ld, e.type: %d, current_app: %s\n",w,etype,current_app); printf("*fail to get top window: %ld, e.type: %d, current_app: %s\n",w,etype,current_app);
break; break;
} }
// printf(" get parent (window: %d)\n", (int)w);
} }
// printf("success (window: %d)\n", (int)w); if(debug == true){
// printf("hello\n"); printf(" -%s: event: %d, window_id: %s\n",current_app,etype,ws);
}
return w; return w;
} }
@@ -622,7 +638,7 @@ int main(int argc, char *argv[]){
while (1) { while (1) {
XNextEvent(d, &e); XNextEvent(d, &e);
// Make sure window dragging or resizing is not occuring // Make sure window dragging or resizing is not occuring
if(!(e.type == 22 && (e.type == last_event) && timeInMilliseconds()-event_ts < 300)){ if(!(e.type == ConfigureNotify && (e.type == last_event) && timeInMilliseconds()-event_ts < 300)){
if(debug == true){ if(debug == true){
printf(" event: %s %d\n",eventNames[e.type-1],e.type); printf(" event: %s %d\n",eventNames[e.type-1],e.type);
printf(" duration: %lldms\n",timeInMilliseconds()-event_ts); printf(" duration: %lldms\n",timeInMilliseconds()-event_ts);
@@ -639,8 +655,9 @@ int main(int argc, char *argv[]){
// Reference http://www.rahul.net/kenton/xproto/xevents_errors.html // Reference http://www.rahul.net/kenton/xproto/xevents_errors.html
// event type 17 - DestroyNotify // event type 17 - DestroyNotify
// event type 18 - UnmapNotify // event type 18 - UnmapNotify
// event type 22 - ConfigureNotify
// Dismiss the following events by initiating another XNextEvent // Dismiss the following events by initiating another XNextEvent
while(e.type == 17 || e.type == 18){ while(e.type != ConfigureNotify){
XNextEvent(d, &e); XNextEvent(d, &e);
} }

View File

@@ -36,12 +36,50 @@ def install_ibus():
input("IBus has been set as the default Input Method.\nPress any key to exit and re-run after logoff & logon...") input("IBus has been set as the default Input Method.\nPress any key to exit and re-run after logoff & logon...")
sys.exit() sys.exit()
def windows_setup():
keymaps = ["Apple keyboard standard", "Apple keyboard w/ Caps lock as Esc", "Windows keyboard standard", "Windows keyboard w/ Caps lock as Esc","Uninstall"]
for index, item in enumerate(keymaps):
print(" %i. %s" % (index+1, item.capitalize()))
default = 0
while not int(default) in range(1,len(keymaps)+1):
default = int(input("\nPlease enter your desired keymap (1 - " + str(len(keymaps)) + ") : "))
print("")
path= cmdline('echo %cd%')[:-1]
if default == 1:
os.system("regedit " + path + "\\windows\\macbook_winctrl_swap.reg")
elif default == 2:
os.system("regedit " + path + "\\windows\\macbook_winctrl_capsesc_swap.reg")
elif default == 3:
os.system("regedit " + path + "\\windows\\standard_ctrlalt_swap.reg")
elif default == 4:
os.system("regedit " + path + "\\windows\\standard_ctrlalt_capsesc_swap.reg")
elif default == 5:
os.system("regedit " + path + "\\windows\\remove_keyswap.reg")
if default > 0 and default < 5:
print("Will now install chocolatey and autohotkey with elevated privileges...")
print("This install will fail if you are not running with elevated privileges")
os.system('powershell -executionpolicy bypass ".\\windows\\autohotkey.ps1"')
print("\nWill now install Ubuntu Terminal Theme as default...")
os.system("regedit " + path + "\\windows\\theme_ubuntu.reg")
print("Copying autohotkey combinations for Terminals & Editors...")
os.system("copy /Y " + path + "\\windows\\kinto.ahk \"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp\\kinto.ahk\"")
print("\nPlease log off and back on for changes to take full effect.")
print("If using WSL then please remember to right click on title bar -> Properties -> Edit Options -> Use Ctrl+Shift+C/V as Copy/Paste and enable it.")
else:
os.system("del \"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp\\kinto.ahk\"")
# check_x11 = cmdline("env | grep -i x11").strip() # check_x11 = cmdline("env | grep -i x11").strip()
check_x11 = cmdline("env | grep -i x11 || loginctl show-session \"$XDG_SESSION_ID\" -p Type | awk -F= '{print $2}'").strip() check_x11 = cmdline("env | grep -i x11 || loginctl show-session \"$XDG_SESSION_ID\" -p Type | awk -F= '{print $2}'").strip()
if len(check_x11) == 0: if len(check_x11) == 0:
print("You are not using x11, please logout and back in using x11/Xorg") if os.name != 'nt':
sys.exit() print("You are not using x11, please logout and back in using x11/Xorg")
sys.exit()
else:
print("You are detected as running Windows.")
windows_setup()
sys.exit()
check_xbind = cmdline("which xbindkeys 2>/dev/null").strip() check_xbind = cmdline("which xbindkeys 2>/dev/null").strip()
check_xdotool = cmdline("which xdotool 2>/dev/null").strip() check_xdotool = cmdline("which xdotool 2>/dev/null").strip()

View File

@@ -1,9 +1,13 @@
#!/bin/bash #!/bin/bash
systemctl --user stop keyswap systemctl --user stop keyswap 2>/dev/null
systemctl --user disable keyswap systemctl --user disable keyswap
systemctl --user stop keyswap.timer 2>/dev/null
systemctl --user disable keyswap.timer
rm ~/.config/systemd/user/keyswap.service
rm ~/.config/systemd/user/keyswap.timer
rm -rf ~/.config/autostart/kinto.desktop rm -rf ~/.config/autostart/kinto.desktop
rm -rf ~/.config/kinto rm -rf ~/.config/kinto
rm -rf ~/.xkb rm -rf ~/.xkb
systemctl daemon-reload
sed -i '/xkb/d' ~/.Xsession sed -i '/xkb/d' ~/.Xsession 2>/dev/null

View File

@@ -16,7 +16,7 @@
"symbols":"", "symbols":"",
"types":"", "types":"",
"de":[], "de":[],
"appnames":[ "Gnome-terminal","konsole","io.elementary.terminal","terminator","sakura","guake","tilda","xterm","eterm" ] "appnames":[ "Gnome-terminal","konsole","io.elementary.terminal","terminator","sakura","guake","tilda","xterm","eterm","kitty" ]
}, },
{ {
"name": "firefox", "name": "firefox",

12
windows/autohotkey.ps1 Normal file
View File

@@ -0,0 +1,12 @@
$testchoco = powershell choco -v
if(-not($testchoco)){
Write-Output "Seems Chocolatey is not installed, installing now"
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
}
else{
Write-Output "Chocolatey Version $testchoco is already installed"
}
if(-not(test-path "C:\Program Files\AutoHotkey\AutoHotkey.exe")){
choco install autohotkey.install
}

30
windows/kinto.ahk Normal file
View File

@@ -0,0 +1,30 @@
#IfWinActive ahk_exe sublime_text.exe
; Remap Ctrl+Shift to behave like macOS Sublimetext
; Will extend cursor to multiple lines
#+Up::send {shift up}^!{Up}
#+Down::send {shift up}^!{Down}
; Remap Ctrl+Cmd+G to select all matches
#^g::send !{F3}
#If
#IfWinActive ahk_exe ubuntu.exe
^c::Send {LCtrl down}{LShift down}c{LCtrl Up}{LShift Up}
#c::Send {LCtrl down}c{LCtrl Up}
#x::Send {LCtrl down}x{LCtrl Up}
#o::Send {LCtrl down}o{LCtrl Up}
#r::Send {LCtrl down}r{LCtrl Up}
#w::Send {LCtrl down}w{LCtrl Up}
#\::Send {LCtrl down}\{LCtrl Up}
#k::Send {LCtrl down}k{LCtrl Up}
#u::Send {LCtrl down}u{LCtrl Up}
#j::Send {LCtrl down}j{LCtrl Up}
#t::Send {LCtrl down}t{LCtrl Up}
#_::Send {LCtrl down}_{LCtrl Up}
^v::Send {LCtrl down}{LShift down}v{LCtrl Up}{LShift Up}
#If
#IfWinActive ahk_exe powershell.exe
^c::Send {LCtrl down}{LShift down}c{LCtrl Up}{LShift Up}
#c::Send {LCtrl down}c{LCtrl Up}
#If

Binary file not shown.

Binary file not shown.

BIN
windows/macbook_winctrl_swap.skl Executable file

Binary file not shown.

View File

@@ -0,0 +1,4 @@
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=-

Binary file not shown.

Binary file not shown.

BIN
windows/standard_ctrlalt_swap.skl Executable file

Binary file not shown.

BIN
windows/theme_campbell.reg Normal file

Binary file not shown.

BIN
windows/theme_legacy.reg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
windows/theme_ubuntu.reg Normal file

Binary file not shown.