Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
9dff7e0f7d |
34
.github/workflows/01-ubuntu-budgie.yml
vendored
@@ -1,34 +0,0 @@
|
||||
# This is a basic workflow to help you get started with Actions
|
||||
|
||||
name: CI
|
||||
|
||||
# Controls when the workflow will run
|
||||
on:
|
||||
# Triggers the workflow on push or pull request events but only for the master branch
|
||||
push:
|
||||
branches: [ staging ]
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||
jobs:
|
||||
# This workflow contains a single job called "build"
|
||||
build:
|
||||
# The type of runner that the job will run on
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
# Runs a single command using the runners shell
|
||||
- name: Run a one-line script
|
||||
run: echo Hello, world!
|
||||
|
||||
# Runs a set of commands using the runners shell
|
||||
- name: Run a multi-line script
|
||||
run: |
|
||||
echo Add other actions to build,
|
||||
echo test, and deploy your project.
|
5
.xkb/symbols/chromebook
Normal file
@@ -0,0 +1,5 @@
|
||||
partial modifier_keys
|
||||
xkb_symbols "swap_lalt_lctrl" {
|
||||
replace key <LALT> { [ Control_L, Control_L ] };
|
||||
replace key <LCTL> { [ Alt_L, Meta_L ] };
|
||||
};
|
781
.xkb/symbols/mac_gui
Normal file
@@ -0,0 +1,781 @@
|
||||
// Template
|
||||
//
|
||||
// ONE_LEVEL_CTRL
|
||||
// Base
|
||||
// Shift
|
||||
// Alt
|
||||
// Shift Alt
|
||||
// Control
|
||||
// Shift Control
|
||||
// Super
|
||||
// Shift Super
|
||||
// Control Alt
|
||||
// Super Control
|
||||
// Super Alt
|
||||
// Super Control Alt
|
||||
//
|
||||
// replace key <KEY> {
|
||||
// type[Group1]= "ONE_LEVEL_CTRL",
|
||||
// symbols[Group1]= [
|
||||
// Base,
|
||||
// Alt,
|
||||
// Shift Alt,
|
||||
// Control,
|
||||
// Shift Control,
|
||||
// Super,
|
||||
// Shift Super,
|
||||
// Control Alt,
|
||||
// Super Control",
|
||||
// Super Alt,
|
||||
// Super Control Alt
|
||||
// ],
|
||||
// actions[Group1]= [
|
||||
// NoAction(),
|
||||
// RedirectKey(key=<KEY>,modifiers=NewMod,clearmods=Mod1),
|
||||
// RedirectKey(key=<KEY>,modifiers=NewMod,clearmods=Mod1+Shift),
|
||||
// RedirectKey(key=<KEY>,modifiers=NewMod,clearmods=Control),
|
||||
// RedirectKey(key=<KEY>,modifiers=NewMod,clearmods=Control+Shift),
|
||||
// RedirectKey(key=<KEY>,modifiers=NewMod,clearmods=Super),
|
||||
// RedirectKey(key=<KEY>,modifiers=NewMod,clearmods=Super+Shift),
|
||||
// RedirectKey(key=<KEY>,modifiers=NewMod,clearmods=Control+Alt),
|
||||
// RedirectKey(key=<KEY>,modifiers=NewMod,clearmods=Super+Control),
|
||||
// RedirectKey(key=<KEY>,modifiers=NewMod,clearmods=Super+Mod1),
|
||||
// RedirectKey(key=<KEY>,modifiers=NewMod,clearmods=Control+Mod1)
|
||||
// ]
|
||||
// };
|
||||
hidden partial modifier_keys
|
||||
xkb_symbols "swapescape" {
|
||||
key <CAPS> { [ Escape ] };
|
||||
key <ESC> { [ Caps_Lock ] };
|
||||
};
|
||||
hidden partial modifier_keys
|
||||
xkb_symbols "caps_escape" {
|
||||
key <CAPS> { [ Escape ] };
|
||||
};
|
||||
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" {
|
||||
// // Minimize window Cmd + H = Alt + F9
|
||||
// // 2 caveats
|
||||
// // 1 Cmd + H may not pass through on VMs
|
||||
// // 2 may cause conflicts with apps
|
||||
// replace key <AC06> {
|
||||
// type[Group1]= "ONE_LEVEL_CTRL",
|
||||
// symbols[Group1]= [
|
||||
// h,
|
||||
// H,
|
||||
// h,
|
||||
// H,
|
||||
// h
|
||||
// ],
|
||||
// actions[Group1]= [
|
||||
// NoAction(),
|
||||
// NoAction(),
|
||||
// NoAction(),
|
||||
// NoAction(),
|
||||
// RedirectKey(key=<AC06>,modifiers=Super,clearmods=Control)
|
||||
// ]
|
||||
// };
|
||||
// Maximize Window Ctrl + Cmd + F = Alt+F10
|
||||
// Also maps Option + Cmd + F to Control+H for Replace - Sublime
|
||||
// AD03=e,E
|
||||
// AC01=a,A
|
||||
// Ctrl + A - Beginning of Line
|
||||
replace key <AC01> {
|
||||
type[Group1]= "ONE_LEVEL_SUPER",
|
||||
symbols[Group1]= [
|
||||
// Base
|
||||
a,
|
||||
// Shift
|
||||
A,
|
||||
// Super
|
||||
NoSymbol,
|
||||
// Shift Super
|
||||
NoSymbol
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<HOME>,clearmods=Super),
|
||||
RedirectKey(key=<HOME>,clearmods=Super)
|
||||
]
|
||||
};
|
||||
// Ctrl + E - End of Line
|
||||
replace key <AD03> {
|
||||
type[Group1]= "ONE_LEVEL_SUPER",
|
||||
symbols[Group1]= [
|
||||
// Base
|
||||
e,
|
||||
// Shift
|
||||
E,
|
||||
// Super
|
||||
NoSymbol,
|
||||
// Shift Super
|
||||
NoSymbol
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<END>,clearmods=Super),
|
||||
RedirectKey(key=<END>,clearmods=Super)
|
||||
]
|
||||
};
|
||||
replace key <AC04> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
// Base
|
||||
f,
|
||||
// Shift
|
||||
F,
|
||||
// Alt
|
||||
f,
|
||||
// Shift Alt
|
||||
F,
|
||||
// Control
|
||||
f,
|
||||
// Shift Control
|
||||
F,
|
||||
// Super
|
||||
f,
|
||||
// Shift Super
|
||||
F,
|
||||
// Control Alt
|
||||
h
|
||||
// Super Control
|
||||
// ,F10 // Default maximize
|
||||
// // Nothing // KDE maximize
|
||||
// Super Alt
|
||||
// Super Control Alt
|
||||
],
|
||||
actions[Group1]= [
|
||||
// Base
|
||||
NoAction(),
|
||||
// Shift
|
||||
NoAction(),
|
||||
// Alt
|
||||
NoAction(),
|
||||
// Shift Alt
|
||||
NoAction(),
|
||||
// Control
|
||||
NoAction(),
|
||||
// Shift Control
|
||||
NoAction(),
|
||||
// Super
|
||||
NoAction(),
|
||||
// Shift Super
|
||||
NoAction(),
|
||||
// Control Alt
|
||||
RedirectKey(key=<AC06>,clearmods=Mod1)
|
||||
// Super Control - Fullscreen
|
||||
// ,RedirectKey(key=<FK10>,modifiers=Mod1,clearmods=Super+Control) // Default maximize
|
||||
// // Nothing // KDE maximize
|
||||
// Super Alt
|
||||
// Super Control Alt
|
||||
]
|
||||
};
|
||||
// Close App Cmd + Q = Alt + F4
|
||||
replace key <AD01> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
// Base
|
||||
q,
|
||||
// Shift
|
||||
Q,
|
||||
// Alt
|
||||
q,
|
||||
// Shift Alt
|
||||
Q,
|
||||
// Control
|
||||
F4
|
||||
],
|
||||
actions[Group1]= [
|
||||
// Base
|
||||
NoAction(),
|
||||
// Shift
|
||||
NoAction(),
|
||||
// Alt
|
||||
NoAction(),
|
||||
// Shift Alt
|
||||
NoAction(),
|
||||
// Control
|
||||
RedirectKey(key=<FK04>,modifiers=Mod1,clearmods=Control)
|
||||
]
|
||||
};
|
||||
// Show Desktop Cmd + F3 = Super + D
|
||||
replace key <FK03> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
// Base
|
||||
F3,
|
||||
// Shift
|
||||
F3,
|
||||
// Alt
|
||||
F3,
|
||||
// Shift Alt
|
||||
F3,
|
||||
// Control
|
||||
d
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<AC03>,modifiers=Super,clearmods=Control)
|
||||
]
|
||||
};
|
||||
// Fix the G key for Sublime Text
|
||||
replace key <AC05> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
// Base
|
||||
g,
|
||||
// Shift
|
||||
G,
|
||||
// Alt
|
||||
g,
|
||||
// Shift Alt
|
||||
G,
|
||||
// Control
|
||||
g,
|
||||
// Shift Control
|
||||
G,
|
||||
// Super
|
||||
NoSymbol,
|
||||
// Shift Super
|
||||
NoSymbol,
|
||||
// Control Alt
|
||||
g,
|
||||
// Super Control
|
||||
g,
|
||||
// Super Alt
|
||||
g,
|
||||
// Super Control Alt
|
||||
g
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
// Pass G Normally
|
||||
RedirectKey(key=<AC05>),
|
||||
RedirectKey(key=<AC05>),
|
||||
// Find Next
|
||||
RedirectKey(key=<FK03>,clearmods=Control),
|
||||
// Find Previous
|
||||
RedirectKey(key=<FK03>,clearmods=Control),
|
||||
// Sublime Goto Line
|
||||
RedirectKey(key=<AC05>,modifiers=Control,clearmods=Super),
|
||||
NoAction(),
|
||||
// Sublime Quick Find
|
||||
RedirectKey(key=<FK03>,clearmods=Mod1),
|
||||
// Sublime Select All Matches
|
||||
RedirectKey(key=<FK03>,modifiers=Mod1,clearmods=Super+Control),
|
||||
NoAction(),
|
||||
NoAction()
|
||||
]
|
||||
};
|
||||
// LEFT to Begin Line or Beginning of word
|
||||
replace key <LEFT> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
// Base
|
||||
Left,
|
||||
// Shift
|
||||
Left,
|
||||
// Alt
|
||||
Left,
|
||||
// Shift Alt
|
||||
Left,
|
||||
// Control
|
||||
NoSymbol,
|
||||
// Shift Control
|
||||
NoSymbol,
|
||||
// Super
|
||||
Left
|
||||
],
|
||||
actions[Group1]= [
|
||||
// Base
|
||||
NoAction(),
|
||||
// Shift
|
||||
NoAction(),
|
||||
// Alt - Wordwise
|
||||
RedirectKey(key=<LEFT>,mods=Control,clearmods=Mod1),
|
||||
// Shift Alt
|
||||
RedirectKey(key=<LEFT>,mods=Control,clearmods=Mod1),
|
||||
// Control
|
||||
RedirectKey(key=<HOME>,clearmods=Control),
|
||||
// Shift Control
|
||||
RedirectKey(key=<HOME>,clearmods=Control),
|
||||
// Super - Change workspace
|
||||
NoAction()
|
||||
]
|
||||
};
|
||||
|
||||
// Right to End of Line or end of word
|
||||
replace key <RGHT> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
// Base
|
||||
Right,
|
||||
// Shift
|
||||
Right,
|
||||
// Alt
|
||||
Right,
|
||||
// Shift Alt
|
||||
Right,
|
||||
// Control
|
||||
NoSymbol,
|
||||
// Shift Control
|
||||
NoSymbol,
|
||||
// Super
|
||||
Right
|
||||
],
|
||||
actions[Group1]= [
|
||||
// Base
|
||||
NoAction(),
|
||||
// Shift
|
||||
NoAction(),
|
||||
// Alt - Wordwise
|
||||
RedirectKey(key=<RGHT>,mods=Control,clearmods=Mod1),
|
||||
// Shift Alt
|
||||
RedirectKey(key=<RGHT>,mods=Control,clearmods=Mod1),
|
||||
// Control
|
||||
RedirectKey(key=<END>,clearmods=Control),
|
||||
// Shift Control
|
||||
RedirectKey(key=<END>,clearmods=Control),
|
||||
// Super - Change workspace
|
||||
NoAction()
|
||||
]
|
||||
};
|
||||
|
||||
//Up to Mac Home
|
||||
replace key <UP> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
// Base
|
||||
Up,
|
||||
// Shift
|
||||
Up,
|
||||
// Alt
|
||||
Up,
|
||||
// Shift Alt
|
||||
Up,
|
||||
// Control
|
||||
NoSymbol,
|
||||
// Shift Control
|
||||
NoSymbol,
|
||||
// Super
|
||||
Up,
|
||||
// Shift Super
|
||||
Up
|
||||
],
|
||||
actions[Group1]= [
|
||||
// Base
|
||||
NoAction(),
|
||||
// Shift
|
||||
NoAction(),
|
||||
// Alt - Wordwise
|
||||
RedirectKey(key=<UP>,clearmods=Mod1),
|
||||
// Shift Alt
|
||||
// RedirectKey(key=<UP>), // Chromebook multicursor
|
||||
RedirectKey(key=<UP>,clearmods=Mod1), // Default multicursor
|
||||
// Control
|
||||
RedirectKey(key=<HOME>),
|
||||
// Shift Control
|
||||
RedirectKey(key=<HOME>),
|
||||
// Super - Wordwise - Sublime?
|
||||
RedirectKey(key=<PGUP>,clearmods=Super),
|
||||
// Shift Super
|
||||
RedirectKey(key=<UP>,modifiers=Mod1,clearmods=Super)
|
||||
]
|
||||
};
|
||||
|
||||
// Down to Mac End
|
||||
replace key <DOWN> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
// Base
|
||||
Down,
|
||||
// Shift
|
||||
Down,
|
||||
// Alt
|
||||
Down,
|
||||
// Shift Alt
|
||||
Down,
|
||||
// Control
|
||||
NoSymbol,
|
||||
// Shift Control
|
||||
NoSymbol,
|
||||
// Super
|
||||
Down,
|
||||
// Shift Super
|
||||
Down
|
||||
],
|
||||
actions[Group1]= [
|
||||
// Base
|
||||
NoAction(),
|
||||
// Shift
|
||||
NoAction(),
|
||||
// Alt - Wordwise
|
||||
RedirectKey(key=<DOWN>,clearmods=Mod1),
|
||||
// Shift Alt
|
||||
RedirectKey(key=<DOWN>,clearmods=Mod1),
|
||||
// Control
|
||||
RedirectKey(key=<END>),
|
||||
// Shift Control
|
||||
RedirectKey(key=<END>),
|
||||
// Super - Wordwise - Sublime?
|
||||
RedirectKey(key=<PGDN>,clearmods=Super),
|
||||
// Shift Super
|
||||
RedirectKey(key=<DOWN>,modifiers=Mod1,clearmods=Super)
|
||||
]
|
||||
};
|
||||
// Alt BKSP to DELETE
|
||||
replace key <BKSP> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
BackSpace,
|
||||
BackSpace,
|
||||
BackSpace
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<DELE>,clearmods=Mod1)
|
||||
]
|
||||
};
|
||||
// // Full Print Screen
|
||||
// // GalliumOS
|
||||
// replace key <AE03> {
|
||||
// type[Group1]= "ONE_LEVEL_CTRL",
|
||||
// symbols[Group1]= [ 3, 3, 3, F5 ],
|
||||
// actions[Group1]= [ NoAction(), NoAction(), NoAction(), RedirectKey(key=<FK05>,clearmods=Shift) ]
|
||||
// };
|
||||
// // Region Print Screen
|
||||
// // GalliumOS
|
||||
// replace key <AE04> {
|
||||
// type[Group1]= "ONE_LEVEL_CTRL",
|
||||
// symbols[Group1]= [ 4, 4, 4, F5 ],
|
||||
// actions[Group1]= [ NoAction(), NoAction(), NoAction(), RedirectKey(key=<FK05>) ]
|
||||
// };
|
||||
// // Full Print Screen
|
||||
// // Standard Ubuntu
|
||||
// replace key <AE03> {
|
||||
// type[Group1]= "ONE_LEVEL_CTRL",
|
||||
// symbols[Group1]= [ 3, 3, 3, F5 ],
|
||||
// actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<PRSC>,clearmods=Shift+Control) ]
|
||||
// };
|
||||
// // Region Print Screen
|
||||
// // Standard Ubuntu
|
||||
// replace key <AE04> {
|
||||
// type[Group1]= "ONE_LEVEL_CTRL",
|
||||
// symbols[Group1]= [ 4, 4, 4, F5 ],
|
||||
// actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<PRSC>,clearmods=Control) ]
|
||||
// };
|
||||
};
|
||||
partial xkb_symbols "mac_appcycle_chromebook" {
|
||||
// Cycle App and In App Tab Switching
|
||||
replace key <TAB> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
Tab,
|
||||
Tab,
|
||||
Tab,
|
||||
Tab,
|
||||
backslash,
|
||||
backslash,
|
||||
NoSymbol,
|
||||
NoSymbol
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
// Alt
|
||||
Redirect(key=<TAB>,mods=Control,clearmods=Mod1),
|
||||
// Alt + Shift
|
||||
Redirect(key=<TAB>,mods=Control,clearmods=Mod1),
|
||||
// Control
|
||||
Redirect(key=<BKSL>),
|
||||
// Control+Shift
|
||||
Redirect(key=<BKSL>),
|
||||
// Super
|
||||
NoAction(),
|
||||
// Super + Shift
|
||||
NoAction()
|
||||
]
|
||||
};
|
||||
};
|
||||
partial xkb_symbols "mac_appcycle" {
|
||||
// Cycle App and In App Tab Switching
|
||||
key <FK13> { [ F13 ] };
|
||||
key <FK14> { [ F14 ] };
|
||||
replace key <TAB> {
|
||||
type[Group1]= "ONE_LEVEL_CMD",
|
||||
symbols[Group1]= [
|
||||
Tab,
|
||||
Tab,
|
||||
F14,
|
||||
F13,
|
||||
NoSymbol,
|
||||
NoSymbol
|
||||
],
|
||||
actions[Group1]= [
|
||||
// Base
|
||||
NoAction(),
|
||||
// Shift
|
||||
NoAction(),
|
||||
// Control + Shift
|
||||
Redirect(key=<FK14>),
|
||||
// Control
|
||||
Redirect(key=<FK13>),
|
||||
// Super
|
||||
Redirect(key=<TAB>,mods=Control,clearmods=Mod4+Super),
|
||||
// Super + Shift
|
||||
Redirect(key=<TAB>,mods=Control,clearmods=Mod4+Super)
|
||||
]
|
||||
};
|
||||
};
|
||||
partial xkb_symbols "mac_browsers_chromebook" {
|
||||
// Cycle App and In App Tab Switching
|
||||
replace key <TAB> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
Tab,
|
||||
Tab,
|
||||
NoSymbol,
|
||||
NoSymbol,
|
||||
backslash,
|
||||
backslash,
|
||||
NoSymbol,
|
||||
NoSymbol
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
// Alt
|
||||
Redirect(key=<PGDN>,mods=Control,clearmods=Mod1),
|
||||
// Alt + Shift
|
||||
Redirect(key=<PGUP>,mods=Control,clearmods=Mod1+Shift),
|
||||
// Control
|
||||
Redirect(key=<BKSL>),
|
||||
// Control+Shift
|
||||
Redirect(key=<BKSL>),
|
||||
// Super
|
||||
NoAction(),
|
||||
// Super + Shift
|
||||
NoAction()
|
||||
]
|
||||
};
|
||||
//Up to Mac Home
|
||||
replace key <UP> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
Up,
|
||||
Up,
|
||||
Up,
|
||||
Up,
|
||||
NoSymbol,
|
||||
NoSymbol,
|
||||
Up
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
// Wordwise
|
||||
RedirectKey(key=<UP>,clearmods=Mod1),
|
||||
RedirectKey(key=<UP>,clearmods=Mod1),
|
||||
RedirectKey(key=<HOME>),
|
||||
RedirectKey(key=<HOME>),
|
||||
// Wordwise - Sublime?
|
||||
RedirectKey(key=<PGUP>,clearmods=Super),
|
||||
RedirectKey(key=<UP>,modifiers=Mod1,clearmods=Super)
|
||||
]
|
||||
};
|
||||
// Down to Mac End
|
||||
replace key <DOWN> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
Down,
|
||||
Down,
|
||||
Down,
|
||||
Down,
|
||||
NoSymbol,
|
||||
NoSymbol,
|
||||
Down
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
// Wordwise
|
||||
RedirectKey(key=<DOWN>,clearmods=Mod1),
|
||||
RedirectKey(key=<DOWN>,clearmods=Mod1),
|
||||
RedirectKey(key=<END>),
|
||||
RedirectKey(key=<END>),
|
||||
// Wordwise - Sublime?
|
||||
RedirectKey(key=<PGDN>,clearmods=Super),
|
||||
RedirectKey(key=<DOWN>,modifiers=Mod1,clearmods=Super)
|
||||
]
|
||||
};
|
||||
// Alt BKSP to DELETE
|
||||
replace key <BKSP> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
BackSpace,
|
||||
BackSpace,
|
||||
BackSpace
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<DELE>,clearmods=Mod1)
|
||||
]
|
||||
};
|
||||
};
|
||||
partial xkb_symbols "mac_browsers" {
|
||||
// Cycle App and In App Tab Switching
|
||||
key <FK13> { [ F13 ] };
|
||||
key <FK14> { [ F14 ] };
|
||||
replace key <TAB> {
|
||||
type[Group1]= "ONE_LEVEL_CMD",
|
||||
symbols[Group1]= [
|
||||
Tab,
|
||||
Tab,
|
||||
F14,
|
||||
F13,
|
||||
NoSymbol,
|
||||
NoSymbol
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
Redirect(key=<FK14>),
|
||||
Redirect(key=<FK13>),
|
||||
Redirect(key=<PGDN>,mods=Control,clearmods=Mod4+Super),
|
||||
Redirect(key=<PGUP>,mods=Control,clearmods=Mod4+Super+Shift)
|
||||
]
|
||||
};
|
||||
//Up to Mac Home
|
||||
replace key <UP> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
Up,
|
||||
Up,
|
||||
Up,
|
||||
Up,
|
||||
NoSymbol,
|
||||
NoSymbol,
|
||||
Up
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
// Wordwise
|
||||
RedirectKey(key=<UP>,clearmods=Mod1),
|
||||
RedirectKey(key=<UP>,clearmods=Mod1),
|
||||
RedirectKey(key=<HOME>),
|
||||
RedirectKey(key=<HOME>),
|
||||
// Wordwise - Sublime?
|
||||
RedirectKey(key=<PGUP>,clearmods=Super),
|
||||
RedirectKey(key=<UP>,modifiers=Mod1,clearmods=Super)
|
||||
]
|
||||
};
|
||||
// Down to Mac End
|
||||
replace key <DOWN> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
Down,
|
||||
Down,
|
||||
Down,
|
||||
Down,
|
||||
NoSymbol,
|
||||
NoSymbol,
|
||||
Down
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
// Wordwise
|
||||
RedirectKey(key=<DOWN>,clearmods=Mod1),
|
||||
RedirectKey(key=<DOWN>,clearmods=Mod1),
|
||||
RedirectKey(key=<END>),
|
||||
RedirectKey(key=<END>),
|
||||
// Wordwise - Sublime?
|
||||
RedirectKey(key=<PGDN>,clearmods=Super),
|
||||
RedirectKey(key=<DOWN>,modifiers=Mod1,clearmods=Super)
|
||||
]
|
||||
};
|
||||
// Alt BKSP to DELETE
|
||||
replace key <BKSP> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
BackSpace,
|
||||
BackSpace,
|
||||
BackSpace
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<DELE>,clearmods=Mod1)
|
||||
]
|
||||
};
|
||||
};
|
||||
partial xkb_symbols "mac_chrome" {
|
||||
// Back Button
|
||||
replace key <LEFT> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
Left,
|
||||
Left,
|
||||
NoSymbol,
|
||||
NoSymbol,
|
||||
Left
|
||||
],
|
||||
actions[Group1]= [
|
||||
// Base
|
||||
NoAction(),
|
||||
// Shift
|
||||
NoAction(),
|
||||
// Alt
|
||||
RedirectKey(key=<FK18>),
|
||||
// Alt
|
||||
RedirectKey(key=<FK18>),
|
||||
// Control
|
||||
RedirectKey(key=<LEFT>,modifiers=Mod1,clearmods=Control)
|
||||
]
|
||||
};
|
||||
// Forwards Button
|
||||
replace key <RGHT> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
// Base
|
||||
Right,
|
||||
// Shift
|
||||
Right,
|
||||
// Alt
|
||||
NoSymbol,
|
||||
// Shift Alt
|
||||
NoSymbol,
|
||||
// Control
|
||||
Right
|
||||
],
|
||||
actions[Group1]= [
|
||||
// Base
|
||||
NoAction(),
|
||||
// Shift
|
||||
NoAction(),
|
||||
// Alt
|
||||
RedirectKey(key=<FK18>),
|
||||
// Shift Alt
|
||||
RedirectKey(key=<FK18>),
|
||||
// Control
|
||||
RedirectKey(key=<RGHT>,modifiers=Mod1,clearmods=Control)
|
||||
]
|
||||
};
|
||||
};
|
210
.xkb/symbols/mac_term
Normal file
@@ -0,0 +1,210 @@
|
||||
default partial xkb_symbols "mac_apple" {
|
||||
key <LWIN> {
|
||||
repeat= no,
|
||||
type= "ONE_LEVEL",
|
||||
symbols[Group1]= [ Control_L ],
|
||||
actions[group1]=[ SetMods(modifiers=Control+Shift) ]
|
||||
};
|
||||
key <RWIN> {
|
||||
repeat= no,
|
||||
type= "ONE_LEVEL",
|
||||
symbols[Group1]= [ Control_R ],
|
||||
actions[group1]=[ SetMods(modifiers=Control+Shift) ]
|
||||
};
|
||||
};
|
||||
partial xkb_symbols "mac_win" {
|
||||
key <LALT> {
|
||||
repeat= no,
|
||||
type= "ONE_LEVEL",
|
||||
symbols[Group1]= [ Hyper_L ],
|
||||
actions[group1]=[ SetMods(modifiers=Shift+Control) ]
|
||||
};
|
||||
key <RALT> {
|
||||
repeat= no,
|
||||
type= "ONE_LEVEL",
|
||||
symbols[Group1]= [ Hyper_R ],
|
||||
actions[group1]=[ SetMods(modifiers=Shift+Control) ]
|
||||
};
|
||||
};
|
||||
partial xkb_symbols "mac_global" {
|
||||
// // Minimize Window Cmd + H = Alt+F9
|
||||
// replace key <AC06> {
|
||||
// type[Group1]= "ONE_LEVEL_CTRL",
|
||||
// symbols[Group1]= [
|
||||
// h,
|
||||
// H,
|
||||
// H
|
||||
// ],
|
||||
// actions[Group1]= [
|
||||
// NoAction(),
|
||||
// NoAction(),
|
||||
// RedirectKey(key=<AC06>,modifiers=Super,clearmods=Control+Shift)
|
||||
// ]
|
||||
// };
|
||||
|
||||
//
|
||||
// Some sort of glitch occurs on shifting F while this segment is active
|
||||
// it is like the Control key is being held down when it isn't.
|
||||
//
|
||||
// // Maximize Window Ctrl + Cmd + F = Alt+F10
|
||||
// replace key <AC04> {
|
||||
// type[Group1]= "ONE_LEVEL_CTRL",
|
||||
// symbols[Group1]= [
|
||||
// f,
|
||||
// F,
|
||||
// F
|
||||
// ],
|
||||
// actions[Group1]= [
|
||||
// // Base
|
||||
// NoAction(),
|
||||
// // Shift
|
||||
// NoAction(),
|
||||
// // Ctrl + Shift
|
||||
// RedirectKey(key=<FK10>,modifiers=Mod1,clearmods=Control+Shift)
|
||||
// ]
|
||||
// };
|
||||
|
||||
// Close App Cmd + Q = Alt + F4
|
||||
replace key <AD01> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
q,
|
||||
Q,
|
||||
F4
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<FK04>,modifiers=Mod1,clearmods=Control+Shift)
|
||||
]
|
||||
};
|
||||
|
||||
// Show Desktop Cmd + F3 = Super + D
|
||||
replace key <FK03> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
F3,
|
||||
F3,
|
||||
D
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<AC03>,modifiers=Super,clearmods=Control+Shift)
|
||||
]
|
||||
};
|
||||
|
||||
// Cycle App and In App Tab Switching
|
||||
key <FK13> { [ F13 ] };
|
||||
key <FK14> { [ F14 ] };
|
||||
|
||||
replace key <TAB> {
|
||||
type[Group1]= "ONE_LEVEL_CMD",
|
||||
symbols[Group1]= [
|
||||
Tab,
|
||||
Tab,
|
||||
// F13 // Default cmdtab
|
||||
// F13 // KDE cmdtab
|
||||
// Right // Elementary ecmdtab
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
// Redirect(key=<FK13>) // Default cmdtab
|
||||
// Redirect(key=<FK13>,clearmods=Shift) // KDE cmdtab
|
||||
// Redirect(key=<RGHT>,mods=Control+Shift,clearmods=Mod4+Super) // Elementary cmdtab
|
||||
]
|
||||
};
|
||||
|
||||
// Page Up
|
||||
replace key <UP> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
Up,
|
||||
Up,
|
||||
NoSymbol
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<PGUP>,clearmods=Shift+Control)
|
||||
]
|
||||
};
|
||||
|
||||
// Page Down
|
||||
replace key <DOWN> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
Down,
|
||||
Down,
|
||||
NoSymbol
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<PGDN>,clearmods=Shift+Control)
|
||||
]
|
||||
};
|
||||
// HOME
|
||||
replace key <LEFT> {
|
||||
type[Group1]= "ONE_LEVEL_CMD",
|
||||
symbols[Group1]= [
|
||||
Left,
|
||||
Left,
|
||||
NoSymbol,
|
||||
Left
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<HOME>,clearmods=Shift+Control),
|
||||
RedirectKey(key=<LEFT>,mods=Super,clearmods=Control)
|
||||
]
|
||||
};
|
||||
// END
|
||||
replace key <RGHT> {
|
||||
type[Group1]= "ONE_LEVEL_CMD",
|
||||
symbols[Group1]= [
|
||||
Right,
|
||||
Right,
|
||||
NoSymbol,
|
||||
Right
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<END>,clearmods=Shift+Control),
|
||||
RedirectKey(key=<RGHT>,mods=Super,clearmods=Control)
|
||||
]
|
||||
};
|
||||
// Full Print Screen
|
||||
// Standard Ubuntu
|
||||
replace key <AE03> {
|
||||
type[Group1]= "ONE_LEVEL_CMD",
|
||||
symbols[Group1]= [
|
||||
3,
|
||||
numbersign,
|
||||
NoSymbol
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<PRSC>,clearmods=Shift+Control)
|
||||
]
|
||||
};
|
||||
// Region Print Screen
|
||||
// Standard Ubuntu
|
||||
replace key <AE04> {
|
||||
type[Group1]= "ONE_LEVEL_CMD",
|
||||
symbols[Group1]= [
|
||||
4,
|
||||
dollar,
|
||||
NoSymbol
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<PRSC>,clearmods=Control)
|
||||
]
|
||||
};
|
||||
};
|
100
.xkb/symbols/mac_term_chromebook
Normal file
@@ -0,0 +1,100 @@
|
||||
default partial xkb_symbols "mac_levelssym" {
|
||||
key <LALT> {
|
||||
repeat= no,
|
||||
type= "ONE_LEVEL",
|
||||
symbols[Group1]= [ Hyper_L ],
|
||||
actions[group1]=[ SetMods(modifiers=Shift+Control) ]
|
||||
};
|
||||
key <RALT> {
|
||||
repeat= no,
|
||||
type= "ONE_LEVEL",
|
||||
symbols[Group1]= [ Hyper_R ],
|
||||
actions[group1]=[ SetMods(modifiers=Shift+Control) ]
|
||||
};
|
||||
// Page Up
|
||||
replace key <UP> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
Up,
|
||||
Up,
|
||||
NoSymbol
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<PGUP>,clearmods=Shift+Control)
|
||||
]
|
||||
};
|
||||
// Page Down
|
||||
replace key <DOWN> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
Down,
|
||||
Down,
|
||||
NoSymbol
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<PGDN>,clearmods=Shift+Control)
|
||||
]
|
||||
};
|
||||
// HOME
|
||||
replace key <LEFT> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
Left,
|
||||
Left,
|
||||
NoSymbol
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<HOME>,clearmods=Shift+Control)
|
||||
]
|
||||
};
|
||||
// END
|
||||
replace key <RGHT> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
Right,
|
||||
Right,
|
||||
NoSymbol
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<END>,clearmods=Shift+Control)
|
||||
]
|
||||
};
|
||||
// Full Print Screen
|
||||
// GalliumOS
|
||||
replace key <AE03> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
3,
|
||||
numbersign,
|
||||
F5
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<FK05>,clearmods=Shift)
|
||||
]
|
||||
};
|
||||
// Region Print Screen
|
||||
// GalliumOS
|
||||
replace key <AE04> {
|
||||
type[Group1]= "ONE_LEVEL_CTRL",
|
||||
symbols[Group1]= [
|
||||
4,
|
||||
dollar,
|
||||
F5
|
||||
],
|
||||
actions[Group1]= [
|
||||
NoAction(),
|
||||
NoAction(),
|
||||
RedirectKey(key=<FK05>)
|
||||
]
|
||||
};
|
||||
};
|
53
.xkb/types/mac_gui
Normal file
@@ -0,0 +1,53 @@
|
||||
default partial xkb_types "addmac_levels" {
|
||||
Virtual_modifiers Super;
|
||||
type "ONE_LEVEL_CTRL" {
|
||||
modifiers = Shift+Mod1+Super+Control;
|
||||
map[Shift] = Level2;
|
||||
map[Mod1] = Level3;
|
||||
map[Shift+Mod1] = Level4;
|
||||
map[Control] = Level5;
|
||||
map[Shift+Control] = Level6;
|
||||
map[Super] = Level7;
|
||||
map[Shift+Super] = Level8;
|
||||
map[Mod1+Control] = 9;
|
||||
map[Super+Control] = 10;
|
||||
map[Super+Mod1] = 11;
|
||||
map[Super+Mod1+Control] = 12;
|
||||
level_name[Level1] = "Base";
|
||||
level_name[Level2] = "Shift";
|
||||
level_name[Level3] = "Alt";
|
||||
level_name[Level4] = "Shift Alt";
|
||||
level_name[Level5] = "Control";
|
||||
level_name[Level6] = "Shift Control";
|
||||
level_name[Level7] = "Super";
|
||||
level_name[Level8] = "Shift Super";
|
||||
level_name[9] = "Control Alt";
|
||||
level_name[10] = "Super Control";
|
||||
level_name[11] = "Super Alt";
|
||||
level_name[12] = "Super Control Alt";
|
||||
};
|
||||
type "ONE_LEVEL_CMD" {
|
||||
modifiers = Shift+Control+Super;
|
||||
map[Shift] = Level2;
|
||||
map[Shift+Control] = Level3;
|
||||
map[Control] = Level4;
|
||||
map[Super] = Level5;
|
||||
map[Shift+Super] = Level6;
|
||||
level_name[Level1] = "Base";
|
||||
level_name[Level2] = "Shift";
|
||||
level_name[Level3] = "Control Shift";
|
||||
level_name[Level4] = "Control";
|
||||
level_name[Level5] = "Super";
|
||||
level_name[Level6] = "Super Shift";
|
||||
};
|
||||
type "ONE_LEVEL_SUPER" {
|
||||
modifiers = Shift+Super;
|
||||
map[Shift] = Level2;
|
||||
map[Super] = Level3;
|
||||
map[Shift+Super] = Level4;
|
||||
level_name[Level1] = "Base";
|
||||
level_name[Level2] = "Shift";
|
||||
level_name[Level3] = "Super";
|
||||
level_name[Level4] = "Super Shift";
|
||||
};
|
||||
};
|
53
.xkb/types/mac_term
Normal file
@@ -0,0 +1,53 @@
|
||||
default partial xkb_types "addmac_levels" {
|
||||
Virtual_modifiers Super;
|
||||
type "ONE_LEVEL_CTRL" {
|
||||
modifiers = Shift+Mod1+Super+Control;
|
||||
map[Shift] = Level2;
|
||||
map[Shift+Control] = Level3;
|
||||
// map[Mod1] = Level4;
|
||||
map[Shift+Mod1] = Level5;
|
||||
map[Control] = Level6;
|
||||
map[Super] = Level7;
|
||||
map[Shift+Super] = Level8;
|
||||
map[Mod1+Control] = 9;
|
||||
map[Super+Control] = 10;
|
||||
map[Super+Mod1] = 11;
|
||||
map[Super+Mod1+Control] = 12;
|
||||
level_name[Level1] = "Base";
|
||||
level_name[Level2] = "Shift";
|
||||
level_name[Level3] = "Shift Control";
|
||||
// level_name[Level4] = "Alt";
|
||||
level_name[Level5] = "Shift Alt";
|
||||
level_name[Level6] = "Control";
|
||||
level_name[Level7] = "Super";
|
||||
level_name[Level8] = "Shift Super";
|
||||
level_name[9] = "Control Alt";
|
||||
level_name[10] = "Super Control";
|
||||
level_name[11] = "Super Alt";
|
||||
level_name[12] = "Super Control Alt";
|
||||
};
|
||||
type "ONE_LEVEL_CMD" {
|
||||
modifiers = Shift+Control+Super;
|
||||
map[Shift] = Level2;
|
||||
map[Shift+Control] = Level3;
|
||||
map[Control] = Level4;
|
||||
map[Super] = Level5;
|
||||
map[Shift+Super] = Level6;
|
||||
level_name[Level1] = "Base";
|
||||
level_name[Level2] = "Shift";
|
||||
level_name[Level3] = "Control Shift";
|
||||
level_name[Level4] = "Control";
|
||||
level_name[Level5] = "Super";
|
||||
level_name[Level6] = "Super Shift";
|
||||
};
|
||||
type "ONE_LEVEL_SUPER" {
|
||||
modifiers = Shift+Super;
|
||||
map[Shift] = Level2;
|
||||
map[Super] = Level3;
|
||||
map[Shift+Super] = Level4;
|
||||
level_name[Level1] = "Base";
|
||||
level_name[Level2] = "Shift";
|
||||
level_name[Level3] = "Super";
|
||||
level_name[Level4] = "Super Shift";
|
||||
};
|
||||
};
|
350
README.md
@@ -5,221 +5,22 @@
|
||||
|
||||
[](https://github.com/rbreaves/kinto/releases/latest)
|
||||
|
||||
\- Mac-style shortcut keys for Linux & Windows. \-
|
||||
\- Type in Linux & Windows like it's a Mac. \-
|
||||
|
||||
Seamless copy and paste with all apps and terminals. The zero effort solution.
|
||||
|
||||
v1.2 Release - Kinto now includes a system tray and simple wizard to setup the install with minimal effort.
|
||||
|
||||
Kinto is powered by [xkeysnail](https://github.com/mooz/xkeysnail) for Linux & by [Autohotkey](https://github.com/Lexikos/AutoHotkey_L) for Windows 10 & 11.
|
||||
|
||||
Note: VNC is now experimentally supported on Linux w/ the latest releases, but you must compile & install x11vnc. More info can be [found here](https://gist.github.com/rbreaves/87059f92f030ee4e068f911ddb56a4dd).
|
||||
|
||||
~~Note: If you plan to remote into Linux via VNC, xRDP, Synergy or other remote desktop solutions then remove the current release & try an earlier [v1.0.7-3](https://github.com/rbreaves/kinto/releases/tag/1.0.7-3) release. It uses xkb so it'll work with virtual xinput devices. Some v1.1-x releases may offer both, but all v1.2.x releases ended support for xkb. I do plan to bring offical support back for virtual input devices.~~
|
||||
|
||||
### [Table of Contents ](#Table-of-Contents)
|
||||
|
||||
## Donations
|
||||
|
||||
If you like or appreciate this project then please consider donating.
|
||||
|
||||
|**Wishlists**|[Amazon](https://smile.amazon.com/hz/wishlist/ls/3EVXR21VFKD9Z?ref_=wl_share)|[Adafruit](https://www.adafruit.com/wishlists/515932)|[eBay](https://www.ebay.com/mye/myebay/WatchList?custom_list_id=636668138019)|
|
||||
|---|---|---|---|
|
||||
|
||||
I have received some really great letters with donations & email. I've also posted some of them with redacted first names to kinto.sh.
|
||||
|
||||
Also if you would like to send me a keyboard directly then please reach out to me over [twitter](https://twitter.com/gbit86) and send me a DM.
|
||||
|
||||
## How to install (Linux)
|
||||
|
||||
Video Tutorial: [Install Kinto.sh for Linux in less than a minute](https://www.youtube.com/watch?v=kd4al45XD1g)
|
||||
|
||||
[Linux Requirements](#What-does-Kinto-require)
|
||||
|
||||
<img src="https://user-images.githubusercontent.com/10969616/97070698-179c4500-15a0-11eb-8064-c03aa7f4d4a5.png" width="75%">
|
||||
|
||||
### Quick Install Method
|
||||
|
||||
Paste the following into your Terminal
|
||||
```
|
||||
/bin/bash -c "$(wget -qO- https://raw.githubusercontent.com/rbreaves/kinto/HEAD/install/linux.sh || curl -fsSL https://raw.githubusercontent.com/rbreaves/kinto/HEAD/install/linux.sh)"
|
||||
```
|
||||
|
||||
Uninstall
|
||||
```
|
||||
/bin/bash <( wget -qO- https://raw.githubusercontent.com/rbreaves/kinto/HEAD/install/linux.sh || curl -fsSL https://raw.githubusercontent.com/rbreaves/kinto/HEAD/install/linux.sh ) -r
|
||||
```
|
||||
|
||||
### Old Install Method
|
||||
|
||||
```
|
||||
git clone https://github.com/rbreaves/kinto.git
|
||||
cd kinto
|
||||
sudo apt update
|
||||
sudo apt install python3
|
||||
./setup.py
|
||||
```
|
||||
|
||||
**Troubleshoot**
|
||||
|
||||
If the wizard does not appear then either type in "kinto.sh" in your application overview search bar or run this following command.
|
||||
```
|
||||
~/.config/kinto/gui/kinto-gui.py
|
||||
```
|
||||
|
||||
**Issues with Numpad?**
|
||||
|
||||
Try toggling numlock on & off (clear key on official mac keyboards). If it still does not work then restart the Kinto service and try toggling the numlock/clear key again, it will likely work after that. #369
|
||||
|
||||
**Uninstall Kinto**
|
||||
|
||||
```
|
||||
./setup.py -r
|
||||
```
|
||||
|
||||
**Other tips**
|
||||
|
||||
If you want a global menu app similar to what mac users have then I strongly recommend Ubuntu Budgie as it has the Vala Appmenu built in and ready for activation. Short of that Vala-AppMenu can be installed in various distros, mileage will vary. If you try to activate it in the latest 20.xx releases with XFCE then you may need to run the following commands.
|
||||
|
||||
```
|
||||
sudo apt install xfce4-appmenu-plugin vala-panel-appmenu-common appmenu-gtk2-module appmenu-gtk3-module appmenu-gtk-module-common
|
||||
xfconf-query -c xsettings -p /Gtk/Modules -n -t string -s "appmenu-gtk-module"
|
||||
```
|
||||
|
||||
**Fractional HiDPI Scaling for Gnome/Budgie w/ x11**
|
||||
|
||||
https://github.com/rbreaves/betterScale
|
||||
|
||||
Use this with autorandr to save your settings as a profile that will auto re-apply when needed.
|
||||
|
||||
|
||||
## How to Install (Windows)
|
||||
|
||||
Video Tutorial: [How to Install Kinto.sh on Windows 10](https://youtu.be/sRk8A8krz40)
|
||||
|
||||
[Windows 10 Requirements](#Kinto-for-Windows-10-Requirements)
|
||||
|
||||
### Quick install
|
||||
Open Powershell as Administrator and copy and paste the following. This will download & extract Kinto, install chocolatey, python3 and then install Kinto.
|
||||
|
||||
**⚠ NOTE: Please inspect https://raw.githubusercontent.com/rbreaves/kinto/master/install/windows.ps1 and https://chocolatey.org/install.ps1 before running scripts directly. More information about running powershell scripts in this context can be found [here](https://chocolatey.org/install).**
|
||||
|
||||
```
|
||||
Set-ExecutionPolicy Bypass -Scope Process -Force
|
||||
iwr https://raw.githubusercontent.com/rbreaves/kinto/master/install/windows.ps1 -UseBasicParsing | iex
|
||||
```
|
||||
|
||||
|
||||
Update system tray to show Kinto icon at all times (optional)
|
||||
```
|
||||
cmd /c "explorer shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}"
|
||||
```
|
||||
|
||||
### Old method
|
||||
|
||||
1. Open Powershell (Right click and Run as Administrator)
|
||||
|
||||
2. clone this repo
|
||||
```
|
||||
git clone https://github.com/rbreaves/kinto.git
|
||||
cd kinto
|
||||
```
|
||||
3. Install - Select keyboard type
|
||||
```
|
||||
py setup.py
|
||||
```
|
||||
|
||||
4. How to make Kinto stay visible in system tray (optional)
|
||||
|
||||
<img src="https://user-images.githubusercontent.com/10969616/85195077-2f338c00-b295-11ea-8aa3-e6aa06a9a279.png" width="50%" height="50%">
|
||||
<img src="https://user-images.githubusercontent.com/10969616/85195079-30fd4f80-b295-11ea-8bcd-257990b77dcb.png" width="50%" height="50%">
|
||||
<img src="https://user-images.githubusercontent.com/10969616/85195082-322e7c80-b295-11ea-8c81-320dab424c3c.png" width="50%" height="50%">
|
||||
|
||||
**Uninstall Kinto**
|
||||
|
||||
```
|
||||
py setup.py
|
||||
```
|
||||
|
||||
Select Uninstall
|
||||
|
||||
## How to use in Remote Desktop Solutions
|
||||
|
||||
RDP fully works as long as the entire keyboard input is being captured. RDP had been working for awhile with Windows but as of 2/14/2021 Linux & macOS is now supported. VNC & other protocols may work, but is likely most dependent on how the keyboard input is captured on the computer running the client.
|
||||
|
||||
|Program|Src/Remote Client ⇒|Dst/Remote Server|Works? |Notes|
|
||||
|---|---|---|---|---|
|
||||
|Official MS RDP (mstsc.exe)| ❖Windows ⇒| ❖Windows | ✅ Yes| Note: Make sure to set all keyboard input to go to remote. |
|
||||
|Official MS RDP (mstsc.exe)| ❖Windows ⇒| 🍎macOS | ✅ Yes| Note: Must compile & install xrdp. |
|
||||
|Official MS RDC from Store| ❖Windows ⇒| ❖Windows | ✅ Yes| Note: Only when maximized, all modifier keys will not pass in otherwise. |
|
||||
|Official MS RDC from Store| ❖Windows ⇒| 🍎macOS | ✅ Yes| Note: Must compile & install xrdp. |
|
||||
|RealVNC| ❖Windows ⇒| 🐧Linux | ✅ Yes| Note: Compile & install my forked [x11vnc](https://gist.github.com/rbreaves/87059f92f030ee4e068f911ddb56a4dd) for compatibility. |
|
||||
|Official MS RDP (mstsc.exe)| ❖Windows ⇒| 🐧Linux | ✅ Yes | Note: Compile & install my forked [x11vnc](https://gist.github.com/rbreaves/87059f92f030ee4e068f911ddb56a4dd) for compatibility, then setup xrdp like normal & use xrdp 0.9.18+. |
|
||||
|Official MS RDC from Store| ❖Windows ⇒| 🐧Linux | ✅ Yes | Note: Compile & install my forked [x11vnc](https://gist.github.com/rbreaves/87059f92f030ee4e068f911ddb56a4dd) for compatibility, then setup xrdp like normal & use xrdp 0.9.18+. |
|
||||
|Official MS RDP| ChromeOS 87+⇒| ❖Windows | ✅ Yes|May work on earlier versions as well, if they support Android apps|
|
||||
|Remmina| 🐧Linux*/ChromeOS 87+⇒| ❖Windows | ✅ Yes|*Use hover menu to enable "Grab all keyboard events"|
|
||||
|FreeRDP| 🐧Linux/ChromeOS 87+⇒| ❖Windows | ✅ Yes | |
|
||||
|FreeRDP| 🍎macOS⇒| ❖Windows | ✅ Yes| [FreeRDP for macOS](#FreeRDP-for-macOS)|
|
||||
|Remote Desktop Manager Free|🍎iOS⇒| ❖Windows | ✅ Yes| |
|
||||
|Jump Desktop (RDP)| 🍎macOS*/iOS ⇒| ❖Windows | ✅ Yes|*Preferences -> Keyboard -> Disable "Key Conversions", Enabled "Send macOS Shortcuts" under Keyboard shortcuts|
|
||||
|Jump Desktop (VNC)| 🍎macOS⇒| 🐧Linux | ✅ Yes| Note: Compile & install my forked [x11vnc](https://gist.github.com/rbreaves/87059f92f030ee4e068f911ddb56a4dd) for compatibility & use xrdp 0.9.18+. |
|
||||
|RealVNC| 🍎macOS⇒| 🐧Linux | ✅ Yes| Note: Compile & install my forked [x11vnc](https://gist.github.com/rbreaves/87059f92f030ee4e068f911ddb56a4dd) for compatibility. |
|
||||
|Official MS RDP| 🍎macOS⇒| ❖Windows | ❌ No|Initial Cmd key press not being passed|
|
||||
|Remote Desktop Manager Free| 🍎macOS⇒| ❖Windows | ❌ No|Initial Cmd key press not being passed|
|
||||
|Royal TSX Client| 🍎macOS⇒| ❖Windows | ❌ No|Initial Cmd key press not being passed|
|
||||
|Official MS RDP| 🍎🤖iOS/Android⇒| ❖Windows | ❌ No|No workaround atm|
|
||||
|
||||
## How to Remap Windows keyboards for remote access to macOS
|
||||
Quick summary - Swap Alt & Win to conform with Apple keyboard layouts. Sharpkeys for Windows, Setkeycodes for Linux, then install Kinto.sh or change/update the Keyboard Type to Apple in the system tray.
|
||||
https://benreaves.medium.com/macos-to-linux-back-again-c6151200f4dc
|
||||
|
||||
## FreeRDP for macOS
|
||||
|
||||
1. Install [brew.sh](https://brew.sh).
|
||||
|
||||
```/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"```
|
||||
|
||||
2. Install XQuartz (x11/xorg)
|
||||
|
||||
```brew install --cask xquartz```
|
||||
|
||||
3. log off and back on.
|
||||
4. Install FreeRDP
|
||||
|
||||
```brew install freerdp```
|
||||
|
||||
5. Disable [NLA](https://kb.parallels.com/en/123661), if it is enabled on the destination.
|
||||
6. Run command to access machine
|
||||
Note: 192.168.x.x = Your IP.
|
||||
|
||||
```xfreerdp /u:your_username /v:192.168.x.x /cert-ignore /auto-reconnect-max-retries:0 /f +clipboard -decorations```
|
||||
|
||||
7. Click on XQuartz -> Preferences and set these checkmarks so that fullscreen can work, may need to quit it and re-run the xfreerdp command from step 6.
|
||||
|
||||
<img src="https://user-images.githubusercontent.com/10969616/108144025-68bfcf80-708e-11eb-96cc-2930b7b1694a.png" width="50%">
|
||||
|
||||
More info here
|
||||
https://medium.com/idomongodb/macos-rdp-to-a-windows-machine-1e0f52f777b
|
||||
|
||||
## Jump Desktop for macOS
|
||||
|
||||
Screenshots of how to configure Jump Desktop for macOS users accessing a Windows PC with Kinto installed. I apologize that it is not a free RDP client - BUT it does work, and at $15 it is reasonable if you plan to use it frequently.
|
||||
|
||||
<img src="https://user-images.githubusercontent.com/10969616/107990246-a2fb7500-6f99-11eb-8c19-0a9b538b996f.png" width="25%">
|
||||
<img src="https://user-images.githubusercontent.com/10969616/107990265-a8f15600-6f99-11eb-9922-bbcfa0b92031.png" width="50%">
|
||||
<img src="https://user-images.githubusercontent.com/10969616/107990256-a68efc00-6f99-11eb-9f31-575ed6016944.png" width="50%">
|
||||
|
||||
|
||||
## Table of Contents
|
||||
|
||||
[How to install (Linux)](#How-to-install-Linux)
|
||||
|
||||
[How to install (Windows)](#How-to-install-Windows)
|
||||
|
||||
[What does this do exactly?](#What-does-this-do-exactly)
|
||||
|
||||
[What's different from other remappers?](#Whats-different)
|
||||
|
||||
[How to install (Linux)](#How-to-install-Linux)
|
||||
|
||||
[How to install (Windows)](#How-to-install-Windows)
|
||||
|
||||
[What does Kinto require?](#What-does-Kinto-require)
|
||||
|
||||
[Shortcut Creation](#Shortcut-Creation)
|
||||
@@ -270,10 +71,75 @@ If your OS and macOS have similar functionality on the system level, but only di
|
||||
|
||||
Additionally, if you are using a cross-platform app and if it happens to have a few shortcut keys that differ then that can very easily be added to either the kinto.py or kinto.ahk configuration files which on Windows is located here `~/.kinto/kinto.ahk` and on Linux it can be found here `~/.config/kinto/kinto.py`. More info can be found here [Shortcut Creation](#Shortcut-Creation)
|
||||
|
||||
## How to install (Linux)
|
||||
|
||||
Video Tutorial: [Install Kinto.sh for Linux in less than a minute](https://www.youtube.com/watch?v=kd4al45XD1g)
|
||||
|
||||
<img src="https://user-images.githubusercontent.com/10969616/97070698-179c4500-15a0-11eb-8064-c03aa7f4d4a5.png" width="75%">
|
||||
|
||||
1. clone this repo
|
||||
```
|
||||
git clone https://github.com/rbreaves/kinto.git
|
||||
cd kinto
|
||||
```
|
||||
2. Install python3 (If needed)
|
||||
|
||||
Debian or Ubuntu 16.04 or 18.04
|
||||
```
|
||||
sudo apt update
|
||||
sudo apt install python3
|
||||
```
|
||||
|
||||
3. Run the script, press 1 or 2 keys and you are done.
|
||||
```
|
||||
./setup.py
|
||||
```
|
||||
|
||||
Troubleshoot
|
||||
|
||||
If the wizard does not appear then either type in "kinto.sh" in your application overview search bar or run this following command.
|
||||
```
|
||||
~/.config/kinto/gui/kinto-gui.py
|
||||
```
|
||||
|
||||
To Uninstall Kinto
|
||||
|
||||
```
|
||||
./setup.py -r
|
||||
```
|
||||
|
||||
## How to Install (Windows)
|
||||
|
||||
Video Tutorial: [How to Install Kinto.sh on Windows 10](https://youtu.be/sRk8A8krz40)
|
||||
|
||||
1. Open Powershell (Right click and Run as Administrator)
|
||||
|
||||
2. clone this repo
|
||||
```
|
||||
git clone https://github.com/rbreaves/kinto.git
|
||||
cd kinto
|
||||
```
|
||||
3. Install - Select keyboard type
|
||||
```
|
||||
py setup.py
|
||||
```
|
||||
|
||||
4. How to make Kinto stay visible in system tray (optional)
|
||||
|
||||
<img src="https://user-images.githubusercontent.com/10969616/85195077-2f338c00-b295-11ea-8aa3-e6aa06a9a279.png" width="50%" height="50%">
|
||||
<img src="https://user-images.githubusercontent.com/10969616/85195079-30fd4f80-b295-11ea-8bcd-257990b77dcb.png" width="50%" height="50%">
|
||||
<img src="https://user-images.githubusercontent.com/10969616/85195082-322e7c80-b295-11ea-8c81-320dab424c3c.png" width="50%" height="50%">
|
||||
|
||||
To Uninstall Kinto - Select Uninstall
|
||||
|
||||
```
|
||||
py setup.py
|
||||
```
|
||||
|
||||
## What does Kinto require?
|
||||
|
||||
- Python
|
||||
- systemd or sysvinit
|
||||
- systemd
|
||||
- x11
|
||||
- xkeysnail
|
||||
|
||||
@@ -289,9 +155,6 @@ Other programs that will be installed when you run ./setup.py
|
||||
- Strawberry Perl
|
||||
|
||||
Note: Sublime Text users should disable screen rotation hotkeys as they will interfere with multi-cursor and possibly other combos. See https://windowsloop.com/disable-screen-rotation-keyboard-shortcut/ for details.
|
||||
|
||||
You may also want to disable the Xbox Game Bar so that Win+G or other shortcuts will not interfere with any of your remaps. Start menu -> Game bar shortcuts -> toggle Off.
|
||||
|
||||
## Shortcut Creation
|
||||
|
||||
[Linux Shortcut Creation (Xkeysnail)](#Linux-Xkeysnail)
|
||||
@@ -329,18 +192,12 @@ define_keymap(re.compile("Sublime_text"),{
|
||||
|
||||
In the above example I am also showing that you can define a single shortcut to enact multiple shortcut keys if needed by defining an array of shortcuts to trigger.
|
||||
|
||||
To make changes you can edit ~/.config/kinto/kinto.py under linux & restart the xkeysnail service via the system tray, app or CLI.
|
||||
You can also make changes to the file in your /tmp/kinto/xkeysnail/kinto.py location and see them take affect in real time, but for your changes to be permanent you will need to make your changes in the ~/.config/kinto/kinto.py location & restart the xkeysnail service.
|
||||
|
||||
systemd
|
||||
```
|
||||
sudo systemctl restart xkeysnail
|
||||
```
|
||||
|
||||
sysvinit
|
||||
```
|
||||
sudo -E /etc/init.d/kinto restart
|
||||
```
|
||||
|
||||
More information can be seen on the readme page of [xkeysnail](https://github.com/mooz/xkeysnail).
|
||||
|
||||
## Windows (Autohotkey)
|
||||
@@ -402,53 +259,25 @@ git pull origin master
|
||||
This info is now superceded by the fact that linux has a full fledge GUI and system tray app that is very easy to use, but I will keep the command line options for those that want to know what they are.
|
||||
|
||||
Status
|
||||
|
||||
systemd
|
||||
```
|
||||
sudo systemctl status xkeysnail
|
||||
```
|
||||
|
||||
sysvinit
|
||||
```
|
||||
tail -f /tmp/kinto.log
|
||||
```
|
||||
|
||||
Stop (your keymap will return to normal)
|
||||
|
||||
systemd
|
||||
```
|
||||
sudo systemctl stop xkeysnail
|
||||
```
|
||||
|
||||
sysvinit
|
||||
```
|
||||
sudo -E /etc/init.d/kinto stop
|
||||
```
|
||||
|
||||
Start
|
||||
|
||||
systemd
|
||||
```
|
||||
sudo systemctl start xkeysnail
|
||||
```
|
||||
|
||||
sysvinit
|
||||
```
|
||||
sudo -E /etc/init.d/kinto start
|
||||
```
|
||||
|
||||
Restart
|
||||
|
||||
systemd
|
||||
```
|
||||
sudo systemctl restart xkeysnail
|
||||
```
|
||||
|
||||
sysvinit
|
||||
```
|
||||
sudo -E /etc/init.d/kinto restart
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Installed successfully, but modifier keys are not properly remapped?
|
||||
@@ -510,30 +339,10 @@ I'd appreciate any help from people with non-US based keyboards, to help ensure
|
||||
|
||||
Yet another keyboard remapping tool for X environment
|
||||
|
||||
[libinput-gestures](https://github.com/bulletmark/libinput-gestures)
|
||||
Three finger gesture or other type of gestures for desktop switching or other features within a Linux distro. More info here for quickly setting it up. Make sure you logoff after setting your user to access input. https://www.reddit.com/r/GalliumOS/comments/5lgrxe/psa_multitouch_gestures_on_galliumos/
|
||||
|
||||
[Interception](https://gitlab.com/interception/linux/tools)
|
||||
|
||||
Another low level key remapper, not as easily configurable as Xkeysnail, but does not rely on X11.
|
||||
|
||||
[Wincent](https://github.com/wincent/wincent) by Greg Hurrell
|
||||
|
||||
Dot files and configurations that may help those that want mac-style shortcut keys that work under Wayland, or w/o x11.
|
||||
[Vim #102: macOS keyboard bindings on Linux](https://www.youtube.com/watch?v=TBqTHesnzkI)
|
||||
|
||||
[mac-precision-touchpad](https://github.com/imbushuo/mac-precision-touchpad) by imbushuo
|
||||
|
||||
Windows 10 touchpad to precision touchpad driver
|
||||
|
||||
[macOS-cursors-for-Windows](https://github.com/antiden/macOS-cursors-for-Windows) by antiden
|
||||
|
||||
macOS cursors for Windows
|
||||
|
||||
[QuickLook](https://github.com/QL-Win/QuickLook) for Windows by QL-Win
|
||||
|
||||
It allows users to peek into a file content in lightning speed by just pressing the Space key
|
||||
|
||||
[fusuma](https://github.com/iberianpig/fusuma) by iberianpig
|
||||
|
||||
Multitouch gestures with libinput driver on Linux
|
||||
@@ -542,11 +351,10 @@ Multitouch gestures with libinput driver on Linux
|
||||
|
||||
Linux driver for Facetime HD on macbooks
|
||||
|
||||
[Windows Terminal Preview](https://aka.ms/terminal-preview) by Microsoft
|
||||
[Fluent Terminal - Windows only](https://github.com/felixse/FluentTerminal) by felixse
|
||||
|
||||
The best Terminal app built for Windows hands down. I have tried countless, but this one actually seems to get everything right, despite the lack of a GUI to configure all aspects of the program. Custom configurations have to be done via a json file - but given the performance and feature set I feel like it is a decent trade off.
|
||||
|
||||
I will update Kinto to have custom configurations for this specific Terminal in the future. Will make seamless copy & paste, which already works, work even better (Cmd-C can still trigger sigint - but there is a fix for that that involves updating the json config).
|
||||
A Terminal Emulator based on UWP and web technologies.
|
||||
|
||||
[PowerToys - Windows only](https://github.com/microsoft/PowerToys) by microsoft
|
||||
|
||||
@@ -596,7 +404,7 @@ Dark & Light Theme w/ OSX controls for Elementary OS
|
||||
|
||||
Auto-detect the connected display hardware and load the appropriate X11 setup using xrandr
|
||||
|
||||
[Barrier](https://github.com/debauchee/barrier) by debauchee (Note: Does not appear to work with Kinto v1.2+, may work w/ Kinto v1.1?)
|
||||
[Barrier](https://github.com/debauchee/barrier) by debauchee
|
||||
|
||||
Open-source KVM software
|
||||
|
||||
@@ -622,9 +430,11 @@ Vala rewrite of SimplePanel - GitHub mirror (Global Menu for XFCE)
|
||||
|
||||
## Contributing
|
||||
|
||||
I welcome any and all contributors who want to add something to this project.
|
||||
I welcome any and all contributors who want to contribute something to this project.
|
||||
|
||||
You can read the configuration files and the open issue tickets such as [#44 Shortcut Translation Tables](https://github.com/rbreaves/kinto/issues/44), [#115 Shortcut Creation (xkeysnail)](https://github.com/rbreaves/kinto/issues/115), and [#348 Missing Shortcuts: Post them here](https://github.com/rbreaves/kinto/issues/348) to best understand what's currently happening and how best to contribute.
|
||||
If you are specifically wanting to contribute additional custom keymaps to help with aligning Kinto's behavior to that of a mac keyboard then I would strongly recommend that you read Glen Whitney's comment on Superuser (the link is below). You may also look at the .xkb directory, mac_wordwise.sh and xactive.sh files to better understand how Kinto operates so that you can test your own keymaps without having to use the systemd service or running the xactive.sh script.
|
||||
|
||||
https://superuser.com/questions/385748/binding-superc-superv-to-copy-and-paste
|
||||
|
||||
## More information about Kinto
|
||||
|
||||
@@ -641,7 +451,7 @@ I would just like to thank a few people here directly that have helped me tremen
|
||||
|
||||
First off I'd like to thank the Stackoverflow and Stackexchange community. I have probably rubbed some mods the wrong way over there, but the people from the community in general are extremely helpful and gracious and without their contributions would have made this much more difficult. The person I'd like to thank most though from over there is Glen Whitney. Without his detailed explaining of how to rebind keys in xkb this would not have come together at all, as every other remapping solution were non-starters as complexity increases. *Kinto today no longer uses xkb, but Glen Whitney did provide the basis of a workable method that helped me pursue this method and think it was a worthwhile project to pursue, so for that I thank him.*
|
||||
|
||||
Secondarily I'd like to thank Christian Eriksson*, as he provided information that kept me up at night.. literally. Even after I implemented a similar bash script to one he had suggested I knew that fully implementing a c/c++ solution was where Kinto needed to head to and his explanation was better than I remember it being now that I have gone back to read it again. He also never provided a full implementation of a c/c++ solution - he did hit on the pain points pretty well of what one would need to do and watch out for. I am not sure where I got the first example code of implementing a c based solution, but he definitely went over it well.
|
||||
Secondarily I'd like to thank Christian Eriksson*, as he provided information that kept me up at night.. literally. Even after I implemented a similar bash script to one he had suggested I knew that fully implementing a c/c++ solution was where Kinto needed to head to and his explaination was better than I remember it being now that I have gone back to read it again. He also never provided a full implementation of a c/c++ solution - he did hit on the pain points pretty well of what one would need to do and watch out for. I am not sure where I got the first example code of implementing a c based solution, but he definitely went over it well.
|
||||
|
||||
|
||||
Kui and his gist file** was really the c based solution that I found had the fewest issues to resolve to making it a reliable solution. It didn't account for all failures very well, aka BadWindow issues, but it made for a great foundation on which Kintox11 is built. I cannot thank him enough for putting it out there for others to work with.
|
||||
|
@@ -1,21 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/rbreaves/kinto/master/install/linux.sh)"
|
||||
|
||||
wget https://github.com/rbreaves/kinto/archive/refs/heads/master.zip -O ~/Downloads/kinto.zip || curl https://github.com/rbreaves/kinto/archive/refs/heads/master.zip -J -L -o ~/Downloads/kinto.zip
|
||||
unzip ~/Downloads/kinto.zip -d ~/Downloads/
|
||||
cd ~/Downloads/kinto-master/
|
||||
|
||||
kintorelease=`wget -qO- https://api.github.com/repos/rbreaves/kinto/releases/latest | awk -F'tag_name": ' '{if ($2) print $2}' | tr -d \", || curl -s https://api.github.com/repos/rbreaves/kinto/releases/latest | awk -F'tag_name": ' '{if ($2) print $2}' | tr -d \",`
|
||||
kintohash=`unzip -z ~/Downloads/kinto.zip | tail -n1`
|
||||
kintoshort=${kintohash::7}
|
||||
|
||||
echo "$kintorelease" "build" "$kintoshort" > ./dl_version
|
||||
|
||||
if [ $# -eq 0 ];then
|
||||
echo "Installing Kinto..."
|
||||
./setup.py
|
||||
elif [ $1 == "-r" ];then
|
||||
echo "Uninstall Kinto..."
|
||||
./setup.py -r
|
||||
fi
|
@@ -1,7 +0,0 @@
|
||||
Invoke-WebRequest -Uri https://github.com/rbreaves/kinto/archive/refs/heads/master.zip -OutFile $env:USERPROFILE\Downloads\kinto.zip
|
||||
Expand-Archive -LiteralPath "$env:USERPROFILE\Downloads\kinto.zip" -DestinationPath "$env:USERPROFILE\Downloads" -Force
|
||||
Set-ExecutionPolicy Bypass -Scope Process -Force
|
||||
iwr https://chocolatey.org/install.ps1 -UseBasicParsing | iex
|
||||
choco install -y python3
|
||||
cd "$env:USERPROFILE\Downloads\kinto-master"
|
||||
py .\setup.py
|
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
@@ -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
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
@@ -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);
|
||||
}
|
||||
}
|
631
kinto_old/setup.py
Normal file
@@ -0,0 +1,631 @@
|
||||
#!/usr/bin/env python3
|
||||
import json, time, os, sys, subprocess, shlex, platform
|
||||
from shutil import copyfile
|
||||
from subprocess import PIPE, Popen
|
||||
from prekinto import *
|
||||
|
||||
homedir = os.path.expanduser("~")
|
||||
kintotype = 0
|
||||
|
||||
def windows_setup():
|
||||
keymaps = ["Apple keyboard standard", "Windows keyboard standard","Chromebook","IBM - No Super/Win","Uninstall"]
|
||||
for index, item in enumerate(keymaps):
|
||||
print(" %i. %s" % (index+1, item))
|
||||
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("")
|
||||
# Short DOS path notation
|
||||
path= cmdline('echo ''%cd%''')[:-1]
|
||||
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("Copying autohotkey combinations for Terminals & Editors...")
|
||||
os.system('copy /Y "' + path + '\\windows\\kinto.ahk" "' + path + '\\windows\\kinto-new.ahk"')
|
||||
if default < 3:
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; Default)(?!( - ST2CODE))(.*)/$2$3$5/g" .\\windows\\kinto-new.ahk')
|
||||
if default == 1:
|
||||
kbtype = "mac"
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; MacModifiers)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
elif default == 2:
|
||||
kbtype = "win"
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; WinModifiers)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
elif default == 5:
|
||||
print("Removing any old registry keys from prior versions...")
|
||||
p = subprocess.Popen(['powershell.exe', "Remove-ItemProperty -Path HKLM:'SYSTEM\CurrentControlSet\Control\Keyboard Layout' -Name 'Scancode Map' -ErrorAction SilentlyContinue"], stdout=sys.stdout)
|
||||
print("Removing Kinto from Startup folder...")
|
||||
os.system("(del \"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp\\kinto.ahk\") 2> nul")
|
||||
os.system('(del "%userprofile%\\AppData\\Roaming\\Microsoft\\Windows\\STARTM~1\\Programs\\Startup\\kinto-start.vbs") 2> nul')
|
||||
print("Ending any running Kinto tasks...")
|
||||
os.system("(taskkill /IM autohotkey.exe) 2> nul")
|
||||
print("Removing Kinto from users profile directory...")
|
||||
os.system('(rd /s /q "%userprofile%\\.kinto") 2> nul')
|
||||
print("")
|
||||
print("Uninstall of Kinto is Complete.")
|
||||
if default == 3:
|
||||
kbtype = "chrome"
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; Chromebook)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; WinModifiers/CB)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
if default == 3 or default == 4:
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; CB/IBM)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
if default == 4:
|
||||
kbtype = "ibm"
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; IBM)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; WinModifiers/CB/IBM)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
if default > 0 and default < 5:
|
||||
stvscode = yn_choice(bcolors.CYELLOW2 + "Would you like to use Sublime Text 3 keymaps in VS Code?\n" + bcolors.ENDC)
|
||||
print("\nWill now install Ubuntu Termimnal Theme as default...")
|
||||
os.system('regedit "' + path + '\\windows\\theme_ubuntu.reg"')
|
||||
os.system('robocopy "'+ path + '\\assets" "%userprofile%\\.kinto\\assets" /E')
|
||||
if (stvscode and (default > 0 or default < 3)):
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; Default - ST2CODE)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
elif (stvscode and (default == 3 or default == 4 )):
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; CB/IBM - ST2CODE)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
os.system('copy /Y "' + path + '\\windows\\kinto-start.vbs" "%userprofile%\\.kinto\\kinto-start.vbs"')
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/{kbtype}/' + kbtype + '/g" "%userprofile%\\.kinto\\kinto-start.vbs"')
|
||||
os.system('copy /Y "' + path + '\\windows\\usb.vbs" "%userprofile%\\.kinto\\usb.vbs"')
|
||||
os.system('copy /Y "' + path + '\\windows\\detectUSB.ahk" "%userprofile%\\.kinto\\detectUSB.ahk"')
|
||||
os.system('mklink "%userprofile%\\Start Menu\\Programs\\Startup\\kinto-start.vbs" "%userprofile%\\.kinto\\kinto-start.vbs"')
|
||||
os.system('copy /Y "'+ path + '\\windows\\NoShell.vbs" "%userprofile%\\.kinto\\NoShell.vbs"')
|
||||
os.system('copy /Y "'+ path + '\\windows\\toggle_kb.bat" "%userprofile%\\.kinto\\toggle_kb.bat"')
|
||||
os.system('copy /Y "'+ path + '\\windows\\kinto-new.ahk" "%userprofile%\\.kinto\\kinto.ahk"')
|
||||
os.system("del /f .\\windows\\kinto-new.ahk")
|
||||
os.system("del \"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp\\kinto.ahk\" 2> nul")
|
||||
userpath = cmdline('cmd /c for %A in ("%userprofile%") do @echo %~sA')[:-1]
|
||||
print('Starting... "' + userpath + '\\AppData\\Roaming\\Microsoft\\Windows\\STARTM~1\\Programs\\Startup\\kinto-start.vbs"')
|
||||
os.system('"' + userpath + '\\AppData\\Roaming\\Microsoft\\Windows\\STARTM~1\\Programs\\Startup\\kinto-start.vbs"')
|
||||
# # 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\") 2> nul")
|
||||
|
||||
def cmdline(command):
|
||||
process = Popen(
|
||||
args=command,
|
||||
stdout=PIPE,
|
||||
universal_newlines=True,
|
||||
shell=True
|
||||
)
|
||||
return process.communicate()[0]
|
||||
|
||||
if platform.system() == 'Windows':
|
||||
print("\nYou are detected as running Windows.")
|
||||
windows_setup()
|
||||
sys.exit()
|
||||
|
||||
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 os.name != 'nt':
|
||||
print("You are not using x11, please logout and back in using x11/Xorg")
|
||||
sys.exit()
|
||||
else:
|
||||
print("\nYou are detected as running Windows.")
|
||||
windows_setup()
|
||||
sys.exit()
|
||||
|
||||
distro = cmdline("awk -F= '$1==\"NAME\" { print $2 ;}' /etc/os-release").replace('"','').strip().split(" ")[0]
|
||||
dename = cmdline("./system-config/dename.sh").replace('"','').strip().split(" ")[0].lower()
|
||||
|
||||
run_pkg = ""
|
||||
|
||||
def requirements(pkgm):
|
||||
print(bcolors.CYELLOW2 + "You need to install some packages, " +run_pkg+ ", for Kinto to fully remap browsers during input focus.\n" + bcolors.ENDC)
|
||||
print("sudo " + pkgm + " " + run_pkg + "\n")
|
||||
run_install = yn_choice(bcolors.CYELLOW2 + "Would you like to run it now? (Will require sudo privileges.)\n" + bcolors.ENDC)
|
||||
if(run_install):
|
||||
os.system("sudo " + pkgm + run_pkg)
|
||||
print("\n")
|
||||
|
||||
def install_ibus():
|
||||
global distro
|
||||
print(bcolors.CYELLOW2 + "You need to set IBus as the default Input Method for full word-wise support and re-run this installer.\n" + bcolors.ENDC)
|
||||
print(bcolors.CYELLOW2 + "Confirm the IBus Setup by saying Yes and then closing the window.\n" + bcolors.ENDC)
|
||||
print("ibus-setup\n")
|
||||
print("im-config -n ibus or im-chooser\n")
|
||||
run_install = yn_choice(bcolors.CYELLOW2 + "Would you like to run it now? (Will require logoff and logon.)\n" + bcolors.ENDC)
|
||||
if(run_install):
|
||||
if distro=="fedora":
|
||||
os.system("ibus-setup")
|
||||
os.system("im-chooser")
|
||||
print("\n")
|
||||
print("IBus needs to have Input Method set to your language.")
|
||||
print("im-chooser needs IBus to be selected & closed.")
|
||||
input("Will need to log off and back on for it take effect...")
|
||||
else:
|
||||
os.system("ibus-setup")
|
||||
os.system("im-config -n ibus")
|
||||
print("\n")
|
||||
input("IBus has been set as the default Input Method.\nPress any key to exit and re-run after logoff & logon...")
|
||||
sys.exit()
|
||||
|
||||
def setShortcuts():
|
||||
global distro
|
||||
distroVersion = cmdline("awk -F= '$1==\"VERSION_ID\" { print $2 ;}' /etc/os-release").replace('"','').strip()
|
||||
|
||||
print("\nIf Kinto is already running it will be stopped...")
|
||||
print("If you cancel the installer you can re-run Kinto via\n systemctl --user start keyswap")
|
||||
|
||||
cmdline("systemctl --user stop keyswap")
|
||||
print("\nDetected " + distro + " " + distroVersion.strip() + " DE: " + dename + "\n")
|
||||
addhotkeys = yn_choice("\nDo you want to apply system level shortcuts?")
|
||||
if(addhotkeys):
|
||||
distro = distro.lower()
|
||||
if dename == "gnome" or dename == "mate" or dename == "budgie":
|
||||
cmdline('dconf dump /org/gnome/desktop/wm/keybindings/ > keybindings_`date +"%Y.%m.%d-%s"`.conf')
|
||||
cmdline('dconf dump /org/gnome/mutter/keybindings/ > mutter_`date +"%Y.%m.%d-%s"`.conf')
|
||||
if(kintotype == 1):
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-applications \"['<Primary>Tools','<Alt>Tab']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-applications-backward \"['<Primary><Shift>Tools','<Alt><Shift>Tab']\"")
|
||||
else:
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-applications \"['<Primary>F13','<Primary><Shift>F13','<Alt>Tab']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-applications-backward \"['<Primary>F14','<Primary><Shift>F14','<Alt><Shift>Tab']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings minimize \"['<Super>h','<Alt>F9']\"")
|
||||
#
|
||||
# Leaving run dialog disabled for now
|
||||
# Too slow on appearing, compared to the app menu
|
||||
#
|
||||
# if dename != "budgie":
|
||||
cmdline("gsettings reset org.gnome.desktop.wm.keybindings panel-main-menu")
|
||||
# cmdline("gsettings set org.gnome.desktop.wm.keybindings panel-main-menu \"['<Primary><Shift>Space','<Primary>Space']\"")
|
||||
# else:
|
||||
# cmdline("gsettings set org.gnome.desktop.wm.keybindings panel-main-menu \"['<Alt>F1']\"")
|
||||
# cmdline("gsettings set org.gnome.desktop.wm.keybindings panel-run-dialog \"['<Primary><Shift>Space','<Primary>Space']\"")
|
||||
cmdline("gsettings set org.gnome.shell.keybindings toggle-application-view \"['LaunchB']\"")
|
||||
if dename != "mate":
|
||||
cmdline("gsettings set org.gnome.mutter overlay-key ''")
|
||||
if (distro == "ubuntu" and dename == "gnome") or (distro == "ubuntu" and dename == "budgie") or (distro == "linux" and dename == "mate") or (distro == "ubuntu" and dename == "mate"):
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-up \"['<Super>Up','<Super>Left']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-down \"['<Super>Down','<Super>Right']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-left ['']")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-right ['']")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings minimize \"['<Super>h','<Alt>F9']\"")
|
||||
cmdline("gsettings reset org.gnome.desktop.wm.keybindings panel-main-menu")
|
||||
# cmdline("gsettings set org.gnome.desktop.wm.keybindings panel-main-menu \"['<Primary><Shift>Space','<Primary>Space']\"")
|
||||
elif distro == "pop!_os" and dename == "gnome":
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings close \"['<Alt>F4','<Super>w']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings toggle-maximized \"['<Alt>F10','<Primary><Super>Up']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings minimize \"['<Super>h','<Alt>F9']\"")
|
||||
cmdline("gsettings reset org.gnome.desktop.wm.keybindings panel-main-menu")
|
||||
# cmdline("gsettings set org.gnome.desktop.wm.keybindings panel-main-menu \"['<Primary><Shift>Space','<Primary>Space']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-up \"['<Super>Up','<Super>Left']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-down \"['<Super>Down','<Super>Right']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-left ['']")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-right ['']")
|
||||
elif distro == "elementary" and dename == "gnome":
|
||||
if(kintotype == 1):
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-applications \"['<Primary>Tools','<Alt>Tab']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-applications-backward \"['<Primary><Shift>Tools','<Alt><Shift>Tab']\"")
|
||||
else:
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-applications \"['<Primary>F13','<Primary><Shift>F13','<Alt>Tab']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-applications-backward \"['<Primary>F14','<Primary><Shift>F14','<Alt><Shift>Tab']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings show-desktop \"['<Super>d','<Super>Down']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings toggle-maximized \"['<Alt>F10','<Super>Up']\"")
|
||||
cmdline("gsettings reset org.gnome.desktop.wm.keybindings panel-main-menu")
|
||||
# cmdline("gsettings set org.gnome.desktop.wm.keybindings panel-main-menu \"['<Control><Shift>Space','<Super>Space']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings minimize \"['<Super>h','<Alt>F9']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings panel-main-menu \"['<Super>Space','<Primary>Space']\"")
|
||||
if(kintotype == 2):
|
||||
cmdline('perl -pi -e "s/(\/\/ )(.*)(\/\/ Elementary cmdtab)/\$2\$3/g" ~/.xkb/symbols/mac_term')
|
||||
cmdline('perl -pi -e "s/(\w.*)(\/\/ Default cmdtab)/\/\/ \$1\$2/g" ~/.xkb/symbols/mac_term')
|
||||
cmdline('perl -pi -e "s/(\/\/ )(.*)(\/\/ Elementary cmdtab)/\$2\$3/g" ~/.xkb/symbols/mac_gui')
|
||||
cmdline('perl -pi -e "s/(\w.*)(\/\/ Default cmdtab)/\/\/ \$1\$2/g" ~/.xkb/symbols/mac_gui')
|
||||
# elif distro == "budgie" and dename == "gnome":
|
||||
# print("Apply budgie shortcuts here")
|
||||
elif (dename == "xfce"):
|
||||
print("Applying xfce shortcuts...")
|
||||
cmdline('cp ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml ./xfce4-keyboard-shortcuts_`date +"%Y.%m.%d-%s"`.xml')
|
||||
# Reset Show desktop
|
||||
cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Primary><Alt>d" --reset')
|
||||
cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Super>d" --create --type string --set "show_desktop_key"')
|
||||
# Reset App Cycle
|
||||
cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Alt>Tab" --reset')
|
||||
cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Alt><Shift>Tab" --reset')
|
||||
cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Primary>backslash" --create --type string --set "cycle_windows_key"')
|
||||
cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Primary><Shift>backslash" --create --type string --set "cycle_reverse_windows_key"')
|
||||
# cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Super>h" --create --type string --set "hide_window_key"')
|
||||
# Don't need to undo other maps for menu
|
||||
# cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/commands/custom/<Primary>space" --create --type string --set "xfce4-popup-whiskermenu"')
|
||||
# cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/commands/custom/<Primary><Shift>space" --create --type string --set "xfce4-popup-whiskermenu"')
|
||||
cmdline('xfconf-query --reset --channel xfce4-keyboard-shortcuts --property "/commands/custom/<Primary>space"')
|
||||
cmdline('xfconf-query --reset --channel xfce4-keyboard-shortcuts --property "/commands/custom/<Primary><Shift>space"')
|
||||
cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/commands/default/<Primary>Escape" --create --type string --set "xfce4-popup-whiskermenu"')
|
||||
# Reset move to desktop shortcuts
|
||||
cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Primary><Alt>Home" --reset')
|
||||
cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Primary><Alt>End" --reset')
|
||||
cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Primary><Alt>Left" --reset')
|
||||
cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Primary><Alt>Right" --reset')
|
||||
os.system('xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Primary><Alt>Left" --create --type string --set "move_window_prev_workspace_key"')
|
||||
os.system('xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Primary><Alt>Right" --create --type string --set "move_window_next_workspace_key"')
|
||||
# Reset Change Workspace
|
||||
cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Primary><Alt>Left" --reset')
|
||||
cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Primary><Alt>Right" --reset')
|
||||
cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Super>Left" --create --type string --set "left_workspace_key"')
|
||||
cmdline('xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Super>Right" --create --type string --set "right_workspace_key"')
|
||||
print("\nYou may need to run these commands manually to make sure they are set, if you want to move windows between desktops.\n")
|
||||
print(' xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Primary><Alt>Left" --create --type string --set "move_window_prev_workspace_key"')
|
||||
print(' xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Primary><Alt>Right" --create --type string --set "move_window_next_workspace_key"\n')
|
||||
elif distro == "fedora" and dename == "gnome":
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings show-desktop \"['<Super>d']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-up \"['<Super>Up','<Super>Left']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-down \"['<Super>Down','<Super>Right']\"")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-left ['']")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-right ['']")
|
||||
cmdline("gsettings set org.gnome.desktop.wm.keybindings minimize \"['<Super>h','<Alt>F9']\"")
|
||||
# cmdline("gsettings set org.gnome.desktop.wm.keybindings panel-main-menu \"['<Primary><Shift>Space','<Primary>Space']\"")
|
||||
cmdline("gsettings reset org.gnome.desktop.wm.keybindings panel-main-menu")
|
||||
cmdline("gsettings set org.gnome.mutter.keybindings toggle-tiled-right \"['<Super><Alt>Right']\"")
|
||||
cmdline("gsettings set org.gnome.mutter.keybindings toggle-tiled-left \"['<Super><Alt>Left']\"")
|
||||
# org.gnome.mutter.keybindings toggle-tiled-right ['<Super>Right']
|
||||
# org.gnome.mutter.keybindings toggle-tiled-left ['<Super>Left']
|
||||
elif dename == "kde":
|
||||
# cmdline('kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "krunner.desktop" --key "_launch","Alt+Space\tAlt+F2\tSearch,Alt+Space\tAlt+F2\tSearch,KRunner"')
|
||||
# Remove Alt+F3 Operations Menu - Sublimetext Select-All
|
||||
cmdline('cp ~/.config/kwinrc ./kwinrc_`date +"%Y.%m.%d-%s"`')
|
||||
cmdline('cp ~/.config/kglobalshortcutsrc ./kde_kglobalshortcutsrc_`date +"%Y.%m.%d-%s"`')
|
||||
cmdline('kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "kwin" --key "Switch to Previous Desktop" "Meta+Left,Meta+Left,Switch to Previous Desktop"')
|
||||
cmdline('kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "kwin" --key "Window Operations Menu" "none,Alt+F3,Window Operations Menu"')
|
||||
if(kintotype == 1):
|
||||
cmdline('kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "kwin" --key "Walk Through Windows" "Ctrl+Tools,Alt+Tab,Walk Through Windows"')
|
||||
cmdline('kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "kwin" --key "Walk Through Windows (Reverse)" "Ctrl+Shift+Tools,Alt+Shift+Backtab,Walk Through Windows (Reverse)"')
|
||||
cmdline('kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "kwin" --key "Walk Through Windows of Current Application" "Alt+F6,none,Walk Through Windows of Current Application"')
|
||||
cmdline('kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "kwin" --key "Walk Through Windows of Current Application (Reverse)" "Alt+Shift+F6,none,Walk Through Windows of Current Application (Reverse)"')
|
||||
else:
|
||||
cmdline('kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "kwin" --key "Walk Through Windows" "Ctrl+F13,Alt+Tab,Walk Through Windows"')
|
||||
cmdline('kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "kwin" --key "Walk Through Windows (Reverse)" "Ctrl+Shift+F14,Alt+Shift+Backtab,Walk Through Windows (Reverse)"')
|
||||
cmdline('kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "kwin" --key "Walk Through Windows Alternative" "none,none,Walk Through Windows"')
|
||||
cmdline('kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "kwin" --key "Maximize Window" "none,Meta+PgUp,Maximize Window"')
|
||||
cmdline('kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "kwin" --key "Window Maximize" "Meta+Ctrl+F,Alt+F10,Maximize Window"')
|
||||
cmdline('kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "kwin" --key "Minimize Window" "Meta+h,Meta+PgDown,Minimize Window"')
|
||||
cmdline('kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "kwin" --key "Switch to Next Desktop" "Meta+Right,Meta+Right,Switch to Next Desktop"')
|
||||
os.system('kquitapp5 kglobalaccel && sleep 2s && kglobalaccel5 &')
|
||||
else:
|
||||
print('distro: ' + distro + ' de: ' + dename)
|
||||
print(bcolors.CRED2 + "A supported OS and DE was not found, you may not have full system level shortcuts installed." + bcolors.ENDC)
|
||||
print(bcolors.CRED2 + "You may want to find your DE or Window Manager settings and manually set Alt-Tab & other OS related shortcuts." + bcolors.ENDC)
|
||||
if dename == "gnome" or dename == "mate" or dename == "budgie":
|
||||
# Apply dconf update to make updates survive reboots
|
||||
cmdline('dconf dump /org/gnome/desktop/wm/keybindings/ > tempkb.conf')
|
||||
cmdline('dconf dump /org/gnome/mutter/keybindings/ > tempmt.conf')
|
||||
cmdline('dconf load /org/gnome/desktop/wm/keybindings/ < tempkb.conf')
|
||||
cmdline('dconf load /org/gnome/mutter/keybindings/ < tempmt.conf')
|
||||
cmdline('sleep 1 && rm -f ./tempkb.conf;rm -f ./tempmt.conf')
|
||||
if dename == "budgie":
|
||||
print('** Make sure to open Keyboard settings & reset "switch applications" to cmd+tab **')
|
||||
# cmdline('dconf update')
|
||||
|
||||
def Uninstall():
|
||||
print("You selected to Uninstall Kinto.\n")
|
||||
restore = yn_choice("\nYour DE is " + dename + ".\n\nY: Restore hotkeys from backup\nN: Reset OS/DE hotkeys\nWhich option would you prefer?")
|
||||
print("")
|
||||
if(restore):
|
||||
if dename == "gnome":
|
||||
print("Restoring DE hotkeys...")
|
||||
wmkeys = cmdline('ls | grep -m1 "keybinding"')
|
||||
mutterkeys = cmdline('ls | grep -m1 "mutter_"')
|
||||
if len(wmkeys) > 0:
|
||||
print('dconf load /org/gnome/desktop/wm/keybindings/ < ' + wmkeys)
|
||||
cmdline('dconf load /org/gnome/desktop/wm/keybindings/ < ' + wmkeys)
|
||||
else:
|
||||
print('Gnome Desktop keybindings backup not found...')
|
||||
if len(mutterkeys) > 0:
|
||||
print('dconf load /org/gnome/mutter/keybindings/ < ' + mutterkeys)
|
||||
cmdline('dconf load /org/gnome/mutter/keybindings/ < ' + mutterkeys)
|
||||
if len(wmkeys) > 0 or len(mutterkeys) > 0:
|
||||
print("Gnome hotkeys have been successfully restored.")
|
||||
elif dename == "kde":
|
||||
print("Restoring DE hotkeys...")
|
||||
kwinkeys = cmdline('ls | grep -m1 "kwinrc"').strip()
|
||||
kdekeys = cmdline('ls | grep -m1 "kglobalshortcutsrc"').strip()
|
||||
cmdline('cp ./' + kdekeys + ' ~/.config/kglobalshortcutsrc')
|
||||
cmdline('cp ./' + kwinkeys + ' ~/.config/kwinrc')
|
||||
elif dename == "xfce":
|
||||
print("Restoring DE hotkeys...")
|
||||
xfcekeys = cmdline('ls | grep -m1 "xfce4-keyboard"').strip()
|
||||
cmdline('cp ./' + xfcekeys + ' ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml')
|
||||
if dename == "gnome" or dename == "kde" or dename == "xfce":
|
||||
print("./uninstall.sh\n")
|
||||
subprocess.check_call(shlex.split("./uninstall.sh"))
|
||||
print("Done.")
|
||||
if dename == "kde" or dename == "xfce":
|
||||
print("Please log off and back on for your original hotkeys to take effect.")
|
||||
else:
|
||||
if dename == "gnome":
|
||||
print("Resetting DE hotkeys...\n")
|
||||
print("gsettings reset-recursively org.gnome.desktop.wm.keybindings")
|
||||
cmdline("gsettings reset-recursively org.gnome.desktop.wm.keybindings")
|
||||
print("gsettings reset-recursively org.gnome.mutter.keybindings")
|
||||
cmdline("gsettings reset-recursively org.gnome.mutter.keybindings")
|
||||
print("gsettings set org.gnome.mutter overlay-key 'super'")
|
||||
cmdline("gsettings set org.gnome.mutter overlay-key 'super'")
|
||||
cmdline('dconf dump /org/gnome/mutter/ > mutter.conf')
|
||||
cmdline('dconf load /org/gnome/mutter/ < mutter.conf')
|
||||
elif dename == "kde":
|
||||
print("Resetting DE hotkeys...\n")
|
||||
cmdline('mv ~/.config/kwinrc ~/.config/kwinrc.kinto')
|
||||
cmdline('mv ~/.config/kglobalshortcutsrc ~/.config/kglobalshortcutsrc.kinto')
|
||||
elif dename == "xfce":
|
||||
print("Resetting DE hotkeys...\n")
|
||||
cmdline('cp /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml')
|
||||
if dename == "gnome" or dename == "kde" or dename == "xfce":
|
||||
print("./uninstall.sh\n")
|
||||
subprocess.check_call(shlex.split("./uninstall.sh"))
|
||||
print("Done.")
|
||||
if dename == "kde" or dename == "xfce":
|
||||
print("Please log off and back on for your original DE hotkeys to take effect.")
|
||||
|
||||
def kintoImpOne():
|
||||
|
||||
check_xbind = cmdline("\\which xbindkeys 2>/dev/null").strip()
|
||||
check_xdotool = cmdline("\\which xdotool 2>/dev/null").strip()
|
||||
check_ibus = cmdline("\\which ibus-setup 2>/dev/null").strip()
|
||||
|
||||
pkgm = cmdline("\\which apt-get 2>/dev/null").strip()
|
||||
|
||||
if len(pkgm) == 0:
|
||||
pkgm = cmdline("\\which dnf 2>/dev/null").strip()
|
||||
if len(pkgm) > 0:
|
||||
pkgm += " check-update;sudo dnf install -y "
|
||||
else:
|
||||
pkgm += " install -y "
|
||||
pkgm += " update; sudo apt-get install -y "
|
||||
|
||||
if len(pkgm) == 0:
|
||||
pkgm = cmdline("\\which pacman 2>/dev/null").strip()
|
||||
if len(pkgm) > 0:
|
||||
pkgm += " -Syy; sudo pacman -S "
|
||||
|
||||
|
||||
if len(pkgm) == 0:
|
||||
print("No supported package manager found. Exiting...")
|
||||
sys.exit()
|
||||
|
||||
|
||||
runpkg = 0
|
||||
global run_pkg
|
||||
|
||||
if len(check_xbind) > 0 and len(check_xdotool) > 0 and len(check_ibus) > 0:
|
||||
print("Xbindkeys, xdotool and IBus requirement is installed.")
|
||||
if len(check_xbind) == 0:
|
||||
run_pkg = "xbindkeys"
|
||||
runpkg = 1
|
||||
if len(check_xdotool) == 0:
|
||||
run_pkg += " xdotool"
|
||||
runpkg = 1
|
||||
if len(check_ibus) == 0:
|
||||
# may differ with distro, but for now
|
||||
run_pkg += " ibus"
|
||||
runpkg = 1
|
||||
|
||||
if runpkg != 0:
|
||||
print(runpkg)
|
||||
requirements(pkgm)
|
||||
|
||||
if not os.path.exists(homedir + '/.config/ibus/bus') and cmdline("ls ~/.config/ibus/bus -1rt") == "":
|
||||
install_ibus()
|
||||
|
||||
try:
|
||||
f = open("defaults.json")
|
||||
except IOError:
|
||||
print("defaults.json file is missing. Will exit.\n")
|
||||
exit()
|
||||
f.close()
|
||||
|
||||
try:
|
||||
f = open("defaults.json")
|
||||
except IOError:
|
||||
print("defaults.json file is missing. Will exit.\n")
|
||||
exit()
|
||||
f.close()
|
||||
|
||||
try:
|
||||
f = open("user_config.json")
|
||||
except IOError:
|
||||
print("user_config.json file is missing. Will exit.\n")
|
||||
exit()
|
||||
f.close()
|
||||
|
||||
if os.path.isdir(homedir + "/.config/kinto") == False:
|
||||
os.mkdir(homedir + "/.config/kinto")
|
||||
time.sleep(0.5)
|
||||
|
||||
with open('defaults.json') as json_file:
|
||||
data = json.load(json_file)
|
||||
|
||||
|
||||
color_arr = [bcolors.CBEIGE,bcolors.CRED2,bcolors.CGREEN,bcolors.CYELLOW ]
|
||||
|
||||
print("\nKinto - Type in Linux like it's a Mac.\n")
|
||||
|
||||
kintotype = int(input(color_arr[2] +
|
||||
"1) Kinto - xkeysnail (udev/x11) - Recommended\n" + color_arr[0] +
|
||||
"2) Kinto - Original xkb/x11 implementation\n" + color_arr[3] +
|
||||
"3) Uninstall Kinto - xkeysnail\n" +
|
||||
"4) Uninstall Kinto - Original xkb\n\n"
|
||||
+ bcolors.ENDC))
|
||||
print("")
|
||||
if(kintotype == 1):
|
||||
subprocess.check_call(shlex.split("./xkeysnail_service.sh"))
|
||||
if os.path.isdir(homedir + "/.config/kinto") == True:
|
||||
setShortcuts()
|
||||
subprocess.check_call(shlex.split("./xkeysnail_service.sh budgieUpdate"))
|
||||
exit()
|
||||
|
||||
if(kintotype == 3):
|
||||
subprocess.check_call(shlex.split("./xkeysnail_service.sh uninstall"))
|
||||
exit()
|
||||
|
||||
if(kintotype == 4):
|
||||
Uninstall()
|
||||
exit()
|
||||
|
||||
kintoImpOne()
|
||||
|
||||
for index, item in enumerate(data['defaulttypes']):
|
||||
ossym = ""
|
||||
if item == "windows":
|
||||
ossym = u'\u2756'
|
||||
elif item == "mac":
|
||||
ossym = u'\u2318'
|
||||
elif item == "chromebook":
|
||||
ossym = u'\u2707'
|
||||
print("%s %i. %s %s %s" % (color_arr[index], index+1, ossym, item.capitalize(), bcolors.ENDC))
|
||||
|
||||
print("%s %i. Uninstall %s" % (color_arr[3], len(data['defaulttypes'])+1, bcolors.ENDC))
|
||||
|
||||
default = 0
|
||||
while not int(default) in range(1,len(data['defaulttypes'])+2):
|
||||
default = int(input(bcolors.CYELLOW2 + "\nPlease enter your keyboard type (1 - " + str(len(data['defaulttypes'])) + ") : " + bcolors.ENDC))
|
||||
print("")
|
||||
|
||||
if default == len(data['defaulttypes'])+1:
|
||||
Uninstall()
|
||||
exit()
|
||||
|
||||
try:
|
||||
f = open(homedir + "/.config/kinto/user_config.json")
|
||||
rewrite = yn_choice("~/.config/kinto/user_config.json already exists. Do you want to overwrite it with a new config?")
|
||||
print("")
|
||||
if(rewrite):
|
||||
copyfile("user_config.json", homedir + "/.config/kinto/user_config.json")
|
||||
else:
|
||||
exit()
|
||||
except IOError:
|
||||
pass
|
||||
copyfile("user_config.json", homedir + "/.config/kinto/user_config.json")
|
||||
finally:
|
||||
f.close()
|
||||
|
||||
keyboardconfigs = [obj for obj in data['defaults'] if(obj['type'] == data['defaulttypes'][default-1])]
|
||||
|
||||
# for k in keyboardconfigs:
|
||||
for index, k in enumerate(keyboardconfigs):
|
||||
print(color_arr[default-1] + bcolors.BOLD + str(index+1) + '. ' + k['name'] + bcolors.ENDC)
|
||||
print(bcolors.CYELLOW2 + 'Description: ' + k['description'] + bcolors.ENDC)
|
||||
|
||||
print("")
|
||||
defaultkb = 0
|
||||
while not int(defaultkb) in range(1,len(keyboardconfigs)+1):
|
||||
defaultkb = int(input(bcolors.CYELLOW2 + "Please enter your keyboard config (1 - " + str(len(keyboardconfigs)) + ") : " + bcolors.ENDC))
|
||||
print("")
|
||||
|
||||
if 'hack' in keyboardconfigs[defaultkb-1]:
|
||||
print(bcolors.CYELLOW2 + "You have selected a keyboard config that needs the following command to be ran.\n" + bcolors.ENDC)
|
||||
print(keyboardconfigs[defaultkb-1]['hack'].replace(";", "\n") + "\n")
|
||||
runhack = yn_choice(bcolors.CYELLOW2 + "Would you like to run it now? (Will require sudo privileges. Will exit on No.)" + bcolors.ENDC)
|
||||
if(runhack):
|
||||
os.system(keyboardconfigs[defaultkb-1]['hack'])
|
||||
|
||||
# Setup the selected keyboards config
|
||||
os.system("cp -TRv ./.xkb ~/.xkb/")
|
||||
if os.path.isdir(homedir + "/.xkb/keymap") == False:
|
||||
os.mkdir(homedir + "/.xkb/keymap")
|
||||
time.sleep(0.5)
|
||||
os.system('setxkbmap -option')
|
||||
os.system('setxkbmap -print > ~/.xkb/keymap/kbd.mac.gui')
|
||||
os.system('setxkbmap -print > ~/.xkb/keymap/kbd.mac.gui.chrome')
|
||||
os.system('setxkbmap -print > ~/.xkb/keymap/kbd.mac.gui.browsers')
|
||||
os.system('setxkbmap -print > ~/.xkb/keymap/kbd.mac.term')
|
||||
time.sleep(0.5)
|
||||
|
||||
symbols_line = cmdline("cat ~/.xkb/keymap/kbd.mac.gui | grep -n 'xkb_symbols' | cut -f1 -d:").strip()
|
||||
types_line = cmdline("cat ~/.xkb/keymap/kbd.mac.gui | grep -n 'xkb_types' | cut -f1 -d:").strip()
|
||||
|
||||
cmdline('sed -i '' -e "' + symbols_line + 's/\\"/' + keyboardconfigs[defaultkb-1]['xkb_symbols_gui'] + '\\"/2" ~/.xkb/keymap/kbd.mac.gui')
|
||||
cmdline('sed -i '' -e "' + types_line + 's/\\"/' + keyboardconfigs[defaultkb-1]['xkb_types_gui'] + '\\"/2" ~/.xkb/keymap/kbd.mac.gui')
|
||||
cmdline('sed -i '' -e "' + symbols_line + 's/\\"/' + keyboardconfigs[defaultkb-1]['xkb_symbols_term'] + '\\"/2" ~/.xkb/keymap/kbd.mac.term')
|
||||
cmdline('sed -i '' -e "' + types_line + 's/\\"/' + keyboardconfigs[defaultkb-1]['xkb_types_term'] + '\\"/2" ~/.xkb/keymap/kbd.mac.term')
|
||||
|
||||
# Set chrome file accordingly for chromebooks or normal
|
||||
if default != 3:
|
||||
cmdline('sed -i '' -e "' + symbols_line + 's/\\"/' + keyboardconfigs[defaultkb-1]['xkb_symbols_gui'].replace("+mac_gui(mac_levelssym)+mac_gui(mac_appcycle)","+mac_gui(mac_levelssym)+mac_gui(mac_browsers)") + '\\"/2" ~/.xkb/keymap/kbd.mac.gui.browsers')
|
||||
cmdline('sed -i '' -e "' + symbols_line + 's/\\"/' + keyboardconfigs[defaultkb-1]['xkb_symbols_gui'].replace("+mac_gui(mac_levelssym)+mac_gui(mac_appcycle)","+mac_gui(mac_browsers)+mac_gui(mac_chrome)") + '\\"/2" ~/.xkb/keymap/kbd.mac.gui.chrome')
|
||||
else:
|
||||
# Fix multicursor in mac_gui
|
||||
cmdline('perl -pi -e "s/(\/\/ )(.*)(\/\/ Chromebook multicursor)/\$2\$3/g" ~/.xkb/symbols/mac_gui')
|
||||
cmdline('perl -pi -e "s/(\w.*)(\/\/ Default multicursor)/\/\/ \$1\$2/g" ~/.xkb/symbols/mac_gui')
|
||||
# Fix browsers
|
||||
cmdline('sed -i '' -e "' + symbols_line + 's/\\"/' + keyboardconfigs[defaultkb-1]['xkb_symbols_gui'].replace("+mac_gui(mac_levelssym)+mac_gui(mac_appcycle_chromebook)","+mac_gui(mac_levelssym)+mac_gui(mac_browsers_chromebook)") + '\\"/2" ~/.xkb/keymap/kbd.mac.gui.browsers')
|
||||
cmdline('sed -i '' -e "' + symbols_line + 's/\\"/' + keyboardconfigs[defaultkb-1]['xkb_symbols_gui'].replace("+mac_gui(mac_levelssym)+mac_gui(mac_appcycle_chromebook)","+mac_gui(mac_browsers_chromebook)+mac_gui(mac_chrome)") + '\\"/2" ~/.xkb/keymap/kbd.mac.gui.chrome')
|
||||
if dename == "kde":
|
||||
# Fix maximize shortcut
|
||||
cmdline('perl -pi -e "s/(\/\/ )(.*)(\/\/ KDE maximize)/\$2\$3/g" ~/.xkb/symbols/mac_gui')
|
||||
# term app switching
|
||||
cmdline('perl -pi -e "s/(\/\/ )(.*)(\/\/ KDE cmdtab)/\$2\$3/g" ~/.xkb/symbols/mac_term')
|
||||
else:
|
||||
# Fix maximize shortcut
|
||||
cmdline('perl -pi -e "s/(\/\/ )(.*)(\/\/ Default maximize)/\$2\$3/g" ~/.xkb/symbols/mac_gui')
|
||||
# term app switching
|
||||
cmdline('perl -pi -e "s/(\/\/ )(.*)(\/\/ Default cmdtab)/\$2\$3/g" ~/.xkb/symbols/mac_term')
|
||||
cmdline('sed -i '' -e "' + types_line + 's/\\"/' + keyboardconfigs[defaultkb-1]['xkb_types_gui'] + '\\"/2" ~/.xkb/keymap/kbd.mac.gui.browsers')
|
||||
cmdline('sed -i '' -e "' + types_line + 's/\\"/' + keyboardconfigs[defaultkb-1]['xkb_types_gui'] + '\\"/2" ~/.xkb/keymap/kbd.mac.gui.chrome')
|
||||
|
||||
setShortcuts()
|
||||
|
||||
user_file = homedir + '/.config/kinto/user_config.json'
|
||||
with open(user_file, 'r') as f:
|
||||
user_config = json.load(f)
|
||||
|
||||
onetime = yn_choice("\nOne time initialization tweaks are available. Would you like to view them?")
|
||||
print("")
|
||||
if(onetime):
|
||||
intents = [obj for obj in user_config['de'] if(obj['intent'] == "init")]
|
||||
|
||||
for index, k in enumerate(intents):
|
||||
print(color_arr[default-1] + bcolors.BOLD + str(index+1) + '. ' + k['name'] + bcolors.ENDC)
|
||||
print(bcolors.CYELLOW2 + 'Description: ' + k['description'] + bcolors.ENDC)
|
||||
print(bcolors.CYELLOW2 + 'run: ' + k['run'].replace(";", "\n") + bcolors.ENDC + '\n')
|
||||
|
||||
print(bcolors.CYELLOW2 + "Please enter your init tweak(s) (eg 1 or 1 2 3 - leave blank to skip): " + bcolors.ENDC)
|
||||
defaultinit = [int(i) for i in input().split()]
|
||||
if len(defaultinit) != 0:
|
||||
user_config['init'] = [intents[defaultinit[0]-1]['id']]
|
||||
|
||||
print("\nDynamic shortcut tweaks\n")
|
||||
|
||||
intents = [obj for obj in user_config['de'] if(obj['intent'] == "gui_term")]
|
||||
tweaks = []
|
||||
tweaks_selected = []
|
||||
|
||||
for index, k in enumerate(intents):
|
||||
print(color_arr[default-1] + bcolors.BOLD + str(index+1) + '. ' + k['name'] + bcolors.ENDC)
|
||||
print(bcolors.CYELLOW2 + 'Description: ' + k['description'] + bcolors.ENDC)
|
||||
print(bcolors.CYELLOW2 + 'run in gui mode: ' + k['run_gui'].replace(";", "\n") + bcolors.ENDC)
|
||||
print(bcolors.CYELLOW2 + 'run in terminal mode: ' + k['run_term'].replace(";", "\n") + bcolors.ENDC + '\n')
|
||||
tweaks.append(k['id'])
|
||||
|
||||
print(bcolors.CYELLOW2 + "Please enter your dynamic shortcut tweak(s) (eg 1 or 1 2 3 - leave blank to skip): " + bcolors.ENDC)
|
||||
defaultde = [int(i) for i in input().split()]
|
||||
|
||||
for d in defaultde:
|
||||
user_config['de'][tweaks[d-1]]['active'] = True
|
||||
tweaks_selected.append(tweaks[d-1])
|
||||
|
||||
if len(defaultde) != 0:
|
||||
# gui
|
||||
user_config['config'][0]['de'] = tweaks_selected
|
||||
# term
|
||||
user_config['config'][1]['de'] = tweaks_selected
|
||||
# firefox
|
||||
user_config['config'][2]['de'] = tweaks_selected
|
||||
# chrome
|
||||
user_config['config'][3]['de'] = tweaks_selected
|
||||
|
||||
user_config['config'][0]['run'] = keyboardconfigs[defaultkb-1]['gui']
|
||||
user_config['config'][1]['run'] = keyboardconfigs[defaultkb-1]['term']
|
||||
user_config['config'][2]['run'] = keyboardconfigs[defaultkb-1]['gui'].replace("kbd.mac.gui","kbd.mac.gui.browsers")
|
||||
user_config['config'][3]['run'] = keyboardconfigs[defaultkb-1]['gui'].replace("kbd.mac.gui","kbd.mac.gui.chrome")
|
||||
|
||||
os.remove(user_file)
|
||||
with open(user_file, 'w') as f:
|
||||
json.dump(user_config, f, indent=4)
|
||||
print("Saved configuration to ~/.config/kinto/user_config.json\n")
|
||||
print("Now running keyswap_service.sh to setup the keyswap service...")
|
||||
print("Keyswap will be configured to run on user login\n")
|
||||
print("You may start, stop, restart or view the status of the service with following commands\n")
|
||||
print("systemctl --user start keyswap")
|
||||
print("systemctl --user stop keyswap")
|
||||
print("systemctl --user restart keyswap")
|
||||
print("systemctl --user status keyswap")
|
||||
os.system("./keyswap_service.sh")
|
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
@@ -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
@@ -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
@@ -0,0 +1 @@
|
||||
3cd35e15350ca7dac0c3cbfce1c661f7 /usr/bin/budgie-daemon
|
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
@@ -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
@@ -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
@@ -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
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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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":""
|
||||
}]
|
||||
}
|
508
kinto_old/xkeysnail_service.sh
Executable file
@@ -0,0 +1,508 @@
|
||||
#!/bin/bash
|
||||
|
||||
# set about:config?filter=ui.key.menuAccessKeyFocuses
|
||||
# to false for wordwise to work in Firefox
|
||||
|
||||
typeset -l distro
|
||||
distro=$(awk -F= '$1=="NAME" { print $2 ;}' /etc/os-release)
|
||||
typeset -l dename
|
||||
dename=$(./system-config/dename.sh | cut -d " " -f1)
|
||||
|
||||
function uninstall {
|
||||
|
||||
while true; do
|
||||
read -rep $'\nPress R to restore your original shortcuts.\nPress F to reset to factory shortcuts. (f/r)\n' yn
|
||||
case $yn in
|
||||
[Ff]* ) yn="f"; break;;
|
||||
[Rr]* ) yn="r";break;;
|
||||
* ) echo "Please answer yes or no.";;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ "$yn" == "f" ];then
|
||||
echo "Reset to factory shortcuts"
|
||||
if [ "$dename" == "gnome" ];then
|
||||
echo "Resetting DE hotkeys..."
|
||||
echo "gsettings reset-recursively org.gnome.desktop.wm.keybindings"
|
||||
gsettings reset-recursively org.gnome.desktop.wm.keybindings
|
||||
echo "gsettings reset-recursively org.gnome.mutter.keybindings"
|
||||
gsettings reset-recursively org.gnome.mutter.keybindings
|
||||
echo "gsettings set org.gnome.mutter overlay-key 'super'"
|
||||
gsettings set org.gnome.mutter overlay-key 'super'
|
||||
dconf dump /org/gnome/mutter/ > mutter.conf
|
||||
dconf load /org/gnome/mutter/ < mutter.conf
|
||||
elif [ "$dename" == "kde" ];then
|
||||
echo "Resetting DE hotkeys..."
|
||||
mv ~/.config/kwinrc ~/.config/kwinrc.kinto
|
||||
mv ~/.config/kglobalshortcutsrc ~/.config/kglobalshortcutsrc.kinto
|
||||
elif [ "$dename" == "xfce" ];then
|
||||
echo "Resetting DE hotkeys..."
|
||||
cp /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
|
||||
fi
|
||||
elif [ "$yn" == "r" ]; then
|
||||
echo "Restore original user shortcuts"
|
||||
if [ "$dename" == "gnome" ]; then
|
||||
echo "Restoring DE hotkeys..."
|
||||
wmkeys=$(ls | grep -m1 "keybinding")
|
||||
mutterkeys=$(ls | grep -m1 "mutter_")
|
||||
if [[ ${#wmkeys} > 0 ]]; then
|
||||
echo "dconf load /org/gnome/desktop/wm/keybindings/ < $wmkeys"
|
||||
dconf load /org/gnome/desktop/wm/keybindings/ < "$wmkeys"
|
||||
else
|
||||
echo "Gnome Desktop keybindings backup not found..."
|
||||
fi
|
||||
if [[ ${#mutterkeys} > 0 ]]; then
|
||||
echo "dconf load /org/gnome/mutter/keybindings/ < $mutterkeys"
|
||||
dconf load /org/gnome/mutter/keybindings/ <"$mutterkeys"
|
||||
fi
|
||||
if [[ ${#wmkeys} > 0 ]] || [[ ${#mutterkeys} > 0 ]]; then
|
||||
echo "Gnome hotkeys have been successfully restored."
|
||||
fi
|
||||
elif [ "$dename" == "kde" ]; then
|
||||
echo "Restoring DE hotkeys..."
|
||||
kwinkeys=$(ls | grep -m1 "kwinrc")
|
||||
kdekeys=$(ls | grep -m1 "kglobalshortcutsrc")
|
||||
cp ./"$kdekeys" ~/.config/kglobalshortcutsrc
|
||||
cp ./"$kwinkeys" ~/.config/kwinrc
|
||||
elif [ "$dename" == "xfce" ]; then
|
||||
echo "Restoring DE hotkeys..."
|
||||
xfcekeys=$(ls | grep -m1 "xfce4-keyboard")
|
||||
cp ./"$xfcekeys" ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function removeAppleKB {
|
||||
# Undo Apple keyboard cmd & alt swap
|
||||
if test -f "/sys/module/hid_apple/parameters/swap_opt_cmd" && [ `cat /sys/module/hid_apple/parameters/swap_opt_cmd` == "1" ]; then
|
||||
echo '0' | sudo tee /sys/module/hid_apple/parameters/swap_opt_cmd
|
||||
echo 'options hid_apple swap_opt_cmd=0' | sudo tee /etc/modprobe.d/hid_apple.conf
|
||||
sudo update-initramfs -u -k all
|
||||
fi
|
||||
if test -f "/sys/module/applespi/parameters/swap_opt_cmd" && [ `cat /sys/module/applespi/parameters/swap_opt_cmd` == "1" ]; then
|
||||
echo '0' | sudo tee /sys/module/applespi/parameters/swap_opt_cmd
|
||||
echo 'options applespi swap_opt_cmd=0' | sudo tee /etc/modprobe.d/applespi.conf
|
||||
sudo update-initramfs -u -k all
|
||||
fi
|
||||
}
|
||||
|
||||
function trayApp {
|
||||
if [ -f /usr/bin/budgie-desktop ];then
|
||||
while true; do
|
||||
read -rep $'Would you like to install the Kinto Budgie Applet? (y/n)\n(You will need log off & back on and go to Budgie Desktop Settings & add Kinto to your top panel.)\n' yn
|
||||
case $yn in
|
||||
[Yy]* ) yn="y"; break;;
|
||||
[Nn]* ) yn="n";break;;
|
||||
* ) echo "Please answer yes or no.";;
|
||||
esac
|
||||
done
|
||||
if [ "$yn" == "y" ]; then
|
||||
cd ./xkeysnail-config/trayapps/BudgieApplet/
|
||||
sudo ./install-applet.sh
|
||||
cd ../../../
|
||||
echo "Please logoff and back on for the Applet to be available for the top panel."
|
||||
sudo /usr/local/bin/logoff.sh $USER $DISPLAY&
|
||||
fi
|
||||
else
|
||||
while true; do
|
||||
read -rep $'Would you like to install the Kinto Gnome/XFCE System Tray? (y/n)\n' yn
|
||||
case $yn in
|
||||
[Yy]* ) yn="y"; break;;
|
||||
[Nn]* ) yn="n";break;;
|
||||
* ) echo "Please answer yes or no.";;
|
||||
esac
|
||||
done
|
||||
if [ "$yn" == "y" ]; then
|
||||
echo "Kinto Gnome/XFCE System Tray Installed."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function budgieUninstall {
|
||||
if [ -f /usr/bin/budgie-desktop ];then
|
||||
read -n 1 -s -r -p "Your system may log you off immediately during the restoration of budgie-daemon. Press any key to continue..."
|
||||
bdmd5="$(md5sum /usr/bin/budgie-daemon | awk '{ print $1 }')"
|
||||
oldbdmd5=$(md5sum ./budgie-daemon_10.5.1.bak | awk '{ print $1 }')
|
||||
if [ "$bdmd5" != "$oldbdmd5" ]; then
|
||||
echo -e "\nReplacing budgie-daemon with backup..."
|
||||
sudo pkill budgie-daemon && sudo cp ./budgie-daemon_10.5.1.bak /usr/bin/budgie-daemon
|
||||
else
|
||||
echo -e "\nBudgie-daemon is already an original."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function budgieUpdate {
|
||||
# Check for budgie and install App Switching hack
|
||||
if [ -f /usr/bin/budgie-desktop ];then
|
||||
while true; do
|
||||
read -rep $'Would you like to update Budgie to support proper App Switching? (y/n)\n(Your system may immediately log you out after this runs.)\n' yn
|
||||
case $yn in
|
||||
[Yy]* ) yn="y"; break;;
|
||||
[Nn]* ) yn="n";break;;
|
||||
* ) echo "Please answer yes or no.";;
|
||||
esac
|
||||
done
|
||||
if [ "$yn" == "y" ]; then
|
||||
budgieVersion="$(/usr/bin/budgie-desktop --version | awk '{ print $2; }' | head -n1)"
|
||||
if [ "$budgieVersion" == "10.5.1" ]; then
|
||||
if ! [ -f ./system-config/budgie-daemon_10.5.1 ]; then
|
||||
wget https://github.com/rbreaves/budgie-desktop/blob/binaries/binaries/budgie-daemon_10.5.1?raw=true -O ./system-config/budgie-daemon_10.5.1
|
||||
fi
|
||||
bdmd5=$(md5sum /usr/bin/budgie-daemon | awk '{ print $1 }')
|
||||
newbdmd5=$(md5sum ./system-config/budgie-daemon_10.5.1 | awk '{ print $1 }')
|
||||
if [ "$bdmd5" != "$newbdmd5" ]; then
|
||||
cp /usr/bin/budgie-daemon ./budgie-daemon_"$budgieVersion".bak
|
||||
sudo pkill budgie-daemon && sudo cp ./system-config/budgie-daemon_10.5.1 /usr/bin/budgie-daemon
|
||||
echo "Updated Budgie to use App Switching Patch"
|
||||
else
|
||||
echo "Budgie-daemon already patched, skipping replacement."
|
||||
fi
|
||||
else
|
||||
echo "Your Budgie version was $budgieVersion and the patch is for 10.5.1."
|
||||
while true; do
|
||||
read -rep $'Would you like to replace it any ways? (y/n)\n(A backup will be made)\n' yn
|
||||
case $yn in
|
||||
[Yy]* ) yn="y"; break;;
|
||||
[Nn]* ) yn="n";break;;
|
||||
* ) echo "Please answer yes or no.";;
|
||||
esac
|
||||
done
|
||||
if [ "$yn" == "y" ]; then
|
||||
if ! [ -f ./system-config/budgie-daemon_10.5.1 ]; then
|
||||
wget https://github.com/rbreaves/budgie-desktop/raw/43d3b44243b0bcaee3262a79818024a651475b58/binaries/budgie-daemon_10.5.1 -O ./system-config/budgie-daemon_10.5.1
|
||||
fi
|
||||
cp /usr/bin/budgie-daemon ./budgie-daemon_"$budgieVersion".bak
|
||||
sudo pkill budgie-daemon && sudo cp ./system-config/budgie-daemon_10.5.1 /usr/bin/budgie-daemon
|
||||
echo "Updated Budgie to use App Switching Patch"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "Install Kinto - xkeysnail (udev)"
|
||||
echo " 1) Windows & Mac (HID driver) - Most Standard keyboards (& 1st party usb/bt Apple keyboards)"
|
||||
echo " 2) Mac Only & VMs on Macbooks - 3rd & 1st party Apple keyboards"
|
||||
echo " 3) Chromebook - Chromebook running Linux"
|
||||
echo " 4) IBM M - Keyboards w/o Super/Win keys"
|
||||
# echo " 5) Uninstall"
|
||||
|
||||
read n
|
||||
|
||||
set "$n"
|
||||
fi
|
||||
|
||||
# Kinto tray
|
||||
installtray=false
|
||||
# multi-language
|
||||
rightalt=false
|
||||
# VS code remap
|
||||
vssublime=false
|
||||
|
||||
if [[ $1 == "1" || $1 == "2" || $1 == "3" || $1 == "4" || $1 == "winmac" || $1 == "mac" || $1 == "chromebook" || $1 == "ibm" ]]; then
|
||||
if [[ $dename == "gnome" || $dename == "budgie" || $dename == "mate" || $dename == "xfce" ]];then
|
||||
installtray=true
|
||||
while true; do
|
||||
read -rep $'\nWould you like to install the Kinto System Tray (AppInidcator)? (Y/n)\n' yn
|
||||
case $yn in
|
||||
[Nn]* ) installtray=false; break;;
|
||||
* ) break;;
|
||||
esac
|
||||
done
|
||||
if [[ $dename == "gnome" ]]; then
|
||||
echo "Please install KStatusNotifierItem for AppIndicators to show up."
|
||||
echo "https://extensions.gnome.org/extension/615/appindicator-support/"
|
||||
echo "Note: This may still fail. If so use the Kinto gui app instead."
|
||||
read -p "Press enter to continue"
|
||||
fi
|
||||
fi
|
||||
|
||||
while true; do
|
||||
read -rep $'\nDo you want multi-language on Right Alt key? (y/N)\naka Left side remaps, right side doesn\'t\n' yn
|
||||
case $yn in
|
||||
[Yy]* ) rightalt=true; break;;
|
||||
* ) break;;
|
||||
esac
|
||||
done
|
||||
while true; do
|
||||
read -rep $'\nWould you like to give VS Code Sublime Text keymaps? (y/N)\n' yn
|
||||
case $yn in
|
||||
[Yy]* ) vssublime=true; break;;
|
||||
* ) break;;
|
||||
esac
|
||||
done
|
||||
# branch=$(git rev-parse --abbrev-ref HEAD)
|
||||
# if [ "$branch" == "dev" ] || [ "$branch" == "alpha" ];then
|
||||
# while true; do
|
||||
# read -rep $'\nExperimental Support for Firefox/Chrome Back/Forward hotkeys (Cmd+Left/Right)?\n(Keys could get stuck, switch windows or press ctrl &/or super to release) (y/n)\n' yn
|
||||
# case $yn in
|
||||
# [Yy]* ) exp='/sbin/runuser -l {username} -c "export DISPLAY={displayid};{homedir}/.config/kinto/caret_status_xkey.sh\&";'; expsh='"{homedir}/.config/kinto/caret_status_xkey.sh"'; break;;
|
||||
# [Nn]* ) exp=" "; expsh=" " break;;
|
||||
# # * ) echo "Please answer yes or no.";;
|
||||
# esac
|
||||
# done
|
||||
# else
|
||||
# echo -e "\nSupport for Firefox/Chrome Back/Forward hotkeys (Cmd+Left/Right) disabled on $branch w/ xkeysnail \n"
|
||||
exp=" "
|
||||
expsh=" "
|
||||
# fi
|
||||
sudo systemctl enable xkeysnail >/dev/null 2>&1
|
||||
# if ! [ -x "$(command -v inotifywait)" ]; then
|
||||
# echo "Will need to install inotify-tools to restart key remapper live for config file changes..."
|
||||
# sudo ./system-config/unipkg.sh inotify-tools
|
||||
# fi
|
||||
if ! [ -x "$(command -v pip3)" ]; then
|
||||
echo "Will need to install python3-pip..."
|
||||
sudo ./system-config/unipkg.sh python3-pip
|
||||
fi
|
||||
if ! [ -x "$(command -v python3-config)" ]; then
|
||||
if [ "$distro" == "ubuntu" ] || [ "$distro" == "debian" ] || [ "$distro" == '"linux mint"' ]; then
|
||||
pydev="python3-dev"
|
||||
elif [ "$distro" == "fedora" ]; then
|
||||
pydev="python3-devel"
|
||||
fi
|
||||
if [ "$distro" == "gnome" ] || [ "$distro" == "fedora" ] || [ "$distro" == "debian" ] || [ "$distro" == '"linux mint"' ]; then
|
||||
echo "Will need to install $pydev..."
|
||||
sudo ./system-config/unipkg.sh "$pydev"
|
||||
fi
|
||||
fi
|
||||
if ! [ -x "$(command -v xhost)" ] || ! [ -x "$(command -v gcc)" ]; then
|
||||
if [ "$distro" == "\"manjaro linux\"" ]; then
|
||||
sudo ./system-config/unipkg.sh "xorg-xhost gcc"
|
||||
fi
|
||||
fi
|
||||
if [ "$distro" == '"linux mint"' ]; then
|
||||
pip3 install setuptools
|
||||
fi
|
||||
|
||||
# echo "Transferring files..."
|
||||
mkdir -p ~/.config/kinto
|
||||
|
||||
# KDE xhost fix
|
||||
# mkdir -p ~/.kde/Autostart
|
||||
# echo -e '#!/bin/sh\rxhost +SI:localuser:root' > ~/.kde/Autostart/kintohost.sh
|
||||
# chmod +x ~/.kde/Autostart/kintohost.sh
|
||||
|
||||
# KDE startup - xhost fix
|
||||
mkdir -p ~/.config/autostart
|
||||
yes | cp -rf ./xkeysnail-config/xkeysnail.desktop ~/.config/autostart/xkeysnail.desktop
|
||||
|
||||
# yes | cp -rf ./xkeysnail-config/xkeystart.sh ~/.config/kinto/xkeystart.sh
|
||||
|
||||
# *** More testing needing, universal way of killing kinto on user log out? ***
|
||||
# yes | sudo cp -rf xkeysnail-config/root_logoff.sh /usr/local/bin/logoff.sh
|
||||
# sudo chown root:root /usr/local/bin/logoff.sh
|
||||
# sudo chmod u+rwx /usr/local/bin/logoff.sh
|
||||
# sudo chmod go-w+rx /usr/local/bin/logoff.sh
|
||||
# *** End universal killing of kinto
|
||||
if $installtray ; then
|
||||
yes | sudo cp -rf xkeysnail-config/gnome_logoff.sh ~/.config/kinto/logoff.sh
|
||||
fi
|
||||
|
||||
yes | cp -rf ./xkeysnail-config/kinto.py ./xkeysnail-config/kinto.py.new
|
||||
yes | cp -rf ./xkeysnail-config/limitedadmins ./xkeysnail-config/limitedadmins.new
|
||||
yes | cp -rf ./xkeysnail-config/killdups.sh ~/.config/kinto/killdups.sh
|
||||
yes | cp -rf ./xkeysnail-config/appleKB.sh ~/.config/kinto/appleKB.sh
|
||||
yes | cp -rf ./xkeysnail-config/trayapps/appindicator/kintotray.py ~/.config/kinto/kintotray.py
|
||||
yes | cp -rf ./xkeysnail-config/trayapps/appindicator/kintotray.desktop ~/.config/kinto/kintotray.desktop
|
||||
yes | cp -rf ./xkeysnail-config/trayapps/BudgieApplet/icons/kinto-color-16.svg ~/.config/kinto/kinto-color.svg
|
||||
yes | cp -rf ./xkeysnail-config/trayapps/BudgieApplet/icons/kinto-invert-16.svg ~/.config/kinto/kinto-invert.svg
|
||||
yes | cp -rf ./xkeysnail-config/trayapps/BudgieApplet/icons/kinto-solid-16.svg ~/.config/kinto/kinto-solid.svg
|
||||
# yes | cp -rf ./system-config/caret_status_xkey.sh ~/.config/kinto/caret_status_xkey.sh
|
||||
yes | cp -rf ./xkeysnail-config/xkeysnail.service ./xkeysnail-config/xkeysnail.service.new
|
||||
# yes | cp -rf ./xkeysnail-config/xkeysnail.timer ~/.config/systemd/user/xkeysnail.timer
|
||||
sed -i "s#{experimental-caret}#$exp#g" ./xkeysnail-config/xkeysnail.service.new
|
||||
if [ "$expsh" != " " ];then
|
||||
sed -i "s#{kill-caret}#/usr/bin/pkill -f $expsh#g" ./xkeysnail-config/xkeysnail.service.new
|
||||
else
|
||||
sed -i "s#{kill-caret}#$expsh#g" ./xkeysnail-config/xkeysnail.service.new
|
||||
fi
|
||||
sed -i "s/{username}/`whoami`/g" ./xkeysnail-config/xkeysnail.service.new
|
||||
sed -i "s#{homedir}#`echo "$HOME"`#g" ./xkeysnail-config/xkeysnail.service.new
|
||||
sed -i "s#{homedir}#`echo "$HOME"`#g" ~/.config/kinto/kintotray.desktop
|
||||
sed -i "s#{xhost}#`\\which xhost`#g" ./xkeysnail-config/xkeysnail.service.new
|
||||
sed -i "s/{username}/`whoami`/g" ./xkeysnail-config/limitedadmins.new
|
||||
sed -i "s#{systemctl}#`\\which systemctl`#g" ./xkeysnail-config/limitedadmins.new
|
||||
sed -i "s#{pkill}#`\\which pkill`#g" ./xkeysnail-config/limitedadmins.new
|
||||
sed -i "s#{xkeysnail}#/usr/local/bin/xkeysnail#g" ./xkeysnail-config/limitedadmins.new
|
||||
sudo chown root:root ./xkeysnail-config/limitedadmins.new
|
||||
sudo mv ./xkeysnail-config/limitedadmins.new /etc/sudoers.d/limitedadmins
|
||||
sed -i "s#{systemctl}#`\\which systemctl`#g" ~/.config/autostart/xkeysnail.desktop
|
||||
yes | cp -rf ~/.config/kinto/kintotray.desktop ~/.config/autostart/kintotray.desktop
|
||||
if $installtray ; then
|
||||
sed -i "s#-c \"grep#-c \"python3 {homedir}/.config/kinto/kintotray.py;grep#g" ~/.config/autostart/xkeysnail.desktop
|
||||
sed -i "s#xkeysnail\"#xkeysnail;{homedir}/.config/kinto/logoff.sh\"#g" ~/.config/autostart/xkeysnail.desktop
|
||||
fi
|
||||
sed -i "s#{xhost}#`\\which xhost`#g" ~/.config/autostart/xkeysnail.desktop
|
||||
sed -i "s#{homedir}#`echo "$HOME"`#g" ~/.config/autostart/xkeysnail.desktop
|
||||
# sed -i "s#{homedir}#`echo "$HOME"`#g" ~/.config/kinto/prexk.sh
|
||||
sed -i "s/{displayid}/`echo "$DISPLAY"`/g" ./xkeysnail-config/xkeysnail.service.new
|
||||
# sed -i "s/{displayid}/`echo "$DISPLAY"`/g" ~/.config/kinto/prexk.sh
|
||||
|
||||
if $vssublime ; then
|
||||
perl -pi -e "s/(# )(.*)(- Sublime)/\$2\$3/g" ./xkeysnail-config/kinto.py.new >/dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $dename == "gnome" || dename == "budgie" ]]; then
|
||||
perl -pi -e "s/(# )(.*)(# gnome)/\$2\$3/g" ./xkeysnail-config/kinto.py.new >/dev/null 2>&1
|
||||
fi
|
||||
if [[ $dename == "kde" ]]; then
|
||||
echo "Applying Cmd-Space to open App Launcher for KDE..."
|
||||
perl -pi -e "s/(# )(.*)(#.*kde)/\$2\$3/g" ./xkeysnail-config/kinto.py.new >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [[ $1 == "1" || $1 == "winmac" ]]; then
|
||||
if ls /sys/module | grep hid_apple >/dev/null 2>&1 ; then
|
||||
echo '1' | sudo tee /sys/module/hid_apple/parameters/swap_opt_cmd;echo 'options hid_apple swap_opt_cmd=1' | sudo tee /etc/modprobe.d/hid_apple.conf;sudo update-initramfs -u -k all
|
||||
fi
|
||||
if ls /sys/module | grep applespi >/dev/null 2>&1 ; then
|
||||
echo '1' | sudo tee /sys/module/applespi/parameters/swap_opt_cmd;echo 'options applespi swap_opt_cmd=1' | sudo tee /etc/modprobe.d/applespi.conf;sudo update-initramfs -u -k all
|
||||
fi
|
||||
if ! ls /sys/module | grep apple ; then
|
||||
removeAppleKB
|
||||
fi
|
||||
perl -pi -e "s/(# )(.*)(# WinMac)/\$2\$3/g" ./xkeysnail-config/kinto.py.new
|
||||
if [[ $dename == "xfce" ]]; then
|
||||
perl -pi -e "s/(# )(.*)(# xfce4)/\$2\$3/g" ./xkeysnail-config/kinto.py.new
|
||||
perl -pi -e "s/(\w.*)(# Default not-xfce4)/# \$1\$2/g" ./xkeysnail-config/kinto.py.new
|
||||
fi
|
||||
elif [[ $1 == "2" || $1 == "mac" ]]; then
|
||||
removeAppleKB
|
||||
perl -pi -e "s/(# )(.*)(# Mac)/\$2\$3/g" ./xkeysnail-config/kinto.py.new
|
||||
if [[ $dename == "xfce" ]]; then
|
||||
perl -pi -e "s/(# )(.*)(# xfce4)/\$2\$3/g" ./xkeysnail-config/kinto.py.new
|
||||
perl -pi -e "s/(\w.*)(# Default not-xfce4)/# \$1\$2/g" ./xkeysnail-config/kinto.py.new
|
||||
fi
|
||||
elif [[ $1 == "3" || $1 == "chromebook" ]]; then
|
||||
perl -pi -e "s/(# )(.*)(# Chromebook)/\$2\$3/g" ./xkeysnail-config/kinto.py.new
|
||||
perl -pi -e "s/(# )(.*)(# xfce4)/\$2\$3/g" ./xkeysnail-config/kinto.py.new
|
||||
perl -pi -e "s/(\w.*)(# Default)/# \$1\$2/g" ./xkeysnail-config/kinto.py.new
|
||||
elif [[ $1 == "4" || $1 == "ibm" ]]; then
|
||||
perl -pi -e "s/(# )(.*)(# IBM)/\$2\$3/g" ./xkeysnail-config/kinto.py.new
|
||||
perl -pi -e "s=(# )(.*)(# Chromebook/IBM)=\$2\$3=g" ./xkeysnail-config/kinto.py.new
|
||||
# perl -pi -e "s/(# )(.*)(# xfce4)/\$2\$3/g" ./xkeysnail-config/kinto.py.new
|
||||
perl -pi -e "s/(\w.*)(# Default)/# \$1\$2/g" ./xkeysnail-config/kinto.py.new
|
||||
fi
|
||||
if [[ $dename == "xfce" ]] && ls /etc/apt/sources.list.d/enso* 1> /dev/null 2>&1; then
|
||||
echo "enso OS detected, applying Cmd-Space for Launchy..."
|
||||
perl -pi -e "s/(K\(\"RC-Space)(.*)(# )(xfce4)/\$3\$1\$2\$3\$4/g" ./xkeysnail-config/kinto.py.new >/dev/null 2>&1
|
||||
xfconf-query --channel xfce4-keyboard-shortcuts --property "/commands/custom/<Primary>space" --create --type string --set "launchy"
|
||||
fi
|
||||
|
||||
if $rightalt ; then
|
||||
perl -pi -e "s/(\w.*)(Multi-language)/# \$1\$2/g" ./xkeysnail-config/kinto.py.new >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [[ $1 == "1" || $1 == "2" || $1 == "3" || $1 == "winmac" || $1 == "mac" || $1 == "chromebook" ]]; then
|
||||
mv ./xkeysnail-config/kinto.py.new ~/.config/kinto/kinto.py
|
||||
git describe --tags | perl -ne "print \"\$1 build `git rev-parse --short HEAD`\n\" for m/\b(.*)-\w+-\w{8}/" > ~/.config/kinto/version
|
||||
# if [ "$distro" == "fedora" ];then
|
||||
sudo rm /etc/systemd/system/xkeysnail.service
|
||||
if [ -d /usr/lib/systemd/system ];then
|
||||
xkeypath="/usr/lib/systemd/system/"
|
||||
elif [ -d /lib/systemd/system ];then
|
||||
xkeypath="/lib/systemd/system/"
|
||||
fi
|
||||
sudo mv ./xkeysnail-config/xkeysnail.service.new "$xkeypath"xkeysnail.service && echo "Service file added to "$xkeypath"xkeysnail.service"
|
||||
sudo chown -R root:root "$xkeypath"xkeysnail.service && echo "Ownership set for root..." || echo "Failed to set ownership..."
|
||||
sudo chmod 644 "$xkeypath"xkeysnail.service && echo "Permissions set to 644..." || echo "Failed to set permissions..."
|
||||
sudo ln -s "$xkeypath"xkeysnail.service /etc/systemd/system/xkeysnail.service && echo "Created soft symlink..." || echo "Failed to create soft symlink..."
|
||||
sudo ln -s "$xkeypath"xkeysnail.service /etc/systemd/system/graphical.target.wants/xkeysnail.service && echo "Created soft symlink for graphical target..." || echo "Failed to create soft symlink for graphical target..."
|
||||
xhost +SI:localuser:root
|
||||
git clone --depth 10 https://github.com/rbreaves/xkeysnail.git || git pull --depth 10
|
||||
cd xkeysnail
|
||||
git checkout 51c369084e0045a8410d227bab52411bf84fb65b
|
||||
giturl=$(git ls-remote --get-url)
|
||||
if [ "$giturl" != "https://github.com/rbreaves/xkeysnail.git" ];then
|
||||
echo -e "\nreplacing xkeysnail with fork...\n"
|
||||
cd ..
|
||||
rm -rf ./xkeysnail
|
||||
git clone --depth 10 https://github.com/rbreaves/xkeysnail.git
|
||||
cd xkeysnail
|
||||
git checkout 51c369084e0045a8410d227bab52411bf84fb65b
|
||||
fi
|
||||
sudo pip3 install --upgrade .
|
||||
cd ..
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl disable xkeysnail
|
||||
# sudo systemctl --state=not-found --all | grep xkeysnail
|
||||
# if [ "$distro" == "fedora" ];then
|
||||
# systemctl enable xkeysnail.service
|
||||
# else
|
||||
# sudo systemctl enable xkeysnail.service
|
||||
# fi
|
||||
sudo systemctl restart xkeysnail
|
||||
sudo pkill -f kintotray >/dev/null 2>&1
|
||||
nohup python3 ~/.config/kinto/kintotray.py& >/dev/null 2>&1
|
||||
|
||||
echo -e "Adding xhost fix...\n"
|
||||
|
||||
LINE='xhost +SI:localuser:root'
|
||||
|
||||
if [ ! -e "~/.xprofile" ]; then
|
||||
# Ubuntu xhost fix
|
||||
echo "$LINE" > ~/.xprofile
|
||||
# echo "$LINE" > ~/.xinitrc
|
||||
fi
|
||||
# Ubuntu xhost fix
|
||||
grep -qF -- "$LINE" ~/.xprofile || echo "$LINE" >> ~/.xprofile
|
||||
# KDE xhost fix
|
||||
# grep -qF -- "$LINE" ~/.bashrc || echo "$LINE" >> ~/.bashrc
|
||||
# grep -qF -- "$LINE" ~/.xinitrc || echo "$LINE" >> ~/.xinitrc
|
||||
|
||||
# remove kintox11 login startup
|
||||
if test -f "~/.config/autostart/kinto.desktop"; then
|
||||
rm ~/.config/autostart/kinto.desktop
|
||||
fi
|
||||
|
||||
echo -e "Kinto install is \e[1m\e[32mcomplete\e[0m.\n"
|
||||
if `sudo systemctl is-active --quiet xkeysnail`;then
|
||||
echo -e "Kinto \e[1m\e[32mxkeysnail service is running\e[0m.\n"
|
||||
echo "Commands for controlling Kinto's xkeysnail service"
|
||||
echo "sudo systemctl restart xkeysnail"
|
||||
echo "sudo systemctl stop xkeysnail"
|
||||
echo "sudo systemctl start xkeysnail"
|
||||
echo "sudo systemctl status xkeysnail"
|
||||
else
|
||||
echo -e "Kinto \e[1m\e[91mxkeysnail service has failed.\e[0m"
|
||||
echo "You can run 'sudo systemctl status xkeysnail' for more info"
|
||||
echo "You can also run 'sudo journalctl -u xkeysnail'"
|
||||
fi
|
||||
echo ""
|
||||
if $vssublime ; then
|
||||
echo -e "\e[1m\e[32mEnabled\e[0m VS Code Sublime Text remap."
|
||||
fi
|
||||
if $rightalt ; then
|
||||
echo -e "\e[1m\e[32mEnabled\e[0m mutli-language support."
|
||||
fi
|
||||
|
||||
# trayApp
|
||||
|
||||
elif [[ $1 == "5" || $1 == "uninstall" || $1 == "Uninstall" ]]; then
|
||||
echo "Uninstalling Kinto - xkeysnail (udev)"
|
||||
uninstall
|
||||
removeAppleKB
|
||||
pkill -f kintotray >/dev/null 2>&1
|
||||
sudo systemctl stop xkeysnail >/dev/null 2>&1
|
||||
sudo systemctl disable xkeysnail >/dev/null 2>&1
|
||||
sudo rm /etc/sudoers.d/limitedadmins
|
||||
rm ~/.config/autostart/xkeysnail.desktop
|
||||
rm -rf ~/.config/kinto
|
||||
sudo rm /etc/systemd/system/xkeysnail.service >/dev/null 2>&1
|
||||
sudo rm /etc/systemd/system/graphical.target.wants/xkeysnail.service >/dev/null 2>&1
|
||||
sudo rm /usr/lib/systemd/system/xkeysnail.service >/dev/null 2>&1
|
||||
if [ -f /usr/local/bin/logoff.sh ];then
|
||||
sudo rm /usr/local/bin/logoff.sh
|
||||
fi
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl --state=not-found --all | grep xkeysnail
|
||||
budgieUninstall
|
||||
exit 0
|
||||
elif [[ $1 == "budgieUpdate" ]]; then
|
||||
budgieUpdate
|
||||
else
|
||||
echo "Expected argument was not provided"
|
||||
fi
|
@@ -1,57 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# chkconfig: 35 90 12
|
||||
# description: Kinto service
|
||||
#
|
||||
|
||||
# Get function from functions library
|
||||
# . /etc/init.d/functions
|
||||
|
||||
# Start the service
|
||||
start() {
|
||||
echo -n "Starting Kinto (xkeynsail)" | logger
|
||||
xkeycount=$(pgrep 'xkeysnail' | wc -l)
|
||||
|
||||
if [[ $xkeycount -eq 0 ]]; then
|
||||
/usr/bin/xhost +SI:localuser:root && script -q -c "xkeysnail --quiet --watch `echo $HOME`/.config/kinto/kinto.py" /dev/null | tee -a /tmp/kinto.log &
|
||||
### Create the lock file ###
|
||||
touch /var/lock/subsys/kinto
|
||||
success $"Kinto (xkeynsail) started"
|
||||
else
|
||||
echo "Kinto (xkeynsail) service is already running."
|
||||
fi
|
||||
|
||||
echo
|
||||
}
|
||||
|
||||
# Restart the service
|
||||
stop() {
|
||||
echo -n "Stopping Kinto (xkeynsail)" | logger
|
||||
sudo pkill -f bin/xkeysnail >/dev/null 2>&1
|
||||
### Now, delete the lock file ###
|
||||
rm -f /var/lock/subsys/kinto
|
||||
echo
|
||||
}
|
||||
|
||||
### main logic ###
|
||||
case "$1" in
|
||||
start)
|
||||
start
|
||||
;;
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
status)
|
||||
status
|
||||
;;
|
||||
restart|reload|condrestart)
|
||||
stop
|
||||
sleep 5
|
||||
start
|
||||
;;
|
||||
*)
|
||||
echo $"Usage: $0 {start|stop|restart|reload|status}"
|
||||
exit 1
|
||||
esac
|
||||
|
||||
exit 0
|
846
linux/kinto.py
@@ -1,846 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# autostart = true
|
||||
|
||||
import re
|
||||
from xkeysnail.transform import *
|
||||
|
||||
# Use the following for testing terminal keymaps
|
||||
# terminals = [ "", ... ]
|
||||
# xbindkeys -mk
|
||||
terminals = [
|
||||
"alacritty",
|
||||
"cutefish-terminal",
|
||||
"deepin-terminal",
|
||||
"eterm",
|
||||
"gnome-terminal",
|
||||
"guake",
|
||||
"hyper",
|
||||
"io.elementary.terminal",
|
||||
"kinto-gui.py",
|
||||
"kitty",
|
||||
"Kgx", # GNOME Console terminal app
|
||||
"konsole",
|
||||
"lxterminal",
|
||||
"mate-terminal",
|
||||
"org.gnome.Console",
|
||||
"roxterm",
|
||||
"qterminal",
|
||||
"st",
|
||||
"sakura",
|
||||
"station",
|
||||
"tabby",
|
||||
"terminator",
|
||||
"termite",
|
||||
"tilda",
|
||||
"tilix",
|
||||
"urxvt",
|
||||
"xfce4-terminal",
|
||||
"xterm",
|
||||
"yakuake"
|
||||
]
|
||||
terminals = [term.casefold() for term in terminals]
|
||||
termStr = "|".join(str('^'+x+'$') for x in terminals)
|
||||
|
||||
mscodes = ["code","vscodium"]
|
||||
codeStr = "|".join(str('^'+x+'$') for x in mscodes)
|
||||
|
||||
sublimes = ["Sublime_text","subl"]
|
||||
sublimeStr = "|".join(str('^'+x+'$') for x in sublimes)
|
||||
|
||||
# Add remote desktop clients & VM software here
|
||||
# Ideally we'd only exclude the client window,
|
||||
# but that may not be easily done.
|
||||
remotes = [
|
||||
"Gnome-boxes",
|
||||
"org.remmina.Remmina",
|
||||
"remmina",
|
||||
"qemu-system-.*",
|
||||
"qemu",
|
||||
"Spicy",
|
||||
"Virt-manager",
|
||||
"VirtualBox",
|
||||
"VirtualBox Machine",
|
||||
"xfreerdp",
|
||||
"Wfica",
|
||||
"Anydesk",
|
||||
]
|
||||
remotes = [client.casefold() for client in remotes]
|
||||
remotesStr = "|".join(str('^'+x+'$') for x in remotes)
|
||||
|
||||
# Add remote desktop clients & VMs for no remapping
|
||||
terminals.extend(remotes)
|
||||
mscodes.extend(remotes)
|
||||
|
||||
# Use for browser specific hotkeys
|
||||
browsers = [
|
||||
"Brave-browser",
|
||||
"Chromium",
|
||||
"Chromium-browser",
|
||||
"Discord",
|
||||
"Epiphany",
|
||||
"Firefox",
|
||||
"Firefox Developer Edition",
|
||||
"Navigator",
|
||||
"firefoxdeveloperedition",
|
||||
"Waterfox",
|
||||
"Google-chrome",
|
||||
"microsoft-edge",
|
||||
"microsoft-edge-dev",
|
||||
"org.deepin.browser",
|
||||
]
|
||||
browsers = [browser.casefold() for browser in browsers]
|
||||
browserStr = "|".join(str('^'+x+'$') for x in browsers)
|
||||
|
||||
chromes = [
|
||||
"Brave-browser",
|
||||
"Chromium",
|
||||
"Chromium-browser",
|
||||
"Google-chrome",
|
||||
"microsoft-edge",
|
||||
"microsoft-edge-dev",
|
||||
"org.deepin.browser",
|
||||
]
|
||||
chromes = [chrome.casefold() for chrome in chromes]
|
||||
chromeStr = "|".join(str('^'+x+'$') for x in chromes)
|
||||
|
||||
# edges = ["microsoft-edge-dev","microsoft-edge"]
|
||||
# edges = [edge.casefold() for edge in edges]
|
||||
# edgeStr = "|".join(str('^'+x+'$') for x in edges)
|
||||
|
||||
define_multipurpose_modmap(
|
||||
# {Key.ENTER: [Key.ENTER, Key.RIGHT_CTRL] # Enter2Cmd
|
||||
# {Key.CAPSLOCK: [Key.ESC, Key.RIGHT_CTRL] # Caps2Esc
|
||||
# {Key.LEFT_META: [Key.ESC, Key.RIGHT_CTRL] # Caps2Esc - Chromebook
|
||||
{ # Placeholder
|
||||
})
|
||||
|
||||
# Fix for avoiding modmapping when using Synergy keyboard/mouse sharing.
|
||||
# Synergy doesn't set a wm_class, so this may cause issues with other
|
||||
# applications that also don't set the wm_class.
|
||||
# Enable only if you use Synergy.
|
||||
# define_conditional_modmap(lambda wm_class: wm_class == '', {})
|
||||
|
||||
# [Global modemap] Change modifier keys as in xmodmap
|
||||
define_conditional_modmap(lambda wm_class: wm_class.casefold() not in terminals,{
|
||||
|
||||
# Key.CAPSLOCK: Key.RIGHT_CTRL, # Caps2Cmd
|
||||
# Key.LEFT_META: Key.RIGHT_CTRL, # Caps2Cmd - Chromebook
|
||||
|
||||
# - IBM
|
||||
# Key.LEFT_ALT: Key.RIGHT_CTRL, # IBM
|
||||
# Key.LEFT_CTRL: Key.LEFT_ALT, # IBM
|
||||
# Key.CAPSLOCK: Key.LEFT_META, # IBM
|
||||
# Key.RIGHT_ALT: Key.RIGHT_CTRL, # IBM - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.RIGHT_ALT, # IBM - Multi-language (Remove)
|
||||
|
||||
# - Chromebook
|
||||
# Key.LEFT_ALT: Key.RIGHT_CTRL, # Chromebook
|
||||
# Key.LEFT_CTRL: Key.LEFT_ALT, # Chromebook
|
||||
# Key.RIGHT_ALT: Key.RIGHT_CTRL, # Chromebook - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.RIGHT_ALT, # Chromebook - Multi-language (Remove)
|
||||
|
||||
# - Default Mac/Win
|
||||
# - Default Win
|
||||
# Key.LEFT_ALT: Key.RIGHT_CTRL, # WinMac
|
||||
# Key.LEFT_META: Key.LEFT_ALT, # WinMac
|
||||
# Key.LEFT_CTRL: Key.LEFT_META, # WinMac
|
||||
# Key.RIGHT_ALT: Key.RIGHT_CTRL, # WinMac - Multi-language (Remove)
|
||||
# Key.RIGHT_META: Key.RIGHT_ALT, # WinMac - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.RIGHT_META, # WinMac - Multi-language (Remove)
|
||||
|
||||
# - Mac Only
|
||||
# Key.LEFT_META: Key.RIGHT_CTRL, # Mac
|
||||
# Key.LEFT_CTRL: Key.LEFT_META, # Mac
|
||||
# Key.RIGHT_META: Key.RIGHT_CTRL, # Mac - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.RIGHT_META, # Mac - Multi-language (Remove)
|
||||
})
|
||||
|
||||
# [Conditional modmap] Change modifier keys in certain applications
|
||||
define_conditional_modmap(re.compile(termStr, re.IGNORECASE), {
|
||||
# - IBM
|
||||
# Key.LEFT_ALT: Key.RIGHT_CTRL, # IBM
|
||||
# # Left Ctrl Stays Left Ctrl
|
||||
# Key.CAPSLOCK: Key.LEFT_ALT, # IBM
|
||||
# Key.RIGHT_ALT: Key.RIGHT_CTRL, # IBM - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.RIGHT_ALT, # IBM
|
||||
# # Right Meta does not exist on chromebooks
|
||||
|
||||
# Key.RIGHT_ALT: Key.RIGHT_CTRL, # IBM - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.RIGHT_ALT, # IBM - Multi-language (Remove)
|
||||
|
||||
# - Chromebook
|
||||
# Key.LEFT_ALT: Key.RIGHT_CTRL, # Chromebook
|
||||
# # Left Ctrl Stays Left Ctrl
|
||||
# Key.LEFT_META: Key.LEFT_ALT, # Chromebook
|
||||
# Key.RIGHT_ALT: Key.RIGHT_CTRL, # Chromebook - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.RIGHT_ALT, # Chromebook
|
||||
# # Right Meta does not exist on chromebooks
|
||||
|
||||
# - Default Mac/Win
|
||||
# - Default Win
|
||||
# Key.LEFT_ALT: Key.RIGHT_CTRL, # WinMac
|
||||
# Key.LEFT_META: Key.LEFT_ALT, # WinMac
|
||||
# Key.LEFT_CTRL: Key.LEFT_CTRL, # WinMac
|
||||
# Key.RIGHT_ALT: Key.RIGHT_CTRL, # WinMac - Multi-language (Remove)
|
||||
# Key.RIGHT_META: Key.RIGHT_ALT, # WinMac - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.LEFT_CTRL, # WinMac - Multi-language (Remove)
|
||||
|
||||
# - Mac Only
|
||||
# Key.LEFT_META: Key.RIGHT_CTRL, # Mac
|
||||
# # Left Ctrl Stays Left Ctrl
|
||||
# Key.RIGHT_META: Key.RIGHT_CTRL, # Mac - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.LEFT_CTRL, # Mac - Multi-language (Remove)
|
||||
})
|
||||
|
||||
# Keybindings for IntelliJ
|
||||
define_keymap(re.compile("^jetbrains-(?!.*toolbox).*$", re.IGNORECASE),{
|
||||
# General
|
||||
K("C-Key_0"): K("Alt-Key_0"), # Open corresponding tool window
|
||||
K("C-Key_1"): K("Alt-Key_1"), # Open corresponding tool window
|
||||
K("C-Key_2"): K("Alt-Key_2"), # Open corresponding tool window
|
||||
K("C-Key_3"): K("Alt-Key_3"), # Open corresponding tool window
|
||||
K("C-Key_4"): K("Alt-Key_4"), # Open corresponding tool window
|
||||
K("C-Key_5"): K("Alt-Key_5"), # Open corresponding tool window
|
||||
K("C-Key_6"): K("Alt-Key_6"), # Open corresponding tool window
|
||||
K("C-Key_7"): K("Alt-Key_7"), # Open corresponding tool window
|
||||
K("C-Key_8"): K("Alt-Key_8"), # Open corresponding tool window
|
||||
K("C-Key_9"): K("Alt-Key_9"), # Open corresponding tool window
|
||||
K("Super-Grave"): K("C-Grave"), # Quick switch current scheme
|
||||
K("C-Comma"): K("C-Alt-s"), # Open Settings dialog
|
||||
K("C-Semicolon"): K("C-Alt-Shift-s"), # Open Project Structure dialog
|
||||
# Debugging
|
||||
K("C-Alt-r"): K("F9"), # Resume program
|
||||
# Search/Replace
|
||||
K("C-g"): K("F3"), # Find next
|
||||
K("C-Shift-F3"): K("Shift-F3"), # Find previous
|
||||
K("Super-g"): K("Alt-j"), # Select next occurrence
|
||||
K("C-Super-g"): K("C-Alt-Shift-j"), # Select all occurrences
|
||||
K("Super-Shift-g"): K("Alt-Shift-j"), # Unselect occurrence
|
||||
# Editing
|
||||
K("Super-Space"): K("LC-Space"), # Basic code completion
|
||||
K("Super-Shift-Space"): K("LC-Shift-Space"),# Smart code completion
|
||||
K("Super-j"): K("C-q"), # Quick documentation lookup
|
||||
K("C-n"): K("Alt-Insert"), # Generate code...
|
||||
K("Super-o"): K("C-o"), # Override methods
|
||||
K("Super-i"): K("C-i"), # Implement methods
|
||||
K("Alt-Up"): K("C-w"), # Extend selection
|
||||
K("Alt-Down"): K("C-Shift-w"), # Shrink selection
|
||||
K("Super-Shift-q"): K("Alt-q"), # Context info
|
||||
K("Super-Alt-o"): K("C-Alt-o"), # Optimize imports
|
||||
K("Super-Alt-i"): K("C-Alt-i"), # Auto-indent line(s)
|
||||
K("C-Backspace"): K("C-y"), # Delete line at caret
|
||||
K("Super-Shift-j"): K("C-Shift-j"), # Smart line join
|
||||
K("Alt-Delete"): K("C-Delete"), # Delete to word end
|
||||
K("Alt-Backspace"): K("C-Backspace"), # Delete to word start
|
||||
K("C-Shift-Equal"): K("C-KPPLUS"), # Expand code block
|
||||
K("C-Minus"): K("C-KPMINUS"), # Collapse code block
|
||||
K("C-Shift-Equal"): K("C-Shift-KPPLUS"), # Expand all
|
||||
K("C-Shift-Minus"): K("C-Shift-KPMINUS"), # Collapse all
|
||||
K("C-w"): K("C-F4"), # Close active editor tab
|
||||
# Refactoring
|
||||
K("C-Delete"): K("Alt-Delete"), # Safe Delete
|
||||
K("C-T"): K("C-Alt-Shift-t"), # Refactor this
|
||||
# Navigation
|
||||
K("C-o"): K("C-n"), # Go to class
|
||||
K("C-Shift-o"): K("C-Shift-n"), # Go to file
|
||||
K("C-Alt-o"): K("C-Alt-Shift-n"), # Go to symbol
|
||||
K("Super-Right"): K("Alt-Right"), # Go to next editor tab
|
||||
K("Super-Left"): K("Alt-Left"), # Go to previous editor tab
|
||||
K("C-l"): K("C-g"), # Go to line
|
||||
K("Alt-Space"): K("C-Shift-i"), # Open quick definition lookup
|
||||
K("C-Y"): K("C-Shift-i"), # Open quick definition lookup
|
||||
K("Super-Shift-b"): K("C-Shift-b"), # Go to type declaration
|
||||
K("Super-Up"): K("Alt-Up"), # Go to previous
|
||||
K("Super-Down"): K("Alt-Down"), # Go to next method
|
||||
K("Super-h"): K("C-h"), # Type hierarchy
|
||||
K("Super-Alt-h"): K("C-Alt-h"), # Call hierarchy
|
||||
K("C-Down"): K("C-Enter"), # Edit source/View source
|
||||
K("Alt-Home"): K("Alt-Home"), # Show navigation bar
|
||||
K("F2"): K("F11"), # Toggle bookmark
|
||||
K("Super-F3"): K("C-F11"), # Toggle bookmark with mnemonic
|
||||
K("Super-Key_0"): K("C-Key_0"), # Go to numbered bookmark
|
||||
K("Super-Key_1"): K("C-Key_1"), # Go to numbered bookmark
|
||||
K("Super-Key_2"): K("C-Key_2"), # Go to numbered bookmark
|
||||
K("Super-Key_3"): K("C-Key_3"), # Go to numbered bookmark
|
||||
K("Super-Key_4"): K("C-Key_4"), # Go to numbered bookmark
|
||||
K("Super-Key_5"): K("C-Key_5"), # Go to numbered bookmark
|
||||
K("Super-Key_6"): K("C-Key_6"), # Go to numbered bookmark
|
||||
K("Super-Key_7"): K("C-Key_7"), # Go to numbered bookmark
|
||||
K("Super-Key_8"): K("C-Key_8"), # Go to numbered bookmark
|
||||
K("Super-Key_9"): K("C-Key_9"), # Go to numbered bookmark
|
||||
K("C-F3"): K("Shift-F11"), # Show bookmarks
|
||||
# Compile and Run
|
||||
K("Super-Alt-r"): K("Alt-Shift-F10"), # Select configuration and run
|
||||
K("Super-Alt-d"): K("Alt-Shift-F9"), # Select configuration and debug
|
||||
K("Super-r"): K("Shift-F10"), # Run
|
||||
K("Super-d"): K("Shift-F9"), # Debug
|
||||
K("Super-Shift-r"): K("C-Shift-F10"), # Run context configuration from editor
|
||||
K("Super-Shift-d"): K("C-Shift-F9"), # Debug context configuration from editor
|
||||
# VCS/Local History
|
||||
K("Super-v"): K("Alt-Grave"), # VCS quick popup
|
||||
K("Super-c"): K("LC-c"), # Sigints - interrupt
|
||||
},"Jetbrains")
|
||||
|
||||
##############################################
|
||||
### START OF FILE MANAGER GROUP OF KEYMAPS ###
|
||||
##############################################
|
||||
|
||||
# Keybindings overrides for Caja
|
||||
# (overrides some bindings from general file manager code block below)
|
||||
define_keymap(re.compile("^caja$", re.IGNORECASE),{
|
||||
# K("RC-Super-o"): K("RC-Shift-Enter"), # Open in new tab
|
||||
K("RC-Super-o"): K("RC-Shift-W"), # Open in new window
|
||||
},"Overrides for Caja - Finder Mods")
|
||||
|
||||
# Keybindings overrides for DDE (Deepin) File Manager
|
||||
# (overrides some bindings from general file manager code block below)
|
||||
define_keymap(re.compile("^dde-file-manager$", re.IGNORECASE),{
|
||||
K("RC-i"): K("RC-i"), # File properties dialog (Get Info)
|
||||
K("RC-comma"): None, # Disable preferences shortcut (no shortcut available)
|
||||
K("RC-Up"): K("RC-Up"), # Go Up dir
|
||||
K("RC-Shift-Left_Brace"): K("C-Shift-Tab"), # Go to prior tab
|
||||
K("RC-Shift-Right_Brace"): K("C-Tab"), # Go to next tab
|
||||
K("RC-Shift-Left"): K("C-Shift-Tab"), # Go to prior tab
|
||||
K("RC-Shift-Right"): K("C-Tab"), # Go to next tab
|
||||
},"Overrides for DDE File Manager - Finder Mods")
|
||||
|
||||
# Keybindings overrides for Dolphin
|
||||
# (overrides some bindings from general file manager code block below)
|
||||
define_keymap(re.compile("^dolphin$", re.IGNORECASE),{
|
||||
K("RC-KEY_2"): K("C-KEY_3"), # View as List (Detailed)
|
||||
K("RC-KEY_3"): K("C-KEY_2"), # View as List (Compact)
|
||||
##########################################################################################
|
||||
### "Open in new window" requires manually setting custom shortcut of Ctrl+Shift+o
|
||||
### in Dolphin's keyboard shortcuts. There is no default shortcut set for this function.
|
||||
##########################################################################################
|
||||
### "Open in new tab" requires manually setting custom shortcut of Ctrl+Shift+o in
|
||||
### Dolphin's keyboard shortcuts. There is no default shortcut set for this function.
|
||||
##########################################################################################
|
||||
K("RC-Super-o"): K("RC-Shift-o"), # Open in new window (or new tab, user's choice, see above)
|
||||
K("RC-Shift-N"): K("F10"), # Create new folder
|
||||
K("RC-comma"): K("RC-Shift-comma"), # Open preferences dialog
|
||||
},"Overrides for Dolphin - Finder Mods")
|
||||
|
||||
# Keybindings overrides for elementary OS Files (Pantheon)
|
||||
# (overrides some bindings from general file manager code block below)
|
||||
define_keymap(re.compile("^io.elementary.files$", re.IGNORECASE),{
|
||||
# K("RC-Super-o"): K("Shift-Enter"), # Open folder in new tab
|
||||
K("RC-comma"): None, # Disable preferences shortcut since none available
|
||||
},"Overrides for Pantheon - Finder Mods")
|
||||
|
||||
# Keybindings overrides for Nautilus
|
||||
# (overrides some bindings from general file manager code block below)
|
||||
define_keymap(re.compile("^org.gnome.nautilus$|^nautilus$", re.IGNORECASE),{
|
||||
# K("RC-N"): K("C-Alt-Space"), # macOS Finder search window shortcut Cmd+Option+Space
|
||||
# For this ^^^^^^^^^^^ to work, a custom shortcut must be set up in the Settings app in GNOME
|
||||
# to run command: "nautilus --new-window /home/USER" [ replace "USER" ]
|
||||
K("RC-KEY_1"): K("C-KEY_2"), # View as Icons
|
||||
K("RC-KEY_2"): K("C-KEY_1"), # View as List (Detailed)
|
||||
K("RC-Super-o"): K("Shift-Enter"), # Open in new window
|
||||
# K("RC-Super-o"): K("RC-Enter"), # Open in new tab
|
||||
K("RC-comma"): K("RC-comma"), # Overrides "Open preferences dialog" shortcut below
|
||||
},"Overrides for Nautilus - Finder Mods")
|
||||
|
||||
# Keybindings overrides for PCManFM and PCManFM-Qt
|
||||
# (overrides some bindings from general file manager code block below)
|
||||
define_keymap(re.compile("^pcmanfm$|^pcmanfm-qt$", re.IGNORECASE),{
|
||||
K("RC-KEY_2"): K("C-KEY_4"), # View as List (Detailed) [Not in PCManFM-Qt]
|
||||
K("RC-Backspace"): [K("Delete"),K("Enter")], # Move to Trash (delete, bypass dialog)
|
||||
},"Overrides for PCManFM - Finder Mods")
|
||||
|
||||
# Keybindings overrides for SpaceFM
|
||||
# (overrides some bindings from general file manager code block below)
|
||||
define_keymap(re.compile("^spacefm$", re.IGNORECASE),{
|
||||
K("RC-Page_Up"): K("C-Shift-Tab"), # Go to prior tab
|
||||
K("RC-Page_Down"): K("C-Tab"), # Go to next tab
|
||||
K("RC-Shift-Left_Brace"): K("C-Shift-Tab"), # Go to prior tab
|
||||
K("RC-Shift-Right_Brace"): K("C-Tab"), # Go to next tab
|
||||
K("RC-Shift-Left"): K("C-Shift-Tab"), # Go to prior tab
|
||||
K("RC-Shift-Right"): K("C-Tab"), # Go to next tab
|
||||
K("RC-Shift-N"): K("RC-F"), # Create new folder is Ctrl+F by default
|
||||
K("RC-Backspace"): [K("Delete"),K("Enter")], # Move to Trash (delete, bypass dialog)
|
||||
K("RC-comma"): [K("Alt-V"),K("p")], # Overrides "Open preferences dialog" shortcut below
|
||||
# This shortcut ^^^^^^^^^^^^^^^ is not fully working in SpaceFM. Opens "View" menu but not Preferences.
|
||||
# SpaceFM seems to be doing some nasty binding that blocks things like Alt+Tab while the menu is open.
|
||||
},"Overrides for SpaceFM - Finder Mods")
|
||||
|
||||
# Keybindings overrides for Thunar
|
||||
# (overrides some bindings from general file manager code block below)
|
||||
define_keymap(re.compile("^thunar$", re.IGNORECASE),{
|
||||
K("RC-Super-o"): K("RC-Shift-P"), # Open in new tab
|
||||
K("RC-comma"): [K("Alt-E"),K("E")], # Overrides "Open preferences dialog" shortcut below
|
||||
},"Overrides for Thunar - Finder Mods")
|
||||
|
||||
filemanagers = [
|
||||
"caja",
|
||||
"cutefish-filemanager",
|
||||
"dde-file-manager",
|
||||
"dolphin",
|
||||
"io.elementary.files",
|
||||
"nautilus",
|
||||
"nemo",
|
||||
"org.gnome.nautilus",
|
||||
"pcmanfm",
|
||||
"pcmanfm-qt",
|
||||
"spacefm",
|
||||
"thunar",
|
||||
]
|
||||
filemanagers = [filemanager.casefold() for filemanager in filemanagers]
|
||||
filemanagerStr = "|".join(str('^'+x+'$') for x in filemanagers)
|
||||
|
||||
# Currently supported Linux file managers (file browsers):
|
||||
#
|
||||
# Caja File Browser (MATE file manager, fork of Nautilus)
|
||||
# DDE File Manager (Deepin Linux file manager)
|
||||
# Dolphin (KDE file manager)
|
||||
# Nautilus (GNOME file manager, may be named "Files")
|
||||
# Nemo (Cinnamon file manager, fork of Nautilus, may be named "Files")
|
||||
# Pantheon Files (elementary OS file manager, may be named "Files")
|
||||
# PCManFM (LXDE file manager)
|
||||
# PCManFM-Qt (LXQt file manager)
|
||||
# SpaceFM (Fork of PCManFM file manager)
|
||||
# Thunar File Manager (Xfce file manager)
|
||||
#
|
||||
# Keybindings for general Linux file managers group:
|
||||
define_keymap(re.compile(filemanagerStr, re.IGNORECASE),{
|
||||
###########################################################################################################
|
||||
### Show Properties (Get Info) | Open Settings/Preferences | Show/Hide hidden files ###
|
||||
###########################################################################################################
|
||||
K("RC-i"): K("Alt-Enter"), # File properties dialog (Get Info)
|
||||
K("RC-comma"): [K("Alt-E"),K("N")], # Open preferences dialog
|
||||
K("RC-Shift-dot"): K("RC-H"), # Show/hide hidden files ("dot" files)
|
||||
###########################################################################################################
|
||||
### Navigation ###
|
||||
###########################################################################################################
|
||||
K("RC-Left_Brace"): K("Alt-Left"), # Go Back
|
||||
K("RC-Right_Brace"): K("Alt-Right"), # Go Forward
|
||||
K("RC-Left"): K("Alt-Left"), # Go Back
|
||||
K("RC-Right"): K("Alt-Right"), # Go Forward
|
||||
K("RC-Up"): K("Alt-Up"), # Go Up dir
|
||||
# K("RC-Down"): K("Alt-Down"), # Go Down dir (only works on folders) [not universal]
|
||||
# K("RC-Down"): K("RC-O"), # Go Down dir (open folder/file) [not universal]
|
||||
K("RC-Down"): K("Enter"), # Go Down dir (open folder/file) [universal]
|
||||
K("RC-Shift-Left_Brace"): K("C-Page_Up"), # Go to prior tab
|
||||
K("RC-Shift-Right_Brace"): K("C-Page_Down"), # Go to next tab
|
||||
K("RC-Shift-Left"): K("C-Page_Up"), # Go to prior tab
|
||||
K("RC-Shift-Right"): K("C-Page_Down"), # Go to next tab
|
||||
###########################################################################################################
|
||||
### Open in New Window | Move to Trash | Duplicate file/folder ###
|
||||
###########################################################################################################
|
||||
K("RC-Super-o"): K("RC-Shift-o"), # Open in new window (or tab, depends on FM setup) [not universal]
|
||||
K("RC-Backspace"): K("Delete"), # Move to Trash (delete)
|
||||
# K("RC-D"): [K("RC-C"),K("RC-V")], # Duplicate file/folder (Copy, then Paste) [conflicts with "Add Bookmark"]
|
||||
###########################################################################################################
|
||||
### To enable renaming files with the Enter key, uncomment the two keymapping lines just below this. ###
|
||||
### Use Ctrl+Shift+Enter to escape or activate text fields such as "[F]ind" and "[L]ocation" fields. ###
|
||||
###########################################################################################################
|
||||
# K("Enter"): K("F2"), # Rename with Enter key
|
||||
# K("RC-Shift-Enter"): K("Enter"), # Remap alternative "Enter" key to easily activate/exit text fields
|
||||
# K("RC-Shift-Enter"): K("F2"), # Rename with Cmd+Shift+Enter
|
||||
},"General File Managers - Finder Mods")
|
||||
|
||||
############################################
|
||||
### END OF FILE MANAGER GROUP OF KEYMAPS ###
|
||||
############################################
|
||||
|
||||
# Open preferences in browsers
|
||||
define_keymap(re.compile("^Firefox$", re.IGNORECASE),{
|
||||
K("C-comma"): [
|
||||
K("C-T"),K("a"),K("b"),K("o"),K("u"),K("t"),
|
||||
K("Shift-SEMICOLON"),K("p"),K("r"),K("e"),K("f"),
|
||||
K("e"),K("r"),K("e"),K("n"),K("c"),K("e"),K("s"),K("Enter")
|
||||
],
|
||||
K("RC-Shift-N"): K("RC-Shift-P"), # Open private window with Ctrl+Shift+N like other browsers
|
||||
})
|
||||
|
||||
define_keymap(re.compile(chromeStr, re.IGNORECASE),{
|
||||
K("C-comma"): [K("Alt-e"), K("s"),K("Enter")], # Open preferences
|
||||
K("RC-q"): K("Alt-F4"), # Quit Chrome(s) browsers with Cmd+Q
|
||||
# K("RC-Left"): K("Alt-Left"), # Page nav: Back to prior page in history (conflict with wordwise)
|
||||
# K("RC-Right"): K("Alt-Right"), # Page nav: Forward to next page in history (conflict with wordwise)
|
||||
K("RC-Left_Brace"): K("Alt-Left"), # Page nav: Back to prior page in history
|
||||
K("RC-Right_Brace"): K("Alt-Right"), # Page nav: Forward to next page in history
|
||||
}, "Chrome Browsers")
|
||||
# Opera C-F12
|
||||
|
||||
# Keybindings for General Web Browsers
|
||||
define_keymap(re.compile(browserStr, re.IGNORECASE),{
|
||||
K("RC-Q"): K("RC-Q"), # Close all browsers Instances
|
||||
K("Alt-RC-I"): K("RC-Shift-I"), # Dev tools
|
||||
K("Alt-RC-J"): K("RC-Shift-J"), # Dev tools
|
||||
K("RC-Key_1"): K("Alt-Key_1"), # Jump to Tab #1-#8
|
||||
K("RC-Key_2"): K("Alt-Key_2"),
|
||||
K("RC-Key_3"): K("Alt-Key_3"),
|
||||
K("RC-Key_4"): K("Alt-Key_4"),
|
||||
K("RC-Key_5"): K("Alt-Key_5"),
|
||||
K("RC-Key_6"): K("Alt-Key_6"),
|
||||
K("RC-Key_7"): K("Alt-Key_7"),
|
||||
K("RC-Key_8"): K("Alt-Key_8"),
|
||||
K("RC-Key_9"): K("Alt-Key_9"), # Jump to last tab
|
||||
# Enable Cmd+Shift+Braces for tab navigation
|
||||
K("RC-Shift-Left_Brace"): K("C-Page_Up"), # Go to prior tab
|
||||
K("RC-Shift-Right_Brace"): K("C-Page_Down"), # Go to next tab
|
||||
# Enable Cmd+Option+Left/Right for tab navigation
|
||||
K("RC-Alt-Left"): K("C-Page_Up"), # Go to prior tab
|
||||
K("RC-Alt-Right"): K("C-Page_Down"), # Go to next tab
|
||||
# Enable Ctrl+PgUp/PgDn for tab navigation
|
||||
K("Super-Page_Up"): K("C-Page_Up"), # Go to prior tab
|
||||
K("Super-Page_Down"): K("C-Page_Down"), # Go to next tab
|
||||
# Use Cmd+Braces keys for tab navigation instead of page navigation
|
||||
# K("C-Left_Brace"): K("C-Page_Up"),
|
||||
# K("C-Right_Brace"): K("C-Page_Down"),
|
||||
}, "General Web Browsers")
|
||||
|
||||
define_keymap(re.compile("^ulauncher$", re.IGNORECASE),{
|
||||
K("RC-Key_1"): K("Alt-Key_1"), # Remap Ctrl+[1-9] and Ctrl+[a-z] to Alt+[1-9] and Alt+[a-z]
|
||||
K("RC-Key_2"): K("Alt-Key_2"),
|
||||
K("RC-Key_3"): K("Alt-Key_3"),
|
||||
K("RC-Key_4"): K("Alt-Key_4"),
|
||||
K("RC-Key_5"): K("Alt-Key_5"),
|
||||
K("RC-Key_6"): K("Alt-Key_6"),
|
||||
K("RC-Key_7"): K("Alt-Key_7"),
|
||||
K("RC-Key_8"): K("Alt-Key_8"),
|
||||
K("RC-Key_9"): K("Alt-Key_9"),
|
||||
K("RC-Key_0"): K("Alt-Key_0"),
|
||||
# K("RC-a"): K("Alt-a"),
|
||||
K("RC-b"): K("Alt-b"),
|
||||
# K("RC-c"): K("Alt-c"),
|
||||
K("RC-d"): K("Alt-d"),
|
||||
K("RC-e"): K("Alt-e"),
|
||||
K("RC-f"): K("Alt-f"),
|
||||
K("RC-g"): K("Alt-g"),
|
||||
K("RC-h"): K("Alt-h"),
|
||||
}, "Ulauncher")
|
||||
|
||||
# Note: terminals extends to remotes as well
|
||||
define_keymap(lambda wm_class: wm_class.casefold() not in terminals,{
|
||||
K("RC-Dot"): K("Esc"), # Mimic macOS Cmd+dot = Escape key (not in terminals)
|
||||
})
|
||||
|
||||
# Tab navigation overrides for apps that use Ctrl+Shift+Tab/Ctrl+Tab instead of Ctrl+PgUp/PgDn
|
||||
define_keymap(re.compile("^org.gnome.Console$|^Kgx$|^deepin-terminal$|^Angry*IP*Scanner$|^jDownloader$", re.IGNORECASE),{
|
||||
### Tab navigation
|
||||
K("RC-Shift-Left_Brace"): K("C-Shift-Tab"), # Tab nav: Go to prior tab (left)
|
||||
K("RC-Shift-Right_Brace"): K("C-Tab"), # Tab nav: Go to next tab (right)
|
||||
K("RC-Shift-Left"): K("C-Shift-Tab"), # Tab nav: Go to prior tab (left)
|
||||
K("RC-Shift-Right"): K("C-Tab"), # Tab nav: Go to next tab (right)
|
||||
},"Tab Navigation for apps that want Ctrl+Shift+Tab/Ctrl+Tab")
|
||||
|
||||
# Special overrides for terminals for shortcuts that conflict with General GUI block below.
|
||||
define_keymap(re.compile(termStr, re.IGNORECASE),{
|
||||
K("Alt-Backspace"): K("Alt-Shift-Backspace"), # Wordwise delete word left of cursor in terminals
|
||||
K("Alt-Delete"): [K("Esc"),K("d")], # Wordwise delete word right of cursor in terminals
|
||||
K("RC-Backspace"): K("C-u"), # Wordwise delete line left of cursor in terminals
|
||||
K("RC-Delete"): K("C-k"), # Wordwise delete line right of cursor in terminals
|
||||
### Tab navigation
|
||||
K("RC-Shift-Left"): K("C-Page_Up"), # Tab nav: Go to prior tab (Left)
|
||||
K("RC-Shift-Right"): K("C-Page_Down"), # Tab nav: Go to next tab (Right)
|
||||
},"Special overrides for terminals")
|
||||
|
||||
# None referenced here originally
|
||||
# - but remote clients and VM software ought to be set here
|
||||
# These are the typical remaps for ALL GUI based apps
|
||||
define_keymap(lambda wm_class: wm_class.casefold() not in remotes,{
|
||||
K("RC-Shift-Left_Brace"): K("C-Page_Up"), # Tab nav: Go to prior (left) tab
|
||||
K("RC-Shift-Right_Brace"): K("C-Page_Down"), # Tab nav: Go to next (right) tab
|
||||
K("RC-Space"): K("Alt-F1"), # Default SL - Launch Application Menu (gnome/kde)
|
||||
K("RC-F3"):K("Super-d"), # Default SL - Show Desktop (gnome/kde,eos)
|
||||
K("RC-Super-f"):K("Alt-F10"), # Default SL - Maximize app (gnome/kde)
|
||||
# K("RC-Super-f"): K("Super-Page_Up"), # SL - Toggle maximized window state (kde_neon)
|
||||
# K("Super-Right"):K("C-Alt-Right"), # Default SL - Change workspace (budgie)
|
||||
# K("Super-Left"):K("C-Alt-Left"), # Default SL - Change workspace (budgie)
|
||||
K("RC-Q"): K("Alt-F4"), # Default SL - not-popos
|
||||
K("RC-H"):K("Super-h"), # Default SL - Minimize app (gnome/budgie/popos/fedora)
|
||||
K("Alt-Tab"): pass_through_key, # Default - Cmd Tab - App Switching Default
|
||||
K("RC-Tab"): K("Alt-Tab"), # Default - Cmd Tab - App Switching Default
|
||||
K("RC-Shift-Tab"): K("Alt-Shift-Tab"), # Default - Cmd Tab - App Switching Default
|
||||
K("RC-Grave"): K("Alt-Grave"), # Default not-xfce4 - Cmd ` - Same App Switching
|
||||
K("RC-Shift-Grave"): K("Alt-Shift-Grave"), # Default not-xfce4 - Cmd ` - Same App Switching
|
||||
# K("RC-Grave"): K("Super-Tab"), # xfce4 Switch within app group
|
||||
# K("RC-Shift-Grave"): K("Super-Shift-Tab"), # xfce4 Switch within app group
|
||||
# K("Super-Right"):K("Super-Page_Up"), # SL - Change workspace (ubuntu/fedora)
|
||||
# K("Super-Left"):K("Super-Page_Down"), # SL - Change workspace (ubuntu/fedora)
|
||||
# K("Super-Right"):K("Super-C-Up"), # SL - Change workspace (popos)
|
||||
# K("Super-Left"):K("Super-C-Down"), # SL - Change workspace (popos)
|
||||
# K("RC-Q"):K("Super-q"), # SL - Close Apps (popos)
|
||||
# K("RC-Space"): K("Super-Space"), # SL - Launch Application Menu (eos)
|
||||
# K("RC-H"): K("Super-Page_Down"), # SL - Minimize app (kde_neon)
|
||||
# SL - Default SL - Change workspace (kde_neon)
|
||||
# K("RC-Space"): K("LC-Esc"), # SL- Launch Application Menu xfce4
|
||||
# K("RC-F3"):K("C-Alt-d"), # SL- Show Desktop xfce4
|
||||
# K("RC-LC-f"):K("Super-Up"), # SL- Maximize app eos
|
||||
# K("RC-LC-f"):K("Super-PAGE_UP"), # SL- Maximize app manjaro
|
||||
# Basic App hotkey functions
|
||||
# K("RC-H"):K("Alt-F9"), # SL - Minimize app xfce4
|
||||
# K("RC-LC-f"):K("Super-PAGE_DOWN"), # SL - Minimize app manjaro
|
||||
# In-App Tab switching
|
||||
# K("Alt-Tab"): K("C-Tab"), # Chromebook/IBM - In-App Tab switching
|
||||
# K("Alt-Shift-Tab"): K("C-Shift-Tab"), # Chromebook/IBM - In-App Tab switching
|
||||
# K("Alt-Grave") : K("C-Shift-Tab"), # Chromebook/IBM - In-App Tab switching
|
||||
K("Super-Tab"): K("LC-Tab"), # Default not-chromebook
|
||||
K("Super-Shift-Tab"): K("LC-Shift-Tab"), # Default not-chromebook
|
||||
|
||||
# Fn to Alt style remaps
|
||||
K("RAlt-Enter"): K("insert"), # Insert
|
||||
|
||||
# emacs style
|
||||
K("Super-a"): K("Home"), # Beginning of Line
|
||||
K("Super-e"): K("End"), # End of Line
|
||||
K("Super-b"): K("Left"),
|
||||
K("Super-f"): K("Right"),
|
||||
K("Super-n"): K("Down"),
|
||||
K("Super-p"): K("Up"),
|
||||
K("Super-k"): [K("Shift-End"), K("Backspace")],
|
||||
K("Super-d"): K("Delete"),
|
||||
|
||||
# K("Alt-RC-Space"): K(""), # Open Finder - Placeholder
|
||||
|
||||
# Wordwise
|
||||
K("RC-Left"): K("Home"), # Beginning of Line
|
||||
K("RC-Shift-Left"): K("Shift-Home"), # Select all to Beginning of Line
|
||||
K("RC-Right"): K("End"), # End of Line
|
||||
K("RC-Shift-Right"): K("Shift-End"), # Select all to End of Line
|
||||
# K("RC-Left"): K("C-LEFT_BRACE"), # Firefox-nw - Back
|
||||
# K("RC-Right"): K("C-RIGHT_BRACE"), # Firefox-nw - Forward
|
||||
# K("RC-Left"): K("Alt-LEFT"), # Chrome-nw - Back
|
||||
# K("RC-Right"): K("Alt-RIGHT"), # Chrome-nw - Forward
|
||||
K("RC-Up"): K("C-Home"), # Beginning of File
|
||||
K("RC-Shift-Up"): K("C-Shift-Home"), # Select all to Beginning of File
|
||||
K("RC-Down"): K("C-End"), # End of File
|
||||
K("RC-Shift-Down"): K("C-Shift-End"), # Select all to End of File
|
||||
# K("RAlt-Backspace"): K("Delete"), # Chromebook/IBM - Delete
|
||||
K("Super-Backspace"): K("C-Backspace"), # Delete Left Word of Cursor
|
||||
K("Super-Delete"): K("C-Delete"), # Delete Right Word of Cursor
|
||||
# K("LAlt-Backspace"): K("C-Backspace"), # Chromebook/IBM - Delete Left Word of Cursor
|
||||
K("Alt-Backspace"): K("C-Backspace"), # Default not-chromebook
|
||||
K("RC-Backspace"): K("C-Shift-Backspace"), # Delete Entire Line Left of Cursor
|
||||
K("Alt-Delete"): K("C-Delete"), # Delete Right Word of Cursor
|
||||
# K(""): pass_through_key, # cancel
|
||||
# K(""): K(""), #
|
||||
}, "General GUI")
|
||||
|
||||
define_keymap(lambda wm_class: wm_class.casefold() not in mscodes,{
|
||||
# Wordwise remaining - for Everything but VS Code
|
||||
K("Alt-Left"): K("C-Left"), # Left of Word
|
||||
K("Alt-Shift-Left"): K("C-Shift-Left"), # Select Left of Word
|
||||
K("Alt-Right"): K("C-Right"), # Right of Word
|
||||
K("Alt-Shift-Right"): K("C-Shift-Right"), # Select Right of Word
|
||||
K("Alt-Shift-g"): K("C-Shift-g"), # View source control
|
||||
# ** VS Code fix **
|
||||
# Electron issue precludes normal keybinding fix.
|
||||
# Alt menu auto-focus/toggle gets in the way.
|
||||
#
|
||||
# refer to ./xkeysnail-config/vscode_keybindings.json
|
||||
# **
|
||||
#
|
||||
# ** Firefox fix **
|
||||
# User will need to set "ui.key.menuAccessKeyFocuses"
|
||||
# under about:config to false.
|
||||
#
|
||||
# https://superuser.com/questions/770301/pentadactyl-how-to-disable-menu-bar-toggle-by-alt
|
||||
# **
|
||||
#
|
||||
}, "Wordwise - not vscode")
|
||||
|
||||
# Keybindings for VS Code
|
||||
define_keymap(re.compile(codeStr, re.IGNORECASE),{
|
||||
K("Super-Space"): K("LC-Space"), # Basic code completion
|
||||
# Override the global Cmd+Dot (Escape/cancel) shortcut
|
||||
K("RC-Dot"): K("RC-Dot"), # QuickFix
|
||||
# Wordwise remaining - for VS Code
|
||||
# Alt-F19 hack fixes Alt menu activation
|
||||
K("Alt-Left"): [K("Alt-F19"),K("C-Left")], # Left of Word
|
||||
K("Alt-Right"): [K("Alt-F19"),K("C-Right")], # Right of Word
|
||||
K("Alt-Shift-Left"): [K("Alt-F19"),K("C-Shift-Left")], # Select Left of Word
|
||||
K("Alt-Shift-Right"): [K("Alt-F19"),K("C-Shift-Right")], # Select Right of Word
|
||||
|
||||
# K("C-PAGE_DOWN"): pass_through_key, # cancel next_view
|
||||
# K("C-PAGE_UP"): pass_through_key, # cancel prev_view
|
||||
K("C-Alt-Left"): K("C-PAGE_UP"), # next_view
|
||||
K("C-Alt-Right"): K("C-PAGE_DOWN"), # prev_view
|
||||
K("RC-Shift-Left_Brace"): K("C-PAGE_UP"), # next_view
|
||||
K("RC-Shift-Right_Brace"): K("C-PAGE_DOWN"), # prev_view
|
||||
|
||||
# VS Code Shortcuts
|
||||
K("C-g"): pass_through_key, # cancel Go to Line...
|
||||
K("Super-g"): K("C-g"), # Go to Line...
|
||||
K("F3"): pass_through_key, # cancel Find next
|
||||
K("C-h"): pass_through_key, # cancel replace
|
||||
K("C-Alt-f"): K("C-h"), # replace
|
||||
K("C-Shift-h"): pass_through_key, # cancel replace_next
|
||||
K("C-Alt-e"): K("C-Shift-h"), # replace_next
|
||||
K("f3"): pass_through_key, # cancel find_next
|
||||
K("C-g"): K("f3"), # find_next
|
||||
K("Shift-f3"): pass_through_key, # cancel find_prev
|
||||
K("C-Shift-g"): K("Shift-f3"), # find_prev
|
||||
# K("Super-c"): K("LC-c"), # Default - Terminal - Sigint
|
||||
# K("Super-x"): K("LC-x"), # Default - Terminal - Exit nano
|
||||
# K("Alt-c"): K("LC-c"), # Chromebook/IBM - Terminal - Sigint
|
||||
# K("Alt-x"): K("LC-x"), # Chromebook/IBM - Terminal - Exit nano
|
||||
# K("Super-C-g"): K("C-f2"), # Default - Sublime - find_all_under
|
||||
# K("C-Alt-g"): K("C-f2"), # Chromebook/IBM - Sublime - find_all_under
|
||||
# K("Super-Shift-up"): K("Alt-Shift-up"), # multi-cursor up - Sublime
|
||||
# K("Super-Shift-down"): K("Alt-Shift-down"), # multi-cursor down - Sublime
|
||||
# K(""): pass_through_key, # cancel
|
||||
# K(""): K(""), #
|
||||
}, "Code")
|
||||
|
||||
# Keybindings for Sublime Text
|
||||
define_keymap(re.compile(sublimeStr, re.IGNORECASE),{
|
||||
# K("Super-c"): K("LC-c"), # Default - Terminal - Sigint
|
||||
# K("Super-x"): K("LC-x"), # Default - Terminal - Exit nano
|
||||
# K("Alt-c"): K("LC-c"), # Chromebook/IBM - Terminal - Sigint
|
||||
# K("Alt-x"): K("LC-x"), # Chromebook/IBM - Terminal - Exit nano
|
||||
K("Super-Space"): K("C-Space"), # Basic code completion
|
||||
K("C-Super-up"): K("Alt-o"), # Switch file
|
||||
K("Super-RC-f"): K("f11"), # toggle_full_screen
|
||||
K("C-Alt-v"): [K("C-k"), K("C-v")], # paste_from_history
|
||||
K("C-up"): pass_through_key, # cancel scroll_lines up
|
||||
K("C-Alt-up"): K("C-up"), # scroll_lines up
|
||||
K("C-down"): pass_through_key, # cancel scroll_lines down
|
||||
K("C-Alt-down"): K("C-down"), # scroll_lines down
|
||||
K("Super-Shift-up"): K("Alt-Shift-up"), # multi-cursor up
|
||||
K("Super-Shift-down"): K("Alt-Shift-down"), # multi-cursor down
|
||||
K("C-PAGE_DOWN"): pass_through_key, # cancel next_view
|
||||
K("C-PAGE_UP"): pass_through_key, # cancel prev_view
|
||||
K("C-Shift-left_brace"): K("C-PAGE_DOWN"), # next_view
|
||||
K("C-Shift-right_brace"): K("C-PAGE_UP"), # prev_view
|
||||
K("C-Alt-right"): K("C-PAGE_DOWN"), # next_view
|
||||
K("C-Alt-left"): K("C-PAGE_UP"), # prev_view
|
||||
K("insert"): pass_through_key, # cancel toggle_overwrite
|
||||
K("C-Alt-o"): K("insert"), # toggle_overwrite
|
||||
K("Alt-c"): pass_through_key, # cancel toggle_case_sensitive
|
||||
K("C-Alt-c"): K("Alt-c"), # toggle_case_sensitive
|
||||
K("C-h"): pass_through_key, # cancel replace
|
||||
K("C-Alt-f"): K("C-h"), # replace
|
||||
K("C-Shift-h"): pass_through_key, # cancel replace_next
|
||||
K("C-Alt-e"): K("C-Shift-h"), # replace_next
|
||||
K("f3"): pass_through_key, # cancel find_next
|
||||
K("C-g"): K("f3"), # find_next
|
||||
K("Shift-f3"): pass_through_key, # cancel find_prev
|
||||
K("C-Shift-g"): K("Shift-f3"), # find_prev
|
||||
K("C-f3"): pass_through_key, # cancel find_under
|
||||
K("Super-Alt-g"): K("C-f3"), # find_under
|
||||
K("C-Shift-f3"): pass_through_key, # cancel find_under_prev
|
||||
K("Super-Alt-Shift-g"): K("C-Shift-f3"), # find_under_prev
|
||||
K("Alt-f3"): pass_through_key, # Default - cancel find_all_under
|
||||
# K("Alt-Refresh"): pass_through_key, # Chromebook/IBM - cancel find_all_under
|
||||
# K("Alt-C-g"): K("Alt-Refresh"), # Chromebook/IBM - find_all_under
|
||||
K("Super-C-g"): K("Alt-f3"), # Default - find_all_under
|
||||
K("C-Shift-up"): pass_through_key, # cancel swap_line_up
|
||||
K("Super-Alt-up"): K("C-Shift-up"), # swap_line_up
|
||||
K("C-Shift-down"): pass_through_key, # cancel swap_line_down
|
||||
K("Super-Alt-down"): K("C-Shift-down"), # swap_line_down
|
||||
K("C-Pause"): pass_through_key, # cancel cancel_build
|
||||
K("Super-c"): K("C-Pause"), # cancel_build
|
||||
K("f9"): pass_through_key, # cancel sort_lines case_s false
|
||||
K("f5"): K("f9"), # sort_lines case_s false
|
||||
K("Super-f9"): pass_through_key, # cancel sort_lines case_s true
|
||||
K("Super-f5"): K("Super-f9"), # sort_lines case_s true
|
||||
K("Alt-Shift-Key_1"): pass_through_key, # cancel set_layout
|
||||
K("C-Alt-Key_1"): K("Alt-Shift-Key_1"), # set_layout
|
||||
K("Alt-Shift-Key_2"): pass_through_key, # cancel set_layout
|
||||
K("C-Alt-Key_2"): K("Alt-Shift-Key_2"), # set_layout
|
||||
K("Alt-Shift-Key_3"): pass_through_key, # cancel set_layout
|
||||
K("C-Alt-Key_3"): K("Alt-Shift-Key_3"), # set_layout
|
||||
K("Alt-Shift-Key_4"): pass_through_key, # cancel set_layout
|
||||
K("C-Alt-Key_4"): K("Alt-Shift-Key_4"), # set_layout
|
||||
K("Alt-Shift-Key_8"): pass_through_key, # cancel set_layout
|
||||
K("C-Alt-Shift-Key_2"): K("Alt-Shift-Key_8"), # set_layout
|
||||
K("Alt-Shift-Key_9"): pass_through_key, # cancel set_layout
|
||||
K("C-Alt-Shift-Key_3"): K("Alt-Shift-Key_9"), # set_layout
|
||||
K("Alt-Shift-Key_5"): pass_through_key, # cancel set_layout
|
||||
K("C-Alt-Shift-Key_5"): K("Alt-Shift-Key_5"), # set_layout
|
||||
# K(""): pass_through_key, # cancel
|
||||
# K(""): K(""), #
|
||||
}, "Sublime Text")
|
||||
|
||||
define_keymap(re.compile("^konsole$", re.IGNORECASE),{
|
||||
# Ctrl Tab - In App Tab Switching
|
||||
K("LC-Tab") : K("Shift-Right"),
|
||||
K("LC-Shift-Tab") : K("Shift-Left"),
|
||||
K("LC-Grave") : K("Shift-Left"),
|
||||
|
||||
}, "Konsole tab switching")
|
||||
|
||||
define_keymap(re.compile("^Io.elementary.terminal$|^kitty$", re.IGNORECASE),{
|
||||
# Ctrl Tab - In App Tab Switching
|
||||
K("LC-Tab") : K("LC-Shift-Right"),
|
||||
K("LC-Shift-Tab") : K("LC-Shift-Left"),
|
||||
K("LC-Grave") : K("LC-Shift-Left"),
|
||||
|
||||
}, "Elementary Terminal tab switching")
|
||||
|
||||
define_keymap(re.compile("^deepin-terminal$", re.IGNORECASE),{
|
||||
K("RC-w"): K("Alt-w"), # Close only current tab, instead of all other tabs
|
||||
K("RC-j"): None, # Block Cmd+J from remapping to vertical split (Ctrl+Shift+J)
|
||||
K("RC-minus"): K("C-minus"), # Decrease font size/zoom out
|
||||
K("RC-equal"): K("C-equal"), # Increase font size/zoom in
|
||||
},"Deepin Terminal fixes")
|
||||
|
||||
define_keymap(re.compile("alacritty", re.IGNORECASE),{
|
||||
K("RC-K"): K("C-L"), # clear log
|
||||
})
|
||||
|
||||
define_keymap(re.compile(termStr, re.IGNORECASE),{
|
||||
K("LC-RC-f"): K("Alt-F10"), # Toggle window maximized state
|
||||
# K("RC-Grave"): K("Super-Tab"), # xfce4 Switch within app group
|
||||
# K("RC-Shift-Grave"): K("Super-Shift-Tab"), # xfce4 Switch within app group
|
||||
# K("LC-Right"):K("C-Alt-Right"), # Default SL - Change workspace (budgie)
|
||||
# K("LC-Left"):K("C-Alt-Left"), # Default SL - Change workspace (budgie)
|
||||
# K("LC-Left"):K("C-Alt-End"), # SL - Change workspace xfce4
|
||||
# K("LC-Left"):K("Super-Left"), # SL - Change workspace eos
|
||||
# K("LC-Right"):K("C-Alt-Home"), # SL - Change workspace xfce4
|
||||
# K("LC-Right"):K("Super-Right"), # SL - Change workspace eos
|
||||
# K("LC-Right"):K("Super-Page_Up"), # SL - Change workspace (ubuntu/fedora)
|
||||
# K("LC-Left"):K("Super-Page_Down"), # SL - Change workspace (ubuntu/fedora)
|
||||
# K("LC-Right"):K("Super-C-Up"), # SL - Change workspace (popos)
|
||||
# K("LC-Left"):K("Super-C-Down"), # SL - Change workspace (popos)
|
||||
# Ctrl Tab - In App Tab Switching
|
||||
K("LC-Tab") : K("LC-PAGE_DOWN"),
|
||||
K("LC-Shift-Tab") : K("LC-PAGE_UP"),
|
||||
K("LC-Grave") : K("LC-PAGE_UP"),
|
||||
# K("Alt-Tab"): pass_through_key, # Default - Cmd Tab - App Switching Default
|
||||
# K("RC-Tab"): K("Alt-Tab"), # Default - Cmd Tab - App Switching Default
|
||||
# K("RC-Shift-Tab"): K("Alt-Shift-Tab"), # Default - Cmd Tab - App Switching Default
|
||||
# Converts Cmd to use Ctrl-Shift
|
||||
K("RC-MINUS"): K("C-MINUS"),
|
||||
K("RC-EQUAL"): K("C-Shift-EQUAL"),
|
||||
K("RC-BACKSPACE"): K("C-Shift-BACKSPACE"),
|
||||
K("RC-W"): K("C-Shift-W"),
|
||||
K("RC-E"): K("C-Shift-E"),
|
||||
K("RC-R"): K("C-Shift-R"),
|
||||
K("RC-T"): K("C-Shift-t"),
|
||||
K("RC-Y"): K("C-Shift-Y"),
|
||||
K("RC-U"): K("C-Shift-U"),
|
||||
K("RC-I"): K("C-Shift-I"),
|
||||
K("RC-O"): K("C-Shift-O"),
|
||||
K("RC-P"): K("C-Shift-P"),
|
||||
K("RC-LEFT_BRACE"): K("C-Shift-LEFT_BRACE"),
|
||||
K("RC-RIGHT_BRACE"): K("C-Shift-RIGHT_BRACE"),
|
||||
K("RC-Shift-Left_Brace"): K("C-Page_Up"), # Go to prior tab (Left)
|
||||
K("RC-Shift-Right_Brace"): K("C-Page_Down"), # Go to next tab (Right)
|
||||
K("RC-A"): K("C-Shift-A"),
|
||||
K("RC-S"): K("C-Shift-S"),
|
||||
K("RC-D"): K("C-Shift-D"),
|
||||
K("RC-F"): K("C-Shift-F"),
|
||||
K("RC-G"): K("C-Shift-G"),
|
||||
K("RC-H"): K("C-Shift-H"),
|
||||
K("RC-J"): K("C-Shift-J"),
|
||||
K("RC-K"): K("C-Shift-K"),
|
||||
K("RC-L"): K("C-Shift-L"),
|
||||
K("RC-SEMICOLON"): K("C-Shift-SEMICOLON"),
|
||||
K("RC-APOSTROPHE"): K("C-Shift-APOSTROPHE"),
|
||||
K("RC-GRAVE"): K("C-Shift-GRAVE"),
|
||||
K("RC-Z"): K("C-Shift-Z"),
|
||||
K("RC-X"): K("C-Shift-X"),
|
||||
K("RC-C"): K("C-Shift-C"),
|
||||
K("RC-V"): K("C-Shift-V"),
|
||||
K("RC-B"): K("C-Shift-B"),
|
||||
K("RC-N"): K("C-Shift-N"),
|
||||
K("RC-M"): K("C-Shift-M"),
|
||||
K("RC-COMMA"): K("C-Shift-COMMA"),
|
||||
K("RC-Dot"): K("LC-c"),
|
||||
K("RC-SLASH"): K("C-Shift-SLASH"),
|
||||
K("RC-KPASTERISK"): K("C-Shift-KPASTERISK"),
|
||||
}, "terminals")
|
@@ -1,14 +0,0 @@
|
||||
[Unit]
|
||||
Description=xkeysnail
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
KillMode=process
|
||||
ExecStart={sudo}/bin/bash -c '/usr/bin/xhost +SI:localuser:root && {homedir}/.config/kinto/killdups.sh && {xkeysnail} --quiet --watch {homedir}/.config/kinto/kinto.py'
|
||||
ExecStop={sudo}/bin/bash -c '{sudo}pkill -f bin/xkeysnail && exit 0'
|
||||
Restart=on-failure
|
||||
RestartSec=3
|
||||
Environment=DISPLAY={displayid}
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical.target
|
@@ -1,8 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Name=Kinto_xkey
|
||||
GenericName=Kinto_xkey
|
||||
Comment=Make Linux Type Like it's a Mac
|
||||
Exec=/bin/bash -c "grep -q 'autostart = true' {homedir}/.config/kinto/kinto.py && sudo -E /etc/init.d/kinto restart"
|
||||
Terminal=false
|
||||
Type=Application
|
||||
X-GNOME-Autostart-enabled=true
|
@@ -0,0 +1,705 @@
|
||||
[
|
||||
/*
|
||||
Custom macOS keymap for Kinto keymap
|
||||
*/
|
||||
{ "keys": ["ctrl+shift+n"], "command": "new_window" },
|
||||
{ "keys": ["ctrl+shift+w"], "command": "close_window" },
|
||||
{ "keys": ["ctrl+o"], "command": "prompt_open" },
|
||||
{ "keys": ["ctrl+shift+t"], "command": "reopen_last_file" },
|
||||
{ "keys": ["ctrl+super+up"], "command": "switch_file", "args": {"extensions": ["cpp", "cxx", "cc", "c", "hpp", "hxx", "hh", "h", "ipp", "inl", "m", "mm"]} },
|
||||
{ "keys": ["ctrl+n"], "command": "new_file" },
|
||||
{ "keys": ["ctrl+s"], "command": "save" },
|
||||
{ "keys": ["ctrl+shift+s"], "command": "prompt_save_as" },
|
||||
{ "keys": ["ctrl+super+s"], "command": "save_all" },
|
||||
{ "keys": ["ctrl+w"], "command": "close" },
|
||||
|
||||
{ "keys": ["ctrl+k", "ctrl+b"], "command": "toggle_side_bar" },
|
||||
{ "keys": ["ctrl+alt+f"], "command": "toggle_full_screen" },
|
||||
{ "keys": ["ctrl+alt+shift+f"], "command": "toggle_distraction_free" },
|
||||
|
||||
{ "keys": ["ctrl+z"], "command": "undo" },
|
||||
{ "keys": ["ctrl+shift+z"], "command": "redo" },
|
||||
{ "keys": ["ctrl+y"], "command": "redo_or_repeat" },
|
||||
{ "keys": ["ctrl+u"], "command": "soft_undo" },
|
||||
{ "keys": ["ctrl+shift+u"], "command": "soft_redo" },
|
||||
|
||||
{ "keys": ["ctrl+x"], "command": "cut" },
|
||||
{ "keys": ["ctrl+c"], "command": "copy" },
|
||||
{ "keys": ["ctrl+v"], "command": "paste" },
|
||||
{ "keys": ["ctrl+shift+v"], "command": "paste_and_indent" },
|
||||
{ "keys": ["ctrl+k", "ctrl+v"], "command": "paste_from_history" },
|
||||
{ "keys": ["ctrl+option+v"], "command": "paste_from_history" },
|
||||
|
||||
{ "keys": ["alt+super+left"], "command": "move", "args": {"by": "subwords", "forward": false} },
|
||||
{ "keys": ["alt+super+right"], "command": "move", "args": {"by": "subword_ends", "forward": true} },
|
||||
{ "keys": ["alt+super+shift+left"], "command": "move", "args": {"by": "subwords", "forward": false, "extend": true} },
|
||||
{ "keys": ["alt+super+shift+right"], "command": "move", "args": {"by": "subword_ends", "forward": true, "extend": true} },
|
||||
|
||||
{ "keys": ["alt+left"], "command": "move", "args": {"by": "subwords", "forward": false} },
|
||||
{ "keys": ["alt+right"], "command": "move", "args": {"by": "subword_ends", "forward": true} },
|
||||
{ "keys": ["alt+shift+left"], "command": "move", "args": {"by": "subwords", "forward": false, "extend": true} },
|
||||
{ "keys": ["alt+shift+right"], "command": "move", "args": {"by": "subword_ends", "forward": true, "extend": true} },
|
||||
|
||||
{ "keys": ["alt+super+up"], "command": "scroll_lines", "args": {"amount": 1.0} },
|
||||
{ "keys": ["alt+super+down"], "command": "scroll_lines", "args": {"amount": -1.0} },
|
||||
|
||||
{ "keys": ["alt+shift+up"], "command": "select_lines", "args": {"forward": false} },
|
||||
{ "keys": ["alt+shift+down"], "command": "select_lines", "args": {"forward": true} },
|
||||
|
||||
{ "keys": ["ctrl+shift+["], "command": "prev_view" },
|
||||
{ "keys": ["ctrl+shift+]"], "command": "next_view" },
|
||||
{ "keys": ["ctrl+super+left"], "command": "prev_view" },
|
||||
{ "keys": ["ctrl+super+right"], "command": "next_view" },
|
||||
|
||||
{ "keys": ["alt+tab"], "command": "next_view_in_stack" },
|
||||
{ "keys": ["alt+shift+tab"], "command": "prev_view_in_stack" },
|
||||
|
||||
{ "keys": ["ctrl+a"], "command": "select_all" },
|
||||
{ "keys": ["ctrl+shift+l"], "command": "split_selection_into_lines" },
|
||||
{ "keys": ["escape"], "command": "single_selection", "context":
|
||||
[
|
||||
{ "key": "num_selections", "operator": "not_equal", "operand": 1 }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "clear_fields", "context":
|
||||
[
|
||||
{ "key": "has_next_field", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "clear_fields", "context":
|
||||
[
|
||||
{ "key": "has_prev_field", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "hide_panel", "args": {"cancel": true},
|
||||
"context":
|
||||
[
|
||||
{ "key": "panel_visible", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "hide_overlay", "context":
|
||||
[
|
||||
{ "key": "overlay_visible", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "hide_popup", "context":
|
||||
[
|
||||
{ "key": "popup_visible", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "hide_auto_complete", "context":
|
||||
[
|
||||
{ "key": "auto_complete_visible", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["ctrl+]"], "command": "indent" },
|
||||
{ "keys": ["ctrl+["], "command": "unindent" },
|
||||
|
||||
{ "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": true} },
|
||||
{ "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": false},
|
||||
"context":
|
||||
[
|
||||
{ "key": "setting.tab_completion", "operator": "equal", "operand": true },
|
||||
{ "key": "preceding_text", "operator": "not_regex_match", "operand": ".*\\b[0-9]+$", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "replace_completion_with_next_completion", "context":
|
||||
[
|
||||
{ "key": "last_command", "operator": "equal", "operand": "insert_best_completion" },
|
||||
{ "key": "setting.tab_completion", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "reindent", "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_match", "operand": "^$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_match", "operand": "^$", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "indent", "context":
|
||||
[
|
||||
{ "key": "text", "operator": "regex_contains", "operand": "\n" }
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "next_field", "context":
|
||||
[
|
||||
{ "key": "has_next_field", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "commit_completion", "context":
|
||||
[
|
||||
{ "key": "auto_complete_visible" },
|
||||
{ "key": "setting.auto_complete_commit_on_tab" }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["shift+tab"], "command": "insert", "args": {"characters": "\t"} },
|
||||
{ "keys": ["shift+tab"], "command": "unindent", "context":
|
||||
[
|
||||
{ "key": "setting.shift_tab_unindent", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+tab"], "command": "unindent", "context":
|
||||
[
|
||||
{ "key": "preceding_text", "operator": "regex_match", "operand": "^[\t ]*" }
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+tab"], "command": "unindent", "context":
|
||||
[
|
||||
{ "key": "text", "operator": "regex_contains", "operand": "\n" }
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+tab"], "command": "prev_field", "context":
|
||||
[
|
||||
{ "key": "has_prev_field", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["ctrl+l"], "command": "expand_selection", "args": {"to": "line"} },
|
||||
{ "keys": ["ctrl+d"], "command": "find_under_expand" },
|
||||
{ "keys": ["ctrl+k", "ctrl+d"], "command": "find_under_expand_skip" },
|
||||
{ "keys": ["ctrl+shift+space"], "command": "expand_selection", "args": {"to": "scope"} },
|
||||
{ "keys": ["alt+shift+m"], "command": "expand_selection", "args": {"to": "brackets"} },
|
||||
{ "keys": ["alt+m"], "command": "move_to", "args": {"to": "brackets"} },
|
||||
{ "keys": ["ctrl+shift+j"], "command": "expand_selection", "args": {"to": "indentation"} },
|
||||
{ "keys": ["ctrl+shift+a"], "command": "expand_selection", "args": {"to": "tag"} },
|
||||
|
||||
{ "keys": ["ctrl+super+."], "command": "close_tag" },
|
||||
|
||||
{ "keys": ["alt+q"], "command": "toggle_record_macro" },
|
||||
{ "keys": ["alt+shift+q"], "command": "run_macro" },
|
||||
|
||||
{ "keys": ["ctrl+enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line.sublime-macro"} },
|
||||
{ "keys": ["ctrl+shift+enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line Before.sublime-macro"} },
|
||||
{ "keys": ["enter"], "command": "commit_completion", "context":
|
||||
[
|
||||
{ "key": "auto_complete_visible" },
|
||||
{ "key": "setting.auto_complete_commit_on_tab", "operand": false }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["ctrl+t"], "command": "show_overlay", "args": {"overlay": "goto", "show_files": true} },
|
||||
{ "keys": ["ctrl+p"], "command": "show_overlay", "args": {"overlay": "goto", "show_files": true} },
|
||||
{ "keys": ["ctrl+shift+p"], "command": "show_overlay", "args": {"overlay": "command_palette"} },
|
||||
{ "keys": ["ctrl+alt+p"], "command": "prompt_select_workspace" },
|
||||
{ "keys": ["ctrl+r"], "command": "show_overlay", "args": {"overlay": "goto", "text": "@"} },
|
||||
{ "keys": ["alt+g"], "command": "show_overlay", "args": {"overlay": "goto", "text": ":"} },
|
||||
{ "keys": ["f12"], "command": "goto_definition" },
|
||||
{ "keys": ["ctrl+super+down"], "command": "goto_definition" },
|
||||
{ "keys": ["ctrl+shift+r"], "command": "goto_symbol_in_project" },
|
||||
{ "keys": ["alt+minus"], "command": "jump_back" },
|
||||
{ "keys": ["alt+shift+minus"], "command": "jump_forward" },
|
||||
|
||||
{ "keys": ["ctrl+i"], "command": "show_panel", "args": {"panel": "incremental_find", "reverse": false} },
|
||||
{ "keys": ["ctrl+shift+i"], "command": "show_panel", "args": {"panel": "incremental_find", "reverse": true} },
|
||||
{ "keys": ["ctrl+f"], "command": "show_panel", "args": {"panel": "find", "reverse": false} },
|
||||
{ "keys": ["ctrl+super+f"], "command": "show_panel", "args": {"panel": "replace", "reverse": false} },
|
||||
{ "keys": ["ctrl+super+e"], "command": "replace_next" },
|
||||
{ "keys": ["ctrl+g"], "command": "find_next" },
|
||||
{ "keys": ["ctrl+shift+g"], "command": "find_prev" },
|
||||
{ "keys": ["ctrl+e"], "command": "slurp_find_string" },
|
||||
{ "keys": ["ctrl+shift+e"], "command": "slurp_replace_string" },
|
||||
|
||||
{ "keys": ["super+ctrl+g"], "command": "find_under" },
|
||||
{ "keys": ["shift+super+ctrl+g"], "command": "find_under_prev" },
|
||||
{ "keys": ["alt+ctrl+g"], "command": "find_all_under" },
|
||||
|
||||
{ "keys": ["ctrl+shift+f"], "command": "show_panel", "args": {"panel": "find_in_files"} },
|
||||
{ "keys": ["f4"], "command": "next_result" },
|
||||
{ "keys": ["shift+f4"], "command": "prev_result" },
|
||||
|
||||
{ "keys": ["f6"], "command": "toggle_setting", "args": {"setting": "spell_check"} },
|
||||
{ "keys": ["alt+f6"], "command": "next_misspelling" },
|
||||
{ "keys": ["alt+shift+f6"], "command": "prev_misspelling" },
|
||||
|
||||
{ "keys": ["alt+ctrl+up"], "command": "swap_line_up" },
|
||||
{ "keys": ["alt+ctrl+down"], "command": "swap_line_down" },
|
||||
|
||||
{ "keys": ["alt+backspace"], "command": "delete_word", "args": { "forward": false, "sub_words": true } },
|
||||
{ "keys": ["alt+delete"], "command": "delete_word", "args": { "forward": true, "sub_words": true } },
|
||||
|
||||
{ "keys": ["ctrl+forward_slash"], "command": "toggle_comment", "args": { "block": false } },
|
||||
{ "keys": ["ctrl+super+forward_slash"], "command": "toggle_comment", "args": { "block": true } },
|
||||
|
||||
{ "keys": ["ctrl+j"], "command": "join_lines" },
|
||||
{ "keys": ["ctrl+shift+d"], "command": "duplicate_line" },
|
||||
|
||||
{ "keys": ["alt+backquote"], "command": "show_panel", "args": {"panel": "console", "toggle": true} },
|
||||
|
||||
{ "keys": ["alt+space"], "command": "auto_complete" },
|
||||
{ "keys": ["alt+space"], "command": "replace_completion_with_auto_complete", "context":
|
||||
[
|
||||
{ "key": "last_command", "operator": "equal", "operand": "insert_best_completion" },
|
||||
{ "key": "auto_complete_visible", "operator": "equal", "operand": false },
|
||||
{ "key": "setting.tab_completion", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["ctrl+super+p"], "command": "show_scope_name" },
|
||||
{ "keys": ["alt+shift+p"], "command": "show_scope_name" },
|
||||
|
||||
{ "keys": ["f7"], "command": "build" },
|
||||
{ "keys": ["ctrl+b"], "command": "build" },
|
||||
{ "keys": ["ctrl+shift+b"], "command": "build", "args": {"select": true} },
|
||||
|
||||
{ "keys": ["alt+c"], "command": "cancel_build" },
|
||||
|
||||
{ "keys": ["alt+t"], "command": "transpose" },
|
||||
|
||||
{ "keys": ["f5"], "command": "sort_lines", "args": {"case_sensitive": false} },
|
||||
{ "keys": ["alt+f5"], "command": "sort_lines", "args": {"case_sensitive": true} },
|
||||
|
||||
// Auto-pair quotes
|
||||
{ "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\"$0\""}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "not_regex_contains", "operand": "[\"a-zA-Z0-9_]$", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\"${0:$SELECTION}\""}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["\""], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\"", "match_all": true },
|
||||
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\"$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\"", "match_all": true },
|
||||
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true },
|
||||
]
|
||||
},
|
||||
|
||||
// Auto-pair single quotes
|
||||
{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'$0'"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "not_regex_contains", "operand": "['a-zA-Z0-9_]$", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'${0:$SELECTION}'"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["'"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true },
|
||||
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "'$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true },
|
||||
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true },
|
||||
]
|
||||
},
|
||||
|
||||
// Auto-pair brackets
|
||||
{ "keys": ["("], "command": "insert_snippet", "args": {"contents": "($0)"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|;|\\}|$)", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["("], "command": "insert_snippet", "args": {"contents": "(${0:$SELECTION})"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": [")"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\)", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\($", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\)", "match_all": true }
|
||||
]
|
||||
},
|
||||
|
||||
// Auto-pair square brackets
|
||||
{ "keys": ["["], "command": "insert_snippet", "args": {"contents": "[$0]"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|;|\\}|$)", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["["], "command": "insert_snippet", "args": {"contents": "[${0:$SELECTION}]"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["]"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\]", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\[$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\]", "match_all": true }
|
||||
]
|
||||
},
|
||||
|
||||
// Auto-pair curly brackets
|
||||
{ "keys": ["{"], "command": "insert_snippet", "args": {"contents": "{$0}"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|$)", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["{"], "command": "wrap_block", "args": {"begin": "{", "end": "}"}, "context":
|
||||
[
|
||||
{ "key": "indented_block", "match_all": true },
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_match", "operand": "^$", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["{"], "command": "insert_snippet", "args": {"contents": "{${0:$SELECTION}}"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["}"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line in Braces.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line in Braces.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["enter"], "command": "auto_indent_tag", "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "selector", "operator": "equal", "operand": "punctuation.definition.tag.begin", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": ">$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^</", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "auto_indent_tag", "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "selector", "operator": "equal", "operand": "punctuation.definition.tag.begin", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": ">$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^</", "match_all": true },
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"keys": ["ctrl+super+1"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 1.0],
|
||||
"rows": [0.0, 1.0],
|
||||
"cells": [[0, 0, 1, 1]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["ctrl+super+2"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 0.5, 1.0],
|
||||
"rows": [0.0, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [1, 0, 2, 1]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["ctrl+super+3"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 0.33, 0.66, 1.0],
|
||||
"rows": [0.0, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["ctrl+super+4"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 0.25, 0.5, 0.75, 1.0],
|
||||
"rows": [0.0, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1], [3, 0, 4, 1]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["ctrl+super+shift+2"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 1.0],
|
||||
"rows": [0.0, 0.5, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [0, 1, 1, 2]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["ctrl+super+shift+3"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 1.0],
|
||||
"rows": [0.0, 0.33, 0.66, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [0, 1, 1, 2], [0, 2, 1, 3]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["ctrl+super+5"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 0.5, 1.0],
|
||||
"rows": [0.0, 0.5, 1.0],
|
||||
"cells":
|
||||
[
|
||||
[0, 0, 1, 1], [1, 0, 2, 1],
|
||||
[0, 1, 1, 2], [1, 1, 2, 2]
|
||||
]
|
||||
}
|
||||
},
|
||||
{ "keys": ["alt+1"], "command": "focus_group", "args": { "group": 0 } },
|
||||
{ "keys": ["alt+2"], "command": "focus_group", "args": { "group": 1 } },
|
||||
{ "keys": ["alt+3"], "command": "focus_group", "args": { "group": 2 } },
|
||||
{ "keys": ["alt+4"], "command": "focus_group", "args": { "group": 3 } },
|
||||
{ "keys": ["alt+5"], "command": "focus_group", "args": { "group": 4 } },
|
||||
{ "keys": ["alt+6"], "command": "focus_group", "args": { "group": 5 } },
|
||||
{ "keys": ["alt+7"], "command": "focus_group", "args": { "group": 6 } },
|
||||
{ "keys": ["alt+8"], "command": "focus_group", "args": { "group": 7 } },
|
||||
{ "keys": ["alt+9"], "command": "focus_group", "args": { "group": 8 } },
|
||||
{ "keys": ["alt+shift+1"], "command": "move_to_group", "args": { "group": 0 } },
|
||||
{ "keys": ["alt+shift+2"], "command": "move_to_group", "args": { "group": 1 } },
|
||||
{ "keys": ["alt+shift+3"], "command": "move_to_group", "args": { "group": 2 } },
|
||||
{ "keys": ["alt+shift+4"], "command": "move_to_group", "args": { "group": 3 } },
|
||||
{ "keys": ["alt+shift+5"], "command": "move_to_group", "args": { "group": 4 } },
|
||||
{ "keys": ["alt+shift+6"], "command": "move_to_group", "args": { "group": 5 } },
|
||||
{ "keys": ["alt+shift+7"], "command": "move_to_group", "args": { "group": 6 } },
|
||||
{ "keys": ["alt+shift+8"], "command": "move_to_group", "args": { "group": 7 } },
|
||||
{ "keys": ["alt+shift+9"], "command": "move_to_group", "args": { "group": 8 } },
|
||||
{ "keys": ["alt+0"], "command": "focus_side_bar" },
|
||||
|
||||
{ "keys": ["ctrl+k", "ctrl+up"], "command": "new_pane" },
|
||||
{ "keys": ["ctrl+k", "ctrl+shift+up"], "command": "new_pane", "args": {"move": false} },
|
||||
{ "keys": ["ctrl+k", "ctrl+down"], "command": "close_pane" },
|
||||
{ "keys": ["ctrl+k", "ctrl+left"], "command": "focus_neighboring_group", "args": {"forward": false} },
|
||||
{ "keys": ["ctrl+k", "ctrl+right"], "command": "focus_neighboring_group" },
|
||||
{ "keys": ["ctrl+k", "ctrl+shift+left"], "command": "move_to_neighboring_group", "args": {"forward": false} },
|
||||
{ "keys": ["ctrl+k", "ctrl+shift+right"], "command": "move_to_neighboring_group" },
|
||||
|
||||
{ "keys": ["ctrl+1"], "command": "select_by_index", "args": { "index": 0 } },
|
||||
{ "keys": ["ctrl+2"], "command": "select_by_index", "args": { "index": 1 } },
|
||||
{ "keys": ["ctrl+3"], "command": "select_by_index", "args": { "index": 2 } },
|
||||
{ "keys": ["ctrl+4"], "command": "select_by_index", "args": { "index": 3 } },
|
||||
{ "keys": ["ctrl+5"], "command": "select_by_index", "args": { "index": 4 } },
|
||||
{ "keys": ["ctrl+6"], "command": "select_by_index", "args": { "index": 5 } },
|
||||
{ "keys": ["ctrl+7"], "command": "select_by_index", "args": { "index": 6 } },
|
||||
{ "keys": ["ctrl+8"], "command": "select_by_index", "args": { "index": 7 } },
|
||||
{ "keys": ["ctrl+9"], "command": "select_by_index", "args": { "index": 8 } },
|
||||
{ "keys": ["ctrl+0"], "command": "select_by_index", "args": { "index": 9 } },
|
||||
|
||||
{ "keys": ["f2"], "command": "next_bookmark" },
|
||||
{ "keys": ["shift+f2"], "command": "prev_bookmark" },
|
||||
{ "keys": ["ctrl+f2"], "command": "toggle_bookmark" },
|
||||
{ "keys": ["ctrl+shift+f2"], "command": "clear_bookmarks" },
|
||||
{ "keys": ["super+f2"], "command": "select_all_bookmarks" },
|
||||
|
||||
{ "keys": ["ctrl+k", "ctrl+u"], "command": "upper_case" },
|
||||
{ "keys": ["ctrl+k", "ctrl+l"], "command": "lower_case" },
|
||||
{ "keys": ["ctrl+k", "ctrl+space"], "command": "set_mark" },
|
||||
{ "keys": ["ctrl+k", "ctrl+a"], "command": "select_to_mark" },
|
||||
{ "keys": ["ctrl+k", "ctrl+w"], "command": "delete_to_mark" },
|
||||
{ "keys": ["ctrl+k", "ctrl+x"], "command": "swap_with_mark" },
|
||||
{ "keys": ["ctrl+k", "ctrl+g"], "command": "clear_bookmarks", "args": {"name": "mark"} },
|
||||
|
||||
{ "keys": ["ctrl+equals"], "command": "increase_font_size" },
|
||||
{ "keys": ["ctrl+plus"], "command": "increase_font_size" },
|
||||
{ "keys": ["ctrl+minus"], "command": "decrease_font_size" },
|
||||
|
||||
{ "keys": ["alt+shift+w"], "command": "insert_snippet", "args": { "name": "Packages/XML/Snippets/long-tag.sublime-snippet" } },
|
||||
|
||||
{ "keys": ["alt+shift+k"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Line.sublime-macro"} },
|
||||
|
||||
{ "keys": ["ctrl+super+q"], "command": "wrap_lines" },
|
||||
|
||||
{ "keys": ["ctrl+super+["], "command": "fold" },
|
||||
{ "keys": ["ctrl+super+]"], "command": "unfold" },
|
||||
{ "keys": ["ctrl+k", "ctrl+1"], "command": "fold_by_level", "args": {"level": 1} },
|
||||
{ "keys": ["ctrl+k", "ctrl+2"], "command": "fold_by_level", "args": {"level": 2} },
|
||||
{ "keys": ["ctrl+k", "ctrl+3"], "command": "fold_by_level", "args": {"level": 3} },
|
||||
{ "keys": ["ctrl+k", "ctrl+4"], "command": "fold_by_level", "args": {"level": 4} },
|
||||
{ "keys": ["ctrl+k", "ctrl+5"], "command": "fold_by_level", "args": {"level": 5} },
|
||||
{ "keys": ["ctrl+k", "ctrl+6"], "command": "fold_by_level", "args": {"level": 6} },
|
||||
{ "keys": ["ctrl+k", "ctrl+7"], "command": "fold_by_level", "args": {"level": 7} },
|
||||
{ "keys": ["ctrl+k", "ctrl+8"], "command": "fold_by_level", "args": {"level": 8} },
|
||||
{ "keys": ["ctrl+k", "ctrl+9"], "command": "fold_by_level", "args": {"level": 9} },
|
||||
{ "keys": ["ctrl+k", "ctrl+0"], "command": "unfold_all" },
|
||||
{ "keys": ["ctrl+k", "ctrl+j"], "command": "unfold_all" },
|
||||
{ "keys": ["ctrl+k", "ctrl+t"], "command": "fold_tag_attributes" },
|
||||
|
||||
{ "keys": ["ctrl+super+o"], "command": "toggle_overwrite" },
|
||||
|
||||
{ "keys": ["super+f2"], "command": "context_menu" },
|
||||
|
||||
{ "keys": ["ctrl+super+c"], "command": "toggle_case_sensitive", "context":
|
||||
[
|
||||
{ "key": "setting.is_widget", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["ctrl+super+r"], "command": "toggle_regex", "context":
|
||||
[
|
||||
{ "key": "setting.is_widget", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["ctrl+super+w"], "command": "toggle_whole_word", "context":
|
||||
[
|
||||
{ "key": "setting.is_widget", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["ctrl+super+a"], "command": "toggle_preserve_case", "context":
|
||||
[
|
||||
{ "key": "setting.is_widget", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
|
||||
// Find panel key bindings
|
||||
{ "keys": ["enter"], "command": "find_next", "context":
|
||||
[{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "find_prev", "context":
|
||||
[{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["super+enter"], "command": "find_all", "args": {"close_panel": true},
|
||||
"context": [{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
|
||||
// Replace panel key bindings
|
||||
{ "keys": ["enter"], "command": "find_next", "context":
|
||||
[{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "find_prev", "context":
|
||||
[{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["super+enter"], "command": "find_all", "args": {"close_panel": true},
|
||||
"context": [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["alt+super+enter"], "command": "replace_all", "args": {"close_panel": true},
|
||||
"context": [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
|
||||
// Incremental find panel key bindings
|
||||
{ "keys": ["enter"], "command": "hide_panel", "context":
|
||||
[{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "find_prev", "context":
|
||||
[{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["super+enter"], "command": "find_all", "args": {"close_panel": true},
|
||||
"context": [{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
|
||||
{ "keys": ["ctrl+,"], "command": "edit_settings", "args":
|
||||
{
|
||||
"base_file": "${packages}/Default/Preferences.sublime-settings",
|
||||
"default": "// Settings in here override those in \"Default/Preferences.sublime-settings\",\n// and are overridden in turn by syntax-specific settings.\n{\n\t$0\n}\n"
|
||||
}
|
||||
},
|
||||
|
||||
{ "keys": ["ctrl+k", "ctrl+y"], "command": "yank" },
|
||||
{ "keys": ["ctrl+k", "ctrl+k"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard EOL.sublime-macro"} },
|
||||
{ "keys": ["ctrl+k", "ctrl+backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard BOL.sublime-macro"} },
|
||||
{ "keys": ["ctrl+k", "ctrl+c"], "command": "show_at_center" },
|
||||
|
||||
// These are OS X built in commands, and don't need to be listed here, but
|
||||
// doing so lets them show up in the menu
|
||||
{ "keys": ["alt+y"], "command": "yank" },
|
||||
{ "keys": ["ctrl+backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard BOL.sublime-macro"} },
|
||||
// ctrl+delete isn't a built in command, but makes sense anyway
|
||||
{ "keys": ["ctrl+delete"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard EOL.sublime-macro"} },
|
||||
{ "keys": ["alt+k"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard EOL.sublime-macro"} },
|
||||
{ "keys": ["alt+l"], "command": "show_at_center" },
|
||||
{ "keys": ["alt+o"], "command": "insert_snippet", "args": { "contents": "$0\n" } },
|
||||
{ "keys": ["alt+ctrl+d"], "command": "noop" },
|
||||
{ "keys": ["alt+ctrl+shift+d"], "command": "noop" },
|
||||
|
||||
// HTML, XML close tag
|
||||
{ "keys": ["/"], "command": "close_tag", "args": { "insert_slash": true }, "context":
|
||||
[
|
||||
{ "key": "selector", "operator": "equal", "operand": "(text.html, text.xml) - string - comment", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_match", "operand": ".*<$", "match_all": true },
|
||||
{ "key": "setting.auto_close_tags" }
|
||||
]
|
||||
}
|
||||
]
|
706
references/app-configs/sublime-text3/linux.sublime-keybinds.mac
Normal file
@@ -0,0 +1,706 @@
|
||||
/*
|
||||
On OS X, basic text manipulations (left, right, command+left, etc) make use of the system key bindings,
|
||||
and don't need to be repeated here. Anything listed here will take precedence, however.
|
||||
*/
|
||||
[
|
||||
{ "keys": ["ctrl+shift+n"], "command": "new_window" },
|
||||
{ "keys": ["ctrl+shift+w"], "command": "close_window" },
|
||||
{ "keys": ["ctrl+o"], "command": "prompt_open" },
|
||||
{ "keys": ["ctrl+shift+t"], "command": "reopen_last_file" },
|
||||
{ "keys": ["ctrl+super+up"], "command": "switch_file", "args": {"extensions": ["cpp", "cxx", "cc", "c", "hpp", "hxx", "hh", "h", "ipp", "inl", "m", "mm"]} },
|
||||
{ "keys": ["ctrl+n"], "command": "new_file" },
|
||||
{ "keys": ["ctrl+s"], "command": "save" },
|
||||
{ "keys": ["ctrl+shift+s"], "command": "prompt_save_as" },
|
||||
{ "keys": ["ctrl+super+s"], "command": "save_all" },
|
||||
{ "keys": ["ctrl+w"], "command": "close" },
|
||||
|
||||
{ "keys": ["ctrl+k", "ctrl+b"], "command": "toggle_side_bar" },
|
||||
{ "keys": ["ctrl+alt+f"], "command": "toggle_full_screen" },
|
||||
{ "keys": ["ctrl+alt+shift+f"], "command": "toggle_distraction_free" },
|
||||
|
||||
{ "keys": ["ctrl+z"], "command": "undo" },
|
||||
{ "keys": ["ctrl+shift+z"], "command": "redo" },
|
||||
{ "keys": ["ctrl+y"], "command": "redo_or_repeat" },
|
||||
{ "keys": ["ctrl+u"], "command": "soft_undo" },
|
||||
{ "keys": ["ctrl+shift+u"], "command": "soft_redo" },
|
||||
|
||||
{ "keys": ["ctrl+x"], "command": "cut" },
|
||||
{ "keys": ["ctrl+c"], "command": "copy" },
|
||||
{ "keys": ["ctrl+v"], "command": "paste" },
|
||||
{ "keys": ["ctrl+shift+v"], "command": "paste_and_indent" },
|
||||
{ "keys": ["ctrl+k", "ctrl+v"], "command": "paste_from_history" },
|
||||
{ "keys": ["ctrl+option+v"], "command": "paste_from_history" },
|
||||
|
||||
{ "keys": ["alt+super+left"], "command": "move", "args": {"by": "subwords", "forward": false} },
|
||||
{ "keys": ["alt+super+right"], "command": "move", "args": {"by": "subword_ends", "forward": true} },
|
||||
{ "keys": ["alt+super+shift+left"], "command": "move", "args": {"by": "subwords", "forward": false, "extend": true} },
|
||||
{ "keys": ["alt+super+shift+right"], "command": "move", "args": {"by": "subword_ends", "forward": true, "extend": true} },
|
||||
|
||||
{ "keys": ["alt+left"], "command": "move", "args": {"by": "subwords", "forward": false} },
|
||||
{ "keys": ["alt+right"], "command": "move", "args": {"by": "subword_ends", "forward": true} },
|
||||
{ "keys": ["alt+shift+left"], "command": "move", "args": {"by": "subwords", "forward": false, "extend": true} },
|
||||
{ "keys": ["alt+shift+right"], "command": "move", "args": {"by": "subword_ends", "forward": true, "extend": true} },
|
||||
|
||||
{ "keys": ["alt+super+up"], "command": "scroll_lines", "args": {"amount": 1.0} },
|
||||
{ "keys": ["alt+super+down"], "command": "scroll_lines", "args": {"amount": -1.0} },
|
||||
|
||||
{ "keys": ["alt+shift+up"], "command": "select_lines", "args": {"forward": false} },
|
||||
{ "keys": ["alt+shift+down"], "command": "select_lines", "args": {"forward": true} },
|
||||
|
||||
{ "keys": ["ctrl+shift+["], "command": "prev_view" },
|
||||
{ "keys": ["ctrl+shift+]"], "command": "next_view" },
|
||||
{ "keys": ["ctrl+super+left"], "command": "prev_view" },
|
||||
{ "keys": ["ctrl+super+right"], "command": "next_view" },
|
||||
|
||||
{ "keys": ["alt+tab"], "command": "next_view_in_stack" },
|
||||
{ "keys": ["alt+shift+tab"], "command": "prev_view_in_stack" },
|
||||
|
||||
{ "keys": ["ctrl+a"], "command": "select_all" },
|
||||
{ "keys": ["ctrl+shift+l"], "command": "split_selection_into_lines" },
|
||||
{ "keys": ["escape"], "command": "single_selection", "context":
|
||||
[
|
||||
{ "key": "num_selections", "operator": "not_equal", "operand": 1 }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "clear_fields", "context":
|
||||
[
|
||||
{ "key": "has_next_field", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "clear_fields", "context":
|
||||
[
|
||||
{ "key": "has_prev_field", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "hide_panel", "args": {"cancel": true},
|
||||
"context":
|
||||
[
|
||||
{ "key": "panel_visible", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "hide_overlay", "context":
|
||||
[
|
||||
{ "key": "overlay_visible", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "hide_popup", "context":
|
||||
[
|
||||
{ "key": "popup_visible", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "hide_auto_complete", "context":
|
||||
[
|
||||
{ "key": "auto_complete_visible", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["ctrl+]"], "command": "indent" },
|
||||
{ "keys": ["ctrl+["], "command": "unindent" },
|
||||
|
||||
{ "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": true} },
|
||||
{ "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": false},
|
||||
"context":
|
||||
[
|
||||
{ "key": "setting.tab_completion", "operator": "equal", "operand": true },
|
||||
{ "key": "preceding_text", "operator": "not_regex_match", "operand": ".*\\b[0-9]+$", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "replace_completion_with_next_completion", "context":
|
||||
[
|
||||
{ "key": "last_command", "operator": "equal", "operand": "insert_best_completion" },
|
||||
{ "key": "setting.tab_completion", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "reindent", "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_match", "operand": "^$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_match", "operand": "^$", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "indent", "context":
|
||||
[
|
||||
{ "key": "text", "operator": "regex_contains", "operand": "\n" }
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "next_field", "context":
|
||||
[
|
||||
{ "key": "has_next_field", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "commit_completion", "context":
|
||||
[
|
||||
{ "key": "auto_complete_visible" },
|
||||
{ "key": "setting.auto_complete_commit_on_tab" }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["shift+tab"], "command": "insert", "args": {"characters": "\t"} },
|
||||
{ "keys": ["shift+tab"], "command": "unindent", "context":
|
||||
[
|
||||
{ "key": "setting.shift_tab_unindent", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+tab"], "command": "unindent", "context":
|
||||
[
|
||||
{ "key": "preceding_text", "operator": "regex_match", "operand": "^[\t ]*" }
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+tab"], "command": "unindent", "context":
|
||||
[
|
||||
{ "key": "text", "operator": "regex_contains", "operand": "\n" }
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+tab"], "command": "prev_field", "context":
|
||||
[
|
||||
{ "key": "has_prev_field", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["ctrl+l"], "command": "expand_selection", "args": {"to": "line"} },
|
||||
{ "keys": ["ctrl+d"], "command": "find_under_expand" },
|
||||
{ "keys": ["ctrl+k", "ctrl+d"], "command": "find_under_expand_skip" },
|
||||
{ "keys": ["ctrl+shift+space"], "command": "expand_selection", "args": {"to": "scope"} },
|
||||
{ "keys": ["alt+shift+m"], "command": "expand_selection", "args": {"to": "brackets"} },
|
||||
{ "keys": ["alt+m"], "command": "move_to", "args": {"to": "brackets"} },
|
||||
{ "keys": ["ctrl+shift+j"], "command": "expand_selection", "args": {"to": "indentation"} },
|
||||
{ "keys": ["ctrl+shift+a"], "command": "expand_selection", "args": {"to": "tag"} },
|
||||
|
||||
{ "keys": ["ctrl+super+."], "command": "close_tag" },
|
||||
|
||||
{ "keys": ["alt+q"], "command": "toggle_record_macro" },
|
||||
{ "keys": ["alt+shift+q"], "command": "run_macro" },
|
||||
|
||||
{ "keys": ["ctrl+enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line.sublime-macro"} },
|
||||
{ "keys": ["ctrl+shift+enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line Before.sublime-macro"} },
|
||||
{ "keys": ["enter"], "command": "commit_completion", "context":
|
||||
[
|
||||
{ "key": "auto_complete_visible" },
|
||||
{ "key": "setting.auto_complete_commit_on_tab", "operand": false }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["ctrl+t"], "command": "show_overlay", "args": {"overlay": "goto", "show_files": true} },
|
||||
{ "keys": ["ctrl+p"], "command": "show_overlay", "args": {"overlay": "goto", "show_files": true} },
|
||||
{ "keys": ["ctrl+shift+p"], "command": "show_overlay", "args": {"overlay": "command_palette"} },
|
||||
{ "keys": ["ctrl+alt+p"], "command": "prompt_select_workspace" },
|
||||
{ "keys": ["ctrl+r"], "command": "show_overlay", "args": {"overlay": "goto", "text": "@"} },
|
||||
{ "keys": ["alt+g"], "command": "show_overlay", "args": {"overlay": "goto", "text": ":"} },
|
||||
{ "keys": ["f12"], "command": "goto_definition" },
|
||||
{ "keys": ["ctrl+super+down"], "command": "goto_definition" },
|
||||
{ "keys": ["ctrl+shift+r"], "command": "goto_symbol_in_project" },
|
||||
{ "keys": ["alt+minus"], "command": "jump_back" },
|
||||
{ "keys": ["alt+shift+minus"], "command": "jump_forward" },
|
||||
|
||||
{ "keys": ["ctrl+i"], "command": "show_panel", "args": {"panel": "incremental_find", "reverse": false} },
|
||||
{ "keys": ["ctrl+shift+i"], "command": "show_panel", "args": {"panel": "incremental_find", "reverse": true} },
|
||||
{ "keys": ["ctrl+f"], "command": "show_panel", "args": {"panel": "find", "reverse": false} },
|
||||
{ "keys": ["ctrl+super+f"], "command": "show_panel", "args": {"panel": "replace", "reverse": false} },
|
||||
{ "keys": ["ctrl+super+e"], "command": "replace_next" },
|
||||
{ "keys": ["ctrl+g"], "command": "find_next" },
|
||||
{ "keys": ["ctrl+shift+g"], "command": "find_prev" },
|
||||
{ "keys": ["ctrl+e"], "command": "slurp_find_string" },
|
||||
{ "keys": ["ctrl+shift+e"], "command": "slurp_replace_string" },
|
||||
|
||||
{ "keys": ["super+ctrl+g"], "command": "find_under" },
|
||||
{ "keys": ["shift+super+ctrl+g"], "command": "find_under_prev" },
|
||||
{ "keys": ["alt+ctrl+g"], "command": "find_all_under" },
|
||||
|
||||
{ "keys": ["ctrl+shift+f"], "command": "show_panel", "args": {"panel": "find_in_files"} },
|
||||
{ "keys": ["f4"], "command": "next_result" },
|
||||
{ "keys": ["shift+f4"], "command": "prev_result" },
|
||||
|
||||
{ "keys": ["f6"], "command": "toggle_setting", "args": {"setting": "spell_check"} },
|
||||
{ "keys": ["alt+f6"], "command": "next_misspelling" },
|
||||
{ "keys": ["alt+shift+f6"], "command": "prev_misspelling" },
|
||||
|
||||
{ "keys": ["alt+ctrl+up"], "command": "swap_line_up" },
|
||||
{ "keys": ["alt+ctrl+down"], "command": "swap_line_down" },
|
||||
|
||||
{ "keys": ["alt+backspace"], "command": "delete_word", "args": { "forward": false, "sub_words": true } },
|
||||
{ "keys": ["alt+delete"], "command": "delete_word", "args": { "forward": true, "sub_words": true } },
|
||||
|
||||
{ "keys": ["ctrl+forward_slash"], "command": "toggle_comment", "args": { "block": false } },
|
||||
{ "keys": ["ctrl+super+forward_slash"], "command": "toggle_comment", "args": { "block": true } },
|
||||
|
||||
{ "keys": ["ctrl+j"], "command": "join_lines" },
|
||||
{ "keys": ["ctrl+shift+d"], "command": "duplicate_line" },
|
||||
|
||||
{ "keys": ["alt+backquote"], "command": "show_panel", "args": {"panel": "console", "toggle": true} },
|
||||
|
||||
{ "keys": ["alt+space"], "command": "auto_complete" },
|
||||
{ "keys": ["alt+space"], "command": "replace_completion_with_auto_complete", "context":
|
||||
[
|
||||
{ "key": "last_command", "operator": "equal", "operand": "insert_best_completion" },
|
||||
{ "key": "auto_complete_visible", "operator": "equal", "operand": false },
|
||||
{ "key": "setting.tab_completion", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["ctrl+super+p"], "command": "show_scope_name" },
|
||||
{ "keys": ["alt+shift+p"], "command": "show_scope_name" },
|
||||
|
||||
{ "keys": ["f7"], "command": "build" },
|
||||
{ "keys": ["ctrl+b"], "command": "build" },
|
||||
{ "keys": ["ctrl+shift+b"], "command": "build", "args": {"select": true} },
|
||||
|
||||
{ "keys": ["alt+c"], "command": "cancel_build" },
|
||||
|
||||
{ "keys": ["alt+t"], "command": "transpose" },
|
||||
|
||||
{ "keys": ["f5"], "command": "sort_lines", "args": {"case_sensitive": false} },
|
||||
{ "keys": ["alt+f5"], "command": "sort_lines", "args": {"case_sensitive": true} },
|
||||
|
||||
// Auto-pair quotes
|
||||
{ "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\"$0\""}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "not_regex_contains", "operand": "[\"a-zA-Z0-9_]$", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\"${0:$SELECTION}\""}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["\""], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\"", "match_all": true },
|
||||
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\"$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\"", "match_all": true },
|
||||
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true },
|
||||
]
|
||||
},
|
||||
|
||||
// Auto-pair single quotes
|
||||
{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'$0'"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "not_regex_contains", "operand": "['a-zA-Z0-9_]$", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'${0:$SELECTION}'"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["'"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true },
|
||||
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "'$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true },
|
||||
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true },
|
||||
]
|
||||
},
|
||||
|
||||
// Auto-pair brackets
|
||||
{ "keys": ["("], "command": "insert_snippet", "args": {"contents": "($0)"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|;|\\}|$)", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["("], "command": "insert_snippet", "args": {"contents": "(${0:$SELECTION})"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": [")"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\)", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\($", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\)", "match_all": true }
|
||||
]
|
||||
},
|
||||
|
||||
// Auto-pair square brackets
|
||||
{ "keys": ["["], "command": "insert_snippet", "args": {"contents": "[$0]"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|;|\\}|$)", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["["], "command": "insert_snippet", "args": {"contents": "[${0:$SELECTION}]"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["]"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\]", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\[$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\]", "match_all": true }
|
||||
]
|
||||
},
|
||||
|
||||
// Auto-pair curly brackets
|
||||
{ "keys": ["{"], "command": "insert_snippet", "args": {"contents": "{$0}"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|$)", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["{"], "command": "wrap_block", "args": {"begin": "{", "end": "}"}, "context":
|
||||
[
|
||||
{ "key": "indented_block", "match_all": true },
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_match", "operand": "^$", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["{"], "command": "insert_snippet", "args": {"contents": "{${0:$SELECTION}}"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["}"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line in Braces.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line in Braces.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["enter"], "command": "auto_indent_tag", "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "selector", "operator": "equal", "operand": "punctuation.definition.tag.begin", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": ">$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^</", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "auto_indent_tag", "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "selector", "operator": "equal", "operand": "punctuation.definition.tag.begin", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": ">$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^</", "match_all": true },
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"keys": ["ctrl+super+1"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 1.0],
|
||||
"rows": [0.0, 1.0],
|
||||
"cells": [[0, 0, 1, 1]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["ctrl+super+2"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 0.5, 1.0],
|
||||
"rows": [0.0, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [1, 0, 2, 1]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["ctrl+super+3"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 0.33, 0.66, 1.0],
|
||||
"rows": [0.0, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["ctrl+super+4"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 0.25, 0.5, 0.75, 1.0],
|
||||
"rows": [0.0, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1], [3, 0, 4, 1]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["ctrl+super+shift+2"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 1.0],
|
||||
"rows": [0.0, 0.5, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [0, 1, 1, 2]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["ctrl+super+shift+3"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 1.0],
|
||||
"rows": [0.0, 0.33, 0.66, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [0, 1, 1, 2], [0, 2, 1, 3]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["ctrl+super+5"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 0.5, 1.0],
|
||||
"rows": [0.0, 0.5, 1.0],
|
||||
"cells":
|
||||
[
|
||||
[0, 0, 1, 1], [1, 0, 2, 1],
|
||||
[0, 1, 1, 2], [1, 1, 2, 2]
|
||||
]
|
||||
}
|
||||
},
|
||||
{ "keys": ["alt+1"], "command": "focus_group", "args": { "group": 0 } },
|
||||
{ "keys": ["alt+2"], "command": "focus_group", "args": { "group": 1 } },
|
||||
{ "keys": ["alt+3"], "command": "focus_group", "args": { "group": 2 } },
|
||||
{ "keys": ["alt+4"], "command": "focus_group", "args": { "group": 3 } },
|
||||
{ "keys": ["alt+5"], "command": "focus_group", "args": { "group": 4 } },
|
||||
{ "keys": ["alt+6"], "command": "focus_group", "args": { "group": 5 } },
|
||||
{ "keys": ["alt+7"], "command": "focus_group", "args": { "group": 6 } },
|
||||
{ "keys": ["alt+8"], "command": "focus_group", "args": { "group": 7 } },
|
||||
{ "keys": ["alt+9"], "command": "focus_group", "args": { "group": 8 } },
|
||||
{ "keys": ["alt+shift+1"], "command": "move_to_group", "args": { "group": 0 } },
|
||||
{ "keys": ["alt+shift+2"], "command": "move_to_group", "args": { "group": 1 } },
|
||||
{ "keys": ["alt+shift+3"], "command": "move_to_group", "args": { "group": 2 } },
|
||||
{ "keys": ["alt+shift+4"], "command": "move_to_group", "args": { "group": 3 } },
|
||||
{ "keys": ["alt+shift+5"], "command": "move_to_group", "args": { "group": 4 } },
|
||||
{ "keys": ["alt+shift+6"], "command": "move_to_group", "args": { "group": 5 } },
|
||||
{ "keys": ["alt+shift+7"], "command": "move_to_group", "args": { "group": 6 } },
|
||||
{ "keys": ["alt+shift+8"], "command": "move_to_group", "args": { "group": 7 } },
|
||||
{ "keys": ["alt+shift+9"], "command": "move_to_group", "args": { "group": 8 } },
|
||||
{ "keys": ["alt+0"], "command": "focus_side_bar" },
|
||||
|
||||
{ "keys": ["ctrl+k", "ctrl+up"], "command": "new_pane" },
|
||||
{ "keys": ["ctrl+k", "ctrl+shift+up"], "command": "new_pane", "args": {"move": false} },
|
||||
{ "keys": ["ctrl+k", "ctrl+down"], "command": "close_pane" },
|
||||
{ "keys": ["ctrl+k", "ctrl+left"], "command": "focus_neighboring_group", "args": {"forward": false} },
|
||||
{ "keys": ["ctrl+k", "ctrl+right"], "command": "focus_neighboring_group" },
|
||||
{ "keys": ["ctrl+k", "ctrl+shift+left"], "command": "move_to_neighboring_group", "args": {"forward": false} },
|
||||
{ "keys": ["ctrl+k", "ctrl+shift+right"], "command": "move_to_neighboring_group" },
|
||||
|
||||
{ "keys": ["ctrl+1"], "command": "select_by_index", "args": { "index": 0 } },
|
||||
{ "keys": ["ctrl+2"], "command": "select_by_index", "args": { "index": 1 } },
|
||||
{ "keys": ["ctrl+3"], "command": "select_by_index", "args": { "index": 2 } },
|
||||
{ "keys": ["ctrl+4"], "command": "select_by_index", "args": { "index": 3 } },
|
||||
{ "keys": ["ctrl+5"], "command": "select_by_index", "args": { "index": 4 } },
|
||||
{ "keys": ["ctrl+6"], "command": "select_by_index", "args": { "index": 5 } },
|
||||
{ "keys": ["ctrl+7"], "command": "select_by_index", "args": { "index": 6 } },
|
||||
{ "keys": ["ctrl+8"], "command": "select_by_index", "args": { "index": 7 } },
|
||||
{ "keys": ["ctrl+9"], "command": "select_by_index", "args": { "index": 8 } },
|
||||
{ "keys": ["ctrl+0"], "command": "select_by_index", "args": { "index": 9 } },
|
||||
|
||||
{ "keys": ["f2"], "command": "next_bookmark" },
|
||||
{ "keys": ["shift+f2"], "command": "prev_bookmark" },
|
||||
{ "keys": ["ctrl+f2"], "command": "toggle_bookmark" },
|
||||
{ "keys": ["ctrl+shift+f2"], "command": "clear_bookmarks" },
|
||||
{ "keys": ["super+f2"], "command": "select_all_bookmarks" },
|
||||
|
||||
{ "keys": ["ctrl+k", "ctrl+u"], "command": "upper_case" },
|
||||
{ "keys": ["ctrl+k", "ctrl+l"], "command": "lower_case" },
|
||||
{ "keys": ["ctrl+k", "ctrl+space"], "command": "set_mark" },
|
||||
{ "keys": ["ctrl+k", "ctrl+a"], "command": "select_to_mark" },
|
||||
{ "keys": ["ctrl+k", "ctrl+w"], "command": "delete_to_mark" },
|
||||
{ "keys": ["ctrl+k", "ctrl+x"], "command": "swap_with_mark" },
|
||||
{ "keys": ["ctrl+k", "ctrl+g"], "command": "clear_bookmarks", "args": {"name": "mark"} },
|
||||
|
||||
{ "keys": ["ctrl+equals"], "command": "increase_font_size" },
|
||||
{ "keys": ["ctrl+plus"], "command": "increase_font_size" },
|
||||
{ "keys": ["ctrl+minus"], "command": "decrease_font_size" },
|
||||
|
||||
{ "keys": ["alt+shift+w"], "command": "insert_snippet", "args": { "name": "Packages/XML/Snippets/long-tag.sublime-snippet" } },
|
||||
|
||||
{ "keys": ["alt+shift+k"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Line.sublime-macro"} },
|
||||
|
||||
{ "keys": ["ctrl+super+q"], "command": "wrap_lines" },
|
||||
|
||||
{ "keys": ["ctrl+super+["], "command": "fold" },
|
||||
{ "keys": ["ctrl+super+]"], "command": "unfold" },
|
||||
{ "keys": ["ctrl+k", "ctrl+1"], "command": "fold_by_level", "args": {"level": 1} },
|
||||
{ "keys": ["ctrl+k", "ctrl+2"], "command": "fold_by_level", "args": {"level": 2} },
|
||||
{ "keys": ["ctrl+k", "ctrl+3"], "command": "fold_by_level", "args": {"level": 3} },
|
||||
{ "keys": ["ctrl+k", "ctrl+4"], "command": "fold_by_level", "args": {"level": 4} },
|
||||
{ "keys": ["ctrl+k", "ctrl+5"], "command": "fold_by_level", "args": {"level": 5} },
|
||||
{ "keys": ["ctrl+k", "ctrl+6"], "command": "fold_by_level", "args": {"level": 6} },
|
||||
{ "keys": ["ctrl+k", "ctrl+7"], "command": "fold_by_level", "args": {"level": 7} },
|
||||
{ "keys": ["ctrl+k", "ctrl+8"], "command": "fold_by_level", "args": {"level": 8} },
|
||||
{ "keys": ["ctrl+k", "ctrl+9"], "command": "fold_by_level", "args": {"level": 9} },
|
||||
{ "keys": ["ctrl+k", "ctrl+0"], "command": "unfold_all" },
|
||||
{ "keys": ["ctrl+k", "ctrl+j"], "command": "unfold_all" },
|
||||
{ "keys": ["ctrl+k", "ctrl+t"], "command": "fold_tag_attributes" },
|
||||
|
||||
{ "keys": ["ctrl+super+o"], "command": "toggle_overwrite" },
|
||||
|
||||
{ "keys": ["super+f2"], "command": "context_menu" },
|
||||
|
||||
{ "keys": ["ctrl+super+c"], "command": "toggle_case_sensitive", "context":
|
||||
[
|
||||
{ "key": "setting.is_widget", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["ctrl+super+r"], "command": "toggle_regex", "context":
|
||||
[
|
||||
{ "key": "setting.is_widget", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["ctrl+super+w"], "command": "toggle_whole_word", "context":
|
||||
[
|
||||
{ "key": "setting.is_widget", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["ctrl+super+a"], "command": "toggle_preserve_case", "context":
|
||||
[
|
||||
{ "key": "setting.is_widget", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
|
||||
// Find panel key bindings
|
||||
{ "keys": ["enter"], "command": "find_next", "context":
|
||||
[{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "find_prev", "context":
|
||||
[{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["super+enter"], "command": "find_all", "args": {"close_panel": true},
|
||||
"context": [{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
|
||||
// Replace panel key bindings
|
||||
{ "keys": ["enter"], "command": "find_next", "context":
|
||||
[{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "find_prev", "context":
|
||||
[{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["super+enter"], "command": "find_all", "args": {"close_panel": true},
|
||||
"context": [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["alt+super+enter"], "command": "replace_all", "args": {"close_panel": true},
|
||||
"context": [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
|
||||
// Incremental find panel key bindings
|
||||
{ "keys": ["enter"], "command": "hide_panel", "context":
|
||||
[{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "find_prev", "context":
|
||||
[{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["super+enter"], "command": "find_all", "args": {"close_panel": true},
|
||||
"context": [{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
|
||||
{ "keys": ["ctrl+,"], "command": "edit_settings", "args":
|
||||
{
|
||||
"base_file": "${packages}/Default/Preferences.sublime-settings",
|
||||
"default": "// Settings in here override those in \"Default/Preferences.sublime-settings\",\n// and are overridden in turn by syntax-specific settings.\n{\n\t$0\n}\n"
|
||||
}
|
||||
},
|
||||
|
||||
{ "keys": ["ctrl+k", "ctrl+y"], "command": "yank" },
|
||||
{ "keys": ["ctrl+k", "ctrl+k"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard EOL.sublime-macro"} },
|
||||
{ "keys": ["ctrl+k", "ctrl+backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard BOL.sublime-macro"} },
|
||||
{ "keys": ["ctrl+k", "ctrl+c"], "command": "show_at_center" },
|
||||
|
||||
// These are OS X built in commands, and don't need to be listed here, but
|
||||
// doing so lets them show up in the menu
|
||||
{ "keys": ["alt+y"], "command": "yank" },
|
||||
{ "keys": ["ctrl+backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard BOL.sublime-macro"} },
|
||||
// ctrl+delete isn't a built in command, but makes sense anyway
|
||||
{ "keys": ["ctrl+delete"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard EOL.sublime-macro"} },
|
||||
{ "keys": ["alt+k"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard EOL.sublime-macro"} },
|
||||
{ "keys": ["alt+l"], "command": "show_at_center" },
|
||||
{ "keys": ["alt+o"], "command": "insert_snippet", "args": { "contents": "$0\n" } },
|
||||
{ "keys": ["alt+ctrl+d"], "command": "noop" },
|
||||
{ "keys": ["alt+ctrl+shift+d"], "command": "noop" },
|
||||
|
||||
// HTML, XML close tag
|
||||
{ "keys": ["/"], "command": "close_tag", "args": { "insert_slash": true }, "context":
|
||||
[
|
||||
{ "key": "selector", "operator": "equal", "operand": "(text.html, text.xml) - string - comment", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_match", "operand": ".*<$", "match_all": true },
|
||||
{ "key": "setting.auto_close_tags" }
|
||||
]
|
||||
}
|
||||
]
|
734
references/app-configs/sublime-text3/linux.sublime-keybinds.org
Normal file
@@ -0,0 +1,734 @@
|
||||
[
|
||||
{ "keys": ["ctrl+q"], "command": "exit" },
|
||||
|
||||
{ "keys": ["ctrl+shift+n"], "command": "new_window" },
|
||||
{ "keys": ["ctrl+shift+w"], "command": "close_window" },
|
||||
{ "keys": ["ctrl+o"], "command": "prompt_open_file" },
|
||||
{ "keys": ["ctrl+shift+t"], "command": "reopen_last_file" },
|
||||
{ "keys": ["alt+o"], "command": "switch_file", "args": {"extensions": ["cpp", "cxx", "cc", "c", "hpp", "hxx", "hh", "h", "ipp", "inl", "m", "mm"]} },
|
||||
{ "keys": ["ctrl+n"], "command": "new_file" },
|
||||
{ "keys": ["ctrl+s"], "command": "save" },
|
||||
{ "keys": ["ctrl+shift+s"], "command": "prompt_save_as" },
|
||||
{ "keys": ["ctrl+f4"], "command": "close_file" },
|
||||
{ "keys": ["ctrl+w"], "command": "close" },
|
||||
|
||||
{ "keys": ["ctrl+k", "ctrl+b"], "command": "toggle_side_bar" },
|
||||
{ "keys": ["f11"], "command": "toggle_full_screen" },
|
||||
{ "keys": ["shift+f11"], "command": "toggle_distraction_free" },
|
||||
|
||||
{ "keys": ["backspace"], "command": "left_delete" },
|
||||
{ "keys": ["shift+backspace"], "command": "left_delete" },
|
||||
{ "keys": ["ctrl+shift+backspace"], "command": "left_delete" },
|
||||
{ "keys": ["delete"], "command": "right_delete" },
|
||||
{ "keys": ["enter"], "command": "insert", "args": {"characters": "\n"} },
|
||||
{ "keys": ["shift+enter"], "command": "insert", "args": {"characters": "\n"} },
|
||||
{ "keys": ["keypad_enter"], "command": "insert", "args": {"characters": "\n"} },
|
||||
{ "keys": ["shift+keypad_enter"], "command": "insert", "args": {"characters": "\n"} },
|
||||
|
||||
{ "keys": ["ctrl+z"], "command": "undo" },
|
||||
{ "keys": ["ctrl+shift+z"], "command": "redo" },
|
||||
{ "keys": ["ctrl+y"], "command": "redo_or_repeat" },
|
||||
{ "keys": ["ctrl+u"], "command": "soft_undo" },
|
||||
{ "keys": ["ctrl+shift+u"], "command": "soft_redo" },
|
||||
|
||||
{ "keys": ["shift+delete"], "command": "cut" },
|
||||
{ "keys": ["ctrl+insert"], "command": "copy" },
|
||||
{ "keys": ["shift+insert"], "command": "paste" },
|
||||
|
||||
// These two key bindings should replace the above three if you'd prefer
|
||||
// the traditional X11 behavior of shift+insert pasting from the primary
|
||||
// selection. The above CUA keys are the default, to match most GTK
|
||||
// applications.
|
||||
//{ "keys": ["shift+insert"], "command": "paste", "args": {"clipboard": "selection"} },
|
||||
//{ "keys": ["shift+delete"], "command": "right_delete" },
|
||||
|
||||
{ "keys": ["ctrl+x"], "command": "cut" },
|
||||
{ "keys": ["ctrl+c"], "command": "copy" },
|
||||
{ "keys": ["ctrl+v"], "command": "paste" },
|
||||
{ "keys": ["ctrl+shift+v"], "command": "paste_and_indent" },
|
||||
{ "keys": ["ctrl+k", "ctrl+v"], "command": "paste_from_history" },
|
||||
|
||||
{ "keys": ["left"], "command": "move", "args": {"by": "characters", "forward": false} },
|
||||
{ "keys": ["right"], "command": "move", "args": {"by": "characters", "forward": true} },
|
||||
{ "keys": ["up"], "command": "move", "args": {"by": "lines", "forward": false} },
|
||||
{ "keys": ["down"], "command": "move", "args": {"by": "lines", "forward": true} },
|
||||
{ "keys": ["shift+left"], "command": "move", "args": {"by": "characters", "forward": false, "extend": true} },
|
||||
{ "keys": ["shift+right"], "command": "move", "args": {"by": "characters", "forward": true, "extend": true} },
|
||||
{ "keys": ["shift+up"], "command": "move", "args": {"by": "lines", "forward": false, "extend": true} },
|
||||
{ "keys": ["shift+down"], "command": "move", "args": {"by": "lines", "forward": true, "extend": true} },
|
||||
|
||||
{ "keys": ["ctrl+left"], "command": "move", "args": {"by": "words", "forward": false} },
|
||||
{ "keys": ["ctrl+right"], "command": "move", "args": {"by": "word_ends", "forward": true} },
|
||||
{ "keys": ["ctrl+shift+left"], "command": "move", "args": {"by": "words", "forward": false, "extend": true} },
|
||||
{ "keys": ["ctrl+shift+right"], "command": "move", "args": {"by": "word_ends", "forward": true, "extend": true} },
|
||||
|
||||
{ "keys": ["alt+left"], "command": "move", "args": {"by": "subwords", "forward": false} },
|
||||
{ "keys": ["alt+right"], "command": "move", "args": {"by": "subword_ends", "forward": true} },
|
||||
{ "keys": ["alt+shift+left"], "command": "move", "args": {"by": "subwords", "forward": false, "extend": true} },
|
||||
{ "keys": ["alt+shift+right"], "command": "move", "args": {"by": "subword_ends", "forward": true, "extend": true} },
|
||||
|
||||
{ "keys": ["alt+shift+up"], "command": "select_lines", "args": {"forward": false} },
|
||||
{ "keys": ["alt+shift+down"], "command": "select_lines", "args": {"forward": true} },
|
||||
|
||||
{ "keys": ["pageup"], "command": "move", "args": {"by": "pages", "forward": false} },
|
||||
{ "keys": ["pagedown"], "command": "move", "args": {"by": "pages", "forward": true} },
|
||||
{ "keys": ["shift+pageup"], "command": "move", "args": {"by": "pages", "forward": false, "extend": true} },
|
||||
{ "keys": ["shift+pagedown"], "command": "move", "args": {"by": "pages", "forward": true, "extend": true} },
|
||||
|
||||
{ "keys": ["home"], "command": "move_to", "args": {"to": "bol", "extend": false} },
|
||||
{ "keys": ["end"], "command": "move_to", "args": {"to": "eol", "extend": false} },
|
||||
{ "keys": ["shift+home"], "command": "move_to", "args": {"to": "bol", "extend": true} },
|
||||
{ "keys": ["shift+end"], "command": "move_to", "args": {"to": "eol", "extend": true} },
|
||||
{ "keys": ["ctrl+home"], "command": "move_to", "args": {"to": "bof", "extend": false} },
|
||||
{ "keys": ["ctrl+end"], "command": "move_to", "args": {"to": "eof", "extend": false} },
|
||||
{ "keys": ["ctrl+shift+home"], "command": "move_to", "args": {"to": "bof", "extend": true} },
|
||||
{ "keys": ["ctrl+shift+end"], "command": "move_to", "args": {"to": "eof", "extend": true} },
|
||||
|
||||
{ "keys": ["ctrl+up"], "command": "scroll_lines", "args": {"amount": 1.0 } },
|
||||
{ "keys": ["ctrl+down"], "command": "scroll_lines", "args": {"amount": -1.0 } },
|
||||
|
||||
{ "keys": ["ctrl+pagedown"], "command": "next_view" },
|
||||
{ "keys": ["ctrl+pageup"], "command": "prev_view" },
|
||||
|
||||
{ "keys": ["ctrl+tab"], "command": "next_view_in_stack" },
|
||||
{ "keys": ["ctrl+shift+tab"], "command": "prev_view_in_stack" },
|
||||
|
||||
{ "keys": ["ctrl+a"], "command": "select_all" },
|
||||
{ "keys": ["ctrl+shift+l"], "command": "split_selection_into_lines" },
|
||||
{ "keys": ["escape"], "command": "single_selection", "context":
|
||||
[
|
||||
{ "key": "num_selections", "operator": "not_equal", "operand": 1 }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "clear_fields", "context":
|
||||
[
|
||||
{ "key": "has_next_field", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "clear_fields", "context":
|
||||
[
|
||||
{ "key": "has_prev_field", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "hide_panel", "args": {"cancel": true},
|
||||
"context":
|
||||
[
|
||||
{ "key": "panel_visible", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "hide_overlay", "context":
|
||||
[
|
||||
{ "key": "overlay_visible", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "hide_popup", "context":
|
||||
[
|
||||
{ "key": "popup_visible", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "hide_auto_complete", "context":
|
||||
[
|
||||
{ "key": "auto_complete_visible", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": true} },
|
||||
{ "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": false},
|
||||
"context":
|
||||
[
|
||||
{ "key": "setting.tab_completion", "operator": "equal", "operand": true },
|
||||
{ "key": "preceding_text", "operator": "not_regex_match", "operand": ".*\\b[0-9]+$", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "replace_completion_with_next_completion", "context":
|
||||
[
|
||||
{ "key": "last_command", "operator": "equal", "operand": "insert_best_completion" },
|
||||
{ "key": "setting.tab_completion", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "reindent", "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_match", "operand": "^$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_match", "operand": "^$", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "indent", "context":
|
||||
[
|
||||
{ "key": "text", "operator": "regex_contains", "operand": "\n" }
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "next_field", "context":
|
||||
[
|
||||
{ "key": "has_next_field", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "commit_completion", "context":
|
||||
[
|
||||
{ "key": "auto_complete_visible" },
|
||||
{ "key": "setting.auto_complete_commit_on_tab" }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["shift+tab"], "command": "insert", "args": {"characters": "\t"} },
|
||||
{ "keys": ["shift+tab"], "command": "unindent", "context":
|
||||
[
|
||||
{ "key": "setting.shift_tab_unindent", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+tab"], "command": "unindent", "context":
|
||||
[
|
||||
{ "key": "preceding_text", "operator": "regex_match", "operand": "^[\t ]*" }
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+tab"], "command": "unindent", "context":
|
||||
[
|
||||
{ "key": "text", "operator": "regex_contains", "operand": "\n" }
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+tab"], "command": "prev_field", "context":
|
||||
[
|
||||
{ "key": "has_prev_field", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["ctrl+]"], "command": "indent" },
|
||||
{ "keys": ["ctrl+["], "command": "unindent" },
|
||||
|
||||
{ "keys": ["insert"], "command": "toggle_overwrite" },
|
||||
|
||||
{ "keys": ["ctrl+l"], "command": "expand_selection", "args": {"to": "line"} },
|
||||
{ "keys": ["ctrl+d"], "command": "find_under_expand" },
|
||||
{ "keys": ["ctrl+k", "ctrl+d"], "command": "find_under_expand_skip" },
|
||||
{ "keys": ["ctrl+shift+space"], "command": "expand_selection", "args": {"to": "scope"} },
|
||||
{ "keys": ["ctrl+shift+m"], "command": "expand_selection", "args": {"to": "brackets"} },
|
||||
{ "keys": ["ctrl+m"], "command": "move_to", "args": {"to": "brackets"} },
|
||||
{ "keys": ["ctrl+shift+j"], "command": "expand_selection", "args": {"to": "indentation"} },
|
||||
{ "keys": ["ctrl+shift+a"], "command": "expand_selection", "args": {"to": "tag"} },
|
||||
|
||||
{ "keys": ["alt+."], "command": "close_tag" },
|
||||
|
||||
{ "keys": ["ctrl+alt+q"], "command": "toggle_record_macro" },
|
||||
{ "keys": ["ctrl+alt+shift+q"], "command": "run_macro" },
|
||||
|
||||
{ "keys": ["ctrl+enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line.sublime-macro"} },
|
||||
{ "keys": ["ctrl+shift+enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line Before.sublime-macro"} },
|
||||
{ "keys": ["enter"], "command": "commit_completion", "context":
|
||||
[
|
||||
{ "key": "auto_complete_visible" },
|
||||
{ "key": "setting.auto_complete_commit_on_tab", "operand": false }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["ctrl+p"], "command": "show_overlay", "args": {"overlay": "goto", "show_files": true} },
|
||||
{ "keys": ["ctrl+shift+p"], "command": "show_overlay", "args": {"overlay": "command_palette"} },
|
||||
{ "keys": ["ctrl+alt+p"], "command": "prompt_select_workspace" },
|
||||
{ "keys": ["ctrl+r"], "command": "show_overlay", "args": {"overlay": "goto", "text": "@"} },
|
||||
{ "keys": ["ctrl+g"], "command": "show_overlay", "args": {"overlay": "goto", "text": ":"} },
|
||||
{ "keys": ["ctrl+;"], "command": "show_overlay", "args": {"overlay": "goto", "text": "#"} },
|
||||
{ "keys": ["f12"], "command": "goto_definition" },
|
||||
{ "keys": ["shift+f12"], "command": "goto_reference" },
|
||||
{ "keys": ["ctrl+shift+r"], "command": "goto_symbol_in_project" },
|
||||
{ "keys": ["alt+-"], "command": "jump_back" },
|
||||
{ "keys": ["alt+shift+-"], "command": "jump_forward" },
|
||||
{ "keys": ["alt+keypad_minus"], "command": "jump_back" },
|
||||
{ "keys": ["alt+shift+keypad_minus"], "command": "jump_forward" },
|
||||
|
||||
{ "keys": ["ctrl+i"], "command": "show_panel", "args": {"panel": "incremental_find", "reverse": false} },
|
||||
{ "keys": ["ctrl+shift+i"], "command": "show_panel", "args": {"panel": "incremental_find", "reverse": true} },
|
||||
{ "keys": ["ctrl+f"], "command": "show_panel", "args": {"panel": "find", "reverse": false} },
|
||||
{ "keys": ["ctrl+h"], "command": "show_panel", "args": {"panel": "replace", "reverse": false} },
|
||||
{ "keys": ["ctrl+shift+h"], "command": "replace_next" },
|
||||
{ "keys": ["f3"], "command": "find_next" },
|
||||
{ "keys": ["shift+f3"], "command": "find_prev" },
|
||||
{ "keys": ["ctrl+f3"], "command": "find_under" },
|
||||
{ "keys": ["ctrl+shift+f3"], "command": "find_under_prev" },
|
||||
{ "keys": ["alt+f3"], "command": "find_all_under" },
|
||||
{ "keys": ["ctrl+e"], "command": "slurp_find_string" },
|
||||
{ "keys": ["ctrl+shift+e"], "command": "slurp_replace_string" },
|
||||
{ "keys": ["ctrl+shift+f"], "command": "show_panel", "args": {"panel": "find_in_files"} },
|
||||
{ "keys": ["f4"], "command": "next_result" },
|
||||
{ "keys": ["shift+f4"], "command": "prev_result" },
|
||||
|
||||
{ "keys": ["f6"], "command": "toggle_setting", "args": {"setting": "spell_check"} },
|
||||
{ "keys": ["ctrl+f6"], "command": "next_misspelling" },
|
||||
{ "keys": ["ctrl+shift+f6"], "command": "prev_misspelling" },
|
||||
|
||||
{ "keys": ["ctrl+shift+up"], "command": "swap_line_up" },
|
||||
{ "keys": ["ctrl+shift+down"], "command": "swap_line_down" },
|
||||
|
||||
{ "keys": ["ctrl+backspace"], "command": "delete_word", "args": { "forward": false } },
|
||||
{ "keys": ["ctrl+shift+backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard BOL.sublime-macro"} },
|
||||
|
||||
{ "keys": ["ctrl+delete"], "command": "delete_word", "args": { "forward": true } },
|
||||
{ "keys": ["ctrl+shift+delete"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard EOL.sublime-macro"} },
|
||||
|
||||
{ "keys": ["ctrl+/"], "command": "toggle_comment", "args": { "block": false } },
|
||||
{ "keys": ["ctrl+shift+/"], "command": "toggle_comment", "args": { "block": true } },
|
||||
|
||||
{ "keys": ["ctrl+j"], "command": "join_lines" },
|
||||
{ "keys": ["ctrl+shift+d"], "command": "duplicate_line" },
|
||||
|
||||
{ "keys": ["ctrl+`"], "command": "show_panel", "args": {"panel": "console", "toggle": true} },
|
||||
|
||||
{ "keys": ["alt+/"], "command": "auto_complete" },
|
||||
{ "keys": ["alt+/"], "command": "replace_completion_with_auto_complete", "context":
|
||||
[
|
||||
{ "key": "last_command", "operator": "equal", "operand": "insert_best_completion" },
|
||||
{ "key": "auto_complete_visible", "operator": "equal", "operand": false },
|
||||
{ "key": "setting.tab_completion", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["ctrl+alt+shift+p"], "command": "show_scope_name" },
|
||||
|
||||
{ "keys": ["f7"], "command": "build" },
|
||||
{ "keys": ["ctrl+b"], "command": "build" },
|
||||
{ "keys": ["ctrl+shift+b"], "command": "build", "args": {"select": true} },
|
||||
{ "keys": ["ctrl+break"], "command": "cancel_build" },
|
||||
|
||||
{ "keys": ["ctrl+t"], "command": "transpose" },
|
||||
|
||||
{ "keys": ["f9"], "command": "sort_lines", "args": {"case_sensitive": false} },
|
||||
{ "keys": ["ctrl+f9"], "command": "sort_lines", "args": {"case_sensitive": true} },
|
||||
|
||||
// Auto-pair quotes
|
||||
{ "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\"$0\""}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "not_regex_contains", "operand": "[\"a-zA-Z0-9_]$", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\"${0:$SELECTION}\""}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["\""], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\"", "match_all": true },
|
||||
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\"$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\"", "match_all": true },
|
||||
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true },
|
||||
]
|
||||
},
|
||||
|
||||
// Auto-pair single quotes
|
||||
{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'$0'"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "not_regex_contains", "operand": "['a-zA-Z0-9_]$", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'${0:$SELECTION}'"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["'"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true },
|
||||
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "'$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true },
|
||||
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true },
|
||||
]
|
||||
},
|
||||
|
||||
// Auto-pair brackets
|
||||
{ "keys": ["("], "command": "insert_snippet", "args": {"contents": "($0)"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|;|\\}|$)", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["("], "command": "insert_snippet", "args": {"contents": "(${0:$SELECTION})"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": [")"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\)", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\($", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\)", "match_all": true }
|
||||
]
|
||||
},
|
||||
|
||||
// Auto-pair square brackets
|
||||
{ "keys": ["["], "command": "insert_snippet", "args": {"contents": "[$0]"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|;|\\}|$)", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["["], "command": "insert_snippet", "args": {"contents": "[${0:$SELECTION}]"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["]"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\]", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\[$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\]", "match_all": true }
|
||||
]
|
||||
},
|
||||
|
||||
// Auto-pair curly brackets
|
||||
{ "keys": ["{"], "command": "insert_snippet", "args": {"contents": "{$0}"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|$)", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["{"], "command": "wrap_block", "args": {"begin": "{", "end": "}"}, "context":
|
||||
[
|
||||
{ "key": "indented_block", "match_all": true },
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_match", "operand": "^$", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["{"], "command": "insert_snippet", "args": {"contents": "{${0:$SELECTION}}"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["}"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line in Braces.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line in Braces.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["enter"], "command": "auto_indent_tag", "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "selector", "operator": "equal", "operand": "punctuation.definition.tag.begin", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": ">$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^</", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "auto_indent_tag", "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "selector", "operator": "equal", "operand": "punctuation.definition.tag.begin", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": ">$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^</", "match_all": true },
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"keys": ["alt+shift+1"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 1.0],
|
||||
"rows": [0.0, 1.0],
|
||||
"cells": [[0, 0, 1, 1]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["alt+shift+2"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 0.5, 1.0],
|
||||
"rows": [0.0, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [1, 0, 2, 1]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["alt+shift+3"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 0.33, 0.66, 1.0],
|
||||
"rows": [0.0, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["alt+shift+4"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 0.25, 0.5, 0.75, 1.0],
|
||||
"rows": [0.0, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1], [3, 0, 4, 1]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["alt+shift+8"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 1.0],
|
||||
"rows": [0.0, 0.5, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [0, 1, 1, 2]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["alt+shift+9"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 1.0],
|
||||
"rows": [0.0, 0.33, 0.66, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [0, 1, 1, 2], [0, 2, 1, 3]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["alt+shift+5"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 0.5, 1.0],
|
||||
"rows": [0.0, 0.5, 1.0],
|
||||
"cells":
|
||||
[
|
||||
[0, 0, 1, 1], [1, 0, 2, 1],
|
||||
[0, 1, 1, 2], [1, 1, 2, 2]
|
||||
]
|
||||
}
|
||||
},
|
||||
{ "keys": ["ctrl+1"], "command": "focus_group", "args": { "group": 0 } },
|
||||
{ "keys": ["ctrl+2"], "command": "focus_group", "args": { "group": 1 } },
|
||||
{ "keys": ["ctrl+3"], "command": "focus_group", "args": { "group": 2 } },
|
||||
{ "keys": ["ctrl+4"], "command": "focus_group", "args": { "group": 3 } },
|
||||
{ "keys": ["ctrl+5"], "command": "focus_group", "args": { "group": 4 } },
|
||||
{ "keys": ["ctrl+6"], "command": "focus_group", "args": { "group": 5 } },
|
||||
{ "keys": ["ctrl+7"], "command": "focus_group", "args": { "group": 6 } },
|
||||
{ "keys": ["ctrl+8"], "command": "focus_group", "args": { "group": 7 } },
|
||||
{ "keys": ["ctrl+9"], "command": "focus_group", "args": { "group": 8 } },
|
||||
{ "keys": ["ctrl+shift+1"], "command": "move_to_group", "args": { "group": 0 } },
|
||||
{ "keys": ["ctrl+shift+2"], "command": "move_to_group", "args": { "group": 1 } },
|
||||
{ "keys": ["ctrl+shift+3"], "command": "move_to_group", "args": { "group": 2 } },
|
||||
{ "keys": ["ctrl+shift+4"], "command": "move_to_group", "args": { "group": 3 } },
|
||||
{ "keys": ["ctrl+shift+5"], "command": "move_to_group", "args": { "group": 4 } },
|
||||
{ "keys": ["ctrl+shift+6"], "command": "move_to_group", "args": { "group": 5 } },
|
||||
{ "keys": ["ctrl+shift+7"], "command": "move_to_group", "args": { "group": 6 } },
|
||||
{ "keys": ["ctrl+shift+8"], "command": "move_to_group", "args": { "group": 7 } },
|
||||
{ "keys": ["ctrl+shift+9"], "command": "move_to_group", "args": { "group": 8 } },
|
||||
{ "keys": ["ctrl+0"], "command": "focus_side_bar" },
|
||||
|
||||
{ "keys": ["ctrl+k", "ctrl+up"], "command": "new_pane" },
|
||||
{ "keys": ["ctrl+k", "ctrl+shift+up"], "command": "new_pane", "args": {"move": false} },
|
||||
{ "keys": ["ctrl+k", "ctrl+down"], "command": "close_pane" },
|
||||
{ "keys": ["ctrl+k", "ctrl+left"], "command": "focus_neighboring_group", "args": {"forward": false} },
|
||||
{ "keys": ["ctrl+k", "ctrl+right"], "command": "focus_neighboring_group" },
|
||||
{ "keys": ["ctrl+k", "ctrl+shift+left"], "command": "move_to_neighboring_group", "args": {"forward": false} },
|
||||
{ "keys": ["ctrl+k", "ctrl+shift+right"], "command": "move_to_neighboring_group" },
|
||||
|
||||
{ "keys": ["alt+1"], "command": "select_by_index", "args": { "index": 0 } },
|
||||
{ "keys": ["alt+2"], "command": "select_by_index", "args": { "index": 1 } },
|
||||
{ "keys": ["alt+3"], "command": "select_by_index", "args": { "index": 2 } },
|
||||
{ "keys": ["alt+4"], "command": "select_by_index", "args": { "index": 3 } },
|
||||
{ "keys": ["alt+5"], "command": "select_by_index", "args": { "index": 4 } },
|
||||
{ "keys": ["alt+6"], "command": "select_by_index", "args": { "index": 5 } },
|
||||
{ "keys": ["alt+7"], "command": "select_by_index", "args": { "index": 6 } },
|
||||
{ "keys": ["alt+8"], "command": "select_by_index", "args": { "index": 7 } },
|
||||
{ "keys": ["alt+9"], "command": "select_by_index", "args": { "index": 8 } },
|
||||
{ "keys": ["alt+0"], "command": "select_by_index", "args": { "index": 9 } },
|
||||
|
||||
{ "keys": ["f2"], "command": "next_bookmark" },
|
||||
{ "keys": ["shift+f2"], "command": "prev_bookmark" },
|
||||
{ "keys": ["ctrl+f2"], "command": "toggle_bookmark" },
|
||||
{ "keys": ["ctrl+shift+f2"], "command": "clear_bookmarks" },
|
||||
{ "keys": ["alt+f2"], "command": "select_all_bookmarks" },
|
||||
|
||||
{ "keys": ["ctrl+shift+k"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Line.sublime-macro"} },
|
||||
|
||||
{ "keys": ["alt+q"], "command": "wrap_lines" },
|
||||
|
||||
{ "keys": ["ctrl+k", "ctrl+u"], "command": "upper_case" },
|
||||
{ "keys": ["ctrl+k", "ctrl+l"], "command": "lower_case" },
|
||||
|
||||
{ "keys": ["ctrl+k", "ctrl+space"], "command": "set_mark" },
|
||||
{ "keys": ["ctrl+k", "ctrl+a"], "command": "select_to_mark" },
|
||||
{ "keys": ["ctrl+k", "ctrl+w"], "command": "delete_to_mark" },
|
||||
{ "keys": ["ctrl+k", "ctrl+x"], "command": "swap_with_mark" },
|
||||
{ "keys": ["ctrl+k", "ctrl+y"], "command": "yank" },
|
||||
{ "keys": ["ctrl+k", "ctrl+k"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard EOL.sublime-macro"} },
|
||||
{ "keys": ["ctrl+k", "ctrl+backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard BOL.sublime-macro"} },
|
||||
{ "keys": ["ctrl+k", "ctrl+g"], "command": "clear_bookmarks", "args": {"name": "mark"} },
|
||||
{ "keys": ["ctrl+k", "ctrl+c"], "command": "show_at_center" },
|
||||
|
||||
{ "keys": ["ctrl++"], "command": "increase_font_size" },
|
||||
{ "keys": ["ctrl+="], "command": "increase_font_size" },
|
||||
{ "keys": ["ctrl+-"], "command": "decrease_font_size" },
|
||||
|
||||
{ "keys": ["alt+shift+w"], "command": "insert_snippet", "args": { "name": "Packages/XML/Snippets/long-tag.sublime-snippet" } },
|
||||
|
||||
{ "keys": ["ctrl+shift+["], "command": "fold" },
|
||||
{ "keys": ["ctrl+shift+]"], "command": "unfold" },
|
||||
{ "keys": ["ctrl+k", "ctrl+1"], "command": "fold_by_level", "args": {"level": 1} },
|
||||
{ "keys": ["ctrl+k", "ctrl+2"], "command": "fold_by_level", "args": {"level": 2} },
|
||||
{ "keys": ["ctrl+k", "ctrl+3"], "command": "fold_by_level", "args": {"level": 3} },
|
||||
{ "keys": ["ctrl+k", "ctrl+4"], "command": "fold_by_level", "args": {"level": 4} },
|
||||
{ "keys": ["ctrl+k", "ctrl+5"], "command": "fold_by_level", "args": {"level": 5} },
|
||||
{ "keys": ["ctrl+k", "ctrl+6"], "command": "fold_by_level", "args": {"level": 6} },
|
||||
{ "keys": ["ctrl+k", "ctrl+7"], "command": "fold_by_level", "args": {"level": 7} },
|
||||
{ "keys": ["ctrl+k", "ctrl+8"], "command": "fold_by_level", "args": {"level": 8} },
|
||||
{ "keys": ["ctrl+k", "ctrl+9"], "command": "fold_by_level", "args": {"level": 9} },
|
||||
{ "keys": ["ctrl+k", "ctrl+0"], "command": "unfold_all" },
|
||||
{ "keys": ["ctrl+k", "ctrl+j"], "command": "unfold_all" },
|
||||
{ "keys": ["ctrl+k", "ctrl+t"], "command": "fold_tag_attributes" },
|
||||
|
||||
{ "keys": ["context_menu"], "command": "context_menu" },
|
||||
|
||||
{ "keys": ["alt+c"], "command": "toggle_case_sensitive", "context":
|
||||
[
|
||||
{ "key": "setting.is_widget", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["alt+r"], "command": "toggle_regex", "context":
|
||||
[
|
||||
{ "key": "setting.is_widget", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["alt+w"], "command": "toggle_whole_word", "context":
|
||||
[
|
||||
{ "key": "setting.is_widget", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["alt+a"], "command": "toggle_preserve_case", "context":
|
||||
[
|
||||
{ "key": "setting.is_widget", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
|
||||
// Find panel key bindings
|
||||
{ "keys": ["enter"], "command": "find_next", "context":
|
||||
[{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "find_prev", "context":
|
||||
[{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["alt+enter"], "command": "find_all", "args": {"close_panel": true},
|
||||
"context": [{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
|
||||
// Replace panel key bindings
|
||||
{ "keys": ["enter"], "command": "find_next", "context":
|
||||
[{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "find_prev", "context":
|
||||
[{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["alt+enter"], "command": "find_all", "args": {"close_panel": true},
|
||||
"context": [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["ctrl+alt+enter"], "command": "replace_all", "args": {"close_panel": true},
|
||||
"context": [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
|
||||
// Incremental find panel key bindings
|
||||
{ "keys": ["enter"], "command": "hide_panel", "context":
|
||||
[{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "find_prev", "context":
|
||||
[{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["alt+enter"], "command": "find_all", "args": {"close_panel": true},
|
||||
"context": [{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
|
||||
// Find in Files panel key bindings
|
||||
{ "keys": ["alt+enter"], "command": "find_all",
|
||||
"context": [{"key": "panel", "operand": "find_in_files"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["ctrl+alt+enter"], "command": "replace_all",
|
||||
"context": [{"key": "panel", "operand": "find_in_files"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
|
||||
// HTML, XML close tag
|
||||
{ "keys": ["/"], "command": "close_tag", "args": { "insert_slash": true }, "context":
|
||||
[
|
||||
{ "key": "selector", "operator": "equal", "operand": "(text.html, text.xml) - string - comment", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_match", "operand": ".*<$", "match_all": true },
|
||||
{ "key": "setting.auto_close_tags" }
|
||||
]
|
||||
}
|
||||
]
|
706
references/app-configs/sublime-text3/mac.sublime-keybinds.json
Normal file
@@ -0,0 +1,706 @@
|
||||
/*
|
||||
On OS X, basic text manipulations (left, right, command+left, etc) make use of the system key bindings,
|
||||
and don't need to be repeated here. Anything listed here will take precedence, however.
|
||||
*/
|
||||
[
|
||||
{ "keys": ["super+shift+n"], "command": "new_window" },
|
||||
{ "keys": ["super+shift+w"], "command": "close_window" },
|
||||
{ "keys": ["super+o"], "command": "prompt_open" },
|
||||
{ "keys": ["super+shift+t"], "command": "reopen_last_file" },
|
||||
{ "keys": ["super+alt+up"], "command": "switch_file", "args": {"extensions": ["cpp", "cxx", "cc", "c", "hpp", "hxx", "hh", "h", "ipp", "inl", "m", "mm"]} },
|
||||
{ "keys": ["super+n"], "command": "new_file" },
|
||||
{ "keys": ["super+s"], "command": "save" },
|
||||
{ "keys": ["super+shift+s"], "command": "prompt_save_as" },
|
||||
{ "keys": ["super+alt+s"], "command": "save_all" },
|
||||
{ "keys": ["super+w"], "command": "close" },
|
||||
|
||||
{ "keys": ["super+k", "super+b"], "command": "toggle_side_bar" },
|
||||
{ "keys": ["super+ctrl+f"], "command": "toggle_full_screen" },
|
||||
{ "keys": ["super+ctrl+shift+f"], "command": "toggle_distraction_free" },
|
||||
|
||||
{ "keys": ["super+z"], "command": "undo" },
|
||||
{ "keys": ["super+shift+z"], "command": "redo" },
|
||||
{ "keys": ["super+y"], "command": "redo_or_repeat" },
|
||||
{ "keys": ["super+u"], "command": "soft_undo" },
|
||||
{ "keys": ["super+shift+u"], "command": "soft_redo" },
|
||||
|
||||
{ "keys": ["super+x"], "command": "cut" },
|
||||
{ "keys": ["super+c"], "command": "copy" },
|
||||
{ "keys": ["super+v"], "command": "paste" },
|
||||
{ "keys": ["super+shift+v"], "command": "paste_and_indent" },
|
||||
{ "keys": ["super+k", "super+v"], "command": "paste_from_history" },
|
||||
{ "keys": ["super+option+v"], "command": "paste_from_history" },
|
||||
|
||||
{ "keys": ["ctrl+alt+left"], "command": "move", "args": {"by": "subwords", "forward": false} },
|
||||
{ "keys": ["ctrl+alt+right"], "command": "move", "args": {"by": "subword_ends", "forward": true} },
|
||||
{ "keys": ["ctrl+alt+shift+left"], "command": "move", "args": {"by": "subwords", "forward": false, "extend": true} },
|
||||
{ "keys": ["ctrl+alt+shift+right"], "command": "move", "args": {"by": "subword_ends", "forward": true, "extend": true} },
|
||||
|
||||
{ "keys": ["ctrl+left"], "command": "move", "args": {"by": "subwords", "forward": false} },
|
||||
{ "keys": ["ctrl+right"], "command": "move", "args": {"by": "subword_ends", "forward": true} },
|
||||
{ "keys": ["ctrl+shift+left"], "command": "move", "args": {"by": "subwords", "forward": false, "extend": true} },
|
||||
{ "keys": ["ctrl+shift+right"], "command": "move", "args": {"by": "subword_ends", "forward": true, "extend": true} },
|
||||
|
||||
{ "keys": ["ctrl+alt+up"], "command": "scroll_lines", "args": {"amount": 1.0} },
|
||||
{ "keys": ["ctrl+alt+down"], "command": "scroll_lines", "args": {"amount": -1.0} },
|
||||
|
||||
{ "keys": ["ctrl+shift+up"], "command": "select_lines", "args": {"forward": false} },
|
||||
{ "keys": ["ctrl+shift+down"], "command": "select_lines", "args": {"forward": true} },
|
||||
|
||||
{ "keys": ["super+shift+["], "command": "prev_view" },
|
||||
{ "keys": ["super+shift+]"], "command": "next_view" },
|
||||
{ "keys": ["super+alt+left"], "command": "prev_view" },
|
||||
{ "keys": ["super+alt+right"], "command": "next_view" },
|
||||
|
||||
{ "keys": ["ctrl+tab"], "command": "next_view_in_stack" },
|
||||
{ "keys": ["ctrl+shift+tab"], "command": "prev_view_in_stack" },
|
||||
|
||||
{ "keys": ["super+a"], "command": "select_all" },
|
||||
{ "keys": ["super+shift+l"], "command": "split_selection_into_lines" },
|
||||
{ "keys": ["escape"], "command": "single_selection", "context":
|
||||
[
|
||||
{ "key": "num_selections", "operator": "not_equal", "operand": 1 }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "clear_fields", "context":
|
||||
[
|
||||
{ "key": "has_next_field", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "clear_fields", "context":
|
||||
[
|
||||
{ "key": "has_prev_field", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "hide_panel", "args": {"cancel": true},
|
||||
"context":
|
||||
[
|
||||
{ "key": "panel_visible", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "hide_overlay", "context":
|
||||
[
|
||||
{ "key": "overlay_visible", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "hide_popup", "context":
|
||||
[
|
||||
{ "key": "popup_visible", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["escape"], "command": "hide_auto_complete", "context":
|
||||
[
|
||||
{ "key": "auto_complete_visible", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["super+]"], "command": "indent" },
|
||||
{ "keys": ["super+["], "command": "unindent" },
|
||||
|
||||
{ "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": true} },
|
||||
{ "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": false},
|
||||
"context":
|
||||
[
|
||||
{ "key": "setting.tab_completion", "operator": "equal", "operand": true },
|
||||
{ "key": "preceding_text", "operator": "not_regex_match", "operand": ".*\\b[0-9]+$", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "replace_completion_with_next_completion", "context":
|
||||
[
|
||||
{ "key": "last_command", "operator": "equal", "operand": "insert_best_completion" },
|
||||
{ "key": "setting.tab_completion", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "reindent", "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_match", "operand": "^$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_match", "operand": "^$", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "indent", "context":
|
||||
[
|
||||
{ "key": "text", "operator": "regex_contains", "operand": "\n" }
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "next_field", "context":
|
||||
[
|
||||
{ "key": "has_next_field", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["tab"], "command": "commit_completion", "context":
|
||||
[
|
||||
{ "key": "auto_complete_visible" },
|
||||
{ "key": "setting.auto_complete_commit_on_tab" }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["shift+tab"], "command": "insert", "args": {"characters": "\t"} },
|
||||
{ "keys": ["shift+tab"], "command": "unindent", "context":
|
||||
[
|
||||
{ "key": "setting.shift_tab_unindent", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+tab"], "command": "unindent", "context":
|
||||
[
|
||||
{ "key": "preceding_text", "operator": "regex_match", "operand": "^[\t ]*" }
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+tab"], "command": "unindent", "context":
|
||||
[
|
||||
{ "key": "text", "operator": "regex_contains", "operand": "\n" }
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+tab"], "command": "prev_field", "context":
|
||||
[
|
||||
{ "key": "has_prev_field", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["super+l"], "command": "expand_selection", "args": {"to": "line"} },
|
||||
{ "keys": ["super+d"], "command": "find_under_expand" },
|
||||
{ "keys": ["super+k", "super+d"], "command": "find_under_expand_skip" },
|
||||
{ "keys": ["super+shift+space"], "command": "expand_selection", "args": {"to": "scope"} },
|
||||
{ "keys": ["ctrl+shift+m"], "command": "expand_selection", "args": {"to": "brackets"} },
|
||||
{ "keys": ["ctrl+m"], "command": "move_to", "args": {"to": "brackets"} },
|
||||
{ "keys": ["super+shift+j"], "command": "expand_selection", "args": {"to": "indentation"} },
|
||||
{ "keys": ["super+shift+a"], "command": "expand_selection", "args": {"to": "tag"} },
|
||||
|
||||
{ "keys": ["super+alt+."], "command": "close_tag" },
|
||||
|
||||
{ "keys": ["ctrl+q"], "command": "toggle_record_macro" },
|
||||
{ "keys": ["ctrl+shift+q"], "command": "run_macro" },
|
||||
|
||||
{ "keys": ["super+enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line.sublime-macro"} },
|
||||
{ "keys": ["super+shift+enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line Before.sublime-macro"} },
|
||||
{ "keys": ["enter"], "command": "commit_completion", "context":
|
||||
[
|
||||
{ "key": "auto_complete_visible" },
|
||||
{ "key": "setting.auto_complete_commit_on_tab", "operand": false }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["super+t"], "command": "show_overlay", "args": {"overlay": "goto", "show_files": true} },
|
||||
{ "keys": ["super+p"], "command": "show_overlay", "args": {"overlay": "goto", "show_files": true} },
|
||||
{ "keys": ["super+shift+p"], "command": "show_overlay", "args": {"overlay": "command_palette"} },
|
||||
{ "keys": ["super+ctrl+p"], "command": "prompt_select_workspace" },
|
||||
{ "keys": ["super+r"], "command": "show_overlay", "args": {"overlay": "goto", "text": "@"} },
|
||||
{ "keys": ["ctrl+g"], "command": "show_overlay", "args": {"overlay": "goto", "text": ":"} },
|
||||
{ "keys": ["f12"], "command": "goto_definition" },
|
||||
{ "keys": ["super+alt+down"], "command": "goto_definition" },
|
||||
{ "keys": ["super+shift+r"], "command": "goto_symbol_in_project" },
|
||||
{ "keys": ["ctrl+minus"], "command": "jump_back" },
|
||||
{ "keys": ["ctrl+shift+minus"], "command": "jump_forward" },
|
||||
|
||||
{ "keys": ["super+i"], "command": "show_panel", "args": {"panel": "incremental_find", "reverse": false} },
|
||||
{ "keys": ["super+shift+i"], "command": "show_panel", "args": {"panel": "incremental_find", "reverse": true} },
|
||||
{ "keys": ["super+f"], "command": "show_panel", "args": {"panel": "find", "reverse": false} },
|
||||
{ "keys": ["super+alt+f"], "command": "show_panel", "args": {"panel": "replace", "reverse": false} },
|
||||
{ "keys": ["super+alt+e"], "command": "replace_next" },
|
||||
{ "keys": ["super+g"], "command": "find_next" },
|
||||
{ "keys": ["super+shift+g"], "command": "find_prev" },
|
||||
{ "keys": ["super+e"], "command": "slurp_find_string" },
|
||||
{ "keys": ["super+shift+e"], "command": "slurp_replace_string" },
|
||||
|
||||
{ "keys": ["alt+super+g"], "command": "find_under" },
|
||||
{ "keys": ["shift+alt+super+g"], "command": "find_under_prev" },
|
||||
{ "keys": ["ctrl+super+g"], "command": "find_all_under" },
|
||||
|
||||
{ "keys": ["super+shift+f"], "command": "show_panel", "args": {"panel": "find_in_files"} },
|
||||
{ "keys": ["f4"], "command": "next_result" },
|
||||
{ "keys": ["shift+f4"], "command": "prev_result" },
|
||||
|
||||
{ "keys": ["f6"], "command": "toggle_setting", "args": {"setting": "spell_check"} },
|
||||
{ "keys": ["ctrl+f6"], "command": "next_misspelling" },
|
||||
{ "keys": ["ctrl+shift+f6"], "command": "prev_misspelling" },
|
||||
|
||||
{ "keys": ["ctrl+super+up"], "command": "swap_line_up" },
|
||||
{ "keys": ["ctrl+super+down"], "command": "swap_line_down" },
|
||||
|
||||
{ "keys": ["ctrl+backspace"], "command": "delete_word", "args": { "forward": false, "sub_words": true } },
|
||||
{ "keys": ["ctrl+delete"], "command": "delete_word", "args": { "forward": true, "sub_words": true } },
|
||||
|
||||
{ "keys": ["super+forward_slash"], "command": "toggle_comment", "args": { "block": false } },
|
||||
{ "keys": ["super+alt+forward_slash"], "command": "toggle_comment", "args": { "block": true } },
|
||||
|
||||
{ "keys": ["super+j"], "command": "join_lines" },
|
||||
{ "keys": ["super+shift+d"], "command": "duplicate_line" },
|
||||
|
||||
{ "keys": ["ctrl+backquote"], "command": "show_panel", "args": {"panel": "console", "toggle": true} },
|
||||
|
||||
{ "keys": ["ctrl+space"], "command": "auto_complete" },
|
||||
{ "keys": ["ctrl+space"], "command": "replace_completion_with_auto_complete", "context":
|
||||
[
|
||||
{ "key": "last_command", "operator": "equal", "operand": "insert_best_completion" },
|
||||
{ "key": "auto_complete_visible", "operator": "equal", "operand": false },
|
||||
{ "key": "setting.tab_completion", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["super+alt+p"], "command": "show_scope_name" },
|
||||
{ "keys": ["ctrl+shift+p"], "command": "show_scope_name" },
|
||||
|
||||
{ "keys": ["f7"], "command": "build" },
|
||||
{ "keys": ["super+b"], "command": "build" },
|
||||
{ "keys": ["super+shift+b"], "command": "build", "args": {"select": true} },
|
||||
|
||||
{ "keys": ["ctrl+c"], "command": "cancel_build" },
|
||||
|
||||
{ "keys": ["ctrl+t"], "command": "transpose" },
|
||||
|
||||
{ "keys": ["f5"], "command": "sort_lines", "args": {"case_sensitive": false} },
|
||||
{ "keys": ["ctrl+f5"], "command": "sort_lines", "args": {"case_sensitive": true} },
|
||||
|
||||
// Auto-pair quotes
|
||||
{ "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\"$0\""}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "not_regex_contains", "operand": "[\"a-zA-Z0-9_]$", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\"${0:$SELECTION}\""}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["\""], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\"", "match_all": true },
|
||||
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\"$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\"", "match_all": true },
|
||||
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true },
|
||||
]
|
||||
},
|
||||
|
||||
// Auto-pair single quotes
|
||||
{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'$0'"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "not_regex_contains", "operand": "['a-zA-Z0-9_]$", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'${0:$SELECTION}'"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["'"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true },
|
||||
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "'$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true },
|
||||
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
|
||||
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true },
|
||||
]
|
||||
},
|
||||
|
||||
// Auto-pair brackets
|
||||
{ "keys": ["("], "command": "insert_snippet", "args": {"contents": "($0)"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|;|\\}|$)", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["("], "command": "insert_snippet", "args": {"contents": "(${0:$SELECTION})"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": [")"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\)", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\($", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\)", "match_all": true }
|
||||
]
|
||||
},
|
||||
|
||||
// Auto-pair square brackets
|
||||
{ "keys": ["["], "command": "insert_snippet", "args": {"contents": "[$0]"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|;|\\}|$)", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["["], "command": "insert_snippet", "args": {"contents": "[${0:$SELECTION}]"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["]"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\]", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\[$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\]", "match_all": true }
|
||||
]
|
||||
},
|
||||
|
||||
// Auto-pair curly brackets
|
||||
{ "keys": ["{"], "command": "insert_snippet", "args": {"contents": "{$0}"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|$)", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["{"], "command": "wrap_block", "args": {"begin": "{", "end": "}"}, "context":
|
||||
[
|
||||
{ "key": "indented_block", "match_all": true },
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_match", "operand": "^$", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["{"], "command": "insert_snippet", "args": {"contents": "{${0:$SELECTION}}"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["}"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line in Braces.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line in Braces.sublime-macro"}, "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
|
||||
]
|
||||
},
|
||||
|
||||
{ "keys": ["enter"], "command": "auto_indent_tag", "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "selector", "operator": "equal", "operand": "punctuation.definition.tag.begin", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": ">$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^</", "match_all": true },
|
||||
]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "auto_indent_tag", "context":
|
||||
[
|
||||
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
|
||||
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
|
||||
{ "key": "selector", "operator": "equal", "operand": "punctuation.definition.tag.begin", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_contains", "operand": ">$", "match_all": true },
|
||||
{ "key": "following_text", "operator": "regex_contains", "operand": "^</", "match_all": true },
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"keys": ["super+alt+1"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 1.0],
|
||||
"rows": [0.0, 1.0],
|
||||
"cells": [[0, 0, 1, 1]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["super+alt+2"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 0.5, 1.0],
|
||||
"rows": [0.0, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [1, 0, 2, 1]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["super+alt+3"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 0.33, 0.66, 1.0],
|
||||
"rows": [0.0, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["super+alt+4"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 0.25, 0.5, 0.75, 1.0],
|
||||
"rows": [0.0, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1], [3, 0, 4, 1]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["super+alt+shift+2"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 1.0],
|
||||
"rows": [0.0, 0.5, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [0, 1, 1, 2]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["super+alt+shift+3"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 1.0],
|
||||
"rows": [0.0, 0.33, 0.66, 1.0],
|
||||
"cells": [[0, 0, 1, 1], [0, 1, 1, 2], [0, 2, 1, 3]]
|
||||
}
|
||||
},
|
||||
{
|
||||
"keys": ["super+alt+5"],
|
||||
"command": "set_layout",
|
||||
"args":
|
||||
{
|
||||
"cols": [0.0, 0.5, 1.0],
|
||||
"rows": [0.0, 0.5, 1.0],
|
||||
"cells":
|
||||
[
|
||||
[0, 0, 1, 1], [1, 0, 2, 1],
|
||||
[0, 1, 1, 2], [1, 1, 2, 2]
|
||||
]
|
||||
}
|
||||
},
|
||||
{ "keys": ["ctrl+1"], "command": "focus_group", "args": { "group": 0 } },
|
||||
{ "keys": ["ctrl+2"], "command": "focus_group", "args": { "group": 1 } },
|
||||
{ "keys": ["ctrl+3"], "command": "focus_group", "args": { "group": 2 } },
|
||||
{ "keys": ["ctrl+4"], "command": "focus_group", "args": { "group": 3 } },
|
||||
{ "keys": ["ctrl+5"], "command": "focus_group", "args": { "group": 4 } },
|
||||
{ "keys": ["ctrl+6"], "command": "focus_group", "args": { "group": 5 } },
|
||||
{ "keys": ["ctrl+7"], "command": "focus_group", "args": { "group": 6 } },
|
||||
{ "keys": ["ctrl+8"], "command": "focus_group", "args": { "group": 7 } },
|
||||
{ "keys": ["ctrl+9"], "command": "focus_group", "args": { "group": 8 } },
|
||||
{ "keys": ["ctrl+shift+1"], "command": "move_to_group", "args": { "group": 0 } },
|
||||
{ "keys": ["ctrl+shift+2"], "command": "move_to_group", "args": { "group": 1 } },
|
||||
{ "keys": ["ctrl+shift+3"], "command": "move_to_group", "args": { "group": 2 } },
|
||||
{ "keys": ["ctrl+shift+4"], "command": "move_to_group", "args": { "group": 3 } },
|
||||
{ "keys": ["ctrl+shift+5"], "command": "move_to_group", "args": { "group": 4 } },
|
||||
{ "keys": ["ctrl+shift+6"], "command": "move_to_group", "args": { "group": 5 } },
|
||||
{ "keys": ["ctrl+shift+7"], "command": "move_to_group", "args": { "group": 6 } },
|
||||
{ "keys": ["ctrl+shift+8"], "command": "move_to_group", "args": { "group": 7 } },
|
||||
{ "keys": ["ctrl+shift+9"], "command": "move_to_group", "args": { "group": 8 } },
|
||||
{ "keys": ["ctrl+0"], "command": "focus_side_bar" },
|
||||
|
||||
{ "keys": ["super+k", "super+up"], "command": "new_pane" },
|
||||
{ "keys": ["super+k", "super+shift+up"], "command": "new_pane", "args": {"move": false} },
|
||||
{ "keys": ["super+k", "super+down"], "command": "close_pane" },
|
||||
{ "keys": ["super+k", "super+left"], "command": "focus_neighboring_group", "args": {"forward": false} },
|
||||
{ "keys": ["super+k", "super+right"], "command": "focus_neighboring_group" },
|
||||
{ "keys": ["super+k", "super+shift+left"], "command": "move_to_neighboring_group", "args": {"forward": false} },
|
||||
{ "keys": ["super+k", "super+shift+right"], "command": "move_to_neighboring_group" },
|
||||
|
||||
{ "keys": ["super+1"], "command": "select_by_index", "args": { "index": 0 } },
|
||||
{ "keys": ["super+2"], "command": "select_by_index", "args": { "index": 1 } },
|
||||
{ "keys": ["super+3"], "command": "select_by_index", "args": { "index": 2 } },
|
||||
{ "keys": ["super+4"], "command": "select_by_index", "args": { "index": 3 } },
|
||||
{ "keys": ["super+5"], "command": "select_by_index", "args": { "index": 4 } },
|
||||
{ "keys": ["super+6"], "command": "select_by_index", "args": { "index": 5 } },
|
||||
{ "keys": ["super+7"], "command": "select_by_index", "args": { "index": 6 } },
|
||||
{ "keys": ["super+8"], "command": "select_by_index", "args": { "index": 7 } },
|
||||
{ "keys": ["super+9"], "command": "select_by_index", "args": { "index": 8 } },
|
||||
{ "keys": ["super+0"], "command": "select_by_index", "args": { "index": 9 } },
|
||||
|
||||
{ "keys": ["f2"], "command": "next_bookmark" },
|
||||
{ "keys": ["shift+f2"], "command": "prev_bookmark" },
|
||||
{ "keys": ["super+f2"], "command": "toggle_bookmark" },
|
||||
{ "keys": ["super+shift+f2"], "command": "clear_bookmarks" },
|
||||
{ "keys": ["alt+f2"], "command": "select_all_bookmarks" },
|
||||
|
||||
{ "keys": ["super+k", "super+u"], "command": "upper_case" },
|
||||
{ "keys": ["super+k", "super+l"], "command": "lower_case" },
|
||||
{ "keys": ["super+k", "super+space"], "command": "set_mark" },
|
||||
{ "keys": ["super+k", "super+a"], "command": "select_to_mark" },
|
||||
{ "keys": ["super+k", "super+w"], "command": "delete_to_mark" },
|
||||
{ "keys": ["super+k", "super+x"], "command": "swap_with_mark" },
|
||||
{ "keys": ["super+k", "super+g"], "command": "clear_bookmarks", "args": {"name": "mark"} },
|
||||
|
||||
{ "keys": ["super+equals"], "command": "increase_font_size" },
|
||||
{ "keys": ["super+plus"], "command": "increase_font_size" },
|
||||
{ "keys": ["super+minus"], "command": "decrease_font_size" },
|
||||
|
||||
{ "keys": ["ctrl+shift+w"], "command": "insert_snippet", "args": { "name": "Packages/XML/Snippets/long-tag.sublime-snippet" } },
|
||||
|
||||
{ "keys": ["ctrl+shift+k"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Line.sublime-macro"} },
|
||||
|
||||
{ "keys": ["super+alt+q"], "command": "wrap_lines" },
|
||||
|
||||
{ "keys": ["super+alt+["], "command": "fold" },
|
||||
{ "keys": ["super+alt+]"], "command": "unfold" },
|
||||
{ "keys": ["super+k", "super+1"], "command": "fold_by_level", "args": {"level": 1} },
|
||||
{ "keys": ["super+k", "super+2"], "command": "fold_by_level", "args": {"level": 2} },
|
||||
{ "keys": ["super+k", "super+3"], "command": "fold_by_level", "args": {"level": 3} },
|
||||
{ "keys": ["super+k", "super+4"], "command": "fold_by_level", "args": {"level": 4} },
|
||||
{ "keys": ["super+k", "super+5"], "command": "fold_by_level", "args": {"level": 5} },
|
||||
{ "keys": ["super+k", "super+6"], "command": "fold_by_level", "args": {"level": 6} },
|
||||
{ "keys": ["super+k", "super+7"], "command": "fold_by_level", "args": {"level": 7} },
|
||||
{ "keys": ["super+k", "super+8"], "command": "fold_by_level", "args": {"level": 8} },
|
||||
{ "keys": ["super+k", "super+9"], "command": "fold_by_level", "args": {"level": 9} },
|
||||
{ "keys": ["super+k", "super+0"], "command": "unfold_all" },
|
||||
{ "keys": ["super+k", "super+j"], "command": "unfold_all" },
|
||||
{ "keys": ["super+k", "super+t"], "command": "fold_tag_attributes" },
|
||||
|
||||
{ "keys": ["super+alt+o"], "command": "toggle_overwrite" },
|
||||
|
||||
{ "keys": ["alt+f2"], "command": "context_menu" },
|
||||
|
||||
{ "keys": ["super+alt+c"], "command": "toggle_case_sensitive", "context":
|
||||
[
|
||||
{ "key": "setting.is_widget", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["super+alt+r"], "command": "toggle_regex", "context":
|
||||
[
|
||||
{ "key": "setting.is_widget", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["super+alt+w"], "command": "toggle_whole_word", "context":
|
||||
[
|
||||
{ "key": "setting.is_widget", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
{ "keys": ["super+alt+a"], "command": "toggle_preserve_case", "context":
|
||||
[
|
||||
{ "key": "setting.is_widget", "operator": "equal", "operand": true }
|
||||
]
|
||||
},
|
||||
|
||||
// Find panel key bindings
|
||||
{ "keys": ["enter"], "command": "find_next", "context":
|
||||
[{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "find_prev", "context":
|
||||
[{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["alt+enter"], "command": "find_all", "args": {"close_panel": true},
|
||||
"context": [{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
|
||||
// Replace panel key bindings
|
||||
{ "keys": ["enter"], "command": "find_next", "context":
|
||||
[{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "find_prev", "context":
|
||||
[{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["alt+enter"], "command": "find_all", "args": {"close_panel": true},
|
||||
"context": [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["ctrl+alt+enter"], "command": "replace_all", "args": {"close_panel": true},
|
||||
"context": [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
|
||||
// Incremental find panel key bindings
|
||||
{ "keys": ["enter"], "command": "hide_panel", "context":
|
||||
[{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["shift+enter"], "command": "find_prev", "context":
|
||||
[{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
{ "keys": ["alt+enter"], "command": "find_all", "args": {"close_panel": true},
|
||||
"context": [{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
|
||||
},
|
||||
|
||||
{ "keys": ["super+,"], "command": "edit_settings", "args":
|
||||
{
|
||||
"base_file": "${packages}/Default/Preferences.sublime-settings",
|
||||
"default": "// Settings in here override those in \"Default/Preferences.sublime-settings\",\n// and are overridden in turn by syntax-specific settings.\n{\n\t$0\n}\n"
|
||||
}
|
||||
},
|
||||
|
||||
{ "keys": ["super+k", "super+y"], "command": "yank" },
|
||||
{ "keys": ["super+k", "super+k"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard EOL.sublime-macro"} },
|
||||
{ "keys": ["super+k", "super+backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard BOL.sublime-macro"} },
|
||||
{ "keys": ["super+k", "super+c"], "command": "show_at_center" },
|
||||
|
||||
// These are OS X built in commands, and don't need to be listed here, but
|
||||
// doing so lets them show up in the menu
|
||||
{ "keys": ["ctrl+y"], "command": "yank" },
|
||||
{ "keys": ["super+backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard BOL.sublime-macro"} },
|
||||
// super+delete isn't a built in command, but makes sense anyway
|
||||
{ "keys": ["super+delete"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard EOL.sublime-macro"} },
|
||||
{ "keys": ["ctrl+k"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard EOL.sublime-macro"} },
|
||||
{ "keys": ["ctrl+l"], "command": "show_at_center" },
|
||||
{ "keys": ["ctrl+o"], "command": "insert_snippet", "args": { "contents": "$0\n" } },
|
||||
{ "keys": ["ctrl+super+d"], "command": "noop" },
|
||||
{ "keys": ["ctrl+super+shift+d"], "command": "noop" },
|
||||
|
||||
// HTML, XML close tag
|
||||
{ "keys": ["/"], "command": "close_tag", "args": { "insert_slash": true }, "context":
|
||||
[
|
||||
{ "key": "selector", "operator": "equal", "operand": "(text.html, text.xml) - string - comment", "match_all": true },
|
||||
{ "key": "preceding_text", "operator": "regex_match", "operand": ".*<$", "match_all": true },
|
||||
{ "key": "setting.auto_close_tags" }
|
||||
]
|
||||
}
|
||||
]
|
432
references/builtin-keyboard.json
Normal file
@@ -0,0 +1,432 @@
|
||||
{"scancode":"01",
|
||||
"eventcode":1,
|
||||
"eventname":"ESC"},
|
||||
{"scancode":"02",
|
||||
"eventcode":2,
|
||||
"eventname":"1"},
|
||||
{"scancode":"03",
|
||||
"eventcode":3,
|
||||
"eventname":"2"},
|
||||
{"scancode":"04",
|
||||
"eventcode":4,
|
||||
"eventname":"3"},
|
||||
{"scancode":"05",
|
||||
"eventcode":5,
|
||||
"eventname":"4"},
|
||||
{"scancode":"06",
|
||||
"eventcode":6,
|
||||
"eventname":"5"},
|
||||
{"scancode":"07",
|
||||
"eventcode":7,
|
||||
"eventname":"6"},
|
||||
{"scancode":"08",
|
||||
"eventcode":8,
|
||||
"eventname":"7"},
|
||||
{"scancode":"09",
|
||||
"eventcode":9,
|
||||
"eventname":"8"},
|
||||
{"scancode":"0a",
|
||||
"eventcode":10,
|
||||
"eventname":"9"},
|
||||
{"scancode":"0b",
|
||||
"eventcode":11,
|
||||
"eventname":"0"},
|
||||
{"scancode":"0c",
|
||||
"eventcode":12,
|
||||
"eventname":"MINUS"},
|
||||
{"scancode":"0d",
|
||||
"eventcode":13,
|
||||
"eventname":"EQUAL"},
|
||||
{"scancode":"0e",
|
||||
"eventcode":14,
|
||||
"eventname":"BACKSPACE"},
|
||||
{"scancode":"0f",
|
||||
"eventcode":15,
|
||||
"eventname":"TAB"},
|
||||
{"scancode":"10",
|
||||
"eventcode":16,
|
||||
"eventname":"Q"},
|
||||
{"scancode":"11",
|
||||
"eventcode":17,
|
||||
"eventname":"W"},
|
||||
{"scancode":"12",
|
||||
"eventcode":18,
|
||||
"eventname":"E"},
|
||||
{"scancode":"13",
|
||||
"eventcode":19,
|
||||
"eventname":"R"},
|
||||
{"scancode":"14",
|
||||
"eventcode":20,
|
||||
"eventname":"T"},
|
||||
{"scancode":"15",
|
||||
"eventcode":21,
|
||||
"eventname":"Y"},
|
||||
{"scancode":"16",
|
||||
"eventcode":22,
|
||||
"eventname":"U"},
|
||||
{"scancode":"17",
|
||||
"eventcode":23,
|
||||
"eventname":"I"},
|
||||
{"scancode":"18",
|
||||
"eventcode":24,
|
||||
"eventname":"O"},
|
||||
{"scancode":"19",
|
||||
"eventcode":25,
|
||||
"eventname":"P"},
|
||||
{"scancode":"1a",
|
||||
"eventcode":26,
|
||||
"eventname":"LEFTBRACE"},
|
||||
{"scancode":"1b",
|
||||
"eventcode":27,
|
||||
"eventname":"RIGHTBRACE"},
|
||||
{"scancode":"1c",
|
||||
"eventcode":28,
|
||||
"eventname":"ENTER"},
|
||||
{"scancode":"1d",
|
||||
"eventcode":29,
|
||||
"eventname":"LEFTCTRL"},
|
||||
{"scancode":"1e",
|
||||
"eventcode":30,
|
||||
"eventname":"A"},
|
||||
{"scancode":"1f",
|
||||
"eventcode":31,
|
||||
"eventname":"S"},
|
||||
{"scancode":"20",
|
||||
"eventcode":32,
|
||||
"eventname":"D"},
|
||||
{"scancode":"21",
|
||||
"eventcode":33,
|
||||
"eventname":"F"},
|
||||
{"scancode":"22",
|
||||
"eventcode":34,
|
||||
"eventname":"G"},
|
||||
{"scancode":"23",
|
||||
"eventcode":35,
|
||||
"eventname":"H"},
|
||||
{"scancode":"24",
|
||||
"eventcode":36,
|
||||
"eventname":"J"},
|
||||
{"scancode":"25",
|
||||
"eventcode":37,
|
||||
"eventname":"K"},
|
||||
{"scancode":"26",
|
||||
"eventcode":38,
|
||||
"eventname":"L"},
|
||||
{"scancode":"27",
|
||||
"eventcode":39,
|
||||
"eventname":"SEMICOLON"},
|
||||
{"scancode":"28",
|
||||
"eventcode":40,
|
||||
"eventname":"APOSTROPHE"},
|
||||
{"scancode":"29",
|
||||
"eventcode":41,
|
||||
"eventname":"GRAVE"},
|
||||
{"scancode":"2a",
|
||||
"eventcode":42,
|
||||
"eventname":"LEFTSHIFT"},
|
||||
{"scancode":"2b",
|
||||
"eventcode":43,
|
||||
"eventname":"BACKSLASH"},
|
||||
{"scancode":"2c",
|
||||
"eventcode":44,
|
||||
"eventname":"Z"},
|
||||
{"scancode":"2d",
|
||||
"eventcode":45,
|
||||
"eventname":"X"},
|
||||
{"scancode":"2e",
|
||||
"eventcode":46,
|
||||
"eventname":"C"},
|
||||
{"scancode":"2f",
|
||||
"eventcode":47,
|
||||
"eventname":"V"},
|
||||
{"scancode":"30",
|
||||
"eventcode":48,
|
||||
"eventname":"B"},
|
||||
{"scancode":"31",
|
||||
"eventcode":49,
|
||||
"eventname":"N"},
|
||||
{"scancode":"32",
|
||||
"eventcode":50,
|
||||
"eventname":"M"},
|
||||
{"scancode":"33",
|
||||
"eventcode":51,
|
||||
"eventname":"COMMA"},
|
||||
{"scancode":"34",
|
||||
"eventcode":52,
|
||||
"eventname":"DOT"},
|
||||
{"scancode":"35",
|
||||
"eventcode":53,
|
||||
"eventname":"SLASH"},
|
||||
{"scancode":"36",
|
||||
"eventcode":54,
|
||||
"eventname":"RIGHTSHIFT"},
|
||||
{"scancode":"37",
|
||||
"eventcode":55,
|
||||
"eventname":"KPASTERISK"},
|
||||
{"scancode":"38",
|
||||
"eventcode":56,
|
||||
"eventname":"LEFTALT"},
|
||||
{"scancode":"39",
|
||||
"eventcode":57,
|
||||
"eventname":"SPACE"},
|
||||
{"scancode":"40",
|
||||
"eventcode":58,
|
||||
"eventname":"CAPSLOCK"},
|
||||
{"scancode":"41",
|
||||
"eventcode":59,
|
||||
"eventname":"F1"},
|
||||
{"scancode":"42",
|
||||
"eventcode":60,
|
||||
"eventname":"F2"},
|
||||
{"scancode":"43",
|
||||
"eventcode":61,
|
||||
"eventname":"F3"},
|
||||
{"scancode":"44",
|
||||
"eventcode":62,
|
||||
"eventname":"F4"},
|
||||
{"scancode":"45",
|
||||
"eventcode":63,
|
||||
"eventname":"F5"},
|
||||
{"scancode":"46",
|
||||
"eventcode":64,
|
||||
"eventname":"F6"},
|
||||
{"scancode":"47",
|
||||
"eventcode":65,
|
||||
"eventname":"F7"},
|
||||
{"scancode":"48",
|
||||
"eventcode":66,
|
||||
"eventname":"F8"},
|
||||
{"scancode":"49",
|
||||
"eventcode":67,
|
||||
"eventname":"F9"},
|
||||
{"scancode":"50",
|
||||
"eventcode":68,
|
||||
"eventname":"F10"},
|
||||
{"scancode":"51",
|
||||
"eventcode":69,
|
||||
"eventname":"NUMLOCK"},
|
||||
{"scancode":"52",
|
||||
"eventcode":70,
|
||||
"eventname":"SCROLLLOCK"},
|
||||
{"scancode":"53",
|
||||
"eventcode":71,
|
||||
"eventname":"KP7"},
|
||||
{"scancode":"54",
|
||||
"eventcode":72,
|
||||
"eventname":"KP8"},
|
||||
{"scancode":"55",
|
||||
"eventcode":73,
|
||||
"eventname":"KP9"},
|
||||
{"scancode":"56",
|
||||
"eventcode":74,
|
||||
"eventname":"KPMINUS"},
|
||||
{"scancode":"57",
|
||||
"eventcode":75,
|
||||
"eventname":"KP4"},
|
||||
{"scancode":"58",
|
||||
"eventcode":76,
|
||||
"eventname":"KP5"},
|
||||
{"scancode":"59",
|
||||
"eventcode":77,
|
||||
"eventname":"KP6"},
|
||||
{"scancode":"5A",
|
||||
"eventcode":78,
|
||||
"eventname":"KPPLUS"},
|
||||
{"scancode":"5B",
|
||||
"eventcode":79,
|
||||
"eventname":"KP1"},
|
||||
{"scancode":"5C",
|
||||
"eventcode":80,
|
||||
"eventname":"KP2"},
|
||||
{"scancode":"5D",
|
||||
"eventcode":81,
|
||||
"eventname":"KP3"},
|
||||
{"scancode":"5E",
|
||||
"eventcode":82,
|
||||
"eventname":"KP0"},
|
||||
{"scancode":"5F",
|
||||
"eventcode":83,
|
||||
"eventname":"KPDOT"},
|
||||
{"scancode":"60",
|
||||
"eventcode":85,
|
||||
"eventname":"ZENKAKUHANKAKU"},
|
||||
{"scancode":"61",
|
||||
"eventcode":86,
|
||||
"eventname":"102ND"},
|
||||
{"scancode":"62",
|
||||
"eventcode":87,
|
||||
"eventname":"F11"},
|
||||
{"scancode":"63",
|
||||
"eventcode":88,
|
||||
"eventname":"F12"},
|
||||
{"scancode":"64",
|
||||
"eventcode":89,
|
||||
"eventname":"RO"},
|
||||
{"scancode":"65",
|
||||
"eventcode":90,
|
||||
"eventname":"KATAKANA"},
|
||||
{"scancode":"66",
|
||||
"eventcode":91,
|
||||
"eventname":"HIRAGANA"},
|
||||
{"scancode":"67",
|
||||
"eventcode":92,
|
||||
"eventname":"HENKAN"},
|
||||
{"scancode":"68",
|
||||
"eventcode":93,
|
||||
"eventname":"KATAKANAHIRAGANA"},
|
||||
{"scancode":"69",
|
||||
"eventcode":94,
|
||||
"eventname":"MUHENKAN"},
|
||||
{"scancode":"6A",
|
||||
"eventcode":95,
|
||||
"eventname":"KPJPCOMMA"},
|
||||
{"scancode":"6B",
|
||||
"eventcode":96,
|
||||
"eventname":"KPENTER"},
|
||||
{"scancode":"6C",
|
||||
"eventcode":97,
|
||||
"eventname":"RIGHTCTRL"},
|
||||
{"scancode":"6D",
|
||||
"eventcode":98,
|
||||
"eventname":"KPSLASH"},
|
||||
{"scancode":"6E",
|
||||
"eventcode":99,
|
||||
"eventname":"SYSRQ"},
|
||||
{"scancode":"6F",
|
||||
"eventcode":100,
|
||||
"eventname":"RIGHTALT"},
|
||||
{"scancode":"70",
|
||||
"eventcode":102,
|
||||
"eventname":"HOME"},
|
||||
{"scancode":"71",
|
||||
"eventcode":103,
|
||||
"eventname":"UP"},
|
||||
{"scancode":"72",
|
||||
"eventcode":104,
|
||||
"eventname":"PAGEUP"},
|
||||
{"scancode":"73",
|
||||
"eventcode":105,
|
||||
"eventname":"LEFT"},
|
||||
{"scancode":"74",
|
||||
"eventcode":106,
|
||||
"eventname":"RIGHT"},
|
||||
{"scancode":"75",
|
||||
"eventcode":107,
|
||||
"eventname":"END"},
|
||||
{"scancode":"76",
|
||||
"eventcode":108,
|
||||
"eventname":"DOWN"},
|
||||
{"scancode":"77",
|
||||
"eventcode":109,
|
||||
"eventname":"PAGEDOWN"},
|
||||
{"scancode":"78",
|
||||
"eventcode":110,
|
||||
"eventname":"INSERT"},
|
||||
{"scancode":"79",
|
||||
"eventcode":111,
|
||||
"eventname":"DELETE"},
|
||||
{"scancode":"7A",
|
||||
"eventcode":112,
|
||||
"eventname":"MACRO"},
|
||||
{"scancode":"7B",
|
||||
"eventcode":113,
|
||||
"eventname":"MUTE"},
|
||||
{"scancode":"7C",
|
||||
"eventcode":114,
|
||||
"eventname":"VOLUMEDOWN"},
|
||||
{"scancode":"7D",
|
||||
"eventcode":115,
|
||||
"eventname":"VOLUMEUP"},
|
||||
{"scancode":"7E",
|
||||
"eventcode":116,
|
||||
"eventname":"POWER"},
|
||||
{"scancode":"7F",
|
||||
"eventcode":117,
|
||||
"eventname":"KPEQUAL"},
|
||||
{"scancode":"80",
|
||||
"eventcode":118,
|
||||
"eventname":"KPPLUSMINUS"},
|
||||
{"scancode":"81",
|
||||
"eventcode":119,
|
||||
"eventname":"PAUSE"},
|
||||
{"scancode":"82",
|
||||
"eventcode":121,
|
||||
"eventname":"KPCOMMA"},
|
||||
{"scancode":"83",
|
||||
"eventcode":122,
|
||||
"eventname":"HANGUEL"},
|
||||
{"scancode":"84",
|
||||
"eventcode":123,
|
||||
"eventname":"HANJA"},
|
||||
{"scancode":"85",
|
||||
"eventcode":124,
|
||||
"eventname":"YEN"},
|
||||
{"scancode":"86",
|
||||
"eventcode":125,
|
||||
"eventname":"LEFTMETA"},
|
||||
{"scancode":"87",
|
||||
"eventcode":126,
|
||||
"eventname":"RIGHTMETA"},
|
||||
{"scancode":"88",
|
||||
"eventcode":127,
|
||||
"eventname":"COMPOSE"},
|
||||
{"scancode":"89",
|
||||
"eventcode":128,
|
||||
"eventname":"STOP"},
|
||||
{"scancode":"8A",
|
||||
"eventcode":140,
|
||||
"eventname":"CALC"},
|
||||
{"scancode":"8B",
|
||||
"eventcode":142,
|
||||
"eventname":"SLEEP"},
|
||||
{"scancode":"8C",
|
||||
"eventcode":143,
|
||||
"eventname":"WAKEUP"},
|
||||
{"scancode":"8D",
|
||||
"eventcode":155,
|
||||
"eventname":"MAIL"},
|
||||
{"scancode":"8E",
|
||||
"eventcode":156,
|
||||
"eventname":"BOOKMARKS"},
|
||||
{"scancode":"8F",
|
||||
"eventcode":157,
|
||||
"eventname":"COMPUTER"},
|
||||
{"scancode":"90",
|
||||
"eventcode":158,
|
||||
"eventname":"BACK"},
|
||||
{"scancode":"91",
|
||||
"eventcode":159,
|
||||
"eventname":"FORWARD"},
|
||||
{"scancode":"92",
|
||||
"eventcode":163,
|
||||
"eventname":"NEXTSONG"},
|
||||
{"scancode":"93",
|
||||
"eventcode":164,
|
||||
"eventname":"PLAYPAUSE"},
|
||||
{"scancode":"94",
|
||||
"eventcode":165,
|
||||
"eventname":"PREVIOUSSONG"},
|
||||
{"scancode":"95",
|
||||
"eventcode":166,
|
||||
"eventname":"STOPCD"},
|
||||
{"scancode":"96",
|
||||
"eventcode":172,
|
||||
"eventname":"HOMEPAGE"},
|
||||
{"scancode":"97",
|
||||
"eventcode":173,
|
||||
"eventname":"REFRESH"},
|
||||
{"scancode":"98",
|
||||
"eventcode":183,
|
||||
"eventname":"F13"},
|
||||
{"scancode":"99",
|
||||
"eventcode":184,
|
||||
"eventname":"F14"},
|
||||
{"scancode":"9A",
|
||||
"eventcode":185,
|
||||
"eventname":"F15"},
|
||||
{"scancode":"9B",
|
||||
"eventcode":217,
|
||||
"eventname":"SEARCH"},
|
||||
{"scancode":"9C",
|
||||
"eventcode":226,
|
||||
"eventname":"MEDIA"}
|
115
references/kintopy/kinto.py
Normal file
@@ -0,0 +1,115 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# Kinto - Python implementation of Xlib
|
||||
#
|
||||
# Based on code by Stephan Sokolow
|
||||
# Source: https://gist.github.com/ssokolow/e7c9aae63fb7973e4d64cff969a78ae8
|
||||
from contextlib import contextmanager
|
||||
import Xlib
|
||||
import Xlib.display
|
||||
|
||||
# Connect to the X server and get the root window
|
||||
disp = Xlib.display.Display()
|
||||
root = disp.screen().root
|
||||
|
||||
# Prepare the property names we use so they can be fed into X11 APIs
|
||||
NET_ACTIVE_WINDOW = disp.intern_atom('_NET_ACTIVE_WINDOW')
|
||||
NET_WM_NAME = disp.intern_atom('_NET_WM_NAME') # UTF-8
|
||||
WM_NAME = disp.intern_atom('WM_NAME') # Legacy encoding
|
||||
NET_WM_CLASS = disp.intern_atom('_NET_WM_CLASS') # UTF-8
|
||||
WM_CLASS = disp.intern_atom('WM_CLASS')
|
||||
|
||||
last_seen = { 'xid': None, 'title': None }
|
||||
|
||||
@contextmanager
|
||||
def window_obj(win_id):
|
||||
"""Simplify dealing with BadWindow (make it either valid or None)"""
|
||||
window_obj = None
|
||||
if win_id:
|
||||
try:
|
||||
window_obj = disp.create_resource_object('window', win_id)
|
||||
except Xlib.error.XError:
|
||||
pass
|
||||
yield window_obj
|
||||
|
||||
def get_active_window():
|
||||
"""Return a (window_obj, focus_has_changed) tuple for the active window."""
|
||||
win_id = root.get_full_property(NET_ACTIVE_WINDOW,Xlib.X.AnyPropertyType).value[0]
|
||||
|
||||
focus_changed = (win_id != last_seen['xid'])
|
||||
if focus_changed:
|
||||
with window_obj(last_seen['xid']) as old_win:
|
||||
if old_win:
|
||||
old_win.change_attributes(event_mask=Xlib.X.NoEventMask)
|
||||
|
||||
last_seen['xid'] = win_id
|
||||
with window_obj(win_id) as new_win:
|
||||
if new_win:
|
||||
new_win.change_attributes(event_mask=Xlib.X.PropertyChangeMask)
|
||||
|
||||
return win_id, focus_changed
|
||||
|
||||
def _get_window_class_inner(win_obj):
|
||||
for atom in (NET_WM_CLASS, WM_CLASS):
|
||||
try:
|
||||
window_class = win_obj.get_full_property(atom, 0)
|
||||
|
||||
except UnicodeDecodeError: # Apparently a Debian distro package bug
|
||||
title = "<could not decode characters>"
|
||||
else:
|
||||
if window_class:
|
||||
win_class = window_class.value.split('\x00')[1]
|
||||
if isinstance(win_class, bytes):
|
||||
# Apparently COMPOUND_TEXT is so arcane that this is how
|
||||
# tools like xprop deal with receiving it these days
|
||||
win_class = win_class.split('\x00')[1].decode('latin1', 'replace')
|
||||
return win_class
|
||||
else:
|
||||
title = "<unnamed window>"
|
||||
|
||||
return "{} (XID: {})".format(title, win_obj.id)
|
||||
|
||||
def get_window_class(win_id):
|
||||
"""Look up the window name for a given X11 window ID"""
|
||||
if not win_id:
|
||||
last_seen['title'] = "<no window id>"
|
||||
return last_seen['title']
|
||||
|
||||
title_changed = False
|
||||
with window_obj(win_id) as wobj:
|
||||
if wobj:
|
||||
win_title = _get_window_class_inner(wobj)
|
||||
title_changed = (win_title != last_seen['title'])
|
||||
last_seen['title'] = win_title
|
||||
|
||||
return last_seen['title'], title_changed
|
||||
|
||||
def handle_xevent(event):
|
||||
# Loop through, ignoring events until we're notified of focus/title change
|
||||
if event.type != Xlib.X.PropertyNotify:
|
||||
return
|
||||
|
||||
changed = False
|
||||
if event.atom == NET_ACTIVE_WINDOW:
|
||||
if get_active_window()[1]:
|
||||
changed = changed or get_window_class(last_seen['xid'])[1]
|
||||
elif event.atom in (NET_WM_CLASS, WM_CLASS):
|
||||
changed = changed or get_window_class(last_seen['xid'])[1]
|
||||
|
||||
if changed:
|
||||
handle_change(last_seen)
|
||||
|
||||
def handle_change(new_state):
|
||||
"""Replace this with whatever you want to actually do"""
|
||||
print(new_state['title'])
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Listen for _NET_ACTIVE_WINDOW changes
|
||||
root.change_attributes(event_mask=Xlib.X.PropertyChangeMask)
|
||||
|
||||
# Prime last_seen with whatever window was active when we started this
|
||||
get_window_class(get_active_window()[0])
|
||||
handle_change(last_seen)
|
||||
|
||||
while True: # next_event() sleeps until we get an event
|
||||
handle_xevent(disp.next_event())
|
16
references/old-files/chromebook.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
mkdir -p ~/.xkb/{keymap,symbols,types}
|
||||
cp ./.xkb/symbols/chromebook ~/.xkb/symbols/chromebook
|
||||
cp ./.xkb/symbols/mac_gui ~/.xkb/symbols/mac_gui
|
||||
cp ./.xkb/types/mac_gui ~/.xkb/types/mac_gui
|
||||
setxkbmap -option
|
||||
setxkbmap -print > ~/.xkb/keymap/kbd.chromebook.gui
|
||||
setxkbmap -print > ~/.xkb/keymap/kbd.chromebook.term
|
||||
line=$(cat ~/.xkb/keymap/kbd.chromebook.gui | grep -n 'xkb_symbols' | cut -f1 -d:)
|
||||
sed -ie "${line}s/\"/+chromebook(swap_lalt_lctrl)+mac_gui(mac_levelssym)\"/2" ~/.xkb/keymap/kbd.chromebook.gui
|
||||
sleep 1
|
||||
line=$(cat ~/.xkb/keymap/kbd.chromebook.gui | grep -n 'xkb_types' | cut -f1 -d:)
|
||||
sed -ie "${line}s/\"/+mac_gui(addmac_levels)\"/2" ~/.xkb/keymap/kbd.chromebook.gui
|
||||
sleep 1
|
||||
line=$(cat ~/.xkb/keymap/kbd.chromebook.term | grep -n 'xkb_symbols' | cut -f1 -d:)
|
||||
sed -ie "${line}s/\"/+altwin(swap_alt_win)+mac_term(mac_levelssym)\"/2" ~/.xkb/keymap/kbd.chromebook.term
|
176
references/old-files/install.py
Executable file
@@ -0,0 +1,176 @@
|
||||
#!/usr/bin/env python3
|
||||
import os, platform, sysconfig, sys, subprocess, time
|
||||
|
||||
yellow = "\033[1;33m"
|
||||
green = "\033[0;32m"
|
||||
red = "\033[1;31m"
|
||||
italic = "\033[3m"
|
||||
reset = "\033[0;0m"
|
||||
|
||||
platform_name = platform.system()
|
||||
# print sysconfig.get_platform()
|
||||
|
||||
sys.stdout.write(yellow)
|
||||
cloud = '\u2601'
|
||||
circleo = '\u25CE'
|
||||
clocko = '\u2B6E'
|
||||
syme = '\u0250'
|
||||
syma = '\u0251'
|
||||
# bang = '\u1F589'.decode('unicode-escape')
|
||||
|
||||
internalid = 0
|
||||
usbid = 0
|
||||
|
||||
def keyboard_detect():
|
||||
global internalid, usbid, chromeswap, system_type
|
||||
internal_kbname = ""
|
||||
usb_kbname = ""
|
||||
|
||||
# If chromebook
|
||||
if system_type == "2":
|
||||
print()
|
||||
print("Looking for keyboards...")
|
||||
print()
|
||||
result = subprocess.check_output('xinput list | grep -iv "Virtual\|USB" | grep -i "keyboard.*keyboard" | grep -o -P "(?<=↳).*(?=id\=)";exit 0', shell=True).decode('utf-8')
|
||||
if result != "":
|
||||
internal_kbname = result.strip()
|
||||
internalid = subprocess.check_output('xinput list | grep -iv "Virtual\|USB" | grep -i "keyboard.*keyboard" | cut -d "=" -f 2- | awk \'{print $1}\' | tail -1;exit 0', shell=True).decode('utf-8')
|
||||
print("Internal Keyboard\nName: " + internal_kbname + "\nID: " + internalid)
|
||||
|
||||
result = subprocess.check_output('udevadm info -e | grep -o -P "(?<=by-id/usb-).*(?=-event-kbd)" | head -1;exit 0', shell=True).decode('utf-8')
|
||||
if result != "":
|
||||
usb_kbname = result.strip()
|
||||
|
||||
# Loop the following to ensure the id is picked up after 5-10 tries
|
||||
usbid = ""
|
||||
usbcount=0
|
||||
while usbid == "":
|
||||
usbid = subprocess.check_output('udevadm info -e | stdbuf -oL grep -o -P "(?<=event-kbd /dev/input/by-path/pci-0000:00:).*(?=.0-usb) | head -n 1";exit 0', shell=True).decode('utf-8')
|
||||
if usbid == "":
|
||||
usbcount += 1
|
||||
# print('usbid not found '+ str(usbcount))
|
||||
if usbcount == 5:
|
||||
usbid = "0"
|
||||
time.sleep(1)
|
||||
print("\nUSB Keyboard\n" + "Name: " + usb_kbname + "\nID: " + usbid)
|
||||
|
||||
if system_type == "1":
|
||||
system_type = "windows"
|
||||
elif system_type == "2":
|
||||
system_type = "chromebook"
|
||||
elif system_type == "3":
|
||||
result = subprocess.check_output('lsmod | grep hid_apple 1>/dev/null; echo $?', shell=True).decode('utf-8')
|
||||
if result.strip() == "0":
|
||||
system_type = "mac"
|
||||
else:
|
||||
system_type = "mac_only"
|
||||
print("Apple hid_apple driver is not loaded, a keymap that is specific for only Apple keyboards will be used.")
|
||||
|
||||
if system_type == "windows" or system_type == "mac":
|
||||
subprocess.check_output('/bin/bash -c ./mac_wordwise.sh', shell=True).decode('utf-8')
|
||||
cmdgui = '"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY"'
|
||||
elif system_type == "mac_only":
|
||||
subprocess.check_output('/bin/bash -c ./mac_only.sh', shell=True).decode('utf-8')
|
||||
cmdgui = '"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY"'
|
||||
elif system_type == "chromebook":
|
||||
subprocess.check_output('/bin/bash -c ./chromebook.sh', shell=True).decode('utf-8')
|
||||
cmdgui = '"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.chromebook.gui $DISPLAY"'
|
||||
|
||||
# password = getpass("Please enter your password to complete the keyswap: ")
|
||||
# proc = Popen("echo '1' | sudo tee -a /sys/module/hid_apple/parameters/swap_opt_cmd".split(), stdin=PIPE, stdout=PIPE, stderr=PIPE)
|
||||
# proc.communicate(password.encode())
|
||||
|
||||
if swap_behavior == 1:
|
||||
print("Setting up " + system_type + " keyswap as a service.")
|
||||
print("You can disable and remove the service by using the following command in the Kinto directory.")
|
||||
print("./uninstall.sh")
|
||||
|
||||
keyswapcmd = '/bin/bash -c "./keyswap_service.sh 1 0 ' + system_type + ' ' + str(internalid).strip() + ' ' + str(usbid).strip() + ' ' + str(chromeswap) + '"'
|
||||
# print(keyswapcmd)
|
||||
subprocess.check_output(keyswapcmd, shell=True).decode('utf-8')
|
||||
else:
|
||||
print("Setting up " + system_type + " keyswap inside your profiles ~/.Xsession file.")
|
||||
print("You can modify or remove the file if you want you want to remove the modification.")
|
||||
keyswapcmd = '/bin/bash -c \'./keyswap_service.sh 0 ' + cmdgui + '\''
|
||||
subprocess.check_output(keyswapcmd, shell=True).decode('utf-8')
|
||||
|
||||
if system_type == "mac":
|
||||
print()
|
||||
print("An Apple keyboard with the hid_apple driver was detected.")
|
||||
print("Please run the following commands to swap alt/option and Command.")
|
||||
print("Your Kinto keymapping will not work right on Apple keyboards without it.")
|
||||
print()
|
||||
print("echo '1' | sudo tee -a /sys/module/hid_apple/parameters/swap_opt_cmd")
|
||||
print('echo "options hid_apple swap_opt_cmd=1" | sudo tee -a /etc/modprobe.d/hid_apple.conf')
|
||||
print('sudo update-initramfs -u -k all')
|
||||
|
||||
|
||||
|
||||
def os_detect():
|
||||
print()
|
||||
print("Checking for OS and system information...")
|
||||
print()
|
||||
print("OS Type")
|
||||
# print(" Platform: " + platform_name)
|
||||
if platform_name == 'Linux':
|
||||
result = subprocess.check_output("lsb_release -a | grep -v LSB ", shell=True).decode('ascii')
|
||||
print(result)
|
||||
|
||||
def hwinfo():
|
||||
print("Requires user password to display hardware information...")
|
||||
result = subprocess.check_output('sudo dmidecode | grep -A 9 "System Information" | grep -v "UUID\|Serial\|SKU\|Wake"', shell=True).decode('ascii')
|
||||
print(result)
|
||||
|
||||
def kblist():
|
||||
result = subprocess.check_output('xinput list', shell=True).decode('ascii')
|
||||
print(result)
|
||||
|
||||
print()
|
||||
print()
|
||||
print(" Kint" + circleo)
|
||||
sys.stdout.write(reset)
|
||||
print(italic + " - F!x the d" + syma + "mn k" + syme + "yb" + circleo + syma + "rd. - ")
|
||||
sys.stdout.write(reset)
|
||||
print()
|
||||
input("Press Enter to begin...")
|
||||
|
||||
system_type = input("\nWhat type of keyboard are you using? (If Mac and Windows then select Mac)\n\
|
||||
1) Windows\n\
|
||||
2) Chromebook\n\
|
||||
3) Mac\n")
|
||||
|
||||
swap_behavior = 1
|
||||
chromeswap = 0
|
||||
# Chromebook
|
||||
if system_type == "2":
|
||||
if not input("\nWould you like to swap Alt to Super/Win and Search key to Ctrl when using terminal applications? (y/n)\n\
|
||||
Note: For a more mac like experience & less issues with terminal based interactions y is recommended.\n").lower().strip()[:1] == "y":
|
||||
swap_behavior = 0
|
||||
# Windows
|
||||
if system_type == "1":
|
||||
if not input("\nWould you like to swap Alt to Super/Win and Ctrl key back to Ctrl when using terminal applications? (y/n)\n\
|
||||
Note: For a more mac like experience & less issues with terminal based interactions y is recommended.\n").lower().strip()[:1] == "y":
|
||||
swap_behavior = 0
|
||||
# Mac
|
||||
if system_type == "3":
|
||||
if not input("\nWould you like to swap Command back to Super/Win and Ctrl key back to Ctrl when using terminal applications? (y/n)\n\
|
||||
Note: For a more mac like experience & less issues with terminal based interactions y is recommended.\n").lower().strip()[:1] == "y":
|
||||
swap_behavior = 0
|
||||
|
||||
if int(system_type) == 2 and swap_behavior == 1:
|
||||
chromeswap = input("\nIf the keyswap is applied on a chromebook with both an internal and external Apple keyboard\n\
|
||||
you may need to press a key on the external Apple keyboard any time you switch between the terminal and gui based apps.\n\
|
||||
Are you ok with that, or would you like to only apply the keyswap on one keyboard type?\n\
|
||||
1) Built-in\n\
|
||||
2) Both - (Chromebook & Windows)\n\
|
||||
3) Both - (Chromebook & Mac)\n\
|
||||
4) USB External - (Mac)\n")
|
||||
|
||||
if chromeswap == "1":
|
||||
chromeswap = "none"
|
||||
elif chromeswap == "2":
|
||||
chromeswap = "both_win"
|
||||
elif chromeswap == "3" or chromeswap == "4":
|
||||
chromeswap = "both_mac"
|
||||
|
||||
keyboard_detect()
|
15
references/old-files/mac_only.sh
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
mkdir -p ~/.xkb/{keymap,symbols,types}
|
||||
cp ./.xkb/symbols/mac_gui ~/.xkb/symbols/mac_gui
|
||||
cp ./.xkb/types/mac_gui ~/.xkb/types/mac_gui
|
||||
setxkbmap -option
|
||||
setxkbmap -print > ~/.xkb/keymap/kbd.mac.gui
|
||||
setxkbmap -print > ~/.xkb/keymap/kbd.mac.term
|
||||
line=$(cat ~/.xkb/keymap/kbd.mac.gui | grep -n 'xkb_symbols' | cut -f1 -d:)
|
||||
sed -ie "${line}s/\"/+ctrl(swap_lwin_lctl)+ctrl(swap_rwin_rctl)+mac_gui(mac_levelssym)\"/2" ~/.xkb/keymap/kbd.mac.gui
|
||||
sleep 1
|
||||
line=$(cat ~/.xkb/keymap/kbd.mac.gui | grep -n 'xkb_types' | cut -f1 -d:)
|
||||
sed -ie "${line}s/\"/+mac_gui(addmac_levels)\"/2" ~/.xkb/keymap/kbd.mac.gui
|
||||
sleep 1
|
||||
line=$(cat ~/.xkb/keymap/kbd.mac.term | grep -n 'xkb_symbols' | cut -f1 -d:)
|
||||
sed -ie "${line}s/\"/+altwin(alt_super_win)+mac_term(mac_levelssym)\"/2" ~/.xkb/keymap/kbd.mac.term
|
15
references/old-files/mac_wordwise.sh
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
mkdir -p ~/.xkb/{keymap,symbols,types}
|
||||
cp ./.xkb/symbols/mac_gui ~/.xkb/symbols/mac_gui
|
||||
cp ./.xkb/types/mac_gui ~/.xkb/types/mac_gui
|
||||
setxkbmap -option
|
||||
setxkbmap -print > ~/.xkb/keymap/kbd.mac.gui
|
||||
setxkbmap -print > ~/.xkb/keymap/kbd.mac.term
|
||||
line=$(cat ~/.xkb/keymap/kbd.mac.gui | grep -n 'xkb_symbols' | cut -f1 -d:)
|
||||
sed -ie "${line}s/\"/+altwin(ctrl_alt_win)+mac_gui(mac_levelssym)\"/2" ~/.xkb/keymap/kbd.mac.gui
|
||||
sleep 1
|
||||
line=$(cat ~/.xkb/keymap/kbd.mac.gui | grep -n 'xkb_types' | cut -f1 -d:)
|
||||
sed -ie "${line}s/\"/+mac_gui(addmac_levels)\"/2" ~/.xkb/keymap/kbd.mac.gui
|
||||
sleep 1
|
||||
line=$(cat ~/.xkb/keymap/kbd.mac.term | grep -n 'xkb_symbols' | cut -f1 -d:)
|
||||
sed -ie "${line}s/\"/+altwin(swap_alt_win)+mac_term(mac_levelssym)\"/2" ~/.xkb/keymap/kbd.mac.term
|
9
references/old-files/old_uninstall.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
systemctl --user stop keyswap
|
||||
systemctl --user disable keyswap
|
||||
rm -rf ~/.config/autostart/keyswap.sh
|
||||
rm -rf ~/.config/xactive.sh
|
||||
rm -rf ~/.xkb
|
||||
|
||||
sed -i '/xkb/d' ~/.Xsession
|
316
references/old-files/test.py
Executable file
@@ -0,0 +1,316 @@
|
||||
# pip3 install pynput
|
||||
# pip3 install --no-deps pynput
|
||||
|
||||
from pynput.keyboard import Key, Listener
|
||||
import sys, subprocess
|
||||
|
||||
uitype=sys.argv[1]
|
||||
apply_rules=sys.argv[2]
|
||||
windows=sys.argv[3]
|
||||
chromebook=sys.argv[4]
|
||||
mac=sys.argv[5]
|
||||
|
||||
class color:
|
||||
PURPLE = '\033[95m'
|
||||
CYAN = '\033[96m'
|
||||
DARKCYAN = '\033[36m'
|
||||
BLUE = '\033[94m'
|
||||
GREEN = '\033[92m'
|
||||
YELLOW = '\033[93m'
|
||||
RED = '\033[91m'
|
||||
BOLD = '\033[1m'
|
||||
UNDERLINE = '\033[4m'
|
||||
END = '\033[0m'
|
||||
|
||||
def on_press(key):
|
||||
print('{0} pressed'.format(key))
|
||||
|
||||
def on_release(key):
|
||||
# print('{0} release'.format(key))
|
||||
if key == Key.esc:
|
||||
# Stop listener
|
||||
return False
|
||||
|
||||
def is_ctrl_winchrome(key):
|
||||
if key == Key.ctrl:
|
||||
# print(str(key).replace("Key.", "").title() +' successfully mapped to physical Alt key.'.format(key))
|
||||
print(color.GREEN + 'Success' + color.END + ' Alt is now Ctrl')
|
||||
return False
|
||||
elif key == Key.esc:
|
||||
return False
|
||||
else:
|
||||
print('keymap failure, ' + str(key).replace("Key.", "").title() + ' may have been mapped to the physical Alt key.'.format(key))
|
||||
return False
|
||||
|
||||
def is_ctrl_mac(key):
|
||||
if key == Key.ctrl:
|
||||
# print(str(key).replace("Key.", "").title() +' successfully mapped to physical Alt key.'.format(key))
|
||||
print(color.GREEN + 'Success' + color.END + ' Command is now Ctrl')
|
||||
return False
|
||||
elif key == Key.esc:
|
||||
return False
|
||||
else:
|
||||
print('keymap failure, ' + str(key).replace("Key.", "").title() + ' may have been mapped to the physical Command key.'.format(key))
|
||||
return False
|
||||
|
||||
def is_ctrl_terminal(key):
|
||||
if key == Key.ctrl:
|
||||
# print(str(key).replace("Key.", "").title() +' successfully mapped to physical Ctrl key.'.format(key))
|
||||
print(color.GREEN + 'Success' + color.END + ' Ctrl remains Ctrl,\nwhile in terminal apps.')
|
||||
return False
|
||||
elif key == Key.esc:
|
||||
return False
|
||||
else:
|
||||
print('keymap failure, ' + str(key).replace("Key.", "").title() + ' may have been mapped to the physical Ctrl key.'.format(key))
|
||||
return False
|
||||
|
||||
def is_alt_chromebook(key):
|
||||
if key == Key.alt:
|
||||
# print(str(key).replace("Key.", "").title() +' successfully mapped to the physical Ctrl key.'.format(key))
|
||||
print(color.GREEN + 'Success' + color.END + ' Ctrl is now Alt')
|
||||
return False
|
||||
elif key == Key.esc:
|
||||
return False
|
||||
else:
|
||||
print('keymap failure, ' + str(key).replace("Key.", "").title() + ' may have been mapped to the physical Ctrl key.'.format(key))
|
||||
return False
|
||||
|
||||
def is_alt_windows(key):
|
||||
if key == Key.alt:
|
||||
# print(str(key).replace("Key.", "").title() +' successfully mapped to the physical Ctrl key.'.format(key))
|
||||
print(color.GREEN + 'Success' + color.END + ' Win/Super is now Alt')
|
||||
return False
|
||||
elif key == Key.esc:
|
||||
return False
|
||||
else:
|
||||
print('keymap failure, ' + str(key).replace("Key.", "").title() + ' may have been mapped to the physical Win/Super key.'.format(key))
|
||||
return False
|
||||
|
||||
def is_alt_mac(key):
|
||||
if key == Key.alt:
|
||||
# print(str(key).replace("Key.", "").title() +' successfully mapped to the physical Ctrl key.'.format(key))
|
||||
print(color.GREEN + 'Success' + color.END + ' Alt remains Alt')
|
||||
return False
|
||||
elif key == Key.esc:
|
||||
return False
|
||||
else:
|
||||
print('keymap failure, ' + str(key).replace("Key.", "").title() + ' may have been mapped to the physical Alt key.'.format(key))
|
||||
return False
|
||||
|
||||
def is_alt_chromebook_terminal(key):
|
||||
if key == Key.alt:
|
||||
# print(str(key).replace("Key.", "").title() +' successfully mapped to the physical Search key.'.format(key))
|
||||
print(color.GREEN + 'Success' + color.END + ' Search is now Alt,\nwhile in terminals apps.')
|
||||
return False
|
||||
elif key == Key.esc:
|
||||
return False
|
||||
else:
|
||||
print('keymap failure, ' + str(key).replace("Key.", "").title() + ' may have been mapped to the physical Search key.'.format(key))
|
||||
return False
|
||||
|
||||
def is_super_winmac(key):
|
||||
if key == Key.cmd:
|
||||
# print('Super/Win successfully mapped to the physical Search key.'.format(key))
|
||||
print(color.GREEN + 'Success' + color.END + ' Ctrl key is Super/Win')
|
||||
return False
|
||||
elif key == Key.esc:
|
||||
return False
|
||||
else:
|
||||
print('keymap failure, ' + str(key).replace("Key.", "").title() + ' may have been mapped to the physical Ctrl key.'.format(key))
|
||||
return False
|
||||
|
||||
def is_super_chromebook(key):
|
||||
if key == Key.cmd:
|
||||
# print('Super/Win successfully mapped to the physical Search key.'.format(key))
|
||||
print(color.GREEN + 'Success' + color.END + ' Search key is Super/Win')
|
||||
return False
|
||||
elif key == Key.esc:
|
||||
return False
|
||||
else:
|
||||
print('keymap failure, ' + str(key).replace("Key.", "").title() + ' may have been mapped to the physical Search key.'.format(key))
|
||||
return False
|
||||
|
||||
def is_super_terminal(key):
|
||||
if key == Key.cmd:
|
||||
# print('Super/Win successfully mapped to the physical Alt key.'.format(key))
|
||||
print(color.GREEN + 'Success' + color.END + ' Alt is now Super/Win,\nwhile in terminal apps.')
|
||||
return False
|
||||
elif key == Key.esc:
|
||||
return False
|
||||
else:
|
||||
print('keymap failure, ' + str(key).replace("Key.", "").title() + ' may have been mapped to the physical Alt key.'.format(key))
|
||||
return False
|
||||
|
||||
def is_super_mac_terminal(key):
|
||||
if key == Key.cmd:
|
||||
# print('Super/Win successfully mapped to the physical Alt key.'.format(key))
|
||||
print(color.GREEN + 'Success' + color.END + ' Command is now Super/Win,\nwhile in terminal apps.')
|
||||
return False
|
||||
elif key == Key.esc:
|
||||
return False
|
||||
else:
|
||||
print('keymap failure, ' + str(key).replace("Key.", "").title() + ' may have been mapped to the physical Command key.'.format(key))
|
||||
return False
|
||||
|
||||
def chromebook_keys_gui():
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Alt" + color.END + " key to confirm the new keymapping to Ctrl..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_ctrl_winchrome) as listener:
|
||||
listener.join()
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Ctrl" + color.END + " key to confirm the new keymapping to Alt..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_alt_chromebook) as listener:
|
||||
listener.join()
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Search" + color.END + " key to confirm the new keymapping to Super/Win..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_super_chromebook) as listener:
|
||||
listener.join()
|
||||
|
||||
def chromebook_keys_terminal():
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Alt" + color.END + " key to confirm the new keymapping to Super/Win..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_super_terminal) as listener:
|
||||
listener.join()
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Ctrl" + color.END + " key to confirm the new keymapping to Ctrl..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_ctrl_terminal) as listener:
|
||||
listener.join()
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Search" + color.END + " key to confirm the new keymapping to Alt..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_alt_chromebook_terminal) as listener:
|
||||
listener.join()
|
||||
|
||||
def windows_keys_gui():
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Alt" + color.END + " key to confirm the new keymapping to Ctrl..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_ctrl_winchrome) as listener:
|
||||
listener.join()
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Win/Super" + color.END + " key to confirm the new keymapping to Alt..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_alt_windows) as listener:
|
||||
listener.join()
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Ctrl" + color.END + " key to confirm the new keymapping to Win/Super..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_super_winmac) as listener:
|
||||
listener.join()
|
||||
|
||||
def windows_keys_terminal():
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Alt" + color.END + " key to confirm the new keymapping to Super/Win..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_super_terminal) as listener:
|
||||
listener.join()
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Win/Super" + color.END + " key to confirm the new keymapping to Alt..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_alt_windows) as listener:
|
||||
listener.join()
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Ctrl" + color.END + " key to confirm the new keymapping to Ctrl..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_ctrl_terminal) as listener:
|
||||
listener.join()
|
||||
|
||||
def mac_keys_gui():
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Command" + color.END + " key to confirm the new keymapping to Ctrl..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_ctrl_mac) as listener:
|
||||
listener.join()
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Alt" + color.END + " key to confirm it remains Alt..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_alt_mac) as listener:
|
||||
listener.join()
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Ctrl" + color.END + " key to confirm the new keymapping to Win/Super..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_super_winmac) as listener:
|
||||
listener.join()
|
||||
|
||||
def mac_keys_terminal():
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Command" + color.END + " key to confirm the new keymapping to Super/Win..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_super_mac_terminal) as listener:
|
||||
listener.join()
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Alt" + color.END + " key to confirm it remains Alt..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_alt_mac) as listener:
|
||||
listener.join()
|
||||
print()
|
||||
print(color.UNDERLINE + color.YELLOW + "Press the physical Ctrl" + color.END + " key to confirm it remains Ctrl..")
|
||||
with Listener(
|
||||
# on_press=on_press,
|
||||
on_release=is_ctrl_terminal) as listener:
|
||||
listener.join()
|
||||
|
||||
if uitype == 'gui':
|
||||
if chromebook == '1':
|
||||
if apply_rules == '1':
|
||||
subprocess.check_output('setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.chromebook.gui $DISPLAY', shell=True).decode('utf-8')
|
||||
print()
|
||||
print("Testing chromebook - GUI apps - Kinto keymapping...")
|
||||
chromebook_keys_gui()
|
||||
|
||||
if windows == '1':
|
||||
if apply_rules == '1':
|
||||
subprocess.check_output('setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY', shell=True).decode('utf-8')
|
||||
print()
|
||||
print ("Testing windows keyboard - GUI apps - Kinto keymapping...")
|
||||
windows_keys_gui()
|
||||
|
||||
if mac == '1':
|
||||
if apply_rules == '1':
|
||||
subprocess.check_output('setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY', shell=True).decode('utf-8')
|
||||
print ("Testing mac keyboard - GUI apps - Kinto keymapping...")
|
||||
mac_keys_gui()
|
||||
|
||||
if uitype == 'term':
|
||||
if chromebook == '1':
|
||||
if apply_rules == '1':
|
||||
subprocess.check_output('setxkbmap -option;setxkbmap -option altwin:swap_lalt_lwin', shell=True).decode('utf-8')
|
||||
print("Testing chromebook - terminal - Kinto keymapping...")
|
||||
chromebook_keys_terminal()
|
||||
|
||||
if windows == '1':
|
||||
if apply_rules == '1':
|
||||
subprocess.check_output('setxkbmap -option;setxkbmap -option altwin:swap_alt_win', shell=True).decode('utf-8')
|
||||
print ("Testing windows keyboard - terminal - Kinto keymapping...")
|
||||
windows_keys_terminal()
|
||||
|
||||
if mac == '1':
|
||||
if apply_rules == '1':
|
||||
subprocess.check_output('setxkbmap -option;setxkbmap -option altwin:swap_alt_win', shell=True).decode('utf-8')
|
||||
print ("Testing mac keyboard - terminal - Kinto keymapping...")
|
||||
mac_keys_terminal()
|
||||
|
||||
if apply_rules == '1':
|
||||
subprocess.run('setxkbmap -option', shell=True)
|
75
references/shortcuts
Normal file
@@ -0,0 +1,75 @@
|
||||
# GalliumOS Notes
|
||||
|
||||
xfconf-query -c xfce4-keyboard-shortcuts -lv | grep "show_desktop_key\|cycle_windows_key\|cycle_reverse_windows_key\|close_window_key\|maximize_window_key\|xfce4-popup-whiskermenu\|move_window_next_workspace_key\|move_window_prev_workspace_key\|hide" | grep -v "default\|<Alt>m"
|
||||
|
||||
# Show Desktop
|
||||
xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Super>d" --create --type string --set "show_desktop_key"
|
||||
|
||||
# Undo show desktop
|
||||
xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Super>d" --reset
|
||||
|
||||
# GUI Alt Tab - Window Switching
|
||||
xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Alt><Shift>Tab" --set "cycle_reverse_windows_key"
|
||||
xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Alt>Tab" --set "cycle_windows_key"
|
||||
|
||||
# Term Alt Tab - Window Switching
|
||||
xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Alt><Shift>Tab" --set "cycle_windows_key"
|
||||
xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Alt>Tab" --set "cycle_reverse_windows_key"
|
||||
|
||||
# Hide/minimize Window
|
||||
xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Super>h" --create --type string --set "hide_window_key"
|
||||
|
||||
# Spotlight
|
||||
xfconf-query --channel xfce4-keyboard-shortcuts --property "/commands/custom/<Primary><Shift>space" --create --type string --set "xfce4-popup-whiskermenu"
|
||||
|
||||
# Change workspace to left
|
||||
xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Super>Left" --create --type string --set "move_window_prev_workspace_key"
|
||||
|
||||
# Change workspace to right
|
||||
xfconf-query --channel xfce4-keyboard-shortcuts --property "/xfwm4/custom/<Super>Right" --create --type string --set "move_window_next_workspace_key"
|
||||
|
||||
# PopOS
|
||||
|
||||
# Close App Alt+F4 (Super+w)
|
||||
gsettings set org.gnome.desktop.wm.keybindings close "['<Alt>F4','<Super>w']"
|
||||
# Undo
|
||||
gsettings set org.gnome.desktop.wm.keybindings close "['<Super>w']"
|
||||
|
||||
# Maximize Window
|
||||
gsettings set org.gnome.desktop.wm.keybindings toggle-maximized "['<Alt>F10','<Primary><Super>Up']"
|
||||
# Undo
|
||||
gsettings set org.gnome.desktop.wm.keybindings toggle-maximized "['<Primary><Super>Up']"
|
||||
|
||||
# Ubuntu 19.10
|
||||
# Change Workspace
|
||||
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-left "['<Primary><Alt>Left','<Super>Left']"
|
||||
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-right "['<Primary><Alt>Right','<Super>Right']"
|
||||
|
||||
# ElementaryOS
|
||||
# Show Desktop
|
||||
gsettings set org.gnome.desktop.wm.keybindings show-desktop "['<Super>d','<Super>Down']"
|
||||
# Maximize Window
|
||||
gsettings set org.gnome.desktop.wm.keybindings toggle-maximized "['<Alt>F10','<Super>Up']"
|
||||
# Spotlight
|
||||
gsettings set org.gnome.desktop.wm.keybindings panel-main-menu "['<Control><Shift>Space','<Super>Space']"
|
||||
|
||||
# Fedora 31
|
||||
# Show Desktop
|
||||
gsettings set org.gnome.desktop.wm.keybindings show-desktop "['<Super>d']"
|
||||
# Change Workspace
|
||||
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-left "['<Primary><Alt>Left','<Super>Left']"
|
||||
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-right "['<Primary><Alt>Right','<Super>Right']"
|
||||
|
||||
# Manjaro/Arch KDE
|
||||
# Maximize
|
||||
kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "kwin" \
|
||||
--key "Maximize Window" "Alt+F10,Meta+PgUp,Maximize Window"
|
||||
# Minimize
|
||||
kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "kwin" \
|
||||
--key "Minimize Window" "Meta+h,Meta+PgDown,Minimize Window"
|
||||
# Switch Desktops
|
||||
kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "kwin" \
|
||||
--key "Switch to Next Desktop" "Meta+Right,Meta+Right,Switch to Next Desktop"
|
||||
kwriteconfig5 --file "$HOME/.config/kglobalshortcutsrc" --group "kwin" \
|
||||
--key "Switch to Previous Desktop" "Meta+Left,Meta+Left,Switch to Previous Desktop"
|
||||
kquitapp5 kglobalaccel && sleep 2s && kglobalaccel5 &
|
1411
references/symbol_names.txt
Normal file
39
setup.py
@@ -29,15 +29,15 @@ def windows_setup():
|
||||
print("This install will fail if you are not running with elevated privileges")
|
||||
os.system('powershell -executionpolicy bypass ".\\windows\\autohotkey.ps1"')
|
||||
print("Copying autohotkey combinations for Terminals & Editors...")
|
||||
os.system('copy /Y "' + path + '\\windows\\kinto.ahk" "' + homedir + '\\kinto-new.ahk"')
|
||||
os.system('copy /Y "' + path + '\\windows\\kinto.ahk" "' + path + '\\windows\\kinto-new.ahk"')
|
||||
if default < 3:
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; Default)(?!( - ST2CODE))(.*)/$2$3$5/gm" ' + homedir + '\\kinto-new.ahk')
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; Default)(?!( - ST2CODE))(.*)/$2$3$5/g" .\\windows\\kinto-new.ahk')
|
||||
if default == 1:
|
||||
kbtype = "mac"
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; MacModifiers)/$2$3/gm" ' + homedir + '\\kinto-new.ahk')
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; MacModifiers)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
elif default == 2:
|
||||
kbtype = "win"
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; WinModifiers)/$2$3/gm" ' + homedir + '\\kinto-new.ahk')
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; WinModifiers)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
elif default == 5:
|
||||
print("Removing any old registry keys from prior versions...")
|
||||
p = subprocess.Popen(['powershell.exe', "Remove-ItemProperty -Path HKLM:'SYSTEM\CurrentControlSet\Control\Keyboard Layout' -Name 'Scancode Map' -ErrorAction SilentlyContinue"], stdout=sys.stdout)
|
||||
@@ -52,32 +52,32 @@ def windows_setup():
|
||||
print("Uninstall of Kinto is Complete.")
|
||||
if default == 3:
|
||||
kbtype = "chrome"
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; Chromebook)/$2$3/gm" ' + homedir + '\\kinto-new.ahk')
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; WinModifiers\/CB)/$2$3/gm" ' + homedir + '\\kinto-new.ahk')
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; Chromebook)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; WinModifiers/CB)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
if default == 3 or default == 4:
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; CB\/IBM)/$2$3/gm" ' + homedir + '\\kinto-new.ahk')
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; WinModifiers\/CB\/IBM)/$2$3/gm" ' + homedir + '\\kinto-new.ahk')
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; CB/IBM)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
if default == 4:
|
||||
kbtype = "ibm"
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; IBM)/$2$3/gm" ' + homedir + '\\kinto-new.ahk')
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; IBM)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; WinModifiers/CB/IBM)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
if default > 0 and default < 5:
|
||||
stvscode = yn_choice(bcolors.CYELLOW2 + "Would you like to use Sublime Text 3 keymaps in VS Code?\n" + bcolors.ENDC)
|
||||
print("\nWill now install Ubuntu Terminal Theme as default...")
|
||||
print("\nWill now install Ubuntu Termimnal Theme as default...")
|
||||
os.system('regedit "' + path + '\\windows\\theme_ubuntu.reg"')
|
||||
os.system('robocopy "'+ path + '\\assets" "%userprofile%\\.kinto\\assets" /E')
|
||||
if (stvscode and (default > 0 or default < 3)):
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; Default - ST2CODE)/$2$3/gm" ' + homedir + '\\kinto-new.ahk')
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; Default - ST2CODE)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
elif (stvscode and (default == 3 or default == 4 )):
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; CB/IBM - ST2CODE)/$2$3/gm" ' + homedir + '\\kinto-new.ahk')
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/(; )(.*)(; CB/IBM - ST2CODE)/$2$3/g" .\\windows\\kinto-new.ahk')
|
||||
os.system('copy /Y "' + path + '\\windows\\kinto-start.vbs" "%userprofile%\\.kinto\\kinto-start.vbs"')
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/{kbtype}/' + kbtype + '/gm" "%userprofile%\\.kinto\\kinto-start.vbs"')
|
||||
os.system('C:\\Strawberry\\perl\\bin\\perl.exe -pi -e "s/{kbtype}/' + kbtype + '/g" "%userprofile%\\.kinto\\kinto-start.vbs"')
|
||||
os.system('copy /Y "' + path + '\\windows\\usb.vbs" "%userprofile%\\.kinto\\usb.vbs"')
|
||||
os.system('copy /Y "' + path + '\\windows\\detectUSB.ahk" "%userprofile%\\.kinto\\detectUSB.ahk"')
|
||||
os.system('mklink "%userprofile%\\AppData\\Roaming\\Microsoft\\Windows\\STARTM~1\\Programs\\Startup\\kinto-start.vbs" "%userprofile%\\.kinto\\kinto-start.vbs"')
|
||||
os.system('mklink "%userprofile%\\Start Menu\\Programs\\Startup\\kinto-start.vbs" "%userprofile%\\.kinto\\kinto-start.vbs"')
|
||||
os.system('copy /Y "'+ path + '\\windows\\NoShell.vbs" "%userprofile%\\.kinto\\NoShell.vbs"')
|
||||
os.system('copy /Y "'+ path + '\\windows\\toggle_kb.bat" "%userprofile%\\.kinto\\toggle_kb.bat"')
|
||||
os.system('copy /Y "'+ homedir + '\\kinto-new.ahk" "%userprofile%\\.kinto\\kinto.ahk"')
|
||||
os.system("del /f " + homedir + "\\kinto-new.ahk")
|
||||
os.system('copy /Y "'+ path + '\\windows\\kinto-new.ahk" "%userprofile%\\.kinto\\kinto.ahk"')
|
||||
os.system("del /f .\\windows\\kinto-new.ahk")
|
||||
os.system("del \"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp\\kinto.ahk\" 2> nul")
|
||||
userpath = cmdline('cmd /c for %A in ("%userprofile%") do @echo %~sA')[:-1]
|
||||
print('Starting... "' + userpath + '\\AppData\\Roaming\\Microsoft\\Windows\\STARTM~1\\Programs\\Startup\\kinto-start.vbs"')
|
||||
@@ -104,16 +104,19 @@ if platform.system() == 'Windows':
|
||||
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 os.name != 'nt':
|
||||
if os.name != 'nt' and os.name != 'posix':
|
||||
print(os.name)
|
||||
print("You are not using x11, please logout and back in using x11/Xorg")
|
||||
sys.exit()
|
||||
elif os.name == 'posix':
|
||||
print("You may be trying to run Kinto under WSL2 w/ Linux. We will continue...")
|
||||
else:
|
||||
print("\nYou are detected as running Windows.")
|
||||
windows_setup()
|
||||
sys.exit()
|
||||
|
||||
distro = cmdline("awk -F= '$1==\"NAME\" { print $2 ;}' /etc/os-release").replace('"','').strip().split(" ")[0]
|
||||
dename = cmdline("./linux/system-config/dename.sh").replace('"','').strip().split(" ")[0].lower()
|
||||
dename = cmdline("./system-config/dename.sh").replace('"','').strip().split(" ")[0].lower()
|
||||
|
||||
run_pkg = ""
|
||||
|
||||
|
@@ -9,7 +9,7 @@
|
||||
; https://www.autohotkey.com/boards/viewtopic.php?t=9501
|
||||
OnMessage(0x404, "AHK_NOTIFYICON")
|
||||
|
||||
AHK_NOTIFYICON(wParam, lParam)
|
||||
AHK_NOTIFYICON(wParam, lParam)
|
||||
{
|
||||
if (lParam = 0x202) { ; user left-clicked tray icon
|
||||
;ADD ANY SUBROUTINE OR FUNCTION HERE
|
||||
@@ -62,8 +62,6 @@ Menu, Tray, Add, Autodetect Keyboards, autodetect
|
||||
; Menu, Tray, check, Autodetect Keyboards ; Autodetect
|
||||
; Menu, Tray, disable, Autodetect Keyboards ; CB/IBM
|
||||
Menu, Tray, Add, Suspend Kinto, tray_suspend
|
||||
; Add tray menu item for toggling Option key special character entry scheme
|
||||
Menu, Tray, Add, OptSpecialChars Shift+Opt+Cmd+O, toggle_optspecialchars
|
||||
; Menu, Tray, Add, Returns to Desktop, min
|
||||
Menu, Tray, Add
|
||||
Menu, Tray, Add, Close, Exit
|
||||
@@ -133,7 +131,6 @@ Exit() {
|
||||
SetTitleMatchMode, 2
|
||||
|
||||
GroupAdd, terminals, ahk_exe ubuntu.exe
|
||||
GroupAdd, terminals, ahk_exe ubuntu2004.exe
|
||||
GroupAdd, terminals, ahk_exe ConEmu.exe
|
||||
GroupAdd, terminals, ahk_exe ConEmu64.exe
|
||||
GroupAdd, terminals, ahk_exe powershell.exe
|
||||
@@ -147,7 +144,6 @@ GroupAdd, terminals, Fluent Terminal ahk_class ApplicationFrameWindow
|
||||
GroupAdd, terminals, ahk_class Console_2_Main
|
||||
|
||||
GroupAdd, posix, ahk_exe ubuntu.exe
|
||||
GroupAdd, posix, ahk_exe ubuntu2004.exe
|
||||
GroupAdd, posix, ahk_exe ConEmu.exe
|
||||
GroupAdd, posix, ahk_exe ConEmu64.exe
|
||||
GroupAdd, posix, ahk_exe Hyper.exe
|
||||
@@ -174,15 +170,8 @@ GroupAdd, browsers, ahk_exe msedge.exe
|
||||
|
||||
; Disable Key Remapping for Virtual Machines
|
||||
; Disable for Remote desktop solutions too
|
||||
GroupAdd, remotes, ahk_exe VirtualBoxVM.exe
|
||||
GroupAdd, remotes, ahk_exe mstsc.exe
|
||||
GroupAdd, remotes, ahk_exe anydesk.exe
|
||||
GroupAdd, remotes, ahk_exe msrdc.exe
|
||||
GroupAdd, remotes, ahk_exe nxplayer.bin
|
||||
GroupAdd, remotes, ahk_exe vmconnect.exe
|
||||
GroupAdd, remotes, ahk_exe RemoteDesktopManagerFree.exe
|
||||
GroupAdd, remotes, ahk_exe vncviewer.exe
|
||||
GroupAdd, remotes, Remote Desktop ahk_class ApplicationFrameWindow
|
||||
GroupAdd, virtm, ahk_exe VirtualBoxVM.exe
|
||||
GroupAdd, virtm, ahk_exe mstsc.exe
|
||||
|
||||
; Disabled Edge for now - no ability to close all instances
|
||||
; GroupAdd, browsers, Microsoft Edge ahk_class ApplicationFrameWindow
|
||||
@@ -197,99 +186,7 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
||||
|
||||
; SetCapsLockState, AlwaysOff ; CB/IBM
|
||||
|
||||
; Keyboards w/o media keys can use this Remap
|
||||
; This will replace unneeded dedicated keys
|
||||
; with most commonly used media keys
|
||||
;
|
||||
; Insert::SoundSet, +1, , mute ; Toggles Speaker
|
||||
; +Insert::Insert ; Shift Insert maps to Insert
|
||||
; Home::SoundSetWaveVolume, -10 ; Decrease volume
|
||||
; PgUp::SoundSetWaveVolume, +10 ; Increase volume
|
||||
; Delete::Send {Media_Prev} ; Previous
|
||||
; End::Send {Media_Play_Pause} ; Pause/Play
|
||||
; PgDn::Send {Media_Next} ; Next
|
||||
|
||||
; Virtual Desktop Hack via TotalSpaces2 - macOS Remote Desktop
|
||||
; Custom Bind Gestures in Windows
|
||||
; Shift-F8 on Left Swipe
|
||||
; Shift-F9 on Right Swipe
|
||||
#IfWinActive ahk_exe nxplayer.bin
|
||||
+F8::Send !+- ; macOS TotalSpaces2 - Space Left
|
||||
+F6::Send !+= ; macOS TotalSpaces2 - Space Right
|
||||
#If
|
||||
; +F8::Send {LCtrl down}{LWin down}{left}{LCtrl up}{LWin up} ; Comment out on host machine
|
||||
; +F6::Send {LCtrl down}{LWin down}{right}{LCtrl up}{LWin up} ; Comment out on host machine
|
||||
|
||||
; #########################################################################
|
||||
; ############# START OF FINDER MODS FOR FILE MANAGERS ################
|
||||
; #########################################################################
|
||||
; Finder Mods for Windows File Explorer (explore.exe)
|
||||
#IfWinActive ahk_class CabinetWClass ahk_exe explorer.exe
|
||||
^i::Send !{Enter} ; Cmd+i: Get Info / Properties
|
||||
^r::Send {F5} ; Cmd+R: Refresh view (Not actually a Finder shortcut? But works in Linux file browsers too.)
|
||||
^1::Send ^+2 ; Cmd+1: View as Icons
|
||||
^2::Send ^+6 ; Cmd+2: View as List (Detailed)
|
||||
^3::Send ^+5 ; Cmd+3: View as List (Compact)
|
||||
^4::Send ^+1 ; Cmd+4: View as Gallery
|
||||
^Up::Send !{Up} ; Cmd+Up: Up to parent folder
|
||||
^Left::Send !{Left} ; Cmd+Left: Go to prior location in history
|
||||
^Right::Send !{Right} ; Cmd+Right: Go to next location in history
|
||||
^Down:: ; Cmd-Down: Navigate into the selected directory
|
||||
For window in ComObjCreate("Shell.Application").Windows
|
||||
If WinActive() = window.hwnd
|
||||
For item in window.document.SelectedItems {
|
||||
window.Navigate(item.Path)
|
||||
Return
|
||||
}
|
||||
Return
|
||||
^[::Send !{Left} ; Cmd+Left_Brace: Go to prior location in history
|
||||
^]::Send !{Right} ; Cmd+Right_Brace: Go to next location in history
|
||||
^+o::Send ^{Enter} ; Cmd+Shift+o: Open in new window (tabs not available)
|
||||
^Delete::Send {Delete} ; Cmd+Delete: Delete / Send to Trash
|
||||
^BackSpace::Send {Delete} ; Cmd+Delete: Delete / Send to Trash
|
||||
^d::return, ; Block the unusual Explorer "delete" shortcut of Ctrl+D, used for "bookmark" in similar apps
|
||||
$Enter:: ; Use Enter key to rename (F2), unless focus is inside a text input field.
|
||||
ControlGetFocus, fc, A
|
||||
If fc contains Edit,Search,Notify,Windows.UI.Core.CoreWindow1,SysTreeView321
|
||||
Send {Enter}
|
||||
Else Send {F2}
|
||||
Return
|
||||
$BackSpace:: ; Backspace (without Cmd): Block Backspace key with error beep, unless inside text input field
|
||||
ControlGetFocus, fc, A
|
||||
If fc contains Edit,Search,Notify,Windows.UI.Core.CoreWindow1
|
||||
Send {BackSpace}
|
||||
Else SoundBeep, 600, 300
|
||||
Return
|
||||
$Delete:: ; Delete (without Cmd): Block Delete key with error beep, unless inside text input field
|
||||
ControlGetFocus, fc, A
|
||||
If fc contains Edit,Search,Notify,Windows.UI.Core.CoreWindow1
|
||||
Send {Delete}
|
||||
Else SoundBeep, 600, 300
|
||||
Return
|
||||
#IfWinActive
|
||||
; #########################################################################
|
||||
; ############## END OF FINDER MODS FOR FILE MANAGERS #################
|
||||
; #########################################################################
|
||||
|
||||
#IfWinNotActive ahk_group remotes
|
||||
; wordwise support
|
||||
^Up::Send ^{Home}
|
||||
^+Up::Send ^+{Home}
|
||||
^Down::Send ^{End}
|
||||
^+Down::Send ^+{End}
|
||||
$^Backspace::Send +{Home}{Delete}
|
||||
!Backspace::Send ^{Backspace}
|
||||
!Left::Send ^{Left}
|
||||
!+Left::Send ^+{Left}
|
||||
!Right::Send ^{Right}
|
||||
!+Right::Send ^+{Right}
|
||||
$^Left::Send {Home}
|
||||
$^+Left::Send +{Home}
|
||||
$^Right::Send {End}
|
||||
$^+Right::Send +{End}
|
||||
#If
|
||||
|
||||
#IfWinNotActive ahk_group remotes
|
||||
#IfWinNotActive ahk_group virtm
|
||||
|
||||
; New AltTab and CtrlTab fix
|
||||
*tab::
|
||||
@@ -347,7 +244,7 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
||||
; Tertiary::LWin
|
||||
|
||||
; $LAlt::LCtrl ; CB/IBM
|
||||
; $RAlt::RCtrl ; IBM
|
||||
; $RAlt::RCtrl ; CB/IBM
|
||||
; $RCtrl::RAlt ; CB/IBM
|
||||
; $CapsLock::LWin ; IBM
|
||||
; $LCtrl::LAlt ; CB/IBM
|
||||
@@ -363,15 +260,8 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
||||
; $LCtrl::LWin ; MacModifiers
|
||||
|
||||
; Hack to disable start menu on winkey
|
||||
; Static - Does not apply to IBM or Chromebooks
|
||||
; $LCtrl up::Send {Ctrl down}{LWin up}{Ctrl up} ; Default
|
||||
; LWin::return ; Chromebook
|
||||
; RWin::return ; Chromebook
|
||||
; RAlt::return ; Chromebook
|
||||
|
||||
; Disable Win-Up/Down - interferes with Sublime text 3 multi-cursors
|
||||
#Down::return
|
||||
#Up::return
|
||||
; Static
|
||||
$LCtrl up::Send {Ctrl down}{LWin up}{Ctrl up}
|
||||
|
||||
; temporary hack to ensure keys don't get stuck
|
||||
; impacts Alt-Tab fix
|
||||
@@ -380,26 +270,6 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
||||
; $LWin up::Send {LWin up}{LAlt up}{LCtrl up} ; MacModifiers
|
||||
; $LAlt up::Send {LWin up}{CapsLock up}{LAlt up}{LCtrl up} ; CB/IBM
|
||||
|
||||
!Enter::
|
||||
{
|
||||
if (GetKeyState("RAlt", "P")) {
|
||||
Send {Insert}
|
||||
}
|
||||
else{
|
||||
Send {Alt down}{Enter}{Alt up}
|
||||
}
|
||||
Return
|
||||
}
|
||||
|
||||
; Remap Alt+Esc to Break/Pause
|
||||
!Esc::SendInput, {Pause}
|
||||
|
||||
; Go up or down a page
|
||||
#IfWinNotActive ahk_group editors
|
||||
$!Down::Send {PgDn}
|
||||
$!Up::Send {PgUp}
|
||||
#If
|
||||
|
||||
; Close Apps
|
||||
^q::Send !{F4}
|
||||
|
||||
@@ -442,8 +312,7 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
||||
^F3::Send #d
|
||||
|
||||
; Emoji Panel
|
||||
; #^Space::Send {LWin down};{LWin up} ; Default
|
||||
; !^Space::Send {LWin down};{LWin up} ; CB/IBM
|
||||
#^Space::Send {LWin down};{LWin up}
|
||||
|
||||
; Full Screenshot
|
||||
^+3::Send {PrintScreen}
|
||||
@@ -451,56 +320,23 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
||||
; Region Screenshot
|
||||
^+4::Send #+{S}
|
||||
|
||||
; Open File Browser
|
||||
; !^space::Send #e ; Default
|
||||
; #^space::Send #e ; CB/IBM
|
||||
; wordwise support
|
||||
$^Left::Send {Home}
|
||||
$^+Left::Send +{Home}
|
||||
$^Right::Send {End}
|
||||
$^+Right::Send +{End}
|
||||
^Up::Send ^{Home}
|
||||
^+Up::Send ^+{Home}
|
||||
^Down::Send ^{End}
|
||||
^+Down::Send ^+{End}
|
||||
$^Backspace::Send +{Home}{Delete}
|
||||
!Backspace::Send ^{Backspace}
|
||||
!Left::Send ^{Left}
|
||||
!+Left::Send ^+{Left}
|
||||
!Right::Send ^{Right}
|
||||
!+Right::Send ^+{Right}
|
||||
|
||||
; #if GetKeyState("LWin", "P") || GetKeyState("RAlt", "P") ; Chromebook
|
||||
; Space::Send ^{Esc} ; Chromebook
|
||||
; 0::Send #0 ; Chromebook
|
||||
; 1::Send #1 ; Chromebook
|
||||
; 2::Send #2 ; Chromebook
|
||||
; 3::Send #3 ; Chromebook
|
||||
; 4::Send #4 ; Chromebook
|
||||
; 5::Send #5 ; Chromebook
|
||||
; 6::Send #6 ; Chromebook
|
||||
; 7::Send #7 ; Chromebook
|
||||
; 8::Send #8 ; Chromebook
|
||||
; 9::Send #9 ; Chromebook
|
||||
; -::Send #- ; Chromebook
|
||||
; =::Send #= ; Chromebook
|
||||
; `::Send #` ; Chromebook
|
||||
; `;::Send #; ; Chromebook
|
||||
; a::Send #a ; Chromebook
|
||||
; b::Send #b ; Chromebook
|
||||
; c::Send #c ; Chromebook
|
||||
; d::Send #d ; Chromebook
|
||||
; e::Send #e ; Chromebook
|
||||
; f::Send #f ; Chromebook
|
||||
; g::Send #g ; Chromebook
|
||||
; h::Send #h ; Chromebook
|
||||
; i::Send #i ; Chromebook
|
||||
; j::Send #j ; Chromebook
|
||||
; k::Send #k ; Chromebook
|
||||
; l::Send #l ; Chromebook
|
||||
; m::Send #m ; Chromebook
|
||||
; n::Send #n ; Chromebook
|
||||
; o::Send #o ; Chromebook
|
||||
; p::Send #p ; Chromebook
|
||||
; q::Send #q ; Chromebook
|
||||
; r::Send #r ; Chromebook
|
||||
; s::Send #s ; Chromebook
|
||||
; t::Send #t ; Chromebook
|
||||
; u::Send #u ; Chromebook
|
||||
; v::Send #v ; Chromebook
|
||||
; w::Send #w ; Chromebook
|
||||
; x::Send #x ; Chromebook
|
||||
; y::Send #y ; Chromebook
|
||||
; z::Send #z ; Chromebook
|
||||
; #If ; Chromebook
|
||||
|
||||
#If Not WinActive("ahk_group terminals") and Not WinActive("ahk_group remotes")
|
||||
^.::Send {Esc}
|
||||
#IfWinNotActive ahk_group terminals
|
||||
; emacs style
|
||||
#n::Send {Down}
|
||||
#p::Send {Up}
|
||||
@@ -516,8 +352,6 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
||||
$^Space::Send ^{Esc}
|
||||
|
||||
#IfWinActive ahk_group intellij
|
||||
; $#c::Send ^{c} ; Default - Sigints interrupt
|
||||
; $!c::Send ^{c} ; CB/IBM
|
||||
; General
|
||||
^0::Send !{0} ;Open corresponding tool window
|
||||
^1::Send !{1} ;Open corresponding tool window
|
||||
@@ -609,24 +443,13 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
||||
|
||||
; Close all browsers
|
||||
#IfWinActive ahk_group browsers
|
||||
; Page Navigation
|
||||
^[::send !{Left} ; Go to prior page
|
||||
^]::send !{Right} ; Go to next page
|
||||
;Tab Navigation
|
||||
^+[::send ^{PgUp} ; Go to prior tab (left)
|
||||
^+]::send ^{PgDn} ; Go to next tab (right)
|
||||
^!Left::send ^{PgUp} ; Go to prior tab (left)
|
||||
^!Right::send ^{PgDn} ; Go to next tab (right)
|
||||
#Left::send ^{PgUp} ; Go to prior tab (left)
|
||||
#Right::send ^{PgDn} ; Go to next tab (right)
|
||||
^q::send {Alt Down}f{Alt Up}x ; exit all windows
|
||||
; Dev Tools
|
||||
!^i::send {Ctrl Down}{Shift Down}i{Shift Up}{Ctrl Up}
|
||||
!^j::send {Ctrl Down}{Shift Down}j{Shift Up}{Ctrl Up}
|
||||
#^i::send {Ctrl Down}{Shift Down}i{Shift Up}{Ctrl Up}
|
||||
#^j::send {Ctrl Down}{Shift Down}j{Shift Up}{Ctrl Up}
|
||||
; Open preferences
|
||||
#IfWinActive ahk_exe firefox.exe
|
||||
^,::send, {Ctrl Down}t{Ctrl Up}about:preferences{Enter}
|
||||
^+n::send ^+p
|
||||
^,::send {Alt Down}{Shift Down}t{Shift Up}{Alt Up}o{Enter}
|
||||
#If
|
||||
#IfWinActive ahk_exe chrome.exe
|
||||
^,::send {Alt Down}e{Alt Up}s{Enter}
|
||||
@@ -655,19 +478,12 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
||||
!+g::send ^+{G} ; View source control
|
||||
; $#c::Send {Ctrl down}c{Ctrl up} ; Default - Sigints interrupt
|
||||
; $!c::Send {Ctrl down}c{Ctrl up} ; CB/IBM
|
||||
; $#x::Send {Ctrl down}x{Ctrl up} ; Default - Sigints interrupt
|
||||
; $!x::Send {Ctrl down}x{Ctrl up} ; CB/IBM
|
||||
|
||||
; #Space::Send ^{Space} ; Default - Basic code completion
|
||||
; !Space::Send ^{Space} ; CB/IBM - Basic code completion
|
||||
#If
|
||||
|
||||
#IfWinActive ahk_exe sublime_text.exe
|
||||
; #x::Send ^{x} ; Default - Terminal - Ctrl-x
|
||||
; #c::Send ^{c} ; Default - Terminal - Ctrl-c sigint
|
||||
; !x::Send ^{x} ; CB/IBM
|
||||
; !c::Send ^{c} ; CB/IBM - Sigint
|
||||
; #c::send ^{Pause} ; cancel_build
|
||||
; #Space::Send ^{Space} ; Default - Basic code completion
|
||||
; !Space::Send ^{Space} ; CB/IBM - Basic code completion
|
||||
#^Up::send !{O} ; Switch file
|
||||
@@ -679,8 +495,8 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
||||
^!Down::send ^{Down} ; scroll_lines down
|
||||
; #+Up::send {shift up}^!{Up} ; Default - multi-cursor up
|
||||
; #+Down::send {shift up}^!{Down} ; Default - multi-cursor down
|
||||
; !+Up::send {shift up}^!{Up} ; CB/IBM - multi-cursor up
|
||||
; !+Down::send {shift up}^!{Down} ; CB/IBM - multi-cursor down
|
||||
; #+Up::send {shift up}^!{Up} ; CB/IBM - multi-cursor up
|
||||
; #+Down::send {shift up}^!{Down} ; CB/IBM - multi-cursor down
|
||||
^PgDn::Return ; cancel next_view
|
||||
^PgUp::Return ; cancel prev_view
|
||||
^+{::send ^{PgDn} ; next_view
|
||||
@@ -689,7 +505,7 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
||||
^!Left::send ^{PgUp} ; prev_view
|
||||
Insert::Return ; cancel toggle_overwrite
|
||||
^!O::send {Insert} ; toggle_overwrite
|
||||
; !c::Return ; Default - cancel toggle_case_sensitive
|
||||
!c::Return ; cancel toggle_case_sensitive
|
||||
^!c::send !{c} ; toggle_case_sensitive
|
||||
; ^h::Return ; cancel replace
|
||||
^!f::send ^{h} ; replace
|
||||
@@ -697,7 +513,6 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
||||
^!e::send ^+{h} ; replace_next
|
||||
F3::Return ; cancel find_next
|
||||
^g::send {F3} ; find_next
|
||||
#g::send ^{g} ; goto line - disable game bar - Start menu -> Game bar shortcuts -> toggle Off
|
||||
*F3::Return ; cancel find_prev, find_under, find_all_under
|
||||
^+g::send +{F3} ; find_prev
|
||||
#!g::send ^{F3} ; find_under
|
||||
@@ -709,7 +524,7 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
||||
^+Down::Return ; cancel swap_line_down
|
||||
#!Down::send ^+{Down} ; swap_line_down
|
||||
^Pause::Return ; cancel cancel_build
|
||||
; #c::send ^{Pause} ; cancel_build
|
||||
#c::send ^{Pause} ; cancel_build
|
||||
F9::Return ; cancel sort_lines case_s false
|
||||
F5::send {F9} ; sort_lines case_s false
|
||||
#F9::Return ; cancel sort_lines case_s true
|
||||
@@ -773,7 +588,6 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
||||
; Sigints - interrupt
|
||||
; $#c::Send {Ctrl down}c{Ctrl up} ; Default
|
||||
; $!c::Send {Ctrl down}c{Ctrl up} ; CB/IBM
|
||||
$^.::Send {Ctrl down}c{Ctrl up}
|
||||
|
||||
; Windows Terminal
|
||||
; Ctrl+Shift+C should do nothing
|
||||
@@ -827,45 +641,45 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
||||
; Clear Terminal and Scroll Buffer
|
||||
^k::Send clear && printf '\e[3J'{Enter}
|
||||
; Remap Physical Ctrl back to Ctrl
|
||||
; #0::Send {LCtrl down}0{Ctrl up} ; Default
|
||||
; #1::Send {LCtrl down}1{Ctrl up} ; Default
|
||||
; #2::Send {LCtrl down}2{Ctrl up} ; Default
|
||||
; #3::Send {LCtrl down}3{Ctrl up} ; Default
|
||||
; #4::Send {LCtrl down}4{Ctrl up} ; Default
|
||||
; #5::Send {LCtrl down}5{Ctrl up} ; Default
|
||||
; #6::Send {LCtrl down}6{Ctrl up} ; Default
|
||||
; #7::Send {LCtrl down}7{Ctrl up} ; Default
|
||||
; #8::Send {LCtrl down}8{Ctrl up} ; Default
|
||||
; #9::Send {LCtrl down}9{Ctrl up} ; Default
|
||||
; #-::Send {LCtrl down}-{Ctrl up} ; Default
|
||||
; #=::Send {LCtrl down}={Ctrl up} ; Default
|
||||
; #`::Send {LCtrl down}`{Ctrl up} ; Default
|
||||
; #a::Send {LCtrl down}a{Ctrl up} ; Default
|
||||
; #b::Send {LCtrl down}b{Ctrl up} ; Default
|
||||
; #c::Send {LCtrl down}c{Ctrl up} ; Default
|
||||
; #d::Send {LCtrl down}d{Ctrl up} ; Default
|
||||
; #e::Send {LCtrl down}e{Ctrl up} ; Default
|
||||
; #f::Send {LCtrl down}f{Ctrl up} ; Default
|
||||
; #g::Send {LCtrl down}g{Ctrl up} ; Default
|
||||
; #h::Send {LCtrl down}h{Ctrl up} ; Default
|
||||
; #i::Send {LCtrl down}i{Ctrl up} ; Default
|
||||
; #j::Send {LCtrl down}j{Ctrl up} ; Default
|
||||
; #k::Send {LCtrl down}k{Ctrl up} ; Default
|
||||
; #l::Send {LCtrl down}l{Ctrl up} ; Default
|
||||
; #m::Send {LCtrl down}m{Ctrl up} ; Default
|
||||
; #n::Send {LCtrl down}n{Ctrl up} ; Default
|
||||
; #o::Send {LCtrl down}o{Ctrl up} ; Default
|
||||
; #p::Send {LCtrl down}p{Ctrl up} ; Default
|
||||
; #q::Send {LCtrl down}q{Ctrl up} ; Default
|
||||
; #r::Send {LCtrl down}r{Ctrl up} ; Default
|
||||
; #s::Send {LCtrl down}s{Ctrl up} ; Default
|
||||
; #t::Send {LCtrl down}t{Ctrl up} ; Default
|
||||
; #u::Send {LCtrl down}u{Ctrl up} ; Default
|
||||
; #v::Send {LCtrl down}v{Ctrl up} ; Default
|
||||
; #w::Send {LCtrl down}w{Ctrl up} ; Default
|
||||
; #x::Send {LCtrl down}x{Ctrl up} ; Default
|
||||
; #y::Send {LCtrl down}y{Ctrl up} ; Default
|
||||
; #z::Send {LCtrl down}z{Ctrl up} ; Default
|
||||
#0::Send {LCtrl down}0{Ctrl up} ; Default
|
||||
#1::Send {LCtrl down}1{Ctrl up} ; Default
|
||||
#2::Send {LCtrl down}2{Ctrl up} ; Default
|
||||
#3::Send {LCtrl down}3{Ctrl up} ; Default
|
||||
#4::Send {LCtrl down}4{Ctrl up} ; Default
|
||||
#5::Send {LCtrl down}5{Ctrl up} ; Default
|
||||
#6::Send {LCtrl down}6{Ctrl up} ; Default
|
||||
#7::Send {LCtrl down}7{Ctrl up} ; Default
|
||||
#8::Send {LCtrl down}8{Ctrl up} ; Default
|
||||
#9::Send {LCtrl down}9{Ctrl up} ; Default
|
||||
#-::Send {LCtrl down}-{Ctrl up} ; Default
|
||||
#=::Send {LCtrl down}={Ctrl up} ; Default
|
||||
#`::Send {LCtrl down}`{Ctrl up} ; Default
|
||||
#a::Send {LCtrl down}a{Ctrl up} ; Default
|
||||
#b::Send {LCtrl down}b{Ctrl up} ; Default
|
||||
#c::Send {LCtrl down}c{Ctrl up} ; Default
|
||||
#d::Send {LCtrl down}d{Ctrl up} ; Default
|
||||
#e::Send {LCtrl down}e{Ctrl up} ; Default
|
||||
#f::Send {LCtrl down}f{Ctrl up} ; Default
|
||||
#g::Send {LCtrl down}g{Ctrl up} ; Default
|
||||
#h::Send {LCtrl down}h{Ctrl up} ; Default
|
||||
#i::Send {LCtrl down}i{Ctrl up} ; Default
|
||||
#j::Send {LCtrl down}j{Ctrl up} ; Default
|
||||
#k::Send {LCtrl down}k{Ctrl up} ; Default
|
||||
#l::Send {LCtrl down}l{Ctrl up} ; Default
|
||||
#m::Send {LCtrl down}m{Ctrl up} ; Default
|
||||
#n::Send {LCtrl down}n{Ctrl up} ; Default
|
||||
#o::Send {LCtrl down}o{Ctrl up} ; Default
|
||||
#p::Send {LCtrl down}p{Ctrl up} ; Default
|
||||
#q::Send {LCtrl down}q{Ctrl up} ; Default
|
||||
#r::Send {LCtrl down}r{Ctrl up} ; Default
|
||||
#s::Send {LCtrl down}s{Ctrl up} ; Default
|
||||
#t::Send {LCtrl down}t{Ctrl up} ; Default
|
||||
#u::Send {LCtrl down}u{Ctrl up} ; Default
|
||||
#v::Send {LCtrl down}v{Ctrl up} ; Default
|
||||
#w::Send {LCtrl down}w{Ctrl up} ; Default
|
||||
#x::Send {LCtrl down}x{Ctrl up} ; Default
|
||||
#y::Send {LCtrl down}y{Ctrl up} ; Default
|
||||
#z::Send {LCtrl down}z{Ctrl up} ; Default
|
||||
; !0::Send {LCtrl down}0{Ctrl up} ; CB/IBM
|
||||
; !1::Send {LCtrl down}1{Ctrl up} ; CB/IBM
|
||||
; !2::Send {LCtrl down}2{Ctrl up} ; CB/IBM
|
||||
@@ -917,299 +731,4 @@ Send {RWin up}
|
||||
Send {LWin up}
|
||||
Send {RShift up}
|
||||
Send {LShift up}
|
||||
return
|
||||
|
||||
; ###############################################################################################################
|
||||
; ### Special character insertion like Apple/macOS Option key methods, mapping to Unicode input method
|
||||
; ### Common symbols available with Option+key or Shift+Option+key, accented keys with Option+Key1, then Key2
|
||||
; ###############################################################################################################
|
||||
|
||||
; Shortcut to activate Option key special character scheme
|
||||
^+!o::Gosub, toggle_optspecialchars
|
||||
|
||||
; Function (subroutine?) for activation by tray menu item or keyboard shortcut
|
||||
toggle_optspecialchars:
|
||||
optspecialchars:=!optspecialchars ; Toggle value of optspecialchars variable on/off
|
||||
if (optspecialchars = 1) {
|
||||
Menu, Tray, Check, OptSpecialChars Shift+Opt+Cmd+O
|
||||
MsgBox, 0, ALERT, % "Option key special character entry scheme is now ENABLED.`n`n"
|
||||
. "WARNING: This will interfere with many Alt and Alt-Shift shortcuts.`n`n"
|
||||
. "Disable from tray menu or with Shift+Opt+Cmd+O."
|
||||
return
|
||||
}
|
||||
if (optspecialchars = 0) {
|
||||
Menu, Tray, Uncheck, OptSpecialChars Shift+Opt+Cmd+O
|
||||
MsgBox, 0, ALERT, Option key special character entry scheme is now DISABLED.
|
||||
return
|
||||
}
|
||||
return
|
||||
|
||||
; #IfWinNotActive ahk_group remotes
|
||||
#If !WinActive("ahk_group remotes") && optspecialchars = 1
|
||||
|
||||
; ###### NUMBER KEYS ROW ######
|
||||
|
||||
; Dead_Keys_Accent_Grave
|
||||
; ### SC029 is ` (Grave key above Tab)
|
||||
; Grave accent: Option+`, then key to accent
|
||||
$!SC029::
|
||||
; Use Apple "dead keys" Option key method to attach accents to next character typed
|
||||
; Grave accent activated by Option+` (Alt plus scan code SC029, or !SC029)
|
||||
StringCaseSense, On
|
||||
; watch next input string
|
||||
Input, UserInput, L1
|
||||
Switch UserInput {
|
||||
Case Esc: Return ; Watch for Escape key, cancel dead keys sequence
|
||||
Case "a": Send, {U+00E0} ; à {U+00E0} (Alt+0224)
|
||||
Case "e": Send, {U+00E8} ; è {U+00E8} (Alt+0232)
|
||||
Case "i": Send, {U+00EC} ; ì {U+00EC} (Alt+0236)
|
||||
Case "o": Send, {U+00F2} ; ò {U+00F2} (Alt+0242)
|
||||
Case "u": Send, {U+00F9} ; ù {U+00F9} (Alt+0249)
|
||||
Case "A": Send, {U+00C0} ; À {U+00C0} (Alt+0192)
|
||||
Case "E": Send, {U+00C8} ; È {U+00C8} (Alt+0200)
|
||||
Case "I": Send, {U+00CC} ; Ì {U+00CC} (Alt+0204)
|
||||
Case "O": Send, {U+00D2} ; Ò {U+00D2} (Alt+0210)
|
||||
Case "U": Send, {U+00D9} ; Ù {U+00D9} (Alt+0217)
|
||||
Default: Send, %UserInput% ; No match? Send input through.
|
||||
}
|
||||
Return
|
||||
|
||||
; ### SC029 is ` (Grave key above Tab)
|
||||
$!+SC029::Send, {U+0060} ; Grave Accent diacritic (non-combining) {U+0060}: ` (Alt+96)
|
||||
$!1::Send, {U+00A1} ; Inverted Exclamation Mark {U+00A1}: ¡ (Alt+0161)
|
||||
$!+1::Send, {U+2044} ; Fraction Slash, solidus (U+2044): ⁄ (Alt+8260) [Needs Unicode]
|
||||
$!2::Send, {U+2122} ; Trade Mark Sign Emoji {U+2122}: ™ (Alt+0153)
|
||||
$!+2::Send, {U+20AC} ; Euro currency symbol {U+20AC}: € (Alt+0128)
|
||||
$!3::Send, {U+00A3} ; British Pound currency symbol {U+00A3}: £ (Alt+0163)
|
||||
$!+3::Send, {U+2039} ; Single Left-Pointing Angle Quotation mark {U+2039}: (Alt+0139)
|
||||
$!4::Send, {U+00A2} ; Cent currency symbol {U+00A2}: ¢ (Alt+0162)
|
||||
$!+4::Send, {U+203A} ; Single Right-Pointing Angle Quotation mark (U+203A): (Alt+0155)
|
||||
$!5::Send, {U+221E} ; Infinity mathematical symbol {U+221E}: ∞ (Alt+236)
|
||||
$!+5::Send, {U+FB01} ; fi latin small ligature: fi (U+FB01) (Alt+64257) [Needs Unicode]
|
||||
$!6::Send, {U+00A7} ; Section symbol {U+00A7}: § (Alt+0167)
|
||||
$!+6::Send, {U+FB02} ; fl small ligature: (U+FB02) (Alt+64258) [Needs Unicode.]
|
||||
$!7::Send, {U+00B6} ; Paragraph mark (Pilcrow) symbol {U+00B6}: ¶ (Alt+0182)
|
||||
$!+7::Send, {U+2021} ; Double dagger (cross) symbol {U+2021}: ‡ (Alt+0135)
|
||||
$!8::Send, {U+2022} ; Bullet point symbol {U+2022}: • (Alt+0149)
|
||||
$!+8::Send, {U+00B0} ; Degree symbol {U+00B0}: ° (Alt+0176)
|
||||
$!9::Send, {U+00AA} ; Feminine Ordinal Indicator symbol {U+00AA}: ª (Alt+0170)
|
||||
$!+9::Send, {U+00B7} ; Middle Dot (interpunct/middot) symbol {U+00B7}: · (Alt+0183)
|
||||
$!0::Send, {U+00BA} ; Masculine Ordinal Indicator symbol {U+00BA}: º (Alt+0186)
|
||||
$!+0::Send, {U+201A} ; Single low-9 quotation mark {U+201A}: ‚ (Alt+0130)
|
||||
$!-::Send, {U+2013} ; En Dash symbol {U+2013}: – (Alt+0150)
|
||||
$!+-::Send, {U+2014} ; Em Dash symbol {U+2014}: — (Alt+0151)
|
||||
$!=::Send, {U+2260} ; Not Equal To symbol (U+2260): ≠ (Alt+8800) [Needs Unicode]
|
||||
$!+=::Send, {U+00B1} ; Plus Minus symbol {U+00B1}: ± (Alt+0177)
|
||||
|
||||
|
||||
; ###### LETTER AND PUNCTUATION KEYS ###### [ in QWERTY order ]
|
||||
|
||||
; ##############
|
||||
; ### 1st row: Tab-key row [ qwertyuiop[]\ ] [ QWERTYUIOP{}| ]
|
||||
|
||||
$!q::Send, {U+0153} ; Small oe (oethel) ligature {U+0153}: œ (Alt+0156)
|
||||
$!+q::Send, {U+0152} ; Capital OE (Oethel) ligature {U+0152}: Œ (Alt+0140)
|
||||
$!w::Send, {U+2211} ; N-Ary Summation (sigma) notation (U+2211}: ∑ [Needs Unicode]
|
||||
$!+w::Send, {U+201E} ; Double Low-9 Quotation mark {U+201E}: „ (Alt+0132)
|
||||
|
||||
; Dead_Keys_Accent_Acute
|
||||
; Acute accent: Option+e, then key to accent
|
||||
$!e::
|
||||
; Use Apple "dead keys" Option key method to attach accents to next character typed
|
||||
; Acute accent activated by Option+e (logical Alt+e)
|
||||
StringCaseSense, On
|
||||
; watch next input string
|
||||
Input, UserInput, L1
|
||||
Switch UserInput {
|
||||
Case Esc: Return ; Watch for Escape key, cancel dead keys sequence
|
||||
Case "a": Send, {U+00E1} ; á {U+00E1} (Alt+0225)
|
||||
Case "e": Send, {U+00E9} ; é {U+00E9} (Alt+0233)
|
||||
Case "i": Send, {U+00ED} ; í {U+00ED} (Alt+0237)
|
||||
Case "o": Send, {U+00F3} ; ó {U+00F3} (Alt+0243)
|
||||
Case "u": Send, {U+00FA} ; ú {U+00FA} (Alt+0250)
|
||||
Case "A": Send, {U+00C1} ; Á {U+00C1} (Alt+0193)
|
||||
Case "E": Send, {U+00C9} ; É {U+00C9} (Alt+0201)
|
||||
Case "I": Send, {U+00CD} ; Í {U+00CD} (Alt+0205)
|
||||
Case "O": Send, {U+00D3} ; Ó {U+00D3} (Alt+0211)
|
||||
Case "U": Send, {U+00DA} ; Ú {U+00DA} (Alt+0218)
|
||||
Default: Send, %UserInput% ; No match? Send input through.
|
||||
}
|
||||
Return
|
||||
|
||||
$!+e::Send, {U+00B4} ; Acute accent diacritic (non-combining) {U+00B4}: ´ (Alt+0180)
|
||||
$!r::Send, {U+00AE} ; Registered Trade Mark Sign {U+00AE}: ® (Alt+0174)
|
||||
$!+r::Send, {U+2030} ; Per mille symbol {U+2030}: ‰ (Alt+0137)
|
||||
$!t::Send, {U+2020} ; Simple dagger (cross) symbol {U+2020}: † (Alt+0134)
|
||||
$!+t::Send, {U+02C7} ; Caron/hacek diacritic (non-combining) (U+02C7): ˇ (Alt+0134)
|
||||
$!y::Send, {U+00A5} ; Yen currency symbol {U+00A5}: ¥ (Alt+0165)
|
||||
$!+y::Send, {U+00C1} ; Latin Capital Letter a with Acute (U+00C1): Á (Alt+0193)
|
||||
|
||||
; Dead_Keys_Accent_Umlaut
|
||||
; Umlaut/Diaeresis accent: Option+u, then key to accent
|
||||
$!u::
|
||||
; Use Apple "dead keys" Option key method to attach accents to next character typed
|
||||
; Umlaut/Diaeresis accent activated by Option+u (logical Alt+u)
|
||||
StringCaseSense, On
|
||||
; watch next input string
|
||||
Input, UserInput, L1
|
||||
Switch UserInput {
|
||||
Case Esc: Return ; Watch for Escape key, cancel dead keys sequence
|
||||
Case "a": Send, {U+00E4} ; ä {U+00E4} (Alt+0228)
|
||||
Case "e": Send, {U+00EB} ; ë {U+00EB} (Alt+0235)
|
||||
Case "i": Send, {U+00EF} ; ï {U+00EF} (Alt+0239)
|
||||
Case "o": Send, {U+00F6} ; ö {U+00F6} (Alt+0246)
|
||||
Case "u": Send, {U+00FC} ; ü {U+00FC} (Alt+0252)
|
||||
Case "y": Send, {U+00FF} ; ÿ {U+00FF} (Alt+0255)
|
||||
Case "A": Send, {U+00C4} ; Ä {U+00C4} (Alt+0196)
|
||||
Case "E": Send, {U+00CB} ; Ë {U+00CB} (Alt+0203)
|
||||
Case "I": Send, {U+00CF} ; Ï {U+00CF} (Alt+0207)
|
||||
Case "O": Send, {U+00D6} ; Ö {U+00D6} (Alt+0214)
|
||||
Case "U": Send, {U+00DC} ; Ü {U+00DC} (Alt+0220)
|
||||
Case "Y": Send, {U+0178} ; Ÿ {U+0178} (Alt+0159)
|
||||
Default: Send, %UserInput% ; No match? Send input through.
|
||||
}
|
||||
Return
|
||||
|
||||
$!+u::Send, {U+00A8} ; Umlaut/Diaeresis diacritic (non-combining) {U+00A8}: (Alt+0168)
|
||||
|
||||
; Dead_Keys_Accent_Circumflex
|
||||
; Circumflex accent: Option+i, then key to accent
|
||||
$!i::
|
||||
; Use Apple "dead keys" Option key method to attach accents to next character typed
|
||||
; Circumflex accent activated by Option+i (logical Alt+i)
|
||||
StringCaseSense, On
|
||||
; watch next input string
|
||||
Input, UserInput, L1
|
||||
Switch UserInput {
|
||||
Case Esc: Return ; Watch for Escape key, cancel dead keys sequence
|
||||
Case "a": Send, {U+00E2} ; â {U+00E2} (Alt+0226)
|
||||
Case "e": Send, {U+00EA} ; ê {U+00EA} (Alt+0234)
|
||||
Case "i": Send, {U+00EE} ; î {U+00EE} (Alt+0238)
|
||||
Case "o": Send, {U+00F4} ; ô {U+00F4} (Alt+0244)
|
||||
Case "u": Send, {U+00FB} ; û {U+00FB} (Alt+0251)
|
||||
Case "A": Send, {U+00C2} ; Â {U+00C2} (Alt+0194)
|
||||
Case "E": Send, {U+00CA} ; Ê {U+00CA} (Alt+0202)
|
||||
Case "I": Send, {U+00CE} ; Î {U+00CE} (Alt+0206)
|
||||
Case "O": Send, {U+00D4} ; Ô {U+00D4} (Alt+0212)
|
||||
Case "U": Send, {U+00DB} ; Û {U+00DB} (Alt+0219)
|
||||
Default: Send, %UserInput% ; No match? Send input through.
|
||||
}
|
||||
Return
|
||||
|
||||
$!+i::Send, {U+02C6} ; Modifier Letter Circumflex Accent (U+02C6): ˆ (Alt+0137)
|
||||
$!o::Send, {U+00F8} ; Latin Small Letter o with Stroke {U+00F8}: ø (Alt+0248)
|
||||
$!+o::Send, {U+00D8} ; Latin Capital Letter O with Stroke {U+00D8}: Ø (Alt+0216)
|
||||
$!p::Send, {U+03C0} ; Greek Small Letter Pi {U+03C0}: π (Alt+227)
|
||||
$!+p::Send, {U+220F} ; N-Ary Product mathematical symbol (U+220F): ∏ [Needs Unicode]
|
||||
$![::Send, {U+201C} ; Left Double Quotation Mark {U+201C}: “ (Alt+0147)
|
||||
$!+[::Send, {U+201D} ; Right Double Quotation Mark {U+201D}: ” (Alt+8)
|
||||
$!]::Send, {U+2018} ; Left Single Quotation Mark {U+2018}: ‘ (Alt+0145)
|
||||
$+!]::Send, {U+2019} ; Right Single Quotation Mark {U+2019}: ’ (Alt+0146)
|
||||
$!\::Send, {U+00AB} ; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK {U+00AB}: « (Alt+0171)
|
||||
$!+\::Send, {U+00BB} ; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK {U+00BB}: » (Alt+0187)
|
||||
|
||||
|
||||
; ##############
|
||||
; ### 2nd row: Caps Lock row [ asdfghjkl;' ] [ ASDFGHJKL:" ]
|
||||
|
||||
$!a::Send, {U+00E5} ; Small Letter a with Ring Above {U+00E5}: å (Alt+0229)
|
||||
$!+a::Send, {U+00C5} ; Capital Letter A with Ring Above {U+00C5}: Å (Alt+0197)
|
||||
$!s::Send, {U+00DF} ; German Eszett/beta (Sharfes/Sharp S) {U+00DF}: ß (Alt+0223)
|
||||
$!+s::Send, {U+00CD} ; Latin Capital Letter I with Acute {U+00CD}: Í (Alt+0205)
|
||||
$!d::Send, {U+2202} ; Partial Differential mathematical symbol {U+2202}: ∂ (Alt+2202) [Needs Unicode]
|
||||
$!+d::Send, {U+00CE} ; Latin Capital Letter I with Circumflex {U+00CE}: Î (Alt+0206)
|
||||
$!f::Send, {U+0192} ; Function/florin currency symbol {U+0192}: ƒ (Alt+159)
|
||||
$!+f::Send, {U+00CF} ; Latin Capital Letter I with Diaeresis {U+00CF}: Ï (Alt+0207)
|
||||
|
||||
; #######################################################################
|
||||
; ## Problem: Option+g (Win+g) brings up Windows XBox Game Bar!
|
||||
; ## To remove/disable paste this text in PowerShell (without quotes):
|
||||
; ## "Get-AppxPackage Microsoft.XboxGamingOverlay | Remove-AppxPackage"
|
||||
; #######################################################################
|
||||
$!g::Send, {U+00A9} ; Copyright Sign {U+00A9}: © (Alt+0169)
|
||||
$!+g::Send, {U+02DD} ; Double Acute Accent diacritic (non-combining) {U+02DD}: ˝ [Needs Unicode]
|
||||
$!h::Send, {U+02D9} ; Dot Above diacritic (non-combining) {U+02D9}: ˙ [Needs Unicode]
|
||||
$!+h::Send, {U+00D3} ; Latin Capital Letter O with Acute {U+00D3}: Ó (Alt+0211)
|
||||
$!j::Send, {U+2206} ; Increment, laplace operator symbol {U+2206}: ∆ [Needs Unicode]
|
||||
$!+j::Send, {U+00D4} ; Latin Capital Letter O with Circumflex {U+00D4}: Ô (Alt+0212)
|
||||
$!k::Send, {U+02DA} ; Ring Above diacritic (non-combining) {U+02DA}: ˚ [Needs Unicode] (NOT degree sign/symbol)
|
||||
|
||||
; Apple logo {U+F8FF}: [Unicode Private Use Area, req's Baskerville Old Face font]
|
||||
; $!+k::Send, {U+F8FF} ; This Unicode address only works with Mac fonts
|
||||
$!+k::
|
||||
Send, {U+F000} ; Change font of inserted character (may be invisible) to Baskerville Old Face
|
||||
apple_logo_alert:=1 ; Set to zero to disable, one to enable (default is enabled)
|
||||
if (apple_logo_alert=1) {
|
||||
MsgBox, 0, ALERT, % "ALERT: Change the font of the inserted character!`n`n"
|
||||
. "Apple logo character requires the Baskerville Old Face font.`n`n`n"
|
||||
. "Note 1: The character has been inserted but may be INVISIBLE`n"
|
||||
. " (i.e., non-printing) in its current font.`n`n`n"
|
||||
. "Note 2: The inserted character will probably NOT be portable`n"
|
||||
. " to a Mac document/font. Use only for print/PDF `n"
|
||||
. " purposes on PC.`n`n`n"
|
||||
. "Note 3: Search for apple_logo_alert in kinto.ahk config and `n"
|
||||
. " set it to zero to disable this MsgBox.`n`n`n"
|
||||
}
|
||||
return
|
||||
|
||||
; #######################################################################
|
||||
; ## Option+L works, but will also trigger the Win+L screen locking.
|
||||
; ## The screen locking shortcut can only be disabled in the registry.
|
||||
; #######################################################################
|
||||
$!l::Send, {U+00AC} ; Not Sign angled dash symbol {U+00AC}: ¬ (Alt+170)
|
||||
$!+l::Send, {U+00D2} ; Latin Capital Letter O with Grave {U+00D2}: Ò (Alt+0210)
|
||||
$!;::Send, {U+2026} ; Horizontal elipsis {U+2026}: … (Alt+0133)
|
||||
$!+;::Send, {U+00DA} ; Latin Capital Letter U with Acute {U+00DA}: Ú (Alt+0218)
|
||||
|
||||
; #######################################################################
|
||||
; ## SC028 is single-quote key scan code
|
||||
; #######################################################################
|
||||
$!SC028::Send, {U+00E6} ; Small ae ligature {U+00E6}: æ (Alt+0230)
|
||||
$!+SC028::Send, {U+00C6} ; Capital AE ligature {U+00C6}: Æ (Alt+0198)
|
||||
|
||||
|
||||
; ##############
|
||||
; ### 3rd row: Shift-Keys row [ zxcvbnm,./ ] [ ZXCVBNM<>? ]
|
||||
|
||||
$!z::Send, {U+03A9} ; Greek Capital Letter Omega symbol {U+03A9} Ω (Alt+234)
|
||||
$!+z::Send, {U+00B8} ; Spacing Cedilla diacritic symbol (non-combining) {U+00B8}: ¸ (Alt+0184)
|
||||
$!x::Send, {U+2248} ; Almost Equal To symbol (U+2248): ≈ (Alt+247)
|
||||
$!+x::Send, {U+02DB} ; Ogonek diacritic (non-combining) (U+02DB): ˛ [Needs Unicode]
|
||||
$!c::Send, {U+00E7} ; Small Letter c with Cedilla {U+00E7}: ç (Alt+0231)
|
||||
$!+c::Send, {U+00C7} ; Capital Letter C with Cedilla {U+00C7}: Ç (Alt+0199)
|
||||
$!v::Send, {U+221A} ; Square Root radical sign (U+221A): √ (Alt+251)
|
||||
$!+v::Send, {U+25CA} ; Lozenge (diamond) shape symbol (U+25CA): ◊ [Needs Unicode]
|
||||
$!b::Send, {U+222B} ; Integral mathematical symbol (U+222B): ∫ [Needs Unicode]
|
||||
$!+b::Send, {U+0131} ; Latin Small Letter Dotless i (U+0131): ı [Needs Unicode]
|
||||
|
||||
; Dead_Keys_Accent_Tilde
|
||||
; Tilde accent: Option+n, then key to accent
|
||||
$!n::
|
||||
; Use Apple "dead keys" Option key method to attach accents to next character typed
|
||||
; Tilde accent activated by Option+n (logical Alt+n)
|
||||
StringCaseSense, On
|
||||
; watch next input string
|
||||
Input, UserInput, L1
|
||||
Switch UserInput {
|
||||
Case Esc: Return ; Watch for Escape key, cancel dead keys sequence
|
||||
Case "a": Send, {U+00E3} ; ã {U+00E3} (Alt+0227)
|
||||
Case "n": Send, {U+00F1} ; ñ {U+00F1} (Alt+0241)
|
||||
Case "o": Send, {U+00F5} ; õ {U+00F5} (Alt+0245)
|
||||
Case "A": Send, {U+00C3} ; Ã {U+00C3} (Alt+0195)
|
||||
Case "N": Send, {U+00D1} ; Ñ {U+00D1} (Alt+0209)
|
||||
Case "O": Send, {U+00D5} ; Õ {U+00D5} (Alt+0213)
|
||||
Default: Send, %UserInput% ; No match? Send input through.
|
||||
}
|
||||
Return
|
||||
|
||||
$!+n::Send, {U+02DC} ; Small Tilde character (U+02DC): ˜ (Alt+0152)
|
||||
$!m::Send, {U+00B5} ; Micro (mu) symbol {U+00B5}: µ (Alt+0181)
|
||||
$!+m::Send, {U+00C2} ; Latin Capital Letter a with Circumflex (U+00C2): Â (Alt+0194)
|
||||
$!,::Send, {U+2264} ; Less than or equal to symbol {U+2264}: ≤ (Alt+243)
|
||||
$!+,::Send, {U+00AF} ; Macron/overline/apl overbar (non-combining) (U+00AF): ¯ (Alt+0175)
|
||||
$!.::Send, {U+2265} ; Greater than or equal to symbol {U+2265}: ≥ (Alt+242)
|
||||
$!+.::Send, {U+02D8} ; Breve diacritic (non-combining) {U+02D8}: ˘ [Needs Unicode]
|
||||
$!/::Send, {U+00F7} ; Obelus/Division symbol {U+00F7}: ÷ (Alt+0247)
|
||||
$!+/::Send, {U+00BF} ; Inverted Question Mark {U+00BF}: ¿ (Alt+0191)
|
||||
|
||||
#If ; ### END of special character insertion with Option(Alt) key
|
||||
return
|
0
windows/unused/macbook_winctrl_swap.skl → windows/macbook_winctrl_swap.skl
Normal file → Executable file
0
linux/gui/capslock_1200x720.png → xkeysnail-config/gui/capslock_1200x720.png
Normal file → Executable file
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |
0
linux/gui/keys_1200x720.png → xkeysnail-config/gui/keys_1200x720.png
Normal file → Executable file
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.4 KiB |
@@ -1,8 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import gi,os,time,fcntl,argparse,re
|
||||
import warnings
|
||||
warnings.filterwarnings("ignore")
|
||||
gi.require_version('Gtk', '3.0')
|
||||
gi.require_version('Vte', '2.91')
|
||||
from gi.repository import Gtk,Gdk,GdkPixbuf
|
||||
@@ -50,21 +48,13 @@ class MyWindow(Gtk.Window):
|
||||
page = 1
|
||||
|
||||
label = Gtk.Label()
|
||||
label.set_halign(Gtk.Align.END)
|
||||
label.set_alignment(1, 0)
|
||||
ostype = os.environ.get('XDG_CURRENT_DESKTOP')
|
||||
global openWin
|
||||
openWin = False
|
||||
|
||||
global child_pid
|
||||
global sysv
|
||||
try:
|
||||
sysv = int(Popen("pidof systemd >/dev/null 2>&1 && echo '0' || echo '1'", stdout=PIPE, shell=True).communicate()[0].strip().decode('UTF-8'))
|
||||
except:
|
||||
sysv = 2
|
||||
if sysv:
|
||||
kinto_status = Popen("while :; do clear; pgrep 'xkeysnail' && echo 'active'; sleep 2; done", stdout=PIPE, shell=True)
|
||||
else:
|
||||
kinto_status = Popen("while :; do clear; systemctl is-active xkeysnail; sleep 2; done", stdout=PIPE, shell=True)
|
||||
kinto_status = Popen("while :; do clear; systemctl is-active xkeysnail; sleep 2; done", stdout=PIPE, shell=True)
|
||||
child_pid = kinto_status.pid
|
||||
|
||||
winkb = Gtk.RadioMenuItem(label='Windows')
|
||||
@@ -124,15 +114,9 @@ class MyWindow(Gtk.Window):
|
||||
None,
|
||||
)
|
||||
if self.args.debug:
|
||||
if sysv:
|
||||
self.command = 'sudo /etc/init.d/kinto stop && sudo pkill -f bin/xkeysnail && sudo xkeysnail ~/.config/kinto/kinto.py\n'
|
||||
else:
|
||||
self.command = 'sudo systemctl stop xkeysnail && sudo pkill -f bin/xkeysnail && sudo xkeysnail ~/.config/kinto/kinto.py\n'
|
||||
self.command = 'sudo systemctl stop xkeysnail && sudo pkill -f bin/xkeysnail && sudo xkeysnail ~/.config/kinto/kinto.py\n'
|
||||
else:
|
||||
if sysv:
|
||||
self.command = "tail -f /tmp/kinto.log\n"
|
||||
else:
|
||||
self.command = "journalctl -f --unit=xkeysnail.service -b\n"
|
||||
self.command = "journalctl -f --unit=xkeysnail.service -b\n"
|
||||
|
||||
self.InputToTerm(self.command)
|
||||
|
||||
@@ -169,14 +153,6 @@ class MyWindow(Gtk.Window):
|
||||
menuitem_file = Gtk.MenuItem(label="File")
|
||||
menubar.append(menuitem_file)
|
||||
submenu_file = Gtk.Menu()
|
||||
|
||||
menuitem_restart = Gtk.MenuItem(label="Restart")
|
||||
menuitem_restart.connect('activate',self.runRestart)
|
||||
submenu_file.append(menuitem_restart)
|
||||
menuitem_stop = Gtk.MenuItem(label="Stop")
|
||||
menuitem_stop.connect('activate',self.runStop)
|
||||
submenu_file.append(menuitem_stop)
|
||||
|
||||
menuitem_file.set_submenu(submenu_file)
|
||||
submenu_file.append(self.menuitem_auto)
|
||||
kintotray = int(self.queryConfig('ps -aux | grep [k]intotray >/dev/null 2>&1 && echo "1" || echo "0"'))
|
||||
@@ -188,6 +164,12 @@ class MyWindow(Gtk.Window):
|
||||
self.menuitem_systray.signal_id = self.menuitem_systray.connect('activate',self.checkTray,True)
|
||||
menuitem_file.connect('activate',self.refreshFile)
|
||||
submenu_file.append(self.menuitem_systray)
|
||||
menuitem_restart = Gtk.MenuItem(label="Restart")
|
||||
menuitem_restart.connect('activate',self.runRestart)
|
||||
submenu_file.append(menuitem_restart)
|
||||
menuitem_stop = Gtk.MenuItem(label="Stop")
|
||||
menuitem_stop.connect('activate',self.runStop)
|
||||
submenu_file.append(menuitem_stop)
|
||||
|
||||
menuitem_quit = Gtk.MenuItem(label="Quit")
|
||||
submenu_file.append(menuitem_quit)
|
||||
@@ -197,19 +179,19 @@ class MyWindow(Gtk.Window):
|
||||
menubar.append(menuitem_edit)
|
||||
submenu_edit = Gtk.Menu()
|
||||
menuitem_edit.set_submenu(submenu_edit)
|
||||
edititem_tweaks = Gtk.MenuItem(label="Tweaks")
|
||||
edititem_tweaks = Gtk.MenuItem("Tweaks")
|
||||
edititem_tweaks.connect('activate',self.setTweaks)
|
||||
submenu_edit.append(edititem_tweaks)
|
||||
edititem_config = Gtk.MenuItem(label="Kinto Config (shortcuts)")
|
||||
edititem_config = Gtk.MenuItem("Kinto Config (shortcuts)")
|
||||
edititem_config.connect('activate',self.setConfig)
|
||||
submenu_edit.append(edititem_config)
|
||||
edititem_service = Gtk.MenuItem(label="Kinto Service")
|
||||
edititem_service = Gtk.MenuItem("Kinto Service")
|
||||
edititem_service.connect('activate',self.setService)
|
||||
submenu_edit.append(edititem_service)
|
||||
edititem_shortcuts = Gtk.MenuItem(label="System Shortcuts")
|
||||
edititem_shortcuts = Gtk.MenuItem("System Shortcuts")
|
||||
edititem_shortcuts.connect('activate',self.setSysKB)
|
||||
submenu_edit.append(edititem_shortcuts)
|
||||
edititem_language = Gtk.MenuItem(label="Change Language")
|
||||
edititem_language = Gtk.MenuItem("Change Language")
|
||||
edititem_language.connect('activate',self.setRegion)
|
||||
submenu_edit.append(edititem_language)
|
||||
|
||||
@@ -223,11 +205,11 @@ class MyWindow(Gtk.Window):
|
||||
helpitem_debug = Gtk.MenuItem(label="Debug")
|
||||
helpitem_debug.connect('activate',self.runDebug)
|
||||
submenu_help.append(helpitem_debug)
|
||||
helpitem_support = Gtk.MenuItem(label="Support")
|
||||
helpitem_support = Gtk.MenuItem("Support")
|
||||
helpitem_support.connect('activate',self.openSupport)
|
||||
submenu_help.append(helpitem_support)
|
||||
menuitem_help.set_submenu(submenu_help)
|
||||
helpitem_about = Gtk.MenuItem(label="About")
|
||||
helpitem_about = Gtk.MenuItem("About")
|
||||
helpitem_about.connect('activate',self.runAbout)
|
||||
submenu_help.append(helpitem_about)
|
||||
|
||||
@@ -353,12 +335,13 @@ class MyWindow(Gtk.Window):
|
||||
self.queryConfig('cp '+os.environ['HOME']+'/.config/kinto/xkeysnail.desktop '+os.environ['HOME']+'/.config/autostart/xkeysnail.desktop')
|
||||
if self.options["systray"]:
|
||||
self.queryConfig('cp '+os.environ['HOME']+'/.config/kinto/kintotray.desktop '+os.environ['HOME']+'/.config/autostart/kintotray.desktop')
|
||||
self.queryConfig("nohup /usr/bin/python3 ~/.config/kinto/kintotray.py >/dev/null 2>&1 &")
|
||||
self.queryConfig("nohup python3 ~/.config/kinto/kintotray.py >/dev/null 2>&1 &")
|
||||
self.menuitem_systray.disconnect(self.menuitem_systray.signal_id)
|
||||
self.menuitem_systray.set_active(True)
|
||||
self.menuitem_systray.signal_id = self.menuitem_systray.connect('activate',self.checkTray,False)
|
||||
|
||||
restartsvc = True
|
||||
|
||||
|
||||
def initSetup(self):
|
||||
global win,openWin,restartsvc
|
||||
@@ -435,20 +418,21 @@ class MyWindow(Gtk.Window):
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file(os.environ['HOME']+'/.config/kinto/gui/tuxcry4.png')
|
||||
pixbuf = pixbuf.scale_simple(600, 360, GdkPixbuf.InterpType.BILINEAR)
|
||||
self.bgsuccess4 = self.bgsuccess4.new_from_pixbuf(pixbuf)
|
||||
self.bgsuccess4.set_valign(Gtk.Align.END)
|
||||
self.bgsuccess4.set_alignment(0, 1)
|
||||
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file(os.environ['HOME']+'/.config/kinto/gui/tuxuninstall.png')
|
||||
pixbuf = pixbuf.scale_simple(600, 360, GdkPixbuf.InterpType.BILINEAR)
|
||||
self.bguninstall = self.bguninstall.new_from_pixbuf(pixbuf)
|
||||
self.bguninstall.set_valign(Gtk.Align.END)
|
||||
self.bguninstall.set_alignment(0, 1)
|
||||
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file(os.environ['HOME']+'/.config/kinto/gui/tuxbg.png')
|
||||
pixbuf = pixbuf.scale_simple(600, 360, GdkPixbuf.InterpType.BILINEAR)
|
||||
self.background = self.background.new_from_pixbuf(pixbuf)
|
||||
self.background.set_valign(Gtk.Align.END)
|
||||
self.background.set_alignment(0, 1)
|
||||
self.bgcaps = self.bgcaps.new_from_pixbuf(pixbuf2)
|
||||
self.bgcaps.set_alignment(0, 1)
|
||||
self.bgspace = self.bgspace.new_from_pixbuf(pixbuf3)
|
||||
self.bgspace.set_valign(Gtk.Align.END)
|
||||
self.bgspace.set_alignment(0, 1)
|
||||
self.overlay.add(self.background)
|
||||
self.overlay.add_overlay(self.container)
|
||||
self.setupwin.add(self.container)
|
||||
@@ -470,7 +454,7 @@ class MyWindow(Gtk.Window):
|
||||
def image2pixbuf(self,im):
|
||||
data = im.tobytes()
|
||||
w, h = im.size
|
||||
# print(im.size)
|
||||
print(im.size)
|
||||
data = GLib.Bytes.new(data)
|
||||
pix = GdkPixbuf.Pixbuf.new_from_bytes(data, GdkPixbuf.Colorspace.RGB,True, 8, w, h, w * 4)
|
||||
return pix
|
||||
@@ -531,10 +515,7 @@ class MyWindow(Gtk.Window):
|
||||
return
|
||||
|
||||
def runDebug(self,button):
|
||||
if sysv:
|
||||
command = 'send \003 sudo /etc/init.d/kinto stop && sudo pkill -f bin/xkeysnail && sudo xkeysnail ~/.config/kinto/kinto.py\n'
|
||||
else:
|
||||
command = 'send \003 sudo systemctl stop xkeysnail && sudo pkill -f bin/xkeysnail && sudo xkeysnail ~/.config/kinto/kinto.py\n'
|
||||
command = 'send \003 sudo systemctl stop xkeysnail && sudo pkill -f bin/xkeysnail && sudo xkeysnail ~/.config/kinto/kinto.py\n'
|
||||
self.InputToTerm(command)
|
||||
|
||||
def openSupport(self,button):
|
||||
@@ -616,7 +597,7 @@ class MyWindow(Gtk.Window):
|
||||
if tray_bool:
|
||||
Popen(['cp',os.environ['HOME']+'/.config/kinto/kintotray.desktop',os.environ['HOME']+'/.config/autostart/kintotray.desktop'])
|
||||
if not kintotray:
|
||||
Popen(['/usr/bin/python3',os.environ['HOME']+'/.config/kinto/kintotray.py'])
|
||||
Popen([os.environ['HOME']+'/.config/kinto/kintotray.py'])
|
||||
self.menuitem_systray.disconnect(self.menuitem_systray.signal_id)
|
||||
self.menuitem_systray.set_active(True)
|
||||
self.menuitem_systray.signal_id = self.menuitem_systray.connect('activate',self.checkTray,False)
|
||||
@@ -627,10 +608,7 @@ class MyWindow(Gtk.Window):
|
||||
self.queryConfig(killspawn)
|
||||
time.sleep(1)
|
||||
global child_pid
|
||||
if sysv:
|
||||
self.kinto_status = Popen("export TERM=xterm-color;while :; do clear; pgrep 'xkeysnail'; sleep 2; done", stdout=PIPE, shell=True)
|
||||
else:
|
||||
self.kinto_status = Popen("export TERM=xterm-color;while :; do clear; systemctl is-active xkeysnail; sleep 2; done", stdout=PIPE, shell=True)
|
||||
self.kinto_status = Popen("while :; do clear; systemctl is-active xkeysnail; sleep 2; done", stdout=PIPE, shell=True)
|
||||
child_pid = self.kinto_status.pid
|
||||
self.menuitem_systray.disconnect(self.menuitem_systray.signal_id)
|
||||
self.menuitem_systray.set_active(False)
|
||||
@@ -638,7 +616,6 @@ class MyWindow(Gtk.Window):
|
||||
return
|
||||
|
||||
def setKB(self,button,kbtype):
|
||||
global sysv
|
||||
try:
|
||||
if kbtype == "win":
|
||||
setkb = 's/^(\s{3})(\s{1}#)(.*# WinMac.*)|^(?!\s{4}#)(\s{3})(\s{1})(.*)( # )(Mac.*)|^(?!\s{4}#)(\s{3})(\s{1})(.*)( # )(IBM.*)|^(?!\s{4}#)(\s{3})(\s{1})(.*)( # )(Chromebook.*)|^(\s{3})(\s{1}# )(-)( Default Win)|^(\s{3})(\s{1}# )(-)(- Default Mac*)/ $3$7$6$7$8$12$11$12$13$17$16$17$18$20$21$21$22$24$26/g'
|
||||
@@ -675,10 +652,7 @@ class MyWindow(Gtk.Window):
|
||||
elif kbtype == "ibm":
|
||||
setkb ='s/^(\s{3})(\s{1}#)(.*# IBM.*)|^(?!\s{4}#)(\s{3})(\s{1})(.*)( # )(WinMac.*)|^(?!\s{4}#)(\s{3})(\s{1})(.*)( # )(Mac.*)|^(?!\s{4}#)(\s{3})(\s{1})(.*)( # )(Chromebook.*)|^(\s{3})(\s{1}# )(-)(- Default (Win|Mac.*))/ $3$7$6$7$8$12$11$12$13$17$16$17$18$20$22/g'
|
||||
|
||||
if sysv:
|
||||
restart = ['sudo', '-E','/etc/init.d/kinto','restart']
|
||||
else:
|
||||
restart = ['sudo', 'systemctl','restart','xkeysnail']
|
||||
restart = ['sudo', 'systemctl','restart','xkeysnail']
|
||||
cmds = ['perl','-pi','-e',setkb,self.kconfig]
|
||||
|
||||
cmdsTerm = Popen(cmds)
|
||||
@@ -770,14 +744,11 @@ class MyWindow(Gtk.Window):
|
||||
}
|
||||
|
||||
def on_delete_event(event, self, widget):
|
||||
global restartsvc, openWin, sysv
|
||||
global restartsvc, openWin
|
||||
|
||||
if restartsvc == True:
|
||||
try:
|
||||
if sysv:
|
||||
restartcmd = ['sudo', '-E','/etc/init.d/kinto','restart']
|
||||
else:
|
||||
restartcmd = ['sudo', 'systemctl','restart','xkeysnail']
|
||||
restartcmd = ['sudo', 'systemctl','restart','xkeysnail']
|
||||
Popen(restartcmd)
|
||||
restartsvc = False
|
||||
|
||||
@@ -897,12 +868,8 @@ class MyWindow(Gtk.Window):
|
||||
return
|
||||
|
||||
def runRestart(self,button):
|
||||
global sysv
|
||||
try:
|
||||
if sysv:
|
||||
stop = Popen(['sudo', '-E','/etc/init.d/kinto','stop'])
|
||||
else:
|
||||
stop = Popen(['sudo', 'systemctl','stop','xkeysnail'])
|
||||
stop = Popen(['sudo', 'systemctl','stop','xkeysnail'])
|
||||
stop.wait()
|
||||
time.sleep(1)
|
||||
res = Popen(['pgrep','xkeysnail'])
|
||||
@@ -911,23 +878,15 @@ class MyWindow(Gtk.Window):
|
||||
if res.returncode == 0:
|
||||
pkillxkey = Popen(['sudo', 'pkill','-f','bin/xkeysnail'])
|
||||
pkillxkey.wait()
|
||||
if sysv:
|
||||
Popen(['sudo','-E','/etc/init.d/kinto','start'])
|
||||
self.command = "send \003 tail -f /tmp/kinto.log\n"
|
||||
else:
|
||||
Popen(['sudo','systemctl','start','xkeysnail'])
|
||||
self.command = "send \003 journalctl -f --unit=xkeysnail.service -b\n"
|
||||
Popen(['sudo', 'systemctl','start','xkeysnail'])
|
||||
self.command = "send \003 journalctl -f --unit=xkeysnail.service -b\n"
|
||||
self.InputToTerm(self.command)
|
||||
except:
|
||||
Popen(['notify-send','Kinto: Errror restarting Kinto!'])
|
||||
|
||||
def runStop(self,button):
|
||||
global sysv
|
||||
try:
|
||||
if sysv:
|
||||
stop = Popen(['sudo', '-E','/etc/init.d/kinto','stop'])
|
||||
else:
|
||||
stop = Popen(['sudo', 'systemctl','stop','xkeysnail'])
|
||||
stop = Popen(['sudo', 'systemctl','stop','xkeysnail'])
|
||||
stop.wait()
|
||||
time.sleep(1)
|
||||
res = Popen(['pgrep','xkeysnail'])
|
||||
@@ -1116,7 +1075,7 @@ class MyWindow(Gtk.Window):
|
||||
except:
|
||||
pass
|
||||
|
||||
# print(Vte.get_minor_version())
|
||||
print(Vte.get_minor_version())
|
||||
|
||||
# def on_menu_auto(self, widget):
|
||||
# print("add file open dialog")
|
||||
@@ -1145,36 +1104,34 @@ class UninstallPage(Gtk.Box):
|
||||
|
||||
label_start = Gtk.Label()
|
||||
label_start.set_markup('<b>Uninstall</b>\n\n\n\nWould you like to uninstall kinto?\n\n If you need support please visit <a href="http://kinto.sh">kinto.sh</a>.')
|
||||
label_start.set_valign(Gtk.Align.START)
|
||||
label_start.set_halign(Gtk.Align.START)
|
||||
|
||||
label_start.set_alignment(0,0)
|
||||
label_start.set_line_wrap(True)
|
||||
vbox.add(label_start)
|
||||
scroller.add(vbox)
|
||||
|
||||
hbox = Gtk.HBox()
|
||||
previous = Gtk.Button(label="Uninstall")
|
||||
previous = Gtk.Button("Uninstall")
|
||||
previous.connect("clicked", self.goback)
|
||||
previous.set_margin_end(206)
|
||||
previous.set_margin_right(206)
|
||||
hbox.add(previous)
|
||||
|
||||
onward = Gtk.Button(label="Continue")
|
||||
onward = Gtk.Button("Continue")
|
||||
onward.connect("clicked", self.forward)
|
||||
hbox.add(onward)
|
||||
|
||||
hbox.set_hexpand(False)
|
||||
hbox.set_vexpand(False)
|
||||
hbox.set_margin_bottom(6)
|
||||
hbox.set_margin_end(25)
|
||||
hbox.set_margin_right(25)
|
||||
|
||||
scroller.set_hexpand(True)
|
||||
scroller.set_vexpand(True)
|
||||
vbox_container.add(scroller)
|
||||
vbox_container.set_margin_top(55)
|
||||
vbox_container.set_margin_end(25)
|
||||
self.grid.set_margin_start(157)
|
||||
vbox_container.set_margin_right(25)
|
||||
self.grid.set_margin_left(157)
|
||||
vbox_container.set_margin_bottom(18)
|
||||
vbox.set_margin_end(10)
|
||||
vbox.set_margin_right(10)
|
||||
vbox.set_margin_bottom(18)
|
||||
self.grid.add(vbox_container)
|
||||
self.grid.attach_next_to(hbox, vbox_container, Gtk.PositionType.BOTTOM, 2, 1)
|
||||
@@ -1206,19 +1163,18 @@ class FirstPage(Gtk.Box):
|
||||
|
||||
label_start = Gtk.Label()
|
||||
label_start.set_markup("Before we continue please make sure you do not have any other remappers running. Kinto works best when it is the only application remapping your keys.\n\nBy continuing you also agree that Kinto is not held liable for any harm, damage(s) or unexpected behaviors.\nThis software is free, open-source, and provided as-is.\n\n<sup><b>© 2019, 2020 by Ben Reaves ~ Kinto is licensed on GPLv2.</b></sup>")
|
||||
label_start.set_valign(Gtk.Align.START)
|
||||
label_start.set_halign(Gtk.Align.START)
|
||||
label_start.set_alignment(0,0)
|
||||
label_start.set_line_wrap(True)
|
||||
vbox.add(label_start)
|
||||
scroller.add(vbox)
|
||||
|
||||
hbox = Gtk.HBox()
|
||||
previous = Gtk.Button(label="")
|
||||
previous = Gtk.Button("")
|
||||
for child in previous.get_children():
|
||||
child.set_label("<b>Decline</b>")
|
||||
child.set_use_markup(True)
|
||||
previous.connect("clicked", self.goback)
|
||||
previous.set_margin_end(245)
|
||||
previous.set_margin_right(245)
|
||||
hbox.add(previous)
|
||||
|
||||
self.__parent_window.first_onward.set_label("")
|
||||
@@ -1232,16 +1188,16 @@ class FirstPage(Gtk.Box):
|
||||
hbox.set_hexpand(False)
|
||||
hbox.set_vexpand(False)
|
||||
hbox.set_margin_bottom(6)
|
||||
hbox.set_margin_end(25)
|
||||
hbox.set_margin_right(25)
|
||||
|
||||
scroller.set_hexpand(True)
|
||||
scroller.set_vexpand(True)
|
||||
vbox_container.add(scroller)
|
||||
vbox_container.set_margin_top(55)
|
||||
vbox_container.set_margin_end(28)
|
||||
self.grid.set_margin_start(157)
|
||||
vbox_container.set_margin_right(28)
|
||||
self.grid.set_margin_left(157)
|
||||
vbox_container.set_margin_bottom(18)
|
||||
vbox.set_margin_end(10)
|
||||
vbox.set_margin_right(10)
|
||||
vbox.set_margin_bottom(18)
|
||||
self.grid.add(vbox_container)
|
||||
self.grid.attach_next_to(hbox, vbox_container, Gtk.PositionType.BOTTOM, 2, 1)
|
||||
@@ -1280,38 +1236,37 @@ class SecondPage(Gtk.Box):
|
||||
label_start = Gtk.Label()
|
||||
|
||||
label_start.set_markup('<b>Identifying your Keyboard...</b>\n\nPress the <b>2nd</b> key <b>Left</b> of the spacebar.\n\n<sub>If stuck here then unset Overlay (Super) key on your DE.</sub>')
|
||||
label_start.set_valign(Gtk.Align.START)
|
||||
label_start.set_halign(Gtk.Align.START)
|
||||
label_start.set_alignment(0,0)
|
||||
label_start.set_line_wrap(True)
|
||||
vbox.add(label_start)
|
||||
scroller.add(vbox)
|
||||
|
||||
hbox = Gtk.HBox()
|
||||
previous = Gtk.Button(label="")
|
||||
previous = Gtk.Button("")
|
||||
for child in previous.get_children():
|
||||
child.set_label("<b>Go Back</b>")
|
||||
child.set_use_markup(True)
|
||||
previous.connect("clicked", self.goback)
|
||||
previous.set_margin_end(315)
|
||||
previous.set_margin_right(315)
|
||||
hbox.add(previous)
|
||||
|
||||
# onward = Gtk.Button(label="Continue")
|
||||
# onward = Gtk.Button("Continue")
|
||||
# onward.connect("clicked", self.forward)
|
||||
# hbox.add(onward)
|
||||
|
||||
hbox.set_hexpand(False)
|
||||
hbox.set_vexpand(False)
|
||||
hbox.set_margin_bottom(6)
|
||||
hbox.set_margin_end(25)
|
||||
hbox.set_margin_right(25)
|
||||
|
||||
scroller.set_hexpand(True)
|
||||
scroller.set_vexpand(True)
|
||||
vbox_container.add(scroller)
|
||||
vbox_container.set_margin_top(55)
|
||||
vbox_container.set_margin_end(25)
|
||||
self.grid.set_margin_start(157)
|
||||
vbox_container.set_margin_right(25)
|
||||
self.grid.set_margin_left(157)
|
||||
vbox_container.set_margin_bottom(18)
|
||||
vbox.set_margin_end(10)
|
||||
vbox.set_margin_right(10)
|
||||
vbox.set_margin_bottom(18)
|
||||
self.grid.add(vbox_container)
|
||||
self.grid.attach_next_to(hbox, vbox_container, Gtk.PositionType.BOTTOM, 2, 1)
|
||||
@@ -1365,38 +1320,37 @@ class CapsPage(Gtk.Box):
|
||||
|
||||
label_start = Gtk.Label()
|
||||
label_start.set_markup('<b>Identifying your Keyboard...</b>\n\nPress the <b>capslock</b> key twice.')
|
||||
label_start.set_valign(Gtk.Align.START)
|
||||
label_start.set_halign(Gtk.Align.START)
|
||||
label_start.set_alignment(0,0)
|
||||
label_start.set_line_wrap(True)
|
||||
vbox.add(label_start)
|
||||
scroller.add(vbox)
|
||||
|
||||
hbox = Gtk.HBox()
|
||||
previous = Gtk.Button(label="")
|
||||
previous = Gtk.Button("")
|
||||
for child in previous.get_children():
|
||||
child.set_label("<b>Go Back</b>")
|
||||
child.set_use_markup(True)
|
||||
previous.connect("clicked", self.goback)
|
||||
previous.set_margin_end(315)
|
||||
previous.set_margin_right(315)
|
||||
hbox.add(previous)
|
||||
|
||||
# onward = Gtk.Button(label="Continue")
|
||||
# onward = Gtk.Button("Continue")
|
||||
# onward.connect("clicked", self.forward)
|
||||
# hbox.add(onward)
|
||||
|
||||
hbox.set_hexpand(False)
|
||||
hbox.set_vexpand(False)
|
||||
hbox.set_margin_bottom(6)
|
||||
hbox.set_margin_end(25)
|
||||
hbox.set_margin_right(25)
|
||||
|
||||
scroller.set_hexpand(True)
|
||||
scroller.set_vexpand(True)
|
||||
vbox_container.add(scroller)
|
||||
vbox_container.set_margin_top(55)
|
||||
vbox_container.set_margin_end(25)
|
||||
self.grid.set_margin_start(157)
|
||||
vbox_container.set_margin_right(25)
|
||||
self.grid.set_margin_left(157)
|
||||
vbox_container.set_margin_bottom(18)
|
||||
vbox.set_margin_end(10)
|
||||
vbox.set_margin_right(10)
|
||||
vbox.set_margin_bottom(18)
|
||||
self.grid.add(vbox_container)
|
||||
self.grid.attach_next_to(hbox, vbox_container, Gtk.PositionType.BOTTOM, 2, 1)
|
||||
@@ -1433,9 +1387,9 @@ class SuccessPage(Gtk.Box):
|
||||
self.grid = Gtk.Grid()
|
||||
|
||||
hbox = Gtk.HBox()
|
||||
previous = Gtk.Button(label=" ")
|
||||
previous = Gtk.Button(" ")
|
||||
previous.props.relief = Gtk.ReliefStyle.NONE
|
||||
previous.set_margin_end(245)
|
||||
previous.set_margin_right(245)
|
||||
hbox.add(previous)
|
||||
|
||||
self.__parent_window.last_onward.set_label("")
|
||||
@@ -1448,7 +1402,7 @@ class SuccessPage(Gtk.Box):
|
||||
hbox.set_hexpand(False)
|
||||
hbox.set_vexpand(False)
|
||||
hbox.set_margin_bottom(6)
|
||||
hbox.set_margin_end(25)
|
||||
hbox.set_margin_right(25)
|
||||
|
||||
scroller = Gtk.ScrolledWindow()
|
||||
scroller.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER)
|
||||
@@ -1457,11 +1411,11 @@ class SuccessPage(Gtk.Box):
|
||||
vbox = Gtk.VBox()
|
||||
vbox_container = Gtk.VBox()
|
||||
vbox_container.set_margin_top(55)
|
||||
vbox_container.set_margin_end(28)
|
||||
vbox_container.set_margin_right(28)
|
||||
vbox_container.add(scroller)
|
||||
self.grid.set_margin_start(157)
|
||||
self.grid.set_margin_left(157)
|
||||
vbox_container.set_margin_bottom(18)
|
||||
vbox.set_margin_end(10)
|
||||
vbox.set_margin_right(10)
|
||||
vbox.set_margin_bottom(18)
|
||||
self.grid.add(vbox_container)
|
||||
self.grid.attach_next_to(hbox, vbox_container, Gtk.PositionType.BOTTOM, 2, 1)
|
||||
@@ -1481,4 +1435,4 @@ if openWin:
|
||||
win.show_all()
|
||||
openWin = False
|
||||
|
||||
Gtk.main()
|
||||
Gtk.main()
|
2
linux/gui/kinto.desktop → xkeysnail-config/gui/kinto.desktop
Executable file → Normal file
@@ -4,7 +4,7 @@ Name=Kinto.sh
|
||||
GenericName=Kinto.sh
|
||||
Categories=Utility;
|
||||
Type=Application
|
||||
Exec=/usr/bin/python3 {homedir}/.config/kinto/gui/kinto-gui.py
|
||||
Exec={homedir}/.config/kinto/gui/kinto-gui.py
|
||||
Icon={homedir}/.config/kinto/kinto-color-48.svg
|
||||
# Icon=/usr/share/icons/Pocillo/kinto-color.svg
|
||||
Terminal=false
|
0
linux/gui/tuxbg.png → xkeysnail-config/gui/tuxbg.png
Normal file → Executable file
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 111 KiB |
0
linux/gui/tuxcry4.png → xkeysnail-config/gui/tuxcry4.png
Normal file → Executable file
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
0
linux/gui/tuxerror.png → xkeysnail-config/gui/tuxerror.png
Normal file → Executable file
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 172 KiB |
0
linux/gui/tuxuninstall.png → xkeysnail-config/gui/tuxuninstall.png
Normal file → Executable file
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
492
xkeysnail-config/kinto.py
Normal file
@@ -0,0 +1,492 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# autostart = true
|
||||
|
||||
import re
|
||||
from xkeysnail.transform import *
|
||||
|
||||
# Use the following for testing terminal keymaps
|
||||
# terminals = [ "", ... ]
|
||||
# xbindkeys -mk
|
||||
terminals = ["kinto-gui.py","gnome-terminal","konsole","io.elementary.terminal","terminator","sakura","guake","tilda","xterm","eterm","kitty","alacritty","mate-terminal","tilix","xfce4-terminal"]
|
||||
terminals = [term.casefold() for term in terminals]
|
||||
termStr = "|".join(str(x) for x in terminals)
|
||||
|
||||
# Use for browser specific hotkeys
|
||||
browsers = ["Chromium","Chromium-browser","Google-chrome","microsoft-edge-dev","microsoft-edge","Epiphany","Firefox","Discord"]
|
||||
browsers = [browser.casefold() for browser in browsers]
|
||||
browserStr = "|".join(str(x) for x in browsers)
|
||||
|
||||
chromes = ["Chromium","Chromium-browser","Google-chrome","microsoft-edge-dev","microsoft-edge"]
|
||||
chromes = [chrome.casefold() for chrome in chromes]
|
||||
chromeStr = "|".join(str(x) for x in chromes)
|
||||
|
||||
# edges = ["microsoft-edge-dev","microsoft-edge"]
|
||||
# edges = [edge.casefold() for edge in edges]
|
||||
# edgeStr = "|".join(str(x) for x in edges)
|
||||
|
||||
mscodes = ["code","vscodium"]
|
||||
codeStr = "|".join(str(x) for x in mscodes)
|
||||
|
||||
define_multipurpose_modmap(
|
||||
# {Key.ENTER: [Key.ENTER, Key.RIGHT_CTRL] # Enter2Cmd
|
||||
# {Key.CAPSLOCK: [Key.ESC, Key.RIGHT_CTRL] # Caps2Esc
|
||||
# {Key.LEFT_META: [Key.ESC, Key.RIGHT_CTRL] # Caps2Esc - Chromebook
|
||||
{ # Placeholder
|
||||
})
|
||||
|
||||
# [Global modemap] Change modifier keys as in xmodmap
|
||||
define_conditional_modmap(lambda wm_class: wm_class.casefold() not in terminals,{
|
||||
|
||||
# Key.CAPSLOCK: Key.RIGHT_CTRL, # Caps2Cmd
|
||||
# Key.LEFT_META: Key.RIGHT_CTRL, # Caps2Cmd - Chromebook
|
||||
|
||||
# - IBM
|
||||
# Key.LEFT_ALT: Key.RIGHT_CTRL, # IBM
|
||||
# Key.LEFT_CTRL: Key.LEFT_ALT, # IBM
|
||||
# Key.CAPSLOCK: Key.LEFT_META, # IBM
|
||||
# Key.RIGHT_ALT: Key.RIGHT_CTRL, # IBM - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.RIGHT_ALT, # IBM - Multi-language (Remove)
|
||||
|
||||
# - Chromebook
|
||||
# Key.LEFT_ALT: Key.RIGHT_CTRL, # Chromebook
|
||||
# Key.LEFT_CTRL: Key.LEFT_ALT, # Chromebook
|
||||
# Key.RIGHT_ALT: Key.RIGHT_CTRL, # Chromebook - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.RIGHT_ALT, # Chromebook - Multi-language (Remove)
|
||||
|
||||
# - Default Mac/Win
|
||||
# - Default Win
|
||||
# Key.LEFT_ALT: Key.RIGHT_CTRL, # WinMac
|
||||
# Key.LEFT_META: Key.LEFT_ALT, # WinMac
|
||||
# Key.LEFT_CTRL: Key.LEFT_META, # WinMac
|
||||
# Key.RIGHT_ALT: Key.RIGHT_CTRL, # WinMac - Multi-language (Remove)
|
||||
# Key.RIGHT_META: Key.RIGHT_ALT, # WinMac - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.RIGHT_META, # WinMac - Multi-language (Remove)
|
||||
|
||||
# - Mac Only
|
||||
# Key.LEFT_META: Key.RIGHT_CTRL, # Mac
|
||||
# Key.LEFT_CTRL: Key.LEFT_META, # Mac
|
||||
# Key.RIGHT_META: Key.RIGHT_CTRL, # Mac - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.RIGHT_META, # Mac - Multi-language (Remove)
|
||||
})
|
||||
|
||||
# [Conditional modmap] Change modifier keys in certain applications
|
||||
define_conditional_modmap(re.compile(termStr, re.IGNORECASE), {
|
||||
# - IBM
|
||||
# Key.LEFT_ALT: Key.RIGHT_CTRL, # IBM
|
||||
# # Left Ctrl Stays Left Ctrl
|
||||
# Key.CAPSLOCK: Key.LEFT_ALT, # IBM
|
||||
# Key.RIGHT_ALT: Key.RIGHT_CTRL, # IBM - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.RIGHT_ALT, # IBM
|
||||
# # Right Meta does not exist on chromebooks
|
||||
|
||||
# Key.RIGHT_ALT: Key.RIGHT_CTRL, # IBM - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.RIGHT_ALT, # IBM - Multi-language (Remove)
|
||||
|
||||
# - Chromebook
|
||||
# Key.LEFT_ALT: Key.RIGHT_CTRL, # Chromebook
|
||||
# # Left Ctrl Stays Left Ctrl
|
||||
# Key.LEFT_META: Key.LEFT_ALT, # Chromebook
|
||||
# Key.RIGHT_ALT: Key.RIGHT_CTRL, # Chromebook - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.RIGHT_ALT, # Chromebook
|
||||
# # Right Meta does not exist on chromebooks
|
||||
|
||||
# - Default Mac/Win
|
||||
# - Default Win
|
||||
# Key.LEFT_ALT: Key.RIGHT_CTRL, # WinMac
|
||||
# Key.LEFT_META: Key.LEFT_ALT, # WinMac
|
||||
# Key.LEFT_CTRL: Key.LEFT_CTRL, # WinMac
|
||||
# Key.RIGHT_ALT: Key.RIGHT_CTRL, # WinMac - Multi-language (Remove)
|
||||
# Key.RIGHT_META: Key.RIGHT_ALT, # WinMac - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.LEFT_CTRL, # WinMac - Multi-language (Remove)
|
||||
|
||||
# - Mac Only
|
||||
# Key.LEFT_META: Key.RIGHT_CTRL, # Mac
|
||||
# # Left Ctrl Stays Left Ctrl
|
||||
# Key.RIGHT_META: Key.RIGHT_CTRL, # Mac - Multi-language (Remove)
|
||||
# Key.RIGHT_CTRL: Key.LEFT_CTRL, # Mac - Multi-language (Remove)
|
||||
})
|
||||
|
||||
# Keybindings for IntelliJ
|
||||
define_keymap(re.compile("jetbrains-idea", re.IGNORECASE),{
|
||||
# General
|
||||
K("C-Key_0"): K("M-Key_0"), # Open corresponding tool window
|
||||
K("C-Key_1"): K("M-Key_1"), # Open corresponding tool window
|
||||
K("C-Key_2"): K("M-Key_2"), # Open corresponding tool window
|
||||
K("C-Key_3"): K("M-Key_3"), # Open corresponding tool window
|
||||
K("C-Key_4"): K("M-Key_4"), # Open corresponding tool window
|
||||
K("C-Key_5"): K("M-Key_5"), # Open corresponding tool window
|
||||
K("C-Key_6"): K("M-Key_6"), # Open corresponding tool window
|
||||
K("C-Key_7"): K("M-Key_7"), # Open corresponding tool window
|
||||
K("C-Key_8"): K("M-Key_8"), # Open corresponding tool window
|
||||
K("C-Key_9"): K("M-Key_9"), # Open corresponding tool window
|
||||
K("Super-Grave"): K("C-Grave"), # Quick switch current scheme
|
||||
K("C-Comma"): K("C-M-s"), # Open Settings dialog
|
||||
K("C-Semicolon"): K("C-M-Shift-s"), # Open Project Structure dialog
|
||||
# Debugging
|
||||
K("C-M-r"): K("F9"), # Resume program
|
||||
# Search/Replace
|
||||
K("C-g"): K("F3"), # Find next
|
||||
K("C-Shift-F3"): K("Shift-F3"), # Find previous
|
||||
K("Super-g"): K("M-j"), # Select next occurrence
|
||||
K("C-Super-g"): K("C-M-Shift-j"), # Select all occurrences
|
||||
K("Super-Shift-g"): K("M-Shift-j"), # Unselect occurrence
|
||||
# Editing
|
||||
K("Super-Space"): K("LC-Space"), # Basic code completion
|
||||
K("Super-Shift-Space"): K("LC-Shift-Space"),# Smart code completion
|
||||
K("Super-j"): K("C-q"), # Quick documentation lookup
|
||||
K("C-n"): K("M-Insert"), # Generate code...
|
||||
K("Super-o"): K("C-o"), # Override methods
|
||||
K("Super-i"): K("C-i"), # Implement methods
|
||||
K("M-Up"): K("C-w"), # Extend selection
|
||||
K("M-Down"): K("C-Shift-w"), # Shrink selection
|
||||
K("Super-Shift-q"): K("M-q"), # Context info
|
||||
K("Super-M-o"): K("C-M-o"), # Optimize imports
|
||||
K("Super-M-i"): K("C-M-i"), # Auto-indent line(s)
|
||||
K("C-Backspace"): K("C-y"), # Delete line at caret
|
||||
K("Super-Shift-j"): K("C-Shift-j"), # Smart line join
|
||||
K("M-Delete"): K("C-Delete"), # Delete to word end
|
||||
K("M-Backspace"): K("C-Backspace"), # Delete to word start
|
||||
K("C-Shift-Equal"): K("C-KPPLUS"), # Expand code block
|
||||
K("C-Minus"): K("C-KPMINUS"), # Collapse code block
|
||||
K("C-Shift-Equal"): K("C-Shift-KPPLUS"), # Expand all
|
||||
K("C-Shift-Minus"): K("C-Shift-KPMINUS"), # Collapse all
|
||||
K("C-w"): K("C-F4"), # Close active editor tab
|
||||
# Refactoring
|
||||
K("C-Delete"): K("M-Delete"), # Safe Delete
|
||||
K("C-T"): K("C-M-Shift-t"), # Refactor this
|
||||
# Navigation
|
||||
K("C-o"): K("C-n"), # Go to class
|
||||
K("C-Shift-o"): K("C-Shift-n"), # Go to file
|
||||
K("C-M-o"): K("C-M-Shift-n"), # Go to symbol
|
||||
K("Super-Right"): K("M-Right"), # Go to next editor tab
|
||||
K("Super-Left"): K("M-Left"), # Go to previous editor tab
|
||||
K("Super-l"): K("C-g"), # Go to line
|
||||
K("Super-e"): K("C-e"), # Recent files popup
|
||||
K("M-Space"): K("C-Shift-i"), # Open quick definition lookup
|
||||
K("C-Y"): K("C-Shift-i"), # Open quick definition lookup
|
||||
K("Super-Shift-b"): K("C-Shift-b"), # Go to type declaration
|
||||
K("Super-Up"): K("M-Up"), # Go to previous
|
||||
K("Super-Down"): K("M-Down"), # Go to next method
|
||||
K("Super-h"): K("C-h"), # Type hierarchy
|
||||
K("Super-M-h"): K("C-M-h"), # Call hierarchy
|
||||
K("C-Down"): K("C-Enter"), # Edit source/View source
|
||||
K("M-Home"): K("M-Home"), # Show navigation bar
|
||||
K("F2"): K("F11"), # Toggle bookmark
|
||||
K("Super-F3"): K("C-F11"), # Toggle bookmark with mnemonic
|
||||
K("Super-Key_0"): K("C-Key_0"), # Go to numbered bookmark
|
||||
K("Super-Key_1"): K("C-Key_1"), # Go to numbered bookmark
|
||||
K("Super-Key_2"): K("C-Key_2"), # Go to numbered bookmark
|
||||
K("Super-Key_3"): K("C-Key_3"), # Go to numbered bookmark
|
||||
K("Super-Key_4"): K("C-Key_4"), # Go to numbered bookmark
|
||||
K("Super-Key_5"): K("C-Key_5"), # Go to numbered bookmark
|
||||
K("Super-Key_6"): K("C-Key_6"), # Go to numbered bookmark
|
||||
K("Super-Key_7"): K("C-Key_7"), # Go to numbered bookmark
|
||||
K("Super-Key_8"): K("C-Key_8"), # Go to numbered bookmark
|
||||
K("Super-Key_9"): K("C-Key_9"), # Go to numbered bookmark
|
||||
K("C-F3"): K("Shift-F11"), # Show bookmarks
|
||||
# Compile and Run
|
||||
K("Super-M-r"): K("M-Shift-F10"), # Select configuration and run
|
||||
K("Super-M-d"): K("M-Shift-F9"), # Select configuration and debug
|
||||
K("Super-r"): K("Shift-F10"), # Run
|
||||
K("Super-d"): K("Shift-F9"), # Debug
|
||||
K("Super-Shift-r"): K("C-Shift-F10"), # Run context configuration from editor
|
||||
K("Super-Shift-d"): K("C-Shift-F9"), # Debug context configuration from editor
|
||||
# VCS/Local History
|
||||
K("Super-v"): K("M-Grave"), # VCS quick popup
|
||||
K("Super-c"): K("LC-c"), # Sigints - interrupt
|
||||
})
|
||||
|
||||
# Keybindings for Nautilus
|
||||
define_keymap(re.compile("org.gnome.nautilus", re.IGNORECASE),{
|
||||
K("RC-Up"): K("M-Up"), # Go Up dir
|
||||
K("RC-Down"): K("M-Down"), # Go Down dir
|
||||
K("RC-Left"): K("M-Left"), # Go Back
|
||||
K("RC-Right"): K("M-Right"), # Go Forward
|
||||
})
|
||||
|
||||
# Keybindings for Browsers
|
||||
define_keymap(re.compile(browserStr, re.IGNORECASE),{
|
||||
K("RC-Q"): K("RC-Q"), # Close all browsers Instances
|
||||
K("Super-RC-I"): K("RC-Shift-I"), # Dev tools
|
||||
K("Super-RC-J"): K("RC-Shift-J"), # Dev tools
|
||||
})
|
||||
|
||||
# Open preferences in browsers
|
||||
define_keymap(re.compile("Firefox", re.IGNORECASE),{
|
||||
K("C-comma"): [K("M-t"), K("o"),K("Enter")],
|
||||
})
|
||||
define_keymap(re.compile(chromeStr, re.IGNORECASE),{
|
||||
K("C-comma"): [K("M-e"), K("s"),K("Enter")],
|
||||
})
|
||||
# Opera C-F12
|
||||
|
||||
define_keymap(None,{
|
||||
K("RC-Space"): K("Alt-F1"), # Default SL - Launch Application Menu (gnome/kde)
|
||||
K("RC-F3"):K("Super-d"), # Default SL - Show Desktop (gnome/kde,eos)
|
||||
K("RC-LC-f"):K("M-F10"), # Default SL - Maximize app (gnome/kde)
|
||||
# K("Super-Right"):K("C-M-Right"), # Default SL - Change workspace (budgie)
|
||||
# K("Super-Left"):K("C-M-Left"), # Default SL - Change workspace (budgie)
|
||||
K("RC-Q"): K("M-F4"), # Default SL - not-popos
|
||||
K("RC-H"):K("Super-h"), # Default SL - Minimize app (gnome/budgie/popos/fedora)
|
||||
K("M-Tab"): pass_through_key, # Default not-xfce4 - Cmd Tab - App Switching Default
|
||||
K("RC-Tab"): K("M-Tab"), # Default not-xfce4 - Cmd Tab - App Switching Default
|
||||
K("RC-Shift-Tab"): K("M-Shift-Tab"), # Default not-xfce4 - Cmd Tab - App Switching Default
|
||||
K("RC-Grave"): K("M-Grave"), # Default not-xfce4 - Cmd ` - Same App Switching
|
||||
K("RC-Shift-Grave"): K("M-Grave"), # Default not-xfce4 - Cmd ` - Same App Switching
|
||||
# K("Super-Right"):K("Super-Page_Up"), # SL - Change workspace (ubuntu/fedora)
|
||||
# K("Super-Left"):K("Super-Page_Down"), # SL - Change workspace (ubuntu/fedora)
|
||||
# K("Super-Right"):K("Super-C-Up"), # SL - Change workspace (popos)
|
||||
# K("Super-Left"):K("Super-C-Down"), # SL - Change workspace (popos)
|
||||
# K("RC-Q"):K("Super-q"), # SL - Close Apps (popos)
|
||||
# K("RC-Space"): K("Super-Space"), # SL - Launch Application Menu (eos)
|
||||
# K("RC-H"): K("Super-Page_Down"), # SL - Minimize app (kde_neon)
|
||||
# SL - Default SL - Change workspace (kde_neon)
|
||||
# K("RC-Space"): K("LC-Esc"), # SL- Launch Application Menu xfce4
|
||||
# K("RC-F3"):K("C-M-d"), # SL- Show Desktop xfce4
|
||||
# K("RC-LC-f"):K("Super-Up"), # SL- Maximize app eos
|
||||
# K("RC-LC-f"):K("Super-PAGE_UP"), # SL- Maximize app manjaro
|
||||
# Basic App hotkey functions
|
||||
# K("RC-H"):K("M-F9"), # SL - Minimize app xfce4
|
||||
# K("RC-LC-f"):K("Super-PAGE_DOWN"), # SL - Minimize app manjaro
|
||||
# Cmd Tab - App Switching Default
|
||||
# K("RC-Tab"): K("RC-backslash"), # xfce4
|
||||
# K("RC-Shift-Tab"): K("RC-Shift-backslash"), # xfce4
|
||||
# K("RC-Grave"): K("RC-Shift-backslash"), # xfce4
|
||||
# In-App Tab switching
|
||||
# K("M-Tab"): K("C-Tab"), # Chromebook/IBM - In-App Tab switching
|
||||
# K("M-Shift-Tab"): K("C-Shift-Tab"), # Chromebook/IBM - In-App Tab switching
|
||||
# K("M-Grave") : K("C-Shift-Tab"), # Chromebook/IBM - In-App Tab switching
|
||||
K("Super-Tab"): K("LC-Tab"), # Default not-chromebook
|
||||
K("Super-Shift-Tab"): K("LC-Shift-Tab"), # Default not-chromebook
|
||||
|
||||
# emacs style
|
||||
K("Super-a"): K("Home"), # Beginning of Line
|
||||
K("Super-e"): K("End"), # End of Line
|
||||
K("Super-b"): K("Left"),
|
||||
K("Super-f"): K("Right"),
|
||||
K("Super-n"): K("Down"),
|
||||
K("Super-p"): K("Up"),
|
||||
K("Super-k"): [K("Shift-End"), K("Backspace")],
|
||||
K("Super-d"): K("Delete"),
|
||||
|
||||
# Wordwise
|
||||
K("RC-Left"): K("Home"), # Beginning of Line
|
||||
K("RC-Shift-Left"): K("Shift-Home"), # Select all to Beginning of Line
|
||||
K("RC-Right"): K("End"), # End of Line
|
||||
K("RC-Shift-Right"): K("Shift-End"), # Select all to End of Line
|
||||
# K("RC-Left"): K("C-LEFT_BRACE"), # Firefox-nw - Back
|
||||
# K("RC-Right"): K("C-RIGHT_BRACE"), # Firefox-nw - Forward
|
||||
# K("RC-Left"): K("M-LEFT"), # Chrome-nw - Back
|
||||
# K("RC-Right"): K("M-RIGHT"), # Chrome-nw - Forward
|
||||
K("RC-Up"): K("C-Home"), # Beginning of File
|
||||
K("RC-Shift-Up"): K("C-Shift-Home"), # Select all to Beginning of File
|
||||
K("RC-Down"): K("C-End"), # End of File
|
||||
K("RC-Shift-Down"): K("C-Shift-End"), # Select all to End of File
|
||||
# K("M-Backspace"): K("Delete"), # Chromebook/IBM - Delete
|
||||
K("Super-Backspace"): K("C-Backspace"), # Default not-chromebook - Delete Left Word of Cursor
|
||||
K("Super-Delete"): K("C-Delete"), # Default not-chromebook - Delete Right Word of Cursor
|
||||
K("Alt-Backspace"): K("C-Backspace"), # Default not-chromebook - Delete Left Word of Cursor
|
||||
K("Alt-Delete"): K("C-Delete"), # Default not-chromebook - Delete Right Word of Cursor
|
||||
# K(""): pass_through_key, # cancel
|
||||
# K(""): K(""), #
|
||||
})
|
||||
|
||||
define_keymap(lambda wm_class: wm_class.casefold() not in mscodes,{
|
||||
# Wordwise remaining - for Everything but VS Code
|
||||
K("M-Left"): K("C-Left"), # Left of Word
|
||||
K("M-Shift-Left"): K("C-Shift-Left"), # Select Left of Word
|
||||
K("M-Right"): K("C-Right"), # Right of Word
|
||||
K("M-Shift-Right"): K("C-Shift-Right"), # Select Right of Word
|
||||
K("M-Shift-g"): K("C-Shift-g"), # View source control
|
||||
# ** VS Code fix **
|
||||
# Electron issue precludes normal keybinding fix.
|
||||
# Alt menu auto-focus/toggle gets in the way.
|
||||
#
|
||||
# refer to ./xkeysnail-config/vscode_keybindings.json
|
||||
# **
|
||||
#
|
||||
# ** Firefox fix **
|
||||
# User will need to set "ui.key.menuAccessKeyFocuses"
|
||||
# under about:config to false.
|
||||
#
|
||||
# https://superuser.com/questions/770301/pentadactyl-how-to-disable-menu-bar-toggle-by-alt
|
||||
# **
|
||||
#
|
||||
})
|
||||
|
||||
# Keybindings for VS Code
|
||||
define_keymap(re.compile(codeStr, re.IGNORECASE),{
|
||||
K("Super-Space"): K("LC-Space"), # Basic code completion
|
||||
# Wordwise remaining - for VS Code
|
||||
# Alt-F19 hack fixes Alt menu activation
|
||||
K("M-Left"): [K("M-F19"),K("C-Left")], # Left of Word
|
||||
K("M-Right"): [K("M-F19"),K("C-Right")], # Right of Word
|
||||
K("M-Shift-Left"): [K("M-F19"),K("C-Shift-Left")], # Select Left of Word
|
||||
K("M-Shift-Right"): [K("M-F19"),K("C-Shift-Right")], # Select Right of Word
|
||||
|
||||
# K("C-PAGE_DOWN"): pass_through_key, # cancel next_view
|
||||
# K("C-PAGE_UP"): pass_through_key, # cancel prev_view
|
||||
K("C-M-Left"): K("C-PAGE_UP"), # next_view
|
||||
K("C-M-Right"): K("C-PAGE_DOWN"), # prev_view
|
||||
|
||||
# VS Code Shortcuts
|
||||
K("C-g"): pass_through_key, # cancel Go to Line...
|
||||
K("Super-g"): K("C-g"), # Go to Line...
|
||||
K("F3"): pass_through_key, # cancel Find next
|
||||
K("C-h"): pass_through_key, # cancel replace
|
||||
K("C-M-f"): K("C-h"), # replace
|
||||
K("C-Shift-h"): pass_through_key, # cancel replace_next
|
||||
K("C-M-e"): K("C-Shift-h"), # replace_next
|
||||
K("f3"): pass_through_key, # cancel find_next
|
||||
K("C-g"): K("f3"), # find_next
|
||||
K("Shift-f3"): pass_through_key, # cancel find_prev
|
||||
K("C-Shift-g"): K("Shift-f3"), # find_prev
|
||||
K("Super-c"): K("LC-c"), # Sigints - interrupt
|
||||
# K("Super-C-g"): K("C-f2"), # Default - Sublime - find_all_under
|
||||
# K("C-M-g"): K("C-f2"), # Chromebook/IBM - Sublime - find_all_under
|
||||
# K("Super-Shift-up"): K("M-Shift-up"), # multi-cursor up - Sublime
|
||||
# K("Super-Shift-down"): K("M-Shift-down"), # multi-cursor down - Sublime
|
||||
# K(""): pass_through_key, # cancel
|
||||
# K(""): K(""), #
|
||||
}, "Code")
|
||||
|
||||
# Keybindings for Sublime Text
|
||||
define_keymap(re.compile("Sublime_text", re.IGNORECASE),{
|
||||
K("Super-Space"): K("C-Space"), # Basic code completion
|
||||
K("C-Super-up"): K("M-o"), # Switch file
|
||||
K("Super-RC-f"): K("f11"), # toggle_full_screen
|
||||
K("C-M-v"): [K("C-k"), K("C-v")], # paste_from_history
|
||||
K("C-up"): pass_through_key, # cancel scroll_lines up
|
||||
K("C-M-up"): K("C-up"), # scroll_lines up
|
||||
K("C-down"): pass_through_key, # cancel scroll_lines down
|
||||
K("C-M-down"): K("C-down"), # scroll_lines down
|
||||
K("Super-Shift-up"): K("M-Shift-up"), # multi-cursor up
|
||||
K("Super-Shift-down"): K("M-Shift-down"), # multi-cursor down
|
||||
K("C-PAGE_DOWN"): pass_through_key, # cancel next_view
|
||||
K("C-PAGE_UP"): pass_through_key, # cancel prev_view
|
||||
K("C-Shift-left_brace"): K("C-PAGE_DOWN"), # next_view
|
||||
K("C-Shift-right_brace"): K("C-PAGE_UP"), # prev_view
|
||||
K("C-M-right"): K("C-PAGE_DOWN"), # next_view
|
||||
K("C-M-left"): K("C-PAGE_UP"), # prev_view
|
||||
K("insert"): pass_through_key, # cancel toggle_overwrite
|
||||
K("C-M-o"): K("insert"), # toggle_overwrite
|
||||
K("M-c"): pass_through_key, # cancel toggle_case_sensitive
|
||||
K("C-M-c"): K("M-c"), # toggle_case_sensitive
|
||||
K("C-h"): pass_through_key, # cancel replace
|
||||
K("C-M-f"): K("C-h"), # replace
|
||||
K("C-Shift-h"): pass_through_key, # cancel replace_next
|
||||
K("C-M-e"): K("C-Shift-h"), # replace_next
|
||||
K("f3"): pass_through_key, # cancel find_next
|
||||
K("C-g"): K("f3"), # find_next
|
||||
K("Shift-f3"): pass_through_key, # cancel find_prev
|
||||
K("C-Shift-g"): K("Shift-f3"), # find_prev
|
||||
K("C-f3"): pass_through_key, # cancel find_under
|
||||
K("Super-M-g"): K("C-f3"), # find_under
|
||||
K("C-Shift-f3"): pass_through_key, # cancel find_under_prev
|
||||
K("Super-M-Shift-g"): K("C-Shift-f3"), # find_under_prev
|
||||
K("M-f3"): pass_through_key, # Default - cancel find_all_under
|
||||
# K("M-Refresh"): pass_through_key, # Chromebook/IBM - cancel find_all_under
|
||||
# K("M-C-g"): K("M-Refresh"), # Chromebook/IBM - find_all_under
|
||||
K("Super-C-g"): K("M-f3"), # Default - find_all_under
|
||||
K("C-Shift-up"): pass_through_key, # cancel swap_line_up
|
||||
K("Super-M-up"): K("C-Shift-up"), # swap_line_up
|
||||
K("C-Shift-down"): pass_through_key, # cancel swap_line_down
|
||||
K("Super-M-down"): K("C-Shift-down"), # swap_line_down
|
||||
K("C-Pause"): pass_through_key, # cancel cancel_build
|
||||
K("Super-c"): K("C-Pause"), # cancel_build
|
||||
K("f9"): pass_through_key, # cancel sort_lines case_s false
|
||||
K("f5"): K("f9"), # sort_lines case_s false
|
||||
K("Super-f9"): pass_through_key, # cancel sort_lines case_s true
|
||||
K("Super-f5"): K("Super-f9"), # sort_lines case_s true
|
||||
K("M-Shift-Key_1"): pass_through_key, # cancel set_layout
|
||||
K("C-M-Key_1"): K("M-Shift-Key_1"), # set_layout
|
||||
K("M-Shift-Key_2"): pass_through_key, # cancel set_layout
|
||||
K("C-M-Key_2"): K("M-Shift-Key_2"), # set_layout
|
||||
K("M-Shift-Key_3"): pass_through_key, # cancel set_layout
|
||||
K("C-M-Key_3"): K("M-Shift-Key_3"), # set_layout
|
||||
K("M-Shift-Key_4"): pass_through_key, # cancel set_layout
|
||||
K("C-M-Key_4"): K("M-Shift-Key_4"), # set_layout
|
||||
K("M-Shift-Key_8"): pass_through_key, # cancel set_layout
|
||||
K("C-M-Shift-Key_2"): K("M-Shift-Key_8"), # set_layout
|
||||
K("M-Shift-Key_9"): pass_through_key, # cancel set_layout
|
||||
K("C-M-Shift-Key_3"): K("M-Shift-Key_9"), # set_layout
|
||||
K("M-Shift-Key_5"): pass_through_key, # cancel set_layout
|
||||
K("C-M-Shift-Key_5"): K("M-Shift-Key_5"), # set_layout
|
||||
# K(""): pass_through_key, # cancel
|
||||
# K(""): K(""), #
|
||||
}, "Sublime Text")
|
||||
|
||||
define_keymap(re.compile("konsole", re.IGNORECASE),{
|
||||
# Ctrl Tab - In App Tab Switching
|
||||
K("LC-Tab") : K("Shift-Right"),
|
||||
K("LC-Shift-Tab") : K("Shift-Left"),
|
||||
K("LC-Grave") : K("Shift-Left"),
|
||||
|
||||
}, "Konsole tab switching")
|
||||
|
||||
define_keymap(re.compile("Io.elementary.terminal|kitty", re.IGNORECASE),{
|
||||
# Ctrl Tab - In App Tab Switching
|
||||
K("LC-Tab") : K("LC-Shift-Right"),
|
||||
K("LC-Shift-Tab") : K("LC-Shift-Left"),
|
||||
K("LC-Grave") : K("LC-Shift-Left"),
|
||||
|
||||
}, "Elementary Terminal tab switching")
|
||||
|
||||
define_keymap(re.compile(termStr, re.IGNORECASE),{
|
||||
# K("LC-Right"):K("C-M-Right"), # Default SL - Change workspace (budgie)
|
||||
# K("LC-Left"):K("C-M-Left"), # Default SL - Change workspace (budgie)
|
||||
# K("LC-Left"):K("C-M-End"), # SL - Change workspace xfce4
|
||||
# K("LC-Left"):K("Super-Left"), # SL - Change workspace eos
|
||||
# K("LC-Right"):K("C-M-Home"), # SL - Change workspace xfce4
|
||||
# K("LC-Right"):K("Super-Right"), # SL - Change workspace eos
|
||||
# K("LC-Right"):K("Super-Page_Up"), # SL - Change workspace (ubuntu/fedora)
|
||||
# K("LC-Left"):K("Super-Page_Down"), # SL - Change workspace (ubuntu/fedora)
|
||||
# K("LC-Right"):K("Super-C-Up"), # SL - Change workspace (popos)
|
||||
# K("LC-Left"):K("Super-C-Down"), # SL - Change workspace (popos)
|
||||
# Ctrl Tab - In App Tab Switching
|
||||
K("LC-Tab") : K("LC-PAGE_DOWN"),
|
||||
K("LC-Shift-Tab") : K("LC-PAGE_UP"),
|
||||
K("LC-Grave") : K("LC-PAGE_UP"),
|
||||
# Converts Cmd to use Ctrl-Shift
|
||||
K("RC-Tab"): K("RC-F13"),
|
||||
K("RC-Shift-Tab"): K("RC-Shift-F13"),
|
||||
K("RC-V"): K("C-Shift-V"),
|
||||
K("RC-MINUS"): K("C-Shift-MINUS"),
|
||||
K("RC-EQUAL"): K("C-Shift-EQUAL"),
|
||||
K("RC-BACKSPACE"): K("C-Shift-BACKSPACE"),
|
||||
K("RC-W"): K("C-Shift-W"),
|
||||
K("RC-E"): K("C-Shift-E"),
|
||||
K("RC-R"): K("C-Shift-R"),
|
||||
K("RC-T"): K("C-Shift-t"),
|
||||
K("RC-Y"): K("C-Shift-Y"),
|
||||
K("RC-U"): K("C-Shift-U"),
|
||||
K("RC-I"): K("C-Shift-I"),
|
||||
K("RC-O"): K("C-Shift-O"),
|
||||
K("RC-P"): K("C-Shift-P"),
|
||||
K("RC-LEFT_BRACE"): K("C-Shift-LEFT_BRACE"),
|
||||
K("RC-RIGHT_BRACE"): K("C-Shift-RIGHT_BRACE"),
|
||||
K("RC-A"): K("C-Shift-A"),
|
||||
K("RC-S"): K("C-Shift-S"),
|
||||
K("RC-D"): K("C-Shift-D"),
|
||||
K("RC-F"): K("C-Shift-F"),
|
||||
K("RC-G"): K("C-Shift-G"),
|
||||
K("RC-H"): K("C-Shift-H"),
|
||||
K("RC-J"): K("C-Shift-J"),
|
||||
K("RC-K"): K("C-Shift-K"),
|
||||
K("RC-L"): K("C-Shift-L"),
|
||||
K("RC-SEMICOLON"): K("C-Shift-SEMICOLON"),
|
||||
K("RC-APOSTROPHE"): K("C-Shift-APOSTROPHE"),
|
||||
K("RC-GRAVE"): K("C-Shift-GRAVE"),
|
||||
K("RC-BACKSLASH"): K("C-Shift-BACKSLASH"),
|
||||
K("RC-Z"): K("C-Shift-Z"),
|
||||
K("RC-X"): K("C-Shift-X"),
|
||||
K("RC-C"): K("C-Shift-C"),
|
||||
K("RC-V"): K("C-Shift-V"),
|
||||
K("RC-B"): K("C-Shift-B"),
|
||||
K("RC-N"): K("C-Shift-N"),
|
||||
K("RC-M"): K("C-Shift-M"),
|
||||
K("RC-COMMA"): K("C-Shift-COMMA"),
|
||||
K("RC-DOT"): K("C-Shift-DOT"),
|
||||
K("RC-SLASH"): K("C-Shift-SLASH"),
|
||||
K("RC-KPASTERISK"): K("C-Shift-KPASTERISK"),
|
||||
}, "terminals")
|
@@ -1,7 +1,4 @@
|
||||
# /etc/sudoers.d/limitedadmins
|
||||
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11/bin"
|
||||
Defaults!/etc/init.d/kinto setenv,env_reset,env_delete+=PATH,env_delete+=LD_PRELOAD,env_delete+=LD_LIBRARY_PATH,env_delete+=SSH_AUTH_SOCK,env_delete+=PYTHONPATH,env_delete+=PERL5LIB
|
||||
%{username} ALL=NOPASSWD: /etc/init.d/kinto *
|
||||
%{username} ALL=NOPASSWD: {systemctl} restart xkeysnail
|
||||
%{username} ALL=NOPASSWD: {systemctl} start xkeysnail
|
||||
%{username} ALL=NOPASSWD: {systemctl} stop xkeysnail
|
||||
@@ -9,6 +6,5 @@ Defaults!/etc/init.d/kinto setenv,env_reset,env_delete+=PATH,env_delete+=LD_PREL
|
||||
%{username} ALL=(root) NOPASSWD: /usr/local/bin/logoff.sh
|
||||
%{username} ALL=NOPASSWD: {pkill} -f logoff
|
||||
%{username} ALL=NOPASSWD: {pkill} -f bin/xkeysnail
|
||||
%{username} ALL=NOPASSWD: {xkeysnail} *
|
||||
%{username} ALL=NOPASSWD: {xkeysnail} /home/{username}/.config/kinto/kinto.py
|
||||
%{username} ALL=NOPASSWD: {systemctl} is-active --quiet xkeysnail
|
||||
%{username} ALL=NOPASSWD: /usr/lib/systemd/system/xkeysnail.service
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
@@ -3,19 +3,15 @@
|
||||
import gi
|
||||
|
||||
gi.require_version('Gtk', '3.0')
|
||||
gi.require_version('AppIndicator3', '0.1')
|
||||
gi.require_version('Notify', '0.7')
|
||||
|
||||
import signal,time,os,fcntl,datetime,re
|
||||
from subprocess import Popen, PIPE, CalledProcessError
|
||||
from shutil import which
|
||||
from gi.repository import Gtk,GLib,GdkPixbuf
|
||||
from gi.repository import AppIndicator3 as appindicator
|
||||
from gi.repository import Notify as notify
|
||||
try:
|
||||
gi.require_version('AyatanaAppIndicator3', '0.1')
|
||||
from gi.repository import AyatanaAppIndicator3 as appindicator
|
||||
except ValueError:
|
||||
gi.require_version('AppIndicator3', '0.1')
|
||||
from gi.repository import AppIndicator3 as appindicator
|
||||
|
||||
import signal
|
||||
|
||||
@@ -33,15 +29,7 @@ APPINDICATOR_ID = 'Kinto'
|
||||
class Indicator():
|
||||
|
||||
global child_pid
|
||||
global sysv
|
||||
try:
|
||||
sysv = int(Popen("pidof systemd >/dev/null 2>&1 && echo '0' || echo '1'", stdout=PIPE, shell=True).communicate()[0].strip().decode('UTF-8'))
|
||||
except:
|
||||
sysv = 2
|
||||
if sysv:
|
||||
kinto_status = Popen("export TERM=xterm-color;while :; do clear; pgrep 'xkeysnail' && echo 'active'; sleep 2; done", stdout=PIPE, shell=True)
|
||||
else:
|
||||
kinto_status = Popen("export TERM=xterm-color;while :; do clear; systemctl is-active xkeysnail; sleep 2; done", stdout=PIPE, shell=True)
|
||||
kinto_status = Popen("while :; do clear; systemctl is-active xkeysnail; sleep 2s; done", stdout=PIPE, shell=True)
|
||||
child_pid = kinto_status.pid
|
||||
|
||||
homedir = os.path.expanduser("~")
|
||||
@@ -54,52 +42,44 @@ class Indicator():
|
||||
autostart_bool = False
|
||||
menu = Gtk.Menu()
|
||||
menukb = Gtk.Menu()
|
||||
checkbox_autostart = Gtk.CheckMenuItem(label='Autostart')
|
||||
restart = Gtk.MenuItem(label='Restart')
|
||||
stop = Gtk.MenuItem(label='Stop')
|
||||
keyboards = Gtk.MenuItem(label='Keyboard Types')
|
||||
checkbox_autostart = Gtk.CheckMenuItem('Autostart')
|
||||
restart = Gtk.MenuItem('Restart')
|
||||
stop = Gtk.MenuItem('Stop')
|
||||
keyboards = Gtk.MenuItem('Keyboard Types')
|
||||
keyboards.set_submenu(menukb)
|
||||
winkb = Gtk.RadioMenuItem(label='Windows')
|
||||
mackb = Gtk.RadioMenuItem(label='Apple',group=winkb)
|
||||
chromekb = Gtk.RadioMenuItem(label='Chromebook',group=winkb)
|
||||
ibmkb = Gtk.RadioMenuItem(label='IBM (No Super/Win key)',group=winkb)
|
||||
winmackb = Gtk.RadioMenuItem(label='Windows & Apple*',group=winkb)
|
||||
edit = Gtk.MenuItem(label='Customize')
|
||||
edit = Gtk.MenuItem('Customize')
|
||||
edit_submenu = Gtk.Menu()
|
||||
edit.set_submenu(edit_submenu)
|
||||
tweaks = Gtk.MenuItem(label='Tweaks')
|
||||
rightmod = Gtk.CheckButton(label='AltGr on Right Cmd')
|
||||
vsc2st3 = Gtk.CheckButton(label='ST3 hotkeys for VS Code')
|
||||
caps2esc = Gtk.CheckButton(label='Capslock is Escape when tapped, Cmd when held')
|
||||
caps2cmd = Gtk.CheckButton(label='Capslock is Cmd')
|
||||
button_config = Gtk.MenuItem(label='Kinto Config (shortcuts)')
|
||||
service = Gtk.MenuItem(label='Kinto Service')
|
||||
tweaks = Gtk.MenuItem('Tweaks')
|
||||
rightmod = Gtk.CheckButton('AltGr on Right Cmd')
|
||||
vsc2st3 = Gtk.CheckButton('ST3 hotkeys for VS Code')
|
||||
caps2esc = Gtk.CheckButton('Capslock is Escape when tapped, Cmd when held')
|
||||
caps2cmd = Gtk.CheckButton('Capslock is Cmd')
|
||||
button_config = Gtk.MenuItem('Kinto Config (shortcuts)')
|
||||
service = Gtk.MenuItem('Kinto Service')
|
||||
# Keyboard type set below
|
||||
button_syskb = Gtk.MenuItem(label='System Shortcuts')
|
||||
button_region = Gtk.MenuItem(label='Change Language')
|
||||
systray = Gtk.CheckMenuItem(label='Tray Enabled')
|
||||
helpm = Gtk.MenuItem(label='Help')
|
||||
button_syskb = Gtk.MenuItem('System Shortcuts')
|
||||
button_region = Gtk.MenuItem('Change Language')
|
||||
systray = Gtk.CheckMenuItem('Tray Enabled')
|
||||
helpm = Gtk.MenuItem('Help')
|
||||
help_submenu = Gtk.Menu()
|
||||
helpm.set_submenu(help_submenu)
|
||||
debug = Gtk.MenuItem(label='Debug')
|
||||
opengui = Gtk.MenuItem(label='Open Kinto')
|
||||
support = Gtk.MenuItem(label='Support')
|
||||
about = Gtk.MenuItem(label='About')
|
||||
debug = Gtk.MenuItem('Debug')
|
||||
opengui = Gtk.MenuItem('Open Kinto')
|
||||
support = Gtk.MenuItem("Support")
|
||||
about = Gtk.MenuItem('About')
|
||||
global restartsvc
|
||||
restartsvc = False
|
||||
unixts = int(time.time())
|
||||
last_status = ''
|
||||
last_status = ""
|
||||
|
||||
def __init__(self):
|
||||
global sysv
|
||||
try:
|
||||
sysv = int(Popen("pidof systemd >/dev/null 2>&1 && echo '0' || echo '1'", stdout=PIPE, shell=True).communicate()[0].strip().decode('UTF-8'))
|
||||
except:
|
||||
sysv = 1
|
||||
if sysv:
|
||||
res = Popen(['pgrep','xkeysnail'])
|
||||
else:
|
||||
res = Popen(['sudo', 'systemctl','is-active','--quiet','xkeysnail'])
|
||||
res = Popen(['sudo', 'systemctl','is-active','--quiet','xkeysnail'])
|
||||
res.wait()
|
||||
|
||||
if res.returncode == 0:
|
||||
@@ -120,8 +100,6 @@ class Indicator():
|
||||
with open(self.kconfig) as configfile:
|
||||
autostart_line = configfile.read().split('\n')[1]
|
||||
|
||||
autostart_bool = False
|
||||
|
||||
# Autostart
|
||||
if "autostart = true" in autostart_line.casefold():
|
||||
autostart_bool = True
|
||||
@@ -205,7 +183,7 @@ class Indicator():
|
||||
# self.button_region.connect('activate',self.setRegion)
|
||||
# self.menu.append(self.button_region)
|
||||
|
||||
item_quit = Gtk.MenuItem(label='Close')
|
||||
item_quit = Gtk.MenuItem('Close')
|
||||
item_quit.connect('activate', quit)
|
||||
self.menu.append(item_quit)
|
||||
self.menu.show_all()
|
||||
@@ -423,10 +401,10 @@ class Indicator():
|
||||
self.lbl = Gtk.Label()
|
||||
global restartsvc
|
||||
restartsvc = False
|
||||
self.rightmod = Gtk.CheckButton(label='AltGr on Right Cmd')
|
||||
self.vsc2st3 = Gtk.CheckButton(label='ST3 hotkeys for VS Code')
|
||||
self.caps2esc = Gtk.CheckButton(label='Capslock is Escape when tapped, Cmd when held')
|
||||
self.caps2cmd = Gtk.CheckButton(label='Capslock is Cmd')
|
||||
self.rightmod = Gtk.CheckButton('AltGr on Right Cmd')
|
||||
self.vsc2st3 = Gtk.CheckButton('ST3 hotkeys for VS Code')
|
||||
self.caps2esc = Gtk.CheckButton('Capslock is Escape when tapped, Cmd when held')
|
||||
self.caps2cmd = Gtk.CheckButton('Capslock is Cmd')
|
||||
|
||||
if rightmod_result == 0:
|
||||
self.rightmod.set_active(True)
|
||||
@@ -468,10 +446,7 @@ class Indicator():
|
||||
global restartsvc
|
||||
if restartsvc == True:
|
||||
try:
|
||||
if sysv:
|
||||
restartcmd = ['sudo', '-E','/etc/init.d/kinto','restart']
|
||||
else:
|
||||
restartcmd = ['sudo', 'systemctl','restart','xkeysnail']
|
||||
restartcmd = ['sudo', 'systemctl','restart','xkeysnail']
|
||||
Popen(restartcmd)
|
||||
restartsvc = False
|
||||
|
||||
@@ -580,12 +555,8 @@ class Indicator():
|
||||
return
|
||||
|
||||
def runRestart(self,button):
|
||||
global sysv
|
||||
try:
|
||||
if sysv:
|
||||
stop = Popen(['sudo', '-E','/etc/init.d/kinto','stop'])
|
||||
else:
|
||||
stop = Popen(['sudo', 'systemctl','stop','xkeysnail'])
|
||||
stop = Popen(['sudo', 'systemctl','stop','xkeysnail'])
|
||||
stop.wait()
|
||||
time.sleep(1)
|
||||
res = Popen(['pgrep','xkeysnail'])
|
||||
@@ -596,20 +567,13 @@ class Indicator():
|
||||
pkillxkey = Popen(['sudo', 'pkill','-f','bin/xkeysnail'])
|
||||
pkillxkey.wait()
|
||||
|
||||
if sysv:
|
||||
Popen(['sudo', '-E','/etc/init.d/kinto','start'])
|
||||
else:
|
||||
Popen(['sudo', 'systemctl','start','xkeysnail'])
|
||||
Popen(['sudo', 'systemctl','start','xkeysnail'])
|
||||
except:
|
||||
Popen(['notify-send','Kinto: Error restarting Kinto!'])
|
||||
|
||||
def runStop(self,button):
|
||||
global sysv
|
||||
try:
|
||||
if sysv:
|
||||
stop = Popen(['sudo', '-E','/etc/init.d/kinto','stop'])
|
||||
else:
|
||||
stop = Popen(['sudo', 'systemctl','stop','xkeysnail'])
|
||||
stop = Popen(['sudo', 'systemctl','stop','xkeysnail'])
|
||||
stop.wait()
|
||||
time.sleep(1)
|
||||
res = Popen(['pgrep','xkeysnail'])
|
||||
@@ -625,9 +589,9 @@ class Indicator():
|
||||
def runDebug(self,button,opendebug):
|
||||
try:
|
||||
if opendebug:
|
||||
Popen(['/usr/bin/python3',os.environ['HOME']+'/.config/kinto/gui/kinto-gui.py','-d'])
|
||||
Popen([os.environ['HOME']+'/.config/kinto/gui/kinto-gui.py','-d'])
|
||||
else:
|
||||
Popen(['/usr/bin/python3',os.environ['HOME']+'/.config/kinto/gui/kinto-gui.py'])
|
||||
Popen([os.environ['HOME']+'/.config/kinto/gui/kinto-gui.py'])
|
||||
except:
|
||||
Popen(['notify-send','Kinto: Error opening Kinto!'])
|
||||
|
||||
@@ -725,10 +689,7 @@ class Indicator():
|
||||
cmdsTerm = Popen(cmds)
|
||||
cmdsTerm.wait()
|
||||
|
||||
if sysv:
|
||||
restart = ['sudo', '-E','/etc/init.d/kinto','restart']
|
||||
else:
|
||||
restart = ['sudo', 'systemctl','restart','xkeysnail']
|
||||
restart = ['sudo', 'systemctl','restart','xkeysnail']
|
||||
Popen(restart)
|
||||
|
||||
except CalledProcessError:
|
0
linux/xkeysnail.desktop → xkeysnail-config/xkeysnail.desktop
Executable file → Normal file
14
xkeysnail-config/xkeysnail.service
Normal file
@@ -0,0 +1,14 @@
|
||||
[Unit]
|
||||
Description=xkeysnail
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
KillMode=process
|
||||
ExecStart=/usr/bin/sudo /bin/bash -c '/usr/bin/xhost +SI:localuser:root && {homedir}/.config/kinto/killdups.sh && {xkeysnail} --quiet --watch {homedir}/.config/kinto/kinto.py'
|
||||
ExecStop=/usr/bin/sudo /bin/bash -c '/usr/bin/sudo pkill -f bin/xkeysnail && exit 0'
|
||||
Restart=on-failure
|
||||
RestartSec=3
|
||||
Environment=DISPLAY={displayid}
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical.target
|
@@ -3,17 +3,10 @@
|
||||
# set about:config?filter=ui.key.menuAccessKeyFocuses
|
||||
# to false for wordwise to work in Firefox
|
||||
|
||||
function pause(){
|
||||
read -s -n 1 -p "Press any key to continue . . ."
|
||||
echo ""
|
||||
}
|
||||
|
||||
typeset -l distro
|
||||
distro=$(awk -F= '$1=="NAME" { gsub("[\",!,_, ]","",$2);print $2 ;}' /etc/os-release)
|
||||
typeset -l dename
|
||||
dename=$(./linux/system-config/dename.sh | cut -d " " -f1)
|
||||
|
||||
sysv=$(pidof systemd >/dev/null 2>&1 && echo "1" || echo "0")
|
||||
dename=$(./system-config/dename.sh | cut -d " " -f1)
|
||||
|
||||
function uninstall {
|
||||
|
||||
@@ -45,11 +38,7 @@ function uninstall {
|
||||
mv ~/.config/kglobalshortcutsrc ~/.config/kglobalshortcutsrc.kinto
|
||||
elif [ "$dename" == "xfce" ];then
|
||||
echo "Resetting DE hotkeys..."
|
||||
if test -f "/etc/mx-version";then
|
||||
cp /etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
|
||||
else
|
||||
cp /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
|
||||
fi
|
||||
cp /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
|
||||
fi
|
||||
elif [ "$yn" == "r" ]; then
|
||||
echo "Restore original user shortcuts"
|
||||
@@ -88,12 +77,6 @@ function uninstall {
|
||||
echo -e "\nWill still be restoring the overlay key"
|
||||
echo -e "gsettings set org.gnome.mutter overlay-key 'super'\n"
|
||||
gsettings set org.gnome.mutter overlay-key 'super'
|
||||
# Repetitive - xfce restore factory or backup does this
|
||||
# Also needs to check if whiskermenu is even being used
|
||||
# elif [[ $dename == "xfce" ]]; then
|
||||
# echo -e "\nWill still be restoring the overlay key"
|
||||
# echo -e "xfconf-query --channel xfce4-keyboard-shortcuts --property \"/commands/custom/Super_L\" --create --type string --set \"xfce4-popup-whiskermenu\""
|
||||
# xfconf-query --channel xfce4-keyboard-shortcuts --property "/commands/custom/Super_L" --create --type string --set "xfce4-popup-whiskermenu"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -140,14 +123,14 @@ function budgieUpdate {
|
||||
if [ "$yn" == "y" ]; then
|
||||
budgieVersion="$(/usr/bin/budgie-desktop --version | awk '{ print $2; }' | head -n1)"
|
||||
if [ "$budgieVersion" == "10.5.1" ]; then
|
||||
if ! [ -f ./linux/system-config/budgie-daemon_10.5.1 ]; then
|
||||
wget https://github.com/rbreaves/budgie-desktop/blob/binaries/binaries/budgie-daemon_10.5.1?raw=true -O ./linux/system-config/budgie-daemon_10.5.1
|
||||
if ! [ -f ./system-config/budgie-daemon_10.5.1 ]; then
|
||||
wget https://github.com/rbreaves/budgie-desktop/blob/binaries/binaries/budgie-daemon_10.5.1?raw=true -O ./system-config/budgie-daemon_10.5.1
|
||||
fi
|
||||
bdmd5=$(md5sum /usr/bin/budgie-daemon | awk '{ print $1 }')
|
||||
newbdmd5=$(md5sum ./linux/system-config/budgie-daemon_10.5.1 | awk '{ print $1 }')
|
||||
newbdmd5=$(md5sum ./system-config/budgie-daemon_10.5.1 | awk '{ print $1 }')
|
||||
if [ "$bdmd5" != "$newbdmd5" ]; then
|
||||
cp /usr/bin/budgie-daemon ./budgie-daemon_"$budgieVersion".bak
|
||||
sudo pkill budgie-daemon && sudo cp ./linux/system-config/budgie-daemon_10.5.1 /usr/bin/budgie-daemon
|
||||
sudo pkill budgie-daemon && sudo cp ./system-config/budgie-daemon_10.5.1 /usr/bin/budgie-daemon
|
||||
echo "Updated Budgie to use App Switching Patch"
|
||||
else
|
||||
echo "Budgie-daemon already patched, skipping replacement."
|
||||
@@ -163,11 +146,11 @@ function budgieUpdate {
|
||||
esac
|
||||
done
|
||||
if [ "$yn" == "y" ]; then
|
||||
if ! [ -f ./linux/system-config/budgie-daemon_10.5.1 ]; then
|
||||
wget https://github.com/rbreaves/budgie-desktop/raw/43d3b44243b0bcaee3262a79818024a651475b58/binaries/budgie-daemon_10.5.1 -O ./linux/system-config/budgie-daemon_10.5.1
|
||||
if ! [ -f ./system-config/budgie-daemon_10.5.1 ]; then
|
||||
wget https://github.com/rbreaves/budgie-desktop/raw/43d3b44243b0bcaee3262a79818024a651475b58/binaries/budgie-daemon_10.5.1 -O ./system-config/budgie-daemon_10.5.1
|
||||
fi
|
||||
cp /usr/bin/budgie-daemon ./budgie-daemon_"$budgieVersion".bak
|
||||
sudo pkill budgie-daemon && sudo cp ./linux/system-config/budgie-daemon_10.5.1 /usr/bin/budgie-daemon
|
||||
sudo pkill budgie-daemon && sudo cp ./system-config/budgie-daemon_10.5.1 /usr/bin/budgie-daemon
|
||||
echo "Updated Budgie to use App Switching Patch"
|
||||
fi
|
||||
fi
|
||||
@@ -206,7 +189,6 @@ if [[ $1 == "5" || $1 == "uninstall" || $1 == "Uninstall" ]]; then
|
||||
echo "rm /etc/systemd/system/graphical.target.wants/xkeysnail.service"
|
||||
echo "rm /usr/lib/systemd/system/xkeysnail.service"
|
||||
echo "rm /lib/systemd/system/xkeysnail.service"
|
||||
sudo rm /etc/init.d/kinto >/dev/null 2>&1
|
||||
sudo rm /etc/systemd/system/xkeysnail.service >/dev/null 2>&1
|
||||
sudo rm /etc/systemd/system/graphical.target.wants/xkeysnail.service >/dev/null 2>&1
|
||||
sudo rm /usr/lib/systemd/system/xkeysnail.service >/dev/null 2>&1
|
||||
@@ -225,29 +207,9 @@ fi
|
||||
sudo systemctl stop xkeysnail >/dev/null 2>&1
|
||||
sudo systemctl disable xkeysnail >/dev/null 2>&1
|
||||
sudo pkill -f bin/xkeysnail >/dev/null 2>&1
|
||||
sudo pkill -f kinto-gui.py >/dev/null 2>&1
|
||||
sudo pkill -f kintotray.py >/dev/null 2>&1
|
||||
ps aux | awk '/[s]h -c while/ {print $2}' | xargs -r -n1 sudo kill
|
||||
sudo pkill -f "is-active xkeysnail" >/dev/null 2>&1
|
||||
|
||||
if [ "$distro" == "manjarolinux" ]; then
|
||||
while true; do
|
||||
read -rep $'\nHave you run \"sudo pacman -Syu\" before running Kinto setup? (y/n): ' updated
|
||||
case $updated in
|
||||
[Yy]* ) mjupdated='yes'; break;;
|
||||
[Nn]* ) mjupdated='no'; break;;
|
||||
* ) echo -e "\nPlease answer [y]es or [n]o.";;
|
||||
esac
|
||||
done
|
||||
if [[ "$mjupdated" == "no" ]]; then
|
||||
echo
|
||||
echo "================================================================================"
|
||||
echo "========== Please run a full system update before installing Kinto. =========="
|
||||
echo "================================================================================"
|
||||
echo
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
pip3 install pillow
|
||||
|
||||
# Add additional shortcuts if needed, does not modify existing ones
|
||||
|
||||
@@ -257,34 +219,6 @@ if [[ $dename == 'gnome' || $dename == 'budgie' ]];then
|
||||
echo "Overlay key, " $bound ", detected. Will be removing so Super-Space can remap to Cmd-Space for app launching.."
|
||||
gsettings set org.gnome.mutter overlay-key ''
|
||||
fi
|
||||
elif [[ $dename == 'xfce' ]];then
|
||||
launcher=$(cat ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml | grep 'name="Super_L"' | sed 's:.*="::')
|
||||
# echo "${#launcher}"
|
||||
if [[ "${#launcher}" -eq 0 ]]; then
|
||||
xfconf-query --channel xfce4-keyboard-shortcuts --property "/commands/custom/Super_L" --create --type string --set "xfce4-popup-whiskermenu"
|
||||
echo "Resetting Super_L, please wait..."
|
||||
sleep 6
|
||||
launcher=$(cat ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml | grep 'name="Super_L"' | sed 's:.*="::')
|
||||
if [[ "${#launcher}" -gt 0 ]]; then
|
||||
echo "Success."
|
||||
else
|
||||
echo "Failed. Skipping setup of Cmd-Space."
|
||||
fi
|
||||
fi
|
||||
if [[ "${#launcher}" -gt 0 ]]; then
|
||||
nlauncher=${launcher::-3}
|
||||
# Replace Alt-F1 help file w/ whisker menu alternative hotkey
|
||||
xfconf-query --channel xfce4-keyboard-shortcuts --property "/commands/custom/<Alt>F1" --reset
|
||||
# Clear Alt-F3 App Finder for sublime text global replace
|
||||
xfconf-query --channel xfce4-keyboard-shortcuts --property "/commands/custom/<Alt>F3" --reset
|
||||
xfconf-query --channel xfce4-keyboard-shortcuts --property "/commands/custom/<Alt>F1" --create --type string --set "$nlauncher" && echo "$nlauncher has been set to Alt-F1 for Cmd-Space to work."
|
||||
# Unset Super_L to avoid issues during setup, will re-apply at the end
|
||||
xfconf-query --channel xfce4-keyboard-shortcuts --property "/commands/custom/Super_L" --reset
|
||||
# xfconf-query --channel xfce4-keyboard-shortcuts --property "/commands/custom/<Super>grave" --create --type string --set "switch_window_key"
|
||||
|
||||
fi
|
||||
# Unset Super-Tab, breaks Ctrl-Tab. switch_window_key
|
||||
sed -i '/.*name=\"<Super>Tab.*$/d' ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
|
||||
fi
|
||||
|
||||
# if ls /etc/apt/sources.list.d/system76* 1> /dev/null 2>&1; then
|
||||
@@ -305,21 +239,19 @@ fi
|
||||
|
||||
if [[ $distro == "elementaryos" ]]; then
|
||||
gsettings set io.elementary.terminal.settings natural-copy-paste false
|
||||
sudo ./linux/system-config/unipkg.sh libvte-2.91-dev
|
||||
fi
|
||||
|
||||
if ! [ -x "$(command -v xhost)" ] || ! [ -x "$(command -v gcc)" ]; then
|
||||
if [ "$distro" == "manjarolinux" ]; then
|
||||
sudo ./linux/system-config/unipkg.sh "xorg-xhost gcc"
|
||||
sudo ./system-config/unipkg.sh "xorg-xhost gcc"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $dename == "kde" ]]; then
|
||||
if [[ $distro == "manjarolinux" ]] || cat /etc/os-release | grep -E "^ID(_LIKE)?" | grep -q arch; then # Manjario or other arch-like distros: SteamOS3,HoloISO
|
||||
sudo ./linux/system-config/unipkg.sh vte3
|
||||
sudo ./linux/system-config/unipkg.sh python-pip
|
||||
if [[ $distro == "manjarolinux" ]]; then
|
||||
sudo ./system-config/unipkg.sh vte3
|
||||
else
|
||||
sudo ./linux/system-config/unipkg.sh libvte-2.91-dev
|
||||
sudo ./system-config/unipkg.sh libvte-2.91-dev
|
||||
fi
|
||||
fi
|
||||
if [[ $distro == 'kdeneon' ]]; then
|
||||
@@ -330,7 +262,26 @@ if [[ $distro == 'kdeneon' ]]; then
|
||||
kquitapp5 kglobalaccel && sleep 2s && kglobalaccel5 &
|
||||
fi
|
||||
|
||||
if [[ $distro == 'fedora' ]] || [[ $distro == 'fedoralinux' ]]; then
|
||||
if [[ $distro == 'fedora' ]]; then
|
||||
echo "Checking SELinux status..."
|
||||
if [[ $(perl -ne 'print if /^SELINUX=enforcing/' /etc/selinux/config | wc -l) != 0 ]]; then
|
||||
while true; do
|
||||
read -rep $'\nWould you like to update your SELinux state from enforcing to permissive? (y/n)\n' yn
|
||||
case $yn in
|
||||
[Yy]* ) setSE='yes'; break;;
|
||||
[Nn]* ) exp='no'; expsh=" " break;;
|
||||
# * ) echo "Please answer yes or no.";;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ $yn == "yes" ]]; then
|
||||
sed -i "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/selinux/config
|
||||
echo "/etc/selinux/config has been updated. Please reboot your computer before continuing."
|
||||
exit 0
|
||||
fi
|
||||
else
|
||||
echo "SELinux state should be ok for Kinto to install"
|
||||
fi
|
||||
if [[ $(gsettings get org.gnome.desktop.wm.keybindings show-desktop | grep "\[\]" | wc -l) == 1 ]];then
|
||||
gsettings set org.gnome.desktop.wm.keybindings show-desktop "['<Super>d']"
|
||||
else
|
||||
@@ -373,43 +324,35 @@ expsh=" "
|
||||
# sudo systemctl enable xkeysnail >/dev/null 2>&1
|
||||
# if ! [ -x "$(command -v inotifywait)" ]; then
|
||||
# echo "Will need to install inotify-tools to restart key remapper live for config file changes..."
|
||||
# sudo ./linux/system-config/unipkg.sh inotify-tools
|
||||
# sudo ./system-config/unipkg.sh inotify-tools
|
||||
# fi
|
||||
if ! [ -x "$(command -v git)" ]; then
|
||||
echo "Will need to install git..."
|
||||
sudo ./linux/system-config/unipkg.sh git
|
||||
fi
|
||||
if ! [ -x "$(command -v pip3)" ]; then
|
||||
echo "Will need to install python3-pip..."
|
||||
sudo ./linux/system-config/unipkg.sh python3-pip
|
||||
sudo ./system-config/unipkg.sh python3-pip
|
||||
fi
|
||||
if ! [ -x "$(command -v python3-config)" ]; then
|
||||
if [ "$distro" == "ubuntu" ] || [ "${distro::6}" == "debian" ] || [ "$distro" == 'linuxmint' ]; then
|
||||
pydev="python3-dev python3-tk"
|
||||
elif [ "$distro" == "fedora" ] || [ "$distro" == "fedoralinux" ]; then
|
||||
pydev="python3-devel python3-tkinter"
|
||||
if [ "$distro" == "ubuntu" ] || [ "$distro" == "debian" ] || [ "$distro" == 'linuxmint' ]; then
|
||||
pydev="python3-dev"
|
||||
elif [ "$distro" == "fedora" ]; then
|
||||
pydev="python3-devel"
|
||||
fi
|
||||
if [ "$distro" == "gnome" ] || [ "$distro" == "fedora" ] || [ "$distro" == "fedoralinux" ] || [ "${distro::6}" == "debian" ] || [ "$distro" == 'linuxmint' ] ; then
|
||||
if [ "$distro" == "gnome" ] || [ "$distro" == "fedora" ] || [ "$distro" == "debian" ] || [ "$distro" == 'linuxmint' ]; then
|
||||
echo "Will need to install $pydev..."
|
||||
sudo ./linux/system-config/unipkg.sh "$pydev"
|
||||
sudo ./system-config/unipkg.sh "$pydev"
|
||||
fi
|
||||
fi
|
||||
# if [ "$distro" == "ubuntu" ] && [ "$dename" == "gnome" ];then
|
||||
# sudo ./linux/system-config/unipkg.sh gnome-tweaks gnome-shell-extension-appindicator gir1.2-appindicator3-0.1
|
||||
# sudo ./system-config/unipkg.sh gnome-tweaks gnome-shell-extension-appindicator gir1.2-appindicator3-0.1
|
||||
# fi
|
||||
if ! [ -x "$(command -v xhost)" ] || ! [ -x "$(command -v gcc)" ]; then
|
||||
if [ "$distro" == "\"manjaro linux\"" ]; then
|
||||
sudo ./linux/system-config/unipkg.sh "xorg-xhost gcc"
|
||||
sudo ./system-config/unipkg.sh "xorg-xhost gcc"
|
||||
fi
|
||||
fi
|
||||
if [ "$distro" == 'linuxmint' ] ; then
|
||||
if [ "$distro" == 'linuxmint' ]; then
|
||||
pip3 install setuptools
|
||||
elif [ "${distro::6}" == "debian" ]; then
|
||||
sudo pip3 install setuptools wheel
|
||||
fi
|
||||
|
||||
pip3 install pillow
|
||||
|
||||
# echo "Transferring files..."
|
||||
mkdir -p ~/.config/kinto
|
||||
|
||||
@@ -420,153 +363,125 @@ mkdir -p ~/.config/kinto
|
||||
|
||||
# KDE startup - xhost fix
|
||||
mkdir -p ~/.config/autostart
|
||||
if [ ! "$sysv" -eq 0 ];then
|
||||
yes | cp -rf ./linux/xkeysnail.desktop ~/.config/kinto/xkeysnail.desktop
|
||||
else
|
||||
yes | cp -rf ./linux/xkeysnail_sysv.desktop ~/.config/kinto/xkeysnail.desktop
|
||||
fi
|
||||
yes | cp -rf ./xkeysnail-config/xkeysnail.desktop ~/.config/kinto/xkeysnail.desktop
|
||||
|
||||
# yes | cp -rf ./linux/xkeystart.sh ~/.config/kinto/xkeystart.sh
|
||||
# yes | cp -rf ./xkeysnail-config/xkeystart.sh ~/.config/kinto/xkeystart.sh
|
||||
|
||||
# *** More testing needing, universal way of killing kinto on user log out? ***
|
||||
# yes | sudo cp -rf linux/root_logoff.sh /usr/local/bin/logoff.sh
|
||||
# yes | sudo cp -rf xkeysnail-config/root_logoff.sh /usr/local/bin/logoff.sh
|
||||
# sudo chown root:root /usr/local/bin/logoff.sh
|
||||
# sudo chmod u+rwx /usr/local/bin/logoff.sh
|
||||
# sudo chmod go-w+rx /usr/local/bin/logoff.sh
|
||||
# *** End universal killing of kinto
|
||||
|
||||
# logoff fix - not solid for every os. Prevents missed 1 character input on login
|
||||
# yes | sudo cp -rf linux/gnome_logoff.sh ~/.config/kinto/logoff.sh
|
||||
# yes | sudo cp -rf xkeysnail-config/gnome_logoff.sh ~/.config/kinto/logoff.sh
|
||||
|
||||
if [ -d "./.git" ]
|
||||
then
|
||||
echo "$(git describe --tag --abbrev=0 | head -n 1)" "build" "$(git rev-parse --short HEAD)" > ~/.config/kinto/version
|
||||
elif [ -f "./dl_version" ]; then
|
||||
cp ./dl_version ~/.config/kinto/version
|
||||
echo "$(git describe --tag --abbrev=0 | head -n 1)" "build" "$(git rev-parse --short HEAD)" > ~/.config/kinto/version
|
||||
yes | cp -rf ./xkeysnail-config/kinto.py ./xkeysnail-config/kinto.py.new
|
||||
yes | cp -rf ./xkeysnail-config/limitedadmins ./xkeysnail-config/limitedadmins.new
|
||||
yes | cp -rf ./xkeysnail-config/gui/ ~/.config/kinto/
|
||||
yes | cp -nrf ./xkeysnail-config/initkb ~/.config/kinto/initkb
|
||||
yes | cp -rf ./xkeysnail-config/killdups.sh ~/.config/kinto/killdups.sh
|
||||
yes | cp -rf ./xkeysnail-config/trayapps/appindicator/kintotray.py ~/.config/kinto/kintotray.py
|
||||
yes | cp -rf ./xkeysnail-config/trayapps/appindicator/kintotray.desktop ~/.config/kinto/kintotray.desktop
|
||||
yes | cp -rf ./xkeysnail-config/gui/kinto.desktop ./xkeysnail-config/gui/kinto.desktop.new
|
||||
yes | cp -rf ./xkeysnail-config/trayapps/appindicator/icons/kinto-color-16.svg ~/.config/kinto/kinto-color.svg
|
||||
yes | cp -rf ./xkeysnail-config/trayapps/appindicator/icons/kinto-color-16.svg ~/.config/kinto/kinto-color-48.svg
|
||||
yes | cp -rf ./xkeysnail-config/trayapps/appindicator/icons/kinto-invert-16.svg ~/.config/kinto/kinto-invert.svg
|
||||
yes | cp -rf ./xkeysnail-config/trayapps/appindicator/icons/kinto-solid-16.svg ~/.config/kinto/kinto-solid.svg
|
||||
yes | cp -rf ./xkeysnail-config/trayapps/appindicator/icons/kinto.svg ~/.config/kinto/kinto.svg
|
||||
# yes | cp -rf ./system-config/caret_status_xkey.sh ~/.config/kinto/caret_status_xkey.sh
|
||||
yes | cp -rf ./xkeysnail-config/xkeysnail.service ./xkeysnail-config/xkeysnail.service.new
|
||||
# yes | cp -rf ./xkeysnail-config/xkeysnail.timer ~/.config/systemd/user/xkeysnail.timer
|
||||
sed -i "s#{experimental-caret}#$exp#g" ./xkeysnail-config/xkeysnail.service.new
|
||||
if [ "$expsh" != " " ];then
|
||||
sed -i "s#{kill-caret}#/usr/bin/pkill -f $expsh#g" ./xkeysnail-config/xkeysnail.service.new
|
||||
else
|
||||
# Not a typo - v is built in
|
||||
echo "ersion Unknown" > ~/.config/kinto/version
|
||||
fi
|
||||
|
||||
yes | cp -rf ./linux/kinto.py ./linux/kinto.py.new
|
||||
yes | cp -rf ./linux/gui/ ~/.config/kinto/
|
||||
yes | cp -nrf ./linux/initkb ~/.config/kinto/initkb
|
||||
yes | cp -rf ./linux/killdups.sh ~/.config/kinto/killdups.sh
|
||||
yes | cp -rf ./linux/trayapps/appindicator/kintotray.py ~/.config/kinto/kintotray.py
|
||||
yes | cp -rf ./linux/trayapps/appindicator/kintotray.desktop ~/.config/kinto/kintotray.desktop
|
||||
yes | cp -rf ./linux/gui/kinto.desktop ./linux/gui/kinto.desktop.new
|
||||
yes | cp -rf ./linux/trayapps/appindicator/icons/kinto-color-16.svg ~/.config/kinto/kinto-color.svg
|
||||
yes | cp -rf ./linux/trayapps/appindicator/icons/kinto-color-16.svg ~/.config/kinto/kinto-color-48.svg
|
||||
yes | cp -rf ./linux/trayapps/appindicator/icons/kinto-invert-16.svg ~/.config/kinto/kinto-invert.svg
|
||||
yes | cp -rf ./linux/trayapps/appindicator/icons/kinto-solid-16.svg ~/.config/kinto/kinto-solid.svg
|
||||
yes | cp -rf ./linux/trayapps/appindicator/icons/kinto.svg ~/.config/kinto/kinto.svg
|
||||
# yes | cp -rf ./linux/system-config/caret_status_xkey.sh ~/.config/kinto/caret_status_xkey.sh
|
||||
|
||||
yes | cp -rf ./linux/limitedadmins ./linux/limitedadmins.new
|
||||
sed -i "s/{username}/`whoami`/g" ./linux/limitedadmins.new
|
||||
sed -i "s#{systemctl}#`\\which systemctl`#g" ./linux/limitedadmins.new
|
||||
sed -i "s#{pkill}#`\\which pkill`#g" ./linux/limitedadmins.new
|
||||
if [ ! "$sysv" -eq 0 ];then
|
||||
echo "Using systemd..."
|
||||
yes | cp -rf ./linux/xkeysnail.service ./linux/xkeysnail.service.new
|
||||
# yes | cp -rf ./linux/xkeysnail.timer ~/.config/systemd/user/xkeysnail.timer
|
||||
sed -i "s#{experimental-caret}#$exp#g" ./linux/xkeysnail.service.new
|
||||
if [ "$expsh" != " " ];then
|
||||
sed -i "s#{kill-caret}#/usr/bin/pkill -f $expsh#g" ./linux/xkeysnail.service.new
|
||||
else
|
||||
sed -i "s#{kill-caret}#$expsh#g" ./linux/xkeysnail.service.new
|
||||
fi
|
||||
sed -i "s/{username}/`whoami`/g" ./linux/xkeysnail.service.new
|
||||
sed -i "s#{homedir}#`echo "$HOME"`#g" ./linux/xkeysnail.service.new
|
||||
sed -i "s#{xhost}#`\\which xhost`#g" ./linux/xkeysnail.service.new
|
||||
sed -i "s/{displayid}/`echo "$DISPLAY"`/g" ./linux/xkeysnail.service.new
|
||||
else
|
||||
echo "Using sysvinit..."
|
||||
sed -i "s#{kill-caret}#$expsh#g" ./xkeysnail-config/xkeysnail.service.new
|
||||
fi
|
||||
sed -i "s/{username}/`whoami`/g" ./xkeysnail-config/xkeysnail.service.new
|
||||
sed -i "s#{homedir}#`echo "$HOME"`#g" ./xkeysnail-config/xkeysnail.service.new
|
||||
sed -i "s#{homedir}#`echo "$HOME"`#g" ~/.config/kinto/kintotray.desktop
|
||||
sed -i "s#{homedir}#`echo "$HOME"`#g" ~/.config/kinto/gui/kinto-gui.py
|
||||
sed -i "s#{homedir}#`echo "$HOME"`#g" ./linux/gui/kinto.desktop.new
|
||||
sudo mv ./linux/gui/kinto.desktop.new /usr/share/applications/kinto.desktop
|
||||
sed -i "s#{homedir}#`echo "$HOME"`#g" ./xkeysnail-config/gui/kinto.desktop.new
|
||||
sudo mv ./xkeysnail-config/gui/kinto.desktop.new /usr/share/applications/kinto.desktop
|
||||
sed -i "s#{xhost}#`\\which xhost`#g" ./xkeysnail-config/xkeysnail.service.new
|
||||
sed -i "s/{username}/`whoami`/g" ./xkeysnail-config/limitedadmins.new
|
||||
sed -i "s#{systemctl}#`\\which systemctl`#g" ./xkeysnail-config/limitedadmins.new
|
||||
sed -i "s#{pkill}#`\\which pkill`#g" ./xkeysnail-config/limitedadmins.new
|
||||
sed -i "s#{systemctl}#`\\which systemctl`#g" ~/.config/kinto/xkeysnail.desktop
|
||||
sed -i "s#{xhost}#`\\which xhost`#g" ~/.config/kinto/xkeysnail.desktop
|
||||
sed -i "s#{homedir}#`echo "$HOME"`#g" ~/.config/kinto/xkeysnail.desktop
|
||||
# sed -i "s#{homedir}#`echo "$HOME"`#g" ~/.config/kinto/prexk.sh
|
||||
sed -i "s/{displayid}/`echo "$DISPLAY"`/g" ./xkeysnail-config/xkeysnail.service.new
|
||||
# sed -i "s/{displayid}/`echo "$DISPLAY"`/g" ~/.config/kinto/prexk.sh
|
||||
|
||||
if [[ $dename == "budgie" ]]; then
|
||||
perl -pi -e "s/\s{4}(# )(K.*)(# Default SL - Change workspace.*budgie.*)/ \$2\$3/g" ./linux/kinto.py.new >/dev/null 2>&1
|
||||
perl -pi -e "s/\s{4}(# )(K.*)(# Default SL - Change workspace.*budgie.*)/ \$2\$3/g" ./xkeysnail-config/kinto.py.new >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [[ $distro == "popos" ]]; then
|
||||
perl -pi -e "\s{4}(# )(K.*)(# SL - .*popos.*)/ \$2\$3/g" ./linux/kinto.py.new >/dev/null 2>&1
|
||||
perl -pi -e "\s{4}(# )(K.*)(# SL - .*popos.*)/ \$2\$3/g" ./xkeysnail-config/kinto.py.new >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [[ $distro == 'fedora' ]] || [[ $distro == 'fedoralinux' ]]; then
|
||||
perl -pi -e "\s{4}(# )(K.*)(# SL - .*fedora.*)/ \$2\$3/g" ./linux/kinto.py.new >/dev/null 2>&1
|
||||
sed -i "s#{sudo}##g" ./linux/xkeysnail.service.new
|
||||
selinuxuser=system_u
|
||||
selinuxtype=systemd_unit_file_t
|
||||
else
|
||||
sed -i "s#{sudo}#`\\which sudo` #g" ./linux/xkeysnail.service.new
|
||||
if [[ $distro == "fedora" ]]; then
|
||||
perl -pi -e "\s{4}(# )(K.*)(# SL - .*fedora.*)/ \$2\$3/g" ./xkeysnail-config/kinto.py.new >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [[ $distro == "elementaryos" ]]; then
|
||||
perl -pi -e "\s{4}(# )(K.*)(# SL - .*eos.*)/ \$2\$3/g" ./linux/kinto.py.new >/dev/null 2>&1
|
||||
perl -pi -e "\s{4}(# )(K.*)(# SL - .*eos.*)/ \$2\$3/g" ./xkeysnail-config/kinto.py.new >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [[ "$distro" == "manjaro"* ]]; then
|
||||
perl -pi -e "\s{4}(# )(K.*)(# SL - .*manjaro.*)/ \$2\$3/g" ./linux/kinto.py.new >/dev/null 2>&1
|
||||
perl -pi -e "\s{4}(# )(K.*)(# SL - .*manjaro.*)/ \$2\$3/g" ./xkeysnail-config/kinto.py.new >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [[ $dename == "gnome" ]]; then
|
||||
perl -pi -e "\s{4}(# )(K.*)(# SL - .*ubuntu.*)/ \$2\$3/g" ./linux/kinto.py.new >/dev/null 2>&1
|
||||
perl -pi -e "\s{4}(# )(K.*)(# SL - .*ubuntu.*)/ \$2\$3/g" ./xkeysnail-config/kinto.py.new >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [[ $dename == "kde" ]]; then
|
||||
echo "Applying Cmd-Space to open App Launcher for KDE..."
|
||||
perl -pi -e "s/(# )(.*)(#.*kde)/\$2\$3/g" ./linux/kinto.py.new >/dev/null 2>&1
|
||||
perl -pi -e "s/(# )(.*)(#.*kde)/\$2\$3/g" ./xkeysnail-config/kinto.py.new >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [[ $dename == "xfce" ]]; then
|
||||
perl -pi -e "\s{4}(# )(K.*)(# SL - .*xfce.*)/ \$2\$3/g" ./linux/kinto.py.new >/dev/null 2>&1
|
||||
perl -pi -e "s/(# )(.*)(# xfce4)/\$2\$3/g" ./linux/kinto.py.new
|
||||
perl -pi -e "s/(\w.*)(# Default not-xfce4)/# \$1\$2/g" ./linux/kinto.py.new
|
||||
perl -pi -e "\s{4}(# )(K.*)(# SL - .*xfce.*)/ \$2\$3/g" ./xkeysnail-config/kinto.py.new >/dev/null 2>&1
|
||||
perl -pi -e "s/(# )(.*)(# xfce4)/\$2\$3/g" ./xkeysnail-config/kinto.py.new
|
||||
perl -pi -e "s/(\w.*)(# Default not-xfce4)/# \$1\$2/g" ./xkeysnail-config/kinto.py.new
|
||||
fi
|
||||
|
||||
if [[ $dename == "xfce" ]] && ls /etc/apt/sources.list.d/enso* 1> /dev/null 2>&1; then
|
||||
echo "enso OS detected, applying Cmd-Space for Launchy..."
|
||||
perl -pi -e "s/(K\(\"RC-Space)(.*)(# )(xfce4)/\$3\$1\$2\$3\$4/g" ./linux/kinto.py.new >/dev/null 2>&1
|
||||
perl -pi -e "s/(K\(\"RC-Space)(.*)(# )(xfce4)/\$3\$1\$2\$3\$4/g" ./xkeysnail-config/kinto.py.new >/dev/null 2>&1
|
||||
xfconf-query --channel xfce4-keyboard-shortcuts --property "/commands/custom/<Primary>space" --create --type string --set "launchy"
|
||||
fi
|
||||
|
||||
if ! [[ $1 == "5" || $1 == "uninstall" || $1 == "Uninstall" ]]; then
|
||||
|
||||
mv ./linux/kinto.py.new ~/.config/kinto/kinto.py
|
||||
mv ./xkeysnail-config/kinto.py.new ~/.config/kinto/kinto.py
|
||||
# if [ "$distro" == "fedora" ];then
|
||||
if [ ! "$sysv" -eq 0 ];then
|
||||
# echo "Using systemd..."
|
||||
sudo rm /etc/systemd/system/xkeysnail.service >/dev/null 2>&1
|
||||
else
|
||||
# echo "Using sysvinit..."
|
||||
echo ""
|
||||
fi
|
||||
sudo rm /etc/systemd/system/xkeysnail.service >/dev/null 2>&1
|
||||
if [ -d /usr/lib/systemd/system ];then
|
||||
xkeypath="/usr/lib/systemd/system/"
|
||||
elif [ -d /lib/systemd/system ];then
|
||||
xkeypath="/lib/systemd/system/"
|
||||
fi
|
||||
xhost +SI:localuser:root
|
||||
git clone -b kinto --depth 10 https://github.com/rbreaves/xkeysnail.git
|
||||
git clone --depth 10 https://github.com/rbreaves/xkeysnail.git
|
||||
cd xkeysnail
|
||||
git pull --depth 10
|
||||
git checkout 51c369084e0045a8410d227bab52411bf84fb65b
|
||||
giturl=$(git ls-remote --get-url)
|
||||
if [ "$giturl" != "https://github.com/rbreaves/xkeysnail.git" ];then
|
||||
echo -e "\nreplacing xkeysnail with fork...\n"
|
||||
cd ..
|
||||
rm -rf ./xkeysnail
|
||||
git clone -b kinto --depth 10 https://github.com/rbreaves/xkeysnail.git
|
||||
git clone --depth 10 https://github.com/rbreaves/xkeysnail.git
|
||||
cd xkeysnail
|
||||
git checkout 51c369084e0045a8410d227bab52411bf84fb65b
|
||||
fi
|
||||
sudo pip3 install --upgrade . --break-system-packages
|
||||
sudo pip3 install --upgrade .
|
||||
cd ..
|
||||
which xkeysnail
|
||||
if [ $? -eq 1 ]; then
|
||||
@@ -575,42 +490,19 @@ if ! [[ $1 == "5" || $1 == "uninstall" || $1 == "Uninstall" ]]; then
|
||||
echo -e "Run 'sudo pip3 install --upgrade .' to debug issue"
|
||||
exit 0
|
||||
fi
|
||||
sed -i "s#{xkeysnail}#`which xkeysnail`#g" ./linux/limitedadmins.new
|
||||
if [[ $distro == 'fedora' ]] || [[ $distro == 'fedoralinux' ]]; then
|
||||
echo "Changing SELinux context"
|
||||
sudo chcon -v --user=$selinuxuser --type=$selinuxtype "$xkeypath"xkeysnail.service
|
||||
fi
|
||||
sudo chown root:root ./linux/limitedadmins.new
|
||||
sed -i "s#{xkeysnail}#`which xkeysnail`#g" ./xkeysnail-config/xkeysnail.service.new
|
||||
sed -i "s#{xkeysnail}#`which xkeysnail`#g" ./xkeysnail-config/limitedadmins.new
|
||||
sudo mv ./xkeysnail-config/xkeysnail.service.new "$xkeypath"xkeysnail.service && echo "Service file added to "$xkeypath"xkeysnail.service"
|
||||
sudo chown root:root ./xkeysnail-config/limitedadmins.new
|
||||
# Add a check here for xkeysnail path resolving
|
||||
sudo mv ./linux/limitedadmins.new /etc/sudoers.d/limitedadmins
|
||||
if [ ! "$sysv" -eq 0 ];then
|
||||
# echo "Using systemd..."
|
||||
sed -i "s#{xkeysnail}#`which xkeysnail`#g" ./linux/xkeysnail.service.new
|
||||
sudo mv ./linux/xkeysnail.service.new "$xkeypath"xkeysnail.service && echo "Service file added to "$xkeypath"xkeysnail.service"
|
||||
|
||||
if [[ $distro == 'fedora' ]] || [[ $distro == 'fedoralinux' ]]; then
|
||||
sudo cp "$xkeypath"xkeysnail.service /etc/systemd/system/xkeysnail.service && echo "Copied service file to system..." || echo "Failed to create copy..."
|
||||
sudo cp "$xkeypath"xkeysnail.service /etc/systemd/system/graphical.target.wants/xkeysnail.service && echo "Copied service file to system for graphical target..." || echo "Failed to create copy for graphical target..."
|
||||
sudo chown -R root:root /etc/systemd/system/xkeysnail.service && echo "Ownership set for root..." || echo "Failed to set ownership..."
|
||||
sudo chown -R root:root /etc/systemd/system/graphical.target.wants/xkeysnail.service && echo "Ownership set for root..." || echo "Failed to set ownership..."
|
||||
sudo chmod 644 /etc/systemd/system/xkeysnail.service && echo "Permissions set to 644..." || echo "Failed to set permissions..."
|
||||
sudo chmod 644 /etc/systemd/system/graphical.target.wants/xkeysnail.service && echo "Permissions set to 644..." || echo "Failed to set permissions..."
|
||||
else
|
||||
sudo chown -R root:root "$xkeypath"xkeysnail.service && echo "Ownership set for root..." || echo "Failed to set ownership..."
|
||||
sudo chmod 644 "$xkeypath"xkeysnail.service && echo "Permissions set to 644..." || echo "Failed to set permissions..."
|
||||
sudo ln -s "$xkeypath"xkeysnail.service /etc/systemd/system/xkeysnail.service && echo "Created soft symlink..." || echo "Failed to create soft symlink..."
|
||||
sudo ln -s "$xkeypath"xkeysnail.service /etc/systemd/system/graphical.target.wants/xkeysnail.service && echo "Created soft symlink for graphical target..." || echo "Failed to create soft symlink for graphical target..."
|
||||
fi
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl disable xkeysnail
|
||||
sudo systemctl stop xkeysnail
|
||||
else
|
||||
# echo "Using sysvinit..."
|
||||
echo ""
|
||||
sudo cp ./linux/kinto-service.sh /etc/init.d/kinto
|
||||
sudo -E /etc/init.d/kinto stop
|
||||
mv /tmp/kinto.log /tmp/kinto.log.bak
|
||||
fi
|
||||
sudo mv ./xkeysnail-config/limitedadmins.new /etc/sudoers.d/limitedadmins
|
||||
sudo chown -R root:root "$xkeypath"xkeysnail.service && echo "Ownership set for root..." || echo "Failed to set ownership..."
|
||||
sudo chmod 644 "$xkeypath"xkeysnail.service && echo "Permissions set to 644..." || echo "Failed to set permissions..."
|
||||
sudo ln -s "$xkeypath"xkeysnail.service /etc/systemd/system/xkeysnail.service && echo "Created soft symlink..." || echo "Failed to create soft symlink..."
|
||||
sudo ln -s "$xkeypath"xkeysnail.service /etc/systemd/system/graphical.target.wants/xkeysnail.service && echo "Created soft symlink for graphical target..." || echo "Failed to create soft symlink for graphical target..."
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl disable xkeysnail
|
||||
sudo systemctl stop xkeysnail
|
||||
# sudo systemctl --state=not-found --all | grep xkeysnail
|
||||
# if [ "$distro" == "fedora" ];then
|
||||
# systemctl enable xkeysnail.service
|
||||
@@ -618,9 +510,8 @@ if ! [[ $1 == "5" || $1 == "uninstall" || $1 == "Uninstall" ]]; then
|
||||
# sudo systemctl enable xkeysnail.service
|
||||
# fi
|
||||
# sudo systemctl restart xkeysnail
|
||||
sudo pkill -f kintotray &
|
||||
# >/dev/null 2>&1
|
||||
if [[ $dename == "kde" ]];then
|
||||
sudo pkill -f kintotray >/dev/null 2>&1
|
||||
if [[ $dename == "gnome" || $dename == "kde" ]];then
|
||||
sed -i "s/systray = true/systray = false/g" ~/.config/kinto/initkb
|
||||
fi
|
||||
nohup python3 ~/.config/kinto/gui/kinto-gui.py >/dev/null 2>&1 &
|
||||
@@ -651,24 +542,6 @@ if ! [[ $1 == "5" || $1 == "uninstall" || $1 == "Uninstall" ]]; then
|
||||
echo -e "~/.config/kinto/gui/kinto-gui.py\n"
|
||||
echo -e "You can then either \e]8;;https://google.com\a\e[1m\e[36mG\033[0;91mo\033[0;93mo\e[1m\e[36mg\e[1m\e[32ml\033[0;91me\e[0m\e]8;;\a what dependencies you may be missing\nor \e]8;;https://github.com/rbreaves/kinto/issues/new\?assignees=rbreaves&labels=bug&template=bug_report.md&title=\aopen an issue ticket.\e]8;;\a\n"
|
||||
|
||||
# echo -e "\033[0;91mAfter the installer completes press Any key to re-apply your overlay (Super key) menu launcher.\e[0m\n"
|
||||
|
||||
# if [[ $dename == 'gnome' || $dename == 'budgie' ]];then
|
||||
# echo "GNOME: gsettings set org.gnome.mutter overlay-key 'super'"
|
||||
# elif [[ $dename == 'xfce' ]];then
|
||||
# echo "XFCE: xfconf-query --channel xfce4-keyboard-shortcuts --property \"/commands/custom/Super_L\" --create --type string --set \"$nlauncher\""
|
||||
# fi
|
||||
|
||||
# read -n 1 -s -r -p ""
|
||||
|
||||
# if [[ $dename == 'gnome' || $dename == 'budgie' ]];then
|
||||
# gsettings set org.gnome.mutter overlay-key 'super'
|
||||
# elif [[ $dename == 'xfce' ]];then
|
||||
# echo -e "\nSetting xfce4 launcher $nlauncher back to Super_L."
|
||||
# xfconf-query --channel xfce4-keyboard-shortcuts --property "/commands/custom/Super_L" --create --type string --set "$nlauncher" && echo "Success."
|
||||
# fi
|
||||
|
||||
|
||||
if [ "$distro" == "manjarolinux" ]; then
|
||||
echo "If you are using Manjaro and see an error about 'GLIBC_2.xx not found' appears then please update your system."
|
||||
echo "sudo pacman -Syu"
|
||||
|