mirror of
https://github.com/rbreaves/kinto.git
synced 2025-08-06 02:48:26 +02:00
Compare commits
38 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
d56db46b67 | ||
![]() |
bfe8d8f039 | ||
![]() |
8ab59cc914 | ||
![]() |
15adc5b96b | ||
![]() |
dd32a6f954 | ||
![]() |
eb96ad08b8 | ||
![]() |
0442bd8b6b | ||
![]() |
5d37e720c7 | ||
![]() |
aa53b7b14d | ||
![]() |
046bee95c3 | ||
![]() |
0c53a7a114 | ||
![]() |
46b8e1ca6e | ||
![]() |
a4f12cbdd8 | ||
![]() |
fe0346ea63 | ||
![]() |
1406e3bea5 | ||
![]() |
e0344eaa72 | ||
![]() |
4eea5c17cc | ||
![]() |
6101213537 | ||
![]() |
c71714e0c2 | ||
![]() |
ef6dc65a20 | ||
![]() |
525aa91cbf | ||
![]() |
b29ec9d936 | ||
![]() |
94595a3324 | ||
![]() |
a9afdac847 | ||
![]() |
39f65c0e2b | ||
![]() |
1aa23c239c | ||
![]() |
b6fb4ba828 | ||
![]() |
9ce8612f54 | ||
![]() |
1419646e9c | ||
![]() |
464ba631cb | ||
![]() |
d709a7de20 | ||
![]() |
80627807f5 | ||
![]() |
cbee0f8f33 | ||
![]() |
f34d9b57f6 | ||
![]() |
969427bf5b | ||
![]() |
adc62fc71b | ||
![]() |
0baef33cf6 | ||
![]() |
0f1f05d379 |
24
README.md
24
README.md
@@ -69,10 +69,12 @@ It also retains some of the most commonly used system level shortcut keys, such
|
|||||||
|
|
||||||
If your OS and macOS have similar functionality on the system level, but only differ by a slight difference of a shortcut command then Kinto likely supports it already. If Kinto doesn't have what you need then you can open up a support ticket and it will be added. You can also fork the project to add the fix and I will merge it via a PR you make.
|
If your OS and macOS have similar functionality on the system level, but only differ by a slight difference of a shortcut command then Kinto likely supports it already. If Kinto doesn't have what you need then you can open up a support ticket and it will be added. You can also fork the project to add the fix and I will merge it via a PR you make.
|
||||||
|
|
||||||
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 (Xkeysnail)](#Shortcut-Creation-Xkeysnail) for Linux.
|
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)
|
## 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%">
|
<img src="https://user-images.githubusercontent.com/10969616/97070698-179c4500-15a0-11eb-8064-c03aa7f4d4a5.png" width="75%">
|
||||||
|
|
||||||
1. clone this repo
|
1. clone this repo
|
||||||
@@ -93,7 +95,12 @@ sudo apt install python3
|
|||||||
./setup.py
|
./setup.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Note: You can actually press Enter to agree to the wizard setup, and to finish it. No mouse is required to complete the setup, every element is properly focused.
|
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
|
To Uninstall Kinto
|
||||||
|
|
||||||
@@ -136,8 +143,6 @@ py setup.py
|
|||||||
- x11
|
- x11
|
||||||
- xkeysnail
|
- xkeysnail
|
||||||
|
|
||||||
On most distros you can confirm Input Methods by navigating to "Language Support" and set "Keyboard input method system:" to IBus for full word-wise support with web browsers.
|
|
||||||
|
|
||||||
### Kinto for Windows 10 Requirements
|
### Kinto for Windows 10 Requirements
|
||||||
|
|
||||||
- [Git for Windows](https://git-scm.com/download/win)
|
- [Git for Windows](https://git-scm.com/download/win)
|
||||||
@@ -150,16 +155,8 @@ Other programs that will be installed when you run ./setup.py
|
|||||||
- Strawberry Perl
|
- 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.
|
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.
|
||||||
|
|
||||||
Users can now hotswap between Apple and Windows based keyboards without having to logoff and back on, and Windows is currently the only implementation with a system tray (but this feature is coming to Budgie, XFCE, Mate, Gnome, and lastly KDE).
|
|
||||||
|
|
||||||
<img src="https://user-images.githubusercontent.com/10969616/84471498-100c7d00-ac4b-11ea-972d-60c1907831ec.png" width="50%">
|
|
||||||
<img src="https://user-images.githubusercontent.com/10969616/84471501-10a51380-ac4b-11ea-9e0e-c19a7ebfad6d.png" width="50%">
|
|
||||||
|
|
||||||
## Shortcut Creation
|
## Shortcut Creation
|
||||||
|
|
||||||
Note: A new project, [Universal Keys](https://github.com/rbreaves/Universal-Keys), has been created that will be updated to contain all current remaps - plus many more. Once that is done, Kinto will be updated to programmatically pull the latest keymaps from simple csv comma delimited files & will build out key remaps from there. This will also allow for more types of remaps within an application category, Sublime Text 3 to VS Code or VS Code to Sublime Text 3, Photoshop to Gimp, Gimp to Photoshop, etc & it will ensure that xkeysnail (linux) & autohotkey (windows) are pulling from the same data set.
|
|
||||||
|
|
||||||
[Linux Shortcut Creation (Xkeysnail)](#Linux-Xkeysnail)
|
[Linux Shortcut Creation (Xkeysnail)](#Linux-Xkeysnail)
|
||||||
|
|
||||||
[Windows Shortcut Creation (Autohotkey)](#Windows-Autohotkey)
|
[Windows Shortcut Creation (Autohotkey)](#Windows-Autohotkey)
|
||||||
@@ -336,9 +333,6 @@ If you continue to have issues then open a ticket and send me the info.
|
|||||||
## Language Support
|
## Language Support
|
||||||
I'd appreciate any help from people with non-US based keyboards, to help ensure that these keymaps and keyswap methods work in all or most languages.
|
I'd appreciate any help from people with non-US based keyboards, to help ensure that these keymaps and keyswap methods work in all or most languages.
|
||||||
|
|
||||||
If you would like to attempt adding additional custom keymaps for other languages then I strongly recommend reading Glen Whitney's post here.
|
|
||||||
https://superuser.com/questions/385748/binding-superc-superv-to-copy-and-paste
|
|
||||||
|
|
||||||
## Related or Useful Resources
|
## Related or Useful Resources
|
||||||
|
|
||||||
[Xkeysnail](https://github.com/mooz/xkeysnail) by mooz
|
[Xkeysnail](https://github.com/mooz/xkeysnail) by mooz
|
||||||
|
7
setup.py
7
setup.py
@@ -121,9 +121,14 @@ if os.path.isdir(homedir + "/.config/kinto") == False:
|
|||||||
os.mkdir(homedir + "/.config/kinto")
|
os.mkdir(homedir + "/.config/kinto")
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
|
|
||||||
|
|
||||||
|
cmdline("git fetch")
|
||||||
|
|
||||||
color_arr = [bcolors.CBEIGE,bcolors.CRED2,bcolors.CGREEN,bcolors.CYELLOW ]
|
color_arr = [bcolors.CBEIGE,bcolors.CRED2,bcolors.CGREEN,bcolors.CYELLOW ]
|
||||||
|
|
||||||
print("\nKinto - Type in Linux like it's a Mac.\n")
|
kintover = cmdline('echo "$(git describe --tag --abbrev=0 | head -n 1)" "build" "$(git rev-parse --short HEAD)"')
|
||||||
|
|
||||||
|
print("\nKinto " + kintover + "Type in Linux like it's a Mac.\n")
|
||||||
|
|
||||||
if args.uninstall:
|
if args.uninstall:
|
||||||
subprocess.check_call(shlex.split("./xkeysnail_service.sh uninstall"))
|
subprocess.check_call(shlex.split("./xkeysnail_service.sh uninstall"))
|
||||||
|
@@ -24,7 +24,7 @@ AHK_NOTIFYICON(wParam, lParam)
|
|||||||
}
|
}
|
||||||
; End Enable Left clicks
|
; End Enable Left clicks
|
||||||
|
|
||||||
; I_Icon = %A_ScriptDir%\assets\kinto-white.ico ; MacModifiers
|
; I_Icon = %A_ScriptDir%\assets\kinto-white-invert.ico ; MacModifiers
|
||||||
; IfExist, %I_Icon% ; MacModifiers
|
; IfExist, %I_Icon% ; MacModifiers
|
||||||
; Menu, Tray, Icon, %I_Icon%,, 1 ; MacModifiers
|
; Menu, Tray, Icon, %I_Icon%,, 1 ; MacModifiers
|
||||||
; Menu, Tray, Tip, Mac - Kinto ; MacModifiers
|
; Menu, Tray, Tip, Mac - Kinto ; MacModifiers
|
||||||
@@ -97,8 +97,9 @@ Send {LAlt down}{tab}{LAlt up}
|
|||||||
tray_suspend(){
|
tray_suspend(){
|
||||||
suspend toggle
|
suspend toggle
|
||||||
if (a_isSuspended = 1){
|
if (a_isSuspended = 1){
|
||||||
|
Gosub ReleaseModifiers
|
||||||
menu, tray, check , Suspend Kinto
|
menu, tray, check , Suspend Kinto
|
||||||
I_Icon = %A_ScriptDir%\assets\kinto-color-invert.ico
|
I_Icon = %A_ScriptDir%\assets\kinto-white.ico
|
||||||
Menu, Tray, Icon, %I_Icon%,, 1
|
Menu, Tray, Icon, %I_Icon%,, 1
|
||||||
Menu, Tray, Tip, Suspended - Kinto
|
Menu, Tray, Tip, Suspended - Kinto
|
||||||
IfWinExist, detectUSB.ahk
|
IfWinExist, detectUSB.ahk
|
||||||
@@ -106,7 +107,7 @@ tray_suspend(){
|
|||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
menu, tray, unCheck, Suspend Kinto
|
menu, tray, unCheck, Suspend Kinto
|
||||||
; I_Icon = %A_ScriptDir%\assets\kinto-white.ico ; MacModifiers
|
; I_Icon = %A_ScriptDir%\assets\kinto-white-invert.ico ; MacModifiers
|
||||||
; I_Icon = %A_ScriptDir%\assets\kinto-white-invert.ico ; WinModifiers/CB/IBM
|
; I_Icon = %A_ScriptDir%\assets\kinto-white-invert.ico ; WinModifiers/CB/IBM
|
||||||
Menu, Tray, Icon, %I_Icon%,,1
|
Menu, Tray, Icon, %I_Icon%,,1
|
||||||
Run, %A_ScriptDir%\detectUSB.ahk
|
Run, %A_ScriptDir%\detectUSB.ahk
|
||||||
@@ -116,6 +117,7 @@ tray_suspend(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
Exit() {
|
Exit() {
|
||||||
|
Gosub ReleaseModifiers
|
||||||
IfWinExist, detectUSB.ahk
|
IfWinExist, detectUSB.ahk
|
||||||
WinClose
|
WinClose
|
||||||
|
|
||||||
@@ -132,8 +134,10 @@ GroupAdd, terminals, ahk_exe WindowsTerminal.exe
|
|||||||
GroupAdd, terminals, ahk_exe Hyper.exe
|
GroupAdd, terminals, ahk_exe Hyper.exe
|
||||||
GroupAdd, terminals, ahk_exe mintty.exe
|
GroupAdd, terminals, ahk_exe mintty.exe
|
||||||
GroupAdd, terminals, ahk_exe Cmd.exe
|
GroupAdd, terminals, ahk_exe Cmd.exe
|
||||||
|
GroupAdd, terminals, ahk_exe box.exe
|
||||||
GroupAdd, terminals, ahk_exe Terminus.exe
|
GroupAdd, terminals, ahk_exe Terminus.exe
|
||||||
GroupAdd, terminals, Fluent Terminal ahk_class ApplicationFrameWindow
|
GroupAdd, terminals, Fluent Terminal ahk_class ApplicationFrameWindow
|
||||||
|
GroupAdd, terminals, ahk_class Console_2_Main
|
||||||
|
|
||||||
GroupAdd, posix, ahk_exe ubuntu.exe
|
GroupAdd, posix, ahk_exe ubuntu.exe
|
||||||
GroupAdd, posix, ahk_exe ConEmu.exe
|
GroupAdd, posix, ahk_exe ConEmu.exe
|
||||||
@@ -142,10 +146,11 @@ GroupAdd, posix, ahk_exe Hyper.exe
|
|||||||
GroupAdd, posix, ahk_exe mintty.exe
|
GroupAdd, posix, ahk_exe mintty.exe
|
||||||
GroupAdd, posix, ahk_exe Terminus.exe
|
GroupAdd, posix, ahk_exe Terminus.exe
|
||||||
GroupAdd, posix, Fluent Terminal ahk_class ApplicationFrameWindow
|
GroupAdd, posix, Fluent Terminal ahk_class ApplicationFrameWindow
|
||||||
|
GroupAdd, posix, ahk_class Console_2_Main
|
||||||
|
GroupAdd, posix, ahk_exe WindowsTerminal.exe
|
||||||
|
|
||||||
GroupAdd, ConEmu, ahk_exe ConEmu.exe
|
GroupAdd, ConEmu, ahk_exe ConEmu.exe
|
||||||
GroupAdd, ConEmu, ahk_exe ConEmu64.exe
|
GroupAdd, ConEmu, ahk_exe ConEmu64.exe
|
||||||
GroupAdd, ConEmu, ahk_exe WindowsTerminal.exe
|
|
||||||
|
|
||||||
GroupAdd, ExcPaste, ahk_exe Cmd.exe
|
GroupAdd, ExcPaste, ahk_exe Cmd.exe
|
||||||
GroupAdd, ExcPaste, ahk_exe mintty.exe
|
GroupAdd, ExcPaste, ahk_exe mintty.exe
|
||||||
@@ -235,11 +240,13 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
|||||||
|
|
||||||
; $LAlt::LCtrl ; CB/IBM
|
; $LAlt::LCtrl ; CB/IBM
|
||||||
; $RAlt::RCtrl ; CB/IBM
|
; $RAlt::RCtrl ; CB/IBM
|
||||||
|
; $RCtrl::RAlt ; CB/IBM
|
||||||
; $CapsLock::LWin ; IBM
|
; $CapsLock::LWin ; IBM
|
||||||
; $LCtrl::LAlt ; CB/IBM
|
; $LCtrl::LAlt ; CB/IBM
|
||||||
|
|
||||||
; $LAlt::LCtrl ; WinModifiers
|
; $LAlt::LCtrl ; WinModifiers
|
||||||
; $RAlt::RCtrl ; WinModifiers
|
; $RAlt::RCtrl ; WinModifiers
|
||||||
|
; $RCtrl::RAlt ; WinModifiers
|
||||||
; $LWin::LAlt ; WinModifiers
|
; $LWin::LAlt ; WinModifiers
|
||||||
; $LCtrl::LWin ; WinModifiers
|
; $LCtrl::LWin ; WinModifiers
|
||||||
|
|
||||||
@@ -324,6 +331,16 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
|||||||
!Right::Send ^{Right}
|
!Right::Send ^{Right}
|
||||||
!+Right::Send ^+{Right}
|
!+Right::Send ^+{Right}
|
||||||
|
|
||||||
|
; emacs style
|
||||||
|
#n::Send {Down}
|
||||||
|
#p::Send {Up}
|
||||||
|
#f::Send {Right}
|
||||||
|
#b::Send {Left}
|
||||||
|
#a::Send {Home}
|
||||||
|
#e::Send {End}
|
||||||
|
#d::Send {Delete}
|
||||||
|
#k::Send +{End}{Backspace}
|
||||||
|
|
||||||
; Cmd+Space Alternative
|
; Cmd+Space Alternative
|
||||||
$^Space::Send ^{Esc}
|
$^Space::Send ^{Esc}
|
||||||
|
|
||||||
@@ -521,13 +538,17 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
|||||||
|
|
||||||
; Copy
|
; Copy
|
||||||
^c::
|
^c::
|
||||||
If WinActive("ahk_exe cmd.exe"){
|
If WinActive("ahk_exe cmd.exe") OR WinActive("ahk_exe box.exe"){
|
||||||
Send {Enter}
|
Send {Enter}
|
||||||
}
|
}
|
||||||
else if WinActive("ahk_exe mintty.exe"){
|
else if WinActive("ahk_exe mintty.exe"){
|
||||||
SetKeyDelay -1
|
SetKeyDelay -1
|
||||||
Send {Blind}{Insert}
|
Send {Blind}{Insert}
|
||||||
}
|
}
|
||||||
|
; else if WinActive("ahk_exe WindowsTerminal.exe"){ ; WinTerm
|
||||||
|
; SetKeyDelay -1 ; WinTerm
|
||||||
|
; Send {Blind}{F13} ; WinTerm
|
||||||
|
; } ; WinTerm
|
||||||
else{
|
else{
|
||||||
SetKeyDelay -1
|
SetKeyDelay -1
|
||||||
Send {Blind}{LShift down}{c DownTemp}
|
Send {Blind}{LShift down}{c DownTemp}
|
||||||
@@ -535,7 +556,7 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
|||||||
return
|
return
|
||||||
|
|
||||||
^c up::
|
^c up::
|
||||||
If not WinActive("ahk_group cmd.exe"){
|
If not WinActive("ahk_group cmd.exe") OR WinActive("ahk_exe box.exe"){
|
||||||
SetKeyDelay -1
|
SetKeyDelay -1
|
||||||
Send {Blind}{c Up}{LShift Up}
|
Send {Blind}{c Up}{LShift Up}
|
||||||
}
|
}
|
||||||
@@ -545,6 +566,12 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
|||||||
; $#c::Send {Ctrl down}c{Ctrl up} ; Default
|
; $#c::Send {Ctrl down}c{Ctrl up} ; Default
|
||||||
; $!c::Send {Ctrl down}c{Ctrl up} ; CB/IBM
|
; $!c::Send {Ctrl down}c{Ctrl up} ; CB/IBM
|
||||||
|
|
||||||
|
; Windows Terminal
|
||||||
|
; Ctrl+Shift+C should do nothing
|
||||||
|
If WinActive("ahk_exe WindowsTerminal.exe"){
|
||||||
|
$#+c::return
|
||||||
|
}
|
||||||
|
|
||||||
; Paste
|
; Paste
|
||||||
$^v::
|
$^v::
|
||||||
If WinActive("ahk_exe mintty.exe"){
|
If WinActive("ahk_exe mintty.exe"){
|
||||||
@@ -553,6 +580,9 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
|||||||
else if WinActive("ahk_group posix"){
|
else if WinActive("ahk_group posix"){
|
||||||
Send {Blind}{Shift down}v{Shift up}
|
Send {Blind}{Shift down}v{Shift up}
|
||||||
}
|
}
|
||||||
|
else if WinActive("ahk_exe box.exe"){
|
||||||
|
SendEvent {RButton}
|
||||||
|
}
|
||||||
else{
|
else{
|
||||||
Send {Blind}v
|
Send {Blind}v
|
||||||
}
|
}
|
||||||
@@ -562,17 +592,21 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
|||||||
#IfWinActive ahk_group posix
|
#IfWinActive ahk_group posix
|
||||||
; Open/Close Tab for those that support it
|
; Open/Close Tab for those that support it
|
||||||
$^t::
|
$^t::
|
||||||
If not WinActive("ahk_group ConEmu"){
|
If not WinActive("ahk_group ConEmu") AND not WinActive("ahk_class Console_2_Main"){
|
||||||
Send {LCtrl down}{LShift down}t{LCtrl Up}{LShift Up}
|
Send {Blind}{LShift down}t{LShift Up}
|
||||||
|
}
|
||||||
|
else if WinActive("ahk_class Console_2_Main"){
|
||||||
|
Send {Blind}{F1}{LShift Up}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
Send ^t
|
Send {Blind}t
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
$^w::
|
$^w::
|
||||||
If not WinActive("ahk_group ConEmu"){
|
If not WinActive("ahk_group ConEmu"){
|
||||||
Send {LCtrl down}{LShift down}w{LCtrl Up}{LShift Up}
|
Send {Blind}{LShift down}w{LShift Up}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
Send ^w
|
Send ^w
|
||||||
@@ -614,3 +648,14 @@ GroupAdd, intellij, ahk_exe idea64.exe
|
|||||||
!v::Send {LCtrl down}v{LCtrl Up} ; CB/IBM
|
!v::Send {LCtrl down}v{LCtrl Up} ; CB/IBM
|
||||||
#If
|
#If
|
||||||
#If
|
#If
|
||||||
|
|
||||||
|
ReleaseModifiers:
|
||||||
|
Send {RCtrl up}
|
||||||
|
Send {LCtrl up}
|
||||||
|
Send {RAlt up}
|
||||||
|
Send {LAlt up}
|
||||||
|
Send {RWin up}
|
||||||
|
Send {LWin up}
|
||||||
|
Send {RShift up}
|
||||||
|
Send {LShift up}
|
||||||
|
return
|
@@ -5,6 +5,7 @@ gi.require_version('Gtk', '3.0')
|
|||||||
gi.require_version('Vte', '2.91')
|
gi.require_version('Vte', '2.91')
|
||||||
from gi.repository import Gtk,Gdk,GdkPixbuf
|
from gi.repository import Gtk,Gdk,GdkPixbuf
|
||||||
from gi.repository import Vte,GLib
|
from gi.repository import Vte,GLib
|
||||||
|
from shutil import which
|
||||||
from subprocess import Popen,PIPE,CalledProcessError
|
from subprocess import Popen,PIPE,CalledProcessError
|
||||||
from distutils.util import strtobool
|
from distutils.util import strtobool
|
||||||
|
|
||||||
@@ -43,6 +44,8 @@ class MyWindow(Gtk.Window):
|
|||||||
bgerror = Gtk.Image()
|
bgerror = Gtk.Image()
|
||||||
bguninstall = Gtk.Image()
|
bguninstall = Gtk.Image()
|
||||||
last_onward = Gtk.Button()
|
last_onward = Gtk.Button()
|
||||||
|
first_onward = Gtk.ToggleButton()
|
||||||
|
page = 1
|
||||||
|
|
||||||
label = Gtk.Label()
|
label = Gtk.Label()
|
||||||
label.set_alignment(1, 0)
|
label.set_alignment(1, 0)
|
||||||
@@ -78,6 +81,7 @@ class MyWindow(Gtk.Window):
|
|||||||
|
|
||||||
homedir = os.path.expanduser("~")
|
homedir = os.path.expanduser("~")
|
||||||
self.kconfig = homedir+"/.config/kinto/kinto.py"
|
self.kconfig = homedir+"/.config/kinto/kinto.py"
|
||||||
|
autostart_bool = False
|
||||||
|
|
||||||
path = os.environ['HOME']+'/.config/kinto/kinto-color.svg'
|
path = os.environ['HOME']+'/.config/kinto/kinto-color.svg'
|
||||||
width = -1
|
width = -1
|
||||||
@@ -397,6 +401,7 @@ class MyWindow(Gtk.Window):
|
|||||||
self.setupwin.set_position(Gtk.WindowPosition.CENTER)
|
self.setupwin.set_position(Gtk.WindowPosition.CENTER)
|
||||||
|
|
||||||
self.setupwin.add(self.overlay)
|
self.setupwin.add(self.overlay)
|
||||||
|
self.setupwin.signal_id = 0
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
@@ -914,10 +919,14 @@ class MyWindow(Gtk.Window):
|
|||||||
try:
|
try:
|
||||||
if os.path.exists('/opt/sublime_text/sublime_text'):
|
if os.path.exists('/opt/sublime_text/sublime_text'):
|
||||||
Popen(['/opt/sublime_text/sublime_text',os.environ['HOME']+'/.config/kinto/kinto.py'])
|
Popen(['/opt/sublime_text/sublime_text',os.environ['HOME']+'/.config/kinto/kinto.py'])
|
||||||
elif which(gedit) is not None:
|
elif which('gedit') is not None:
|
||||||
Popen(['gedit',os.environ['HOME']+'/.config/kinto/kinto.py'])
|
Popen(['gedit',os.environ['HOME']+'/.config/kinto/kinto.py'])
|
||||||
elif which(mousepad) is not None:
|
elif which('mousepad') is not None:
|
||||||
Popen(['mousepad',os.environ['HOME']+'/.config/kinto/kinto.py'])
|
Popen(['mousepad',os.environ['HOME']+'/.config/kinto/kinto.py'])
|
||||||
|
elif which('kate') is not None:
|
||||||
|
Popen(['kate',os.environ['HOME']+'/.config/kinto/kinto.py'])
|
||||||
|
elif which('kwrite') is not None:
|
||||||
|
Popen(['kwrite',os.environ['HOME']+'/.config/kinto/kinto.py'])
|
||||||
|
|
||||||
except CalledProcessError: # Notify user about error on running restart commands.
|
except CalledProcessError: # Notify user about error on running restart commands.
|
||||||
Popen(['notify-send','Kinto: Error could not open config file!'])
|
Popen(['notify-send','Kinto: Error could not open config file!'])
|
||||||
@@ -926,10 +935,14 @@ class MyWindow(Gtk.Window):
|
|||||||
try:
|
try:
|
||||||
if os.path.exists('/opt/sublime_text/sublime_text'):
|
if os.path.exists('/opt/sublime_text/sublime_text'):
|
||||||
Popen(['/opt/sublime_text/sublime_text','/lib/systemd/system/xkeysnail.service'])
|
Popen(['/opt/sublime_text/sublime_text','/lib/systemd/system/xkeysnail.service'])
|
||||||
elif which(gedit) is not None:
|
elif which('gedit') is not None:
|
||||||
Popen(['gedit','/lib/systemd/system/xkeysnail.service'])
|
Popen(['gedit','/lib/systemd/system/xkeysnail.service'])
|
||||||
elif which(mousepad) is not None:
|
elif which('mousepad') is not None:
|
||||||
Popen(['mousepad','/lib/systemd/system/xkeysnail.service'])
|
Popen(['mousepad','/lib/systemd/system/xkeysnail.service'])
|
||||||
|
elif which('kate') is not None:
|
||||||
|
Popen(['kate','/lib/systemd/system/xkeysnail.service'])
|
||||||
|
elif which('kwrite') is not None:
|
||||||
|
Popen(['kwrite','/lib/systemd/system/xkeysnail.service'])
|
||||||
|
|
||||||
except CalledProcessError: # Notify user about error on running restart commands.
|
except CalledProcessError: # Notify user about error on running restart commands.
|
||||||
Popen(['notify-send','Kinto: Error could not open config file!'])
|
Popen(['notify-send','Kinto: Error could not open config file!'])
|
||||||
@@ -937,12 +950,16 @@ class MyWindow(Gtk.Window):
|
|||||||
def setSysKB(self,button):
|
def setSysKB(self,button):
|
||||||
if self.ostype == "XFCE":
|
if self.ostype == "XFCE":
|
||||||
Popen(['xfce4-keyboard-settings'])
|
Popen(['xfce4-keyboard-settings'])
|
||||||
|
elif self.ostype == "KDE":
|
||||||
|
self.queryConfig('systemsettings >/dev/null 2>&1 || systemsettings5 >/dev/null 2>&1')
|
||||||
else:
|
else:
|
||||||
Popen(['gnome-control-center','keyboard'])
|
Popen(['gnome-control-center','keyboard'])
|
||||||
|
|
||||||
def setRegion(self,button):
|
def setRegion(self,button):
|
||||||
if self.ostype == "XFCE":
|
if self.ostype == "XFCE":
|
||||||
Popen(['gnome-language-selector'])
|
Popen(['gnome-language-selector'])
|
||||||
|
elif self.ostype == "KDE":
|
||||||
|
self.queryConfig('kcmshell4 kcm_translations >/dev/null 2>&1 || kcmshell5 kcm_translations >/dev/null 2>&1')
|
||||||
else:
|
else:
|
||||||
Popen(['gnome-control-center','region'])
|
Popen(['gnome-control-center','region'])
|
||||||
|
|
||||||
@@ -987,55 +1004,63 @@ class MyWindow(Gtk.Window):
|
|||||||
self.label.set_markup(" " + status + " ")
|
self.label.set_markup(" " + status + " ")
|
||||||
return self.kinto_status.poll() is None
|
return self.kinto_status.poll() is None
|
||||||
|
|
||||||
def key_press_event(self, widget, event, page):
|
def key_press_event(self, widget, event):
|
||||||
global openWin
|
global openWin
|
||||||
trigger = "None"
|
trigger = "None"
|
||||||
keyname = Gdk.keyval_name(event.keyval)
|
keyname = Gdk.keyval_name(event.keyval)
|
||||||
current = self.second_page
|
current = self.second_page
|
||||||
bg = self.bgsuccess4
|
bg = self.bgsuccess4
|
||||||
onward = self.success_page
|
onward = self.success_page
|
||||||
|
print("page value: "+str(self.page))
|
||||||
|
|
||||||
if page == 1 and "Control" in keyname:
|
if self.page == 1 and "Control" in keyname and openWin == False:
|
||||||
print("IBM or Chromebook")
|
print("IBM or Chromebook")
|
||||||
print("Continue to page 2")
|
print("Continue to page 2")
|
||||||
bg = self.bgcaps
|
bg = self.bgcaps
|
||||||
onward = self.caps_page
|
onward = self.caps_page
|
||||||
trigger = "Half"
|
trigger = "Half"
|
||||||
elif page == 2 and "Caps_Lock" in keyname and event.state & Gdk.ModifierType.LOCK_MASK:
|
self.page += 1
|
||||||
|
elif self.page == 2 and "Caps_Lock" in keyname and event.state & Gdk.ModifierType.LOCK_MASK:
|
||||||
print("Set IBM Keyboard")
|
print("Set IBM Keyboard")
|
||||||
current = self.caps_page
|
current = self.caps_page
|
||||||
self.options["kbtype"] = "ibm"
|
self.options["kbtype"] = "ibm"
|
||||||
trigger = "Done"
|
trigger = "Done"
|
||||||
elif page == 2 and "Super" in keyname:
|
elif self.page == 2 and "Super" in keyname:
|
||||||
print("Set Chromebook Keyboard")
|
print("Set Chromebook Keyboard")
|
||||||
current = self.caps_page
|
current = self.caps_page
|
||||||
self.options["kbtype"] = "cbk"
|
self.options["kbtype"] = "cbk"
|
||||||
trigger = "Done"
|
trigger = "Done"
|
||||||
elif page == 1 and "Alt" in keyname:
|
elif self.page == 1 and "Alt" in keyname:
|
||||||
print("Set Mac Keyboard")
|
print("Set Mac Keyboard")
|
||||||
self.options["kbtype"] = "mac"
|
self.options["kbtype"] = "mac"
|
||||||
trigger = "Done"
|
trigger = "Done"
|
||||||
elif page == 1 and "Super" in keyname:
|
elif self.page == 1 and "Super" in keyname:
|
||||||
print("Set Win Keyboard")
|
print("Set Win Keyboard")
|
||||||
self.options["kbtype"] = "win"
|
self.options["kbtype"] = "win"
|
||||||
trigger = "Done"
|
trigger = "Done"
|
||||||
|
|
||||||
if trigger == "Half" or trigger == "Done":
|
if trigger == "Half" or trigger == "Done" and openWin == False:
|
||||||
for grandkid in self.overlay.get_children():
|
for grandkid in self.overlay.get_children():
|
||||||
self.overlay.remove(grandkid)
|
self.overlay.remove(grandkid)
|
||||||
self.overlay.add(bg)
|
self.overlay.add(bg)
|
||||||
self.overlay.add_overlay(self.container)
|
self.overlay.add_overlay(self.container)
|
||||||
self.container.add(onward)
|
self.container.add(onward)
|
||||||
self.container.remove(current)
|
self.container.remove(current)
|
||||||
self.setupwin.disconnect(self.setupwin.signal_id)
|
# self.setupwin.disconnect(self.setupwin.signal_id)
|
||||||
if trigger == "Half":
|
if trigger == "Half" and openWin == False:
|
||||||
self.setupwin.signal_id = self.setupwin.connect("key_press_event", self.key_press_event,2)
|
# print("reset key_press_event")
|
||||||
|
# self.setupwin.signal_id = self.setupwin.connect("key_press_event", self.key_press_event)
|
||||||
self.setupwin.show_all()
|
self.setupwin.show_all()
|
||||||
elif trigger == "Done":
|
elif trigger == "Done" and openWin == False:
|
||||||
|
print("in Done")
|
||||||
self.setKinto()
|
self.setKinto()
|
||||||
self.setupwin.show_all()
|
self.setupwin.show_all()
|
||||||
openWin = True
|
openWin = True
|
||||||
self.last_onward.grab_focus()
|
self.last_onward.grab_focus()
|
||||||
|
# print(self.setupwin.signal_id)
|
||||||
|
self.setupwin.disconnect(self.setupwin.signal_id)
|
||||||
|
# print(self.setupwin.signal_id)
|
||||||
|
print("key press event is on")
|
||||||
|
|
||||||
def InputToTerm(self,cmd):
|
def InputToTerm(self,cmd):
|
||||||
# Not clearly known which VTE versions
|
# Not clearly known which VTE versions
|
||||||
@@ -1144,15 +1169,22 @@ class FirstPage(Gtk.Box):
|
|||||||
scroller.add(vbox)
|
scroller.add(vbox)
|
||||||
|
|
||||||
hbox = Gtk.HBox()
|
hbox = Gtk.HBox()
|
||||||
previous = Gtk.Button("Decline")
|
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.connect("clicked", self.goback)
|
||||||
previous.set_margin_right(245)
|
previous.set_margin_right(245)
|
||||||
hbox.add(previous)
|
hbox.add(previous)
|
||||||
|
|
||||||
onward = Gtk.Button("Agree")
|
self.__parent_window.first_onward.set_label("")
|
||||||
onward.connect("clicked", self.forward)
|
for child in self.__parent_window.first_onward.get_children():
|
||||||
|
child.set_label("<b>Agree</b>")
|
||||||
|
child.set_use_markup(True)
|
||||||
|
self.__parent_window.first_onward.set_active(True)
|
||||||
|
self.__parent_window.first_onward.connect("clicked", self.forward)
|
||||||
|
|
||||||
hbox.add(onward)
|
hbox.add(self.__parent_window.first_onward)
|
||||||
hbox.set_hexpand(False)
|
hbox.set_hexpand(False)
|
||||||
hbox.set_vexpand(False)
|
hbox.set_vexpand(False)
|
||||||
hbox.set_margin_bottom(6)
|
hbox.set_margin_bottom(6)
|
||||||
@@ -1170,19 +1202,22 @@ class FirstPage(Gtk.Box):
|
|||||||
self.grid.add(vbox_container)
|
self.grid.add(vbox_container)
|
||||||
self.grid.attach_next_to(hbox, vbox_container, Gtk.PositionType.BOTTOM, 2, 1)
|
self.grid.attach_next_to(hbox, vbox_container, Gtk.PositionType.BOTTOM, 2, 1)
|
||||||
self.add(self.grid)
|
self.add(self.grid)
|
||||||
onward.grab_focus()
|
self.__parent_window.first_onward.grab_focus()
|
||||||
|
|
||||||
def goback(self, *args):
|
def goback(self, *args):
|
||||||
Gtk.main_quit()
|
Gtk.main_quit()
|
||||||
self.hide()
|
self.hide()
|
||||||
|
|
||||||
def forward(self, button):
|
def forward(self, button):
|
||||||
|
self.__parent_window.first_onward.set_active(True)
|
||||||
for grandkid in self.__parent_window.overlay.get_children():
|
for grandkid in self.__parent_window.overlay.get_children():
|
||||||
self.__parent_window.overlay.remove(grandkid)
|
self.__parent_window.overlay.remove(grandkid)
|
||||||
self.__parent_window.overlay.add(self.__parent_window.bgspace)
|
self.__parent_window.overlay.add(self.__parent_window.bgspace)
|
||||||
self.__parent_window.overlay.add_overlay(self.__parent_window.container)
|
self.__parent_window.overlay.add_overlay(self.__parent_window.container)
|
||||||
self.__parent_window.container.add(self.__parent_window.second_page)
|
self.__parent_window.container.add(self.__parent_window.second_page)
|
||||||
self.__parent_window.setupwin.signal_id = self.__parent_window.setupwin.connect("key_press_event", self.__parent_window.key_press_event,1)
|
# print(self.__parent_window.setupwin.signal_id)
|
||||||
|
self.__parent_window.setupwin.signal_id = self.__parent_window.setupwin.connect("key_press_event", self.__parent_window.key_press_event)
|
||||||
|
# print(self.__parent_window.setupwin.signal_id)
|
||||||
self.__parent_window.container.remove(self.__parent_window.first_page)
|
self.__parent_window.container.remove(self.__parent_window.first_page)
|
||||||
self.__parent_window.setupwin.show_all()
|
self.__parent_window.setupwin.show_all()
|
||||||
self.hide()
|
self.hide()
|
||||||
@@ -1199,14 +1234,18 @@ class SecondPage(Gtk.Box):
|
|||||||
scroller.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.ALWAYS)
|
scroller.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.ALWAYS)
|
||||||
|
|
||||||
label_start = Gtk.Label()
|
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.')
|
|
||||||
|
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_alignment(0,0)
|
label_start.set_alignment(0,0)
|
||||||
label_start.set_line_wrap(True)
|
label_start.set_line_wrap(True)
|
||||||
vbox.add(label_start)
|
vbox.add(label_start)
|
||||||
scroller.add(vbox)
|
scroller.add(vbox)
|
||||||
|
|
||||||
hbox = Gtk.HBox()
|
hbox = Gtk.HBox()
|
||||||
previous = Gtk.Button("Go Back")
|
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.connect("clicked", self.goback)
|
||||||
previous.set_margin_right(315)
|
previous.set_margin_right(315)
|
||||||
hbox.add(previous)
|
hbox.add(previous)
|
||||||
@@ -1242,29 +1281,31 @@ class SecondPage(Gtk.Box):
|
|||||||
self.__parent_window.container.remove(self.__parent_window.second_page)
|
self.__parent_window.container.remove(self.__parent_window.second_page)
|
||||||
self.__parent_window.setupwin.disconnect(self.__parent_window.setupwin.signal_id)
|
self.__parent_window.setupwin.disconnect(self.__parent_window.setupwin.signal_id)
|
||||||
self.__parent_window.setupwin.show_all()
|
self.__parent_window.setupwin.show_all()
|
||||||
|
self.__parent_window.first_onward.grab_focus()
|
||||||
self.hide()
|
self.hide()
|
||||||
|
|
||||||
def capsforward(self, *args):
|
# def capsforward(self, *args):
|
||||||
for grandkid in self.__parent_window.overlay.get_children():
|
# for grandkid in self.__parent_window.overlay.get_children():
|
||||||
self.__parent_window.overlay.remove(grandkid)
|
# self.__parent_window.overlay.remove(grandkid)
|
||||||
self.__parent_window.overlay.add(self.__parent_window.bgcaps)
|
# self.__parent_window.overlay.add(self.__parent_window.bgcaps)
|
||||||
self.__parent_window.overlay.add_overlay(self.__parent_window.container)
|
# self.__parent_window.overlay.add_overlay(self.__parent_window.container)
|
||||||
self.__parent_window.container.add(self.__parent_window.caps_page)
|
# self.__parent_window.container.add(self.__parent_window.caps_page)
|
||||||
self.__parent_window.container.remove(self.__parent_window.second_page)
|
# self.__parent_window.container.remove(self.__parent_window.second_page)
|
||||||
self.__parent_window.setupwin.signal_id = self.__parent_window.setupwin.connect("key_press_event", self.__parent_window.key_press_event,2)
|
# self.__parent_window.setupwin.disconnect(self.__parent_window.setupwin.signal_id)
|
||||||
self.__parent_window.setupwin.show_all()
|
# self.__parent_window.setupwin.signal_id = self.__parent_window.setupwin.connect("key_press_event", self.__parent_window.key_press_event,2)
|
||||||
self.hide()
|
# self.__parent_window.setupwin.show_all()
|
||||||
|
# self.hide()
|
||||||
|
|
||||||
def forward(self, *args):
|
# def forward(self, *args):
|
||||||
for grandkid in self.__parent_window.overlay.get_children():
|
# for grandkid in self.__parent_window.overlay.get_children():
|
||||||
self.__parent_window.overlay.remove(grandkid)
|
# self.__parent_window.overlay.remove(grandkid)
|
||||||
self.__parent_window.overlay.add(self.__parent_window.bgsuccess4)
|
# self.__parent_window.overlay.add(self.__parent_window.bgsuccess4)
|
||||||
self.__parent_window.overlay.add_overlay(self.__parent_window.container)
|
# self.__parent_window.overlay.add_overlay(self.__parent_window.container)
|
||||||
self.__parent_window.container.add(self.__parent_window.success_page)
|
# self.__parent_window.container.add(self.__parent_window.success_page)
|
||||||
self.__parent_window.container.remove(self.__parent_window.second_page)
|
# self.__parent_window.container.remove(self.__parent_window.second_page)
|
||||||
self.__parent_window.setupwin.disconnect(self.__parent_window.setupwin.signal_id)
|
# self.__parent_window.setupwin.disconnect(self.__parent_window.setupwin.signal_id)
|
||||||
self.__parent_window.setupwin.show_all()
|
# self.__parent_window.setupwin.show_all()
|
||||||
self.hide()
|
# self.hide()
|
||||||
|
|
||||||
class CapsPage(Gtk.Box):
|
class CapsPage(Gtk.Box):
|
||||||
def __init__(self, parent_window):
|
def __init__(self, parent_window):
|
||||||
@@ -1285,7 +1326,10 @@ class CapsPage(Gtk.Box):
|
|||||||
scroller.add(vbox)
|
scroller.add(vbox)
|
||||||
|
|
||||||
hbox = Gtk.HBox()
|
hbox = Gtk.HBox()
|
||||||
previous = Gtk.Button("Go Back")
|
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.connect("clicked", self.goback)
|
||||||
previous.set_margin_right(315)
|
previous.set_margin_right(315)
|
||||||
hbox.add(previous)
|
hbox.add(previous)
|
||||||
@@ -1318,37 +1362,69 @@ class CapsPage(Gtk.Box):
|
|||||||
self.__parent_window.overlay.add(self.__parent_window.bgspace)
|
self.__parent_window.overlay.add(self.__parent_window.bgspace)
|
||||||
self.__parent_window.overlay.add_overlay(self.__parent_window.container)
|
self.__parent_window.overlay.add_overlay(self.__parent_window.container)
|
||||||
self.__parent_window.container.add(self.__parent_window.second_page)
|
self.__parent_window.container.add(self.__parent_window.second_page)
|
||||||
self.__parent_window.setupwin.disconnect(self.__parent_window.setupwin.signal_id)
|
self.__parent_window.page = 1
|
||||||
self.__parent_window.setupwin.signal_id = self.__parent_window.setupwin.connect("key_press_event", self.__parent_window.key_press_event,1)
|
# self.__parent_window.setupwin.disconnect(self.__parent_window.setupwin.signal_id)
|
||||||
|
# self.__parent_window.setupwin.signal_id = self.__parent_window.setupwin.connect("key_press_event", self.__parent_window.key_press_event)
|
||||||
self.__parent_window.container.remove(self.__parent_window.caps_page)
|
self.__parent_window.container.remove(self.__parent_window.caps_page)
|
||||||
self.__parent_window.setupwin.show_all()
|
self.__parent_window.setupwin.show_all()
|
||||||
self.hide()
|
self.hide()
|
||||||
|
|
||||||
def forward(self, *args):
|
# def forward(self, *args):
|
||||||
for grandkid in self.__parent_window.overlay.get_children():
|
# for grandkid in self.__parent_window.overlay.get_children():
|
||||||
self.__parent_window.overlay.remove(grandkid)
|
# self.__parent_window.overlay.remove(grandkid)
|
||||||
self.__parent_window.overlay.add(self.__parent_window.bgsuccess4)
|
# self.__parent_window.overlay.add(self.__parent_window.bgsuccess4)
|
||||||
self.__parent_window.overlay.add_overlay(self.__parent_window.container)
|
# self.__parent_window.overlay.add_overlay(self.__parent_window.container)
|
||||||
self.__parent_window.container.add(self.__parent_window.success_page)
|
# self.__parent_window.container.add(self.__parent_window.success_page)
|
||||||
self.__parent_window.container.remove(self.__parent_window.caps_page)
|
# self.__parent_window.container.remove(self.__parent_window.caps_page)
|
||||||
self.__parent_window.setupwin.disconnect(self.__parent_window.setupwin.signal_id)
|
# self.__parent_window.setupwin.disconnect(self.__parent_window.setupwin.signal_id)
|
||||||
self.__parent_window.setupwin.show_all()
|
# self.__parent_window.setupwin.show_all()
|
||||||
self.hide()
|
# self.hide()
|
||||||
|
|
||||||
class SuccessPage(Gtk.Box):
|
class SuccessPage(Gtk.Box):
|
||||||
def __init__(self, parent_window):
|
def __init__(self, parent_window):
|
||||||
super().__init__(spacing=10)
|
super().__init__(spacing=10)
|
||||||
self.__parent_window = parent_window
|
self.__parent_window = parent_window
|
||||||
|
self.grid = Gtk.Grid()
|
||||||
|
|
||||||
vbox_container = Gtk.VBox()
|
hbox = Gtk.HBox()
|
||||||
self.__parent_window.last_onward.props.relief = Gtk.ReliefStyle.NONE
|
previous = Gtk.Button(" ")
|
||||||
|
previous.props.relief = Gtk.ReliefStyle.NONE
|
||||||
|
previous.set_margin_right(245)
|
||||||
|
hbox.add(previous)
|
||||||
|
|
||||||
|
self.__parent_window.last_onward.set_label("")
|
||||||
|
for child in self.__parent_window.last_onward.get_children():
|
||||||
|
child.set_label("<b>Done</b>")
|
||||||
|
child.set_use_markup(True)
|
||||||
self.__parent_window.last_onward.connect("clicked", self.forward)
|
self.__parent_window.last_onward.connect("clicked", self.forward)
|
||||||
vbox_container.set_margin_top(600)
|
|
||||||
vbox_container.add(self.__parent_window.last_onward)
|
hbox.add(self.__parent_window.last_onward)
|
||||||
self.add(vbox_container)
|
hbox.set_hexpand(False)
|
||||||
|
hbox.set_vexpand(False)
|
||||||
|
hbox.set_margin_bottom(6)
|
||||||
|
hbox.set_margin_right(25)
|
||||||
|
|
||||||
|
scroller = Gtk.ScrolledWindow()
|
||||||
|
scroller.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER)
|
||||||
|
scroller.set_hexpand(True)
|
||||||
|
scroller.set_vexpand(True)
|
||||||
|
vbox = Gtk.VBox()
|
||||||
|
vbox_container = Gtk.VBox()
|
||||||
|
vbox_container.set_margin_top(55)
|
||||||
|
vbox_container.set_margin_right(28)
|
||||||
|
vbox_container.add(scroller)
|
||||||
|
self.grid.set_margin_left(157)
|
||||||
|
vbox_container.set_margin_bottom(18)
|
||||||
|
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)
|
||||||
|
self.add(self.grid)
|
||||||
|
self.__parent_window.last_onward.grab_focus()
|
||||||
|
|
||||||
def forward(self, *args):
|
def forward(self, *args):
|
||||||
self.hide()
|
self.hide()
|
||||||
|
# self.__parent_window.setupwin.disconnect(self.__parent_window.setupwin.signal_id)/
|
||||||
self.__parent_window.setupwin.close()
|
self.__parent_window.setupwin.close()
|
||||||
|
|
||||||
|
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 65 KiB |
@@ -240,12 +240,20 @@ define_keymap(None,{
|
|||||||
K("Super-Tab"): K("LC-Tab"), # Default not-chromebook
|
K("Super-Tab"): K("LC-Tab"), # Default not-chromebook
|
||||||
K("Super-Shift-Tab"): K("LC-Shift-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
|
# Wordwise
|
||||||
K("RC-Left"): K("Home"), # Beginning of Line
|
K("RC-Left"): K("Home"), # Beginning of Line
|
||||||
K("Super-a"): K("Home"), # Beginning of Line
|
|
||||||
K("RC-Shift-Left"): K("Shift-Home"), # Select all to 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-Right"): K("End"), # End of Line
|
||||||
K("Super-e"): K("End"), # End of Line
|
|
||||||
K("RC-Shift-Right"): K("Shift-End"), # Select all to 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-Left"): K("C-LEFT_BRACE"), # Firefox-nw - Back
|
||||||
# K("RC-Right"): K("C-RIGHT_BRACE"), # Firefox-nw - Forward
|
# K("RC-Right"): K("C-RIGHT_BRACE"), # Firefox-nw - Forward
|
||||||
|
@@ -620,10 +620,14 @@ class Indicator():
|
|||||||
try:
|
try:
|
||||||
if os.path.exists('/opt/sublime_text/sublime_text'):
|
if os.path.exists('/opt/sublime_text/sublime_text'):
|
||||||
Popen(['/opt/sublime_text/sublime_text',os.environ['HOME']+'/.config/kinto/kinto.py'])
|
Popen(['/opt/sublime_text/sublime_text',os.environ['HOME']+'/.config/kinto/kinto.py'])
|
||||||
elif which(gedit) is not None:
|
elif which('gedit') is not None:
|
||||||
Popen(['gedit',os.environ['HOME']+'/.config/kinto/kinto.py'])
|
Popen(['gedit',os.environ['HOME']+'/.config/kinto/kinto.py'])
|
||||||
elif which(mousepad) is not None:
|
elif which('mousepad') is not None:
|
||||||
Popen(['mousepad',os.environ['HOME']+'/.config/kinto/kinto.py'])
|
Popen(['mousepad',os.environ['HOME']+'/.config/kinto/kinto.py'])
|
||||||
|
elif which('kate') is not None:
|
||||||
|
Popen(['kate',os.environ['HOME']+'/.config/kinto/kinto.py'])
|
||||||
|
elif which('kwrite') is not None:
|
||||||
|
Popen(['kwrite',os.environ['HOME']+'/.config/kinto/kinto.py'])
|
||||||
|
|
||||||
except CalledProcessError: # Notify user about error on running restart commands.
|
except CalledProcessError: # Notify user about error on running restart commands.
|
||||||
Popen(['notify-send','Kinto: Error could not open config file!'])
|
Popen(['notify-send','Kinto: Error could not open config file!'])
|
||||||
@@ -632,10 +636,14 @@ class Indicator():
|
|||||||
try:
|
try:
|
||||||
if os.path.exists('/opt/sublime_text/sublime_text'):
|
if os.path.exists('/opt/sublime_text/sublime_text'):
|
||||||
Popen(['/opt/sublime_text/sublime_text','/lib/systemd/system/xkeysnail.service'])
|
Popen(['/opt/sublime_text/sublime_text','/lib/systemd/system/xkeysnail.service'])
|
||||||
elif which(gedit) is not None:
|
elif which('gedit') is not None:
|
||||||
Popen(['gedit','/lib/systemd/system/xkeysnail.service'])
|
Popen(['gedit','/lib/systemd/system/xkeysnail.service'])
|
||||||
elif which(mousepad) is not None:
|
elif which('mousepad') is not None:
|
||||||
Popen(['mousepad','/lib/systemd/system/xkeysnail.service'])
|
Popen(['mousepad','/lib/systemd/system/xkeysnail.service'])
|
||||||
|
elif which('kate') is not None:
|
||||||
|
Popen(['kate','/lib/systemd/system/xkeysnail.service'])
|
||||||
|
elif which('kwrite') is not None:
|
||||||
|
Popen(['kwrite','/lib/systemd/system/xkeysnail.service'])
|
||||||
|
|
||||||
except CalledProcessError: # Notify user about error on running restart commands.
|
except CalledProcessError: # Notify user about error on running restart commands.
|
||||||
Popen(['notify-send','Kinto: Error could not open config file!'])
|
Popen(['notify-send','Kinto: Error could not open config file!'])
|
||||||
@@ -690,12 +698,16 @@ class Indicator():
|
|||||||
def setSysKB(self,button):
|
def setSysKB(self,button):
|
||||||
if self.ostype == "XFCE":
|
if self.ostype == "XFCE":
|
||||||
Popen(['xfce4-keyboard-settings'])
|
Popen(['xfce4-keyboard-settings'])
|
||||||
|
elif self.ostype == "KDE":
|
||||||
|
self.queryConfig('systemsettings >/dev/null 2>&1 || systemsettings5 >/dev/null 2>&1')
|
||||||
else:
|
else:
|
||||||
Popen(['gnome-control-center','keyboard'])
|
Popen(['gnome-control-center','keyboard'])
|
||||||
|
|
||||||
def setRegion(self,button):
|
def setRegion(self,button):
|
||||||
if self.ostype == "XFCE":
|
if self.ostype == "XFCE":
|
||||||
Popen(['gnome-language-selector'])
|
Popen(['gnome-language-selector'])
|
||||||
|
elif self.ostype == "KDE":
|
||||||
|
self.queryConfig('kcmshell4 kcm_translations >/dev/null 2>&1 || kcmshell5 kcm_translations >/dev/null 2>&1')
|
||||||
else:
|
else:
|
||||||
Popen(['gnome-control-center','region'])
|
Popen(['gnome-control-center','region'])
|
||||||
|
|
||||||
|
@@ -4,7 +4,7 @@ Description=xkeysnail
|
|||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
KillMode=process
|
KillMode=process
|
||||||
ExecStart=/usr/bin/sudo /bin/bash -c '/usr/bin/xhost +SI:localuser:root && {homedir}/.config/kinto/killdups.sh && /usr/local/bin/xkeysnail --quiet --watch {homedir}/.config/kinto/kinto.py'
|
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'
|
ExecStop=/usr/bin/sudo /bin/bash -c '/usr/bin/sudo pkill -f bin/xkeysnail && exit 0'
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
RestartSec=3
|
RestartSec=3
|
||||||
|
@@ -73,7 +73,7 @@ function uninstall {
|
|||||||
elif [ "$yn" == "n" ]; then
|
elif [ "$yn" == "n" ]; then
|
||||||
echo "Skipping..."
|
echo "Skipping..."
|
||||||
fi
|
fi
|
||||||
if [[ $dename == "gnome" || $dename == "budgie" ]]; then
|
if [[ $dename == "gnome" || $dename == "budgie" || $dename == "mate" ]]; then
|
||||||
echo -e "\nWill still be restoring the overlay key"
|
echo -e "\nWill still be restoring the overlay key"
|
||||||
echo -e "gsettings set org.gnome.mutter overlay-key 'super'\n"
|
echo -e "gsettings set org.gnome.mutter overlay-key 'super'\n"
|
||||||
gsettings set org.gnome.mutter overlay-key 'super'
|
gsettings set org.gnome.mutter overlay-key 'super'
|
||||||
@@ -201,6 +201,13 @@ if [[ $1 == "5" || $1 == "uninstall" || $1 == "Uninstall" ]]; then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
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 "is-active xkeysnail" >/dev/null 2>&1
|
||||||
|
|
||||||
|
pip3 install pillow
|
||||||
|
|
||||||
# Add additional shortcuts if needed, does not modify existing ones
|
# Add additional shortcuts if needed, does not modify existing ones
|
||||||
|
|
||||||
if [[ $dename == 'gnome' || $dename == 'budgie' ]];then
|
if [[ $dename == 'gnome' || $dename == 'budgie' ]];then
|
||||||
@@ -213,7 +220,6 @@ fi
|
|||||||
|
|
||||||
# if ls /etc/apt/sources.list.d/system76* 1> /dev/null 2>&1; then
|
# if ls /etc/apt/sources.list.d/system76* 1> /dev/null 2>&1; then
|
||||||
if [[ $distro == 'popos' ]]; then
|
if [[ $distro == 'popos' ]]; then
|
||||||
pip3 install pillow
|
|
||||||
# Addition, does not overwrite existing
|
# Addition, does not overwrite existing
|
||||||
if [[ $(gsettings get org.gnome.desktop.wm.keybindings minimize | grep "\[\]" | wc -l) != 1 ]];then
|
if [[ $(gsettings get org.gnome.desktop.wm.keybindings minimize | grep "\[\]" | wc -l) != 1 ]];then
|
||||||
echo "Adding Super-h (Cmd+h) to hide/minimize Window."
|
echo "Adding Super-h (Cmd+h) to hide/minimize Window."
|
||||||
@@ -228,8 +234,14 @@ if [[ $distro == 'popos' ]]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ! [ -x "$(command -v xhost)" ] || ! [ -x "$(command -v gcc)" ]; then
|
||||||
|
if [ "$distro" == "manjarolinux" ]; then
|
||||||
|
sudo ./system-config/unipkg.sh "xorg-xhost gcc"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ $dename == "kde" ]]; then
|
if [[ $dename == "kde" ]]; then
|
||||||
if [[ $distroy == "manjarolinux" ]]; then
|
if [[ $distro == "manjarolinux" ]]; then
|
||||||
sudo ./system-config/unipkg.sh vte3
|
sudo ./system-config/unipkg.sh vte3
|
||||||
else
|
else
|
||||||
sudo ./system-config/unipkg.sh libvte-2.91-dev
|
sudo ./system-config/unipkg.sh libvte-2.91-dev
|
||||||
@@ -322,6 +334,9 @@ if ! [ -x "$(command -v python3-config)" ]; then
|
|||||||
sudo ./system-config/unipkg.sh "$pydev"
|
sudo ./system-config/unipkg.sh "$pydev"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
# if [ "$distro" == "ubuntu" ] && [ "$dename" == "gnome" ];then
|
||||||
|
# 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 ! [ -x "$(command -v xhost)" ] || ! [ -x "$(command -v gcc)" ]; then
|
||||||
if [ "$distro" == "\"manjaro linux\"" ]; then
|
if [ "$distro" == "\"manjaro linux\"" ]; then
|
||||||
sudo ./system-config/unipkg.sh "xorg-xhost gcc"
|
sudo ./system-config/unipkg.sh "xorg-xhost gcc"
|
||||||
@@ -388,9 +403,6 @@ 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/{username}/`whoami`/g" ./xkeysnail-config/limitedadmins.new
|
||||||
sed -i "s#{systemctl}#`\\which systemctl`#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#{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/kinto/xkeysnail.desktop
|
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#{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/xkeysnail.desktop
|
||||||
@@ -448,11 +460,6 @@ if ! [[ $1 == "5" || $1 == "uninstall" || $1 == "Uninstall" ]]; then
|
|||||||
elif [ -d /lib/systemd/system ];then
|
elif [ -d /lib/systemd/system ];then
|
||||||
xkeypath="/lib/systemd/system/"
|
xkeypath="/lib/systemd/system/"
|
||||||
fi
|
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
|
xhost +SI:localuser:root
|
||||||
git clone --depth 10 https://github.com/rbreaves/xkeysnail.git
|
git clone --depth 10 https://github.com/rbreaves/xkeysnail.git
|
||||||
cd xkeysnail
|
cd xkeysnail
|
||||||
@@ -469,6 +476,23 @@ if ! [[ $1 == "5" || $1 == "uninstall" || $1 == "Uninstall" ]]; then
|
|||||||
fi
|
fi
|
||||||
sudo pip3 install --upgrade .
|
sudo pip3 install --upgrade .
|
||||||
cd ..
|
cd ..
|
||||||
|
which xkeysnail
|
||||||
|
if [ $? -eq 1 ]; then
|
||||||
|
echo -e "\nKinto install has \e[1m\033[0;91mfailed\e[0m.\n"
|
||||||
|
echo -e "cd into ./xkeysnail"
|
||||||
|
echo -e "Run 'sudo pip3 install --upgrade .' to debug issue"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
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 ./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 daemon-reload
|
||||||
sudo systemctl disable xkeysnail
|
sudo systemctl disable xkeysnail
|
||||||
sudo systemctl stop xkeysnail
|
sudo systemctl stop xkeysnail
|
||||||
@@ -479,9 +503,8 @@ if ! [[ $1 == "5" || $1 == "uninstall" || $1 == "Uninstall" ]]; then
|
|||||||
# sudo systemctl enable xkeysnail.service
|
# sudo systemctl enable xkeysnail.service
|
||||||
# fi
|
# fi
|
||||||
# sudo systemctl restart xkeysnail
|
# sudo systemctl restart xkeysnail
|
||||||
if ! [[ $dename == "gnome" || $dename == "kde" ]];then
|
|
||||||
sudo pkill -f kintotray >/dev/null 2>&1
|
sudo pkill -f kintotray >/dev/null 2>&1
|
||||||
else
|
if [[ $dename == "gnome" || $dename == "kde" ]];then
|
||||||
sed -i "s/systray = true/systray = false/g" ~/.config/kinto/initkb
|
sed -i "s/systray = true/systray = false/g" ~/.config/kinto/initkb
|
||||||
fi
|
fi
|
||||||
nohup python3 ~/.config/kinto/gui/kinto-gui.py >/dev/null 2>&1 &
|
nohup python3 ~/.config/kinto/gui/kinto-gui.py >/dev/null 2>&1 &
|
||||||
@@ -508,4 +531,21 @@ if ! [[ $1 == "5" || $1 == "uninstall" || $1 == "Uninstall" ]]; then
|
|||||||
|
|
||||||
echo -e "Kinto install is \e[1m\e[32mcomplete\e[0m.\n"
|
echo -e "Kinto install is \e[1m\e[32mcomplete\e[0m.\n"
|
||||||
|
|
||||||
|
echo "If the setup wizard fails to appear then please run this command."
|
||||||
|
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"
|
||||||
|
|
||||||
|
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"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$dename" == "gnome" ];then
|
||||||
|
echo "Gnome may not support appindicators well, so by default you may need to install packages before enabling the System Tray."
|
||||||
|
echo "You may try one of the following extensions."
|
||||||
|
echo -e " 1) \e]8;;https://extensions.gnome.org/extension/615/appindicator-support/\aAppIndicator and KStatusNotifierItem Support\e]8;;\a"
|
||||||
|
echo -e " 2) \e]8;;https://extensions.gnome.org/extension/1031/topicons/\aTopIcons Plus\e]8;;\a"
|
||||||
|
echo -e "\nNote: you may want these supporting packages\n'sudo apt install gnome-tweaks gnome-shell-extension-appindicator gir1.2-appindicator3-0.1'"
|
||||||
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
Reference in New Issue
Block a user