From 1df0da4d485f1ba7fb21c7b5928b00e7a1f75c1f Mon Sep 17 00:00:00 2001 From: marcus hinz Date: Mon, 6 Jul 2026 20:08:16 +0200 Subject: [PATCH] =?UTF-8?q?Linux-Port:=20GNOME-Popup=20+=20Tray,=20Termina?= =?UTF-8?q?l-Schriftgr=C3=B6=C3=9Fe=20global?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Popup als rahmenloses Fenster mit D-Bus-Relay (popup.html/ts, Popup.vue); GNOME-Extension schiebt es unter den Panel-Button - Terminal: globale Schriftgröße via settings.json (terminalFontSize), Zoom mit Ctrl/Cmd +/-/0 im Terminal - trayLinux-Icon, Capabilities, App.vue/terminal.html angepasst --- package-lock.json | 45 --- popup.html | 18 ++ src-tauri/Cargo.lock | 439 ++++++++++++++++++++++++++++ src-tauri/Cargo.toml | 4 + src-tauri/capabilities/default.json | 7 + src-tauri/icons/trayLinux.png | Bin 0 -> 36291 bytes src-tauri/src/lib.rs | 363 +++++++++++++++++++---- src-tauri/src/terminal.rs | 28 ++ src/App.vue | 164 ++++++++++- src/components/Popup.vue | 182 ++++++++++++ src/popup.ts | 4 + src/terminal.ts | 55 +++- terminal.html | 142 ++++++++- vite.config.ts | 1 + 14 files changed, 1346 insertions(+), 106 deletions(-) create mode 100644 popup.html create mode 100644 src-tauri/icons/trayLinux.png create mode 100644 src/components/Popup.vue create mode 100644 src/popup.ts diff --git a/package-lock.json b/package-lock.json index 249d990..462e818 100644 --- a/package-lock.json +++ b/package-lock.json @@ -309,9 +309,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -329,9 +326,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -349,9 +343,6 @@ "ppc64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -369,9 +360,6 @@ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -389,9 +377,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -409,9 +394,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -597,9 +579,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -617,9 +596,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -637,9 +613,6 @@ "riscv64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -657,9 +630,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -677,9 +647,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -1262,9 +1229,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -1286,9 +1250,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -1310,9 +1271,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -1334,9 +1292,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MPL-2.0", "optional": true, "os": [ diff --git a/popup.html b/popup.html new file mode 100644 index 0000000..ea253d6 --- /dev/null +++ b/popup.html @@ -0,0 +1,18 @@ + + + + + Projekte + + + +
+ + + diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 8253903..85462bf 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -33,6 +33,7 @@ name = "ai-control" version = "0.1.1" dependencies = [ "base64 0.22.1", + "glib", "keyring", "log", "objc2", @@ -48,6 +49,7 @@ dependencies = [ "tauri-plugin-dialog", "tauri-plugin-log", "uuid", + "zbus", ] [[package]] @@ -103,6 +105,137 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-lock" +version = "3.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + +[[package]] +name = "async-signal" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + [[package]] name = "atk" version = "0.18.2" @@ -221,6 +354,19 @@ dependencies = [ "objc2", ] +[[package]] +name = "blocking" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + [[package]] name = "borsh" version = "1.7.0" @@ -486,6 +632,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "cookie" version = "0.18.1" @@ -902,6 +1057,33 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" +[[package]] +name = "endi" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" + +[[package]] +name = "enumflags2" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + [[package]] name = "env_filter" version = "0.1.4" @@ -929,6 +1111,37 @@ dependencies = [ "typeid", ] +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] + [[package]] name = "fastrand" version = "2.4.1" @@ -1076,6 +1289,19 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +[[package]] +name = "futures-lite" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + [[package]] name = "futures-macro" version = "0.3.32" @@ -1433,6 +1659,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + [[package]] name = "hex" version = "0.4.3" @@ -1921,6 +2153,12 @@ dependencies = [ "libc", ] +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + [[package]] name = "litemap" version = "0.8.2" @@ -2347,6 +2585,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + [[package]] name = "pango" version = "0.18.3" @@ -2372,6 +2620,12 @@ dependencies = [ "system-deps", ] +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + [[package]] name = "parking_lot" version = "0.12.5" @@ -2460,6 +2714,17 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" +[[package]] +name = "piper" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + [[package]] name = "pkg-config" version = "0.3.33" @@ -2505,6 +2770,20 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "windows-sys 0.61.2", +] + [[package]] name = "portable-pty" version = "0.9.0" @@ -2924,6 +3203,19 @@ dependencies = [ "semver", ] +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags 2.13.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + [[package]] name = "rustversion" version = "1.0.22" @@ -3269,6 +3561,16 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + [[package]] name = "simd-adler32" version = "0.3.9" @@ -3830,6 +4132,19 @@ dependencies = [ "toml 1.1.2+spec-1.1.0", ] +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom 0.4.3", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + [[package]] name = "tendril" version = "0.5.0" @@ -4136,9 +4451,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + [[package]] name = "tracing-core" version = "0.1.36" @@ -4188,6 +4515,17 @@ version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" +[[package]] +name = "uds_windows" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" +dependencies = [ + "memoffset", + "tempfile", + "windows-sys 0.61.2", +] + [[package]] name = "unic-char-property" version = "0.9.0" @@ -5115,6 +5453,67 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zbus" +version = "5.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eee682d202a77e4a9f3b2c2bdf48a7b28af5c08c34ddf66f98c93e5e39464285" +dependencies = [ + "async-broadcast", + "async-executor", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener", + "futures-core", + "futures-lite", + "hex", + "libc", + "ordered-stream", + "rustix", + "serde", + "serde_repr", + "tracing", + "uds_windows", + "uuid", + "windows-sys 0.61.2", + "winnow 1.0.3", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "5.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adf1bd45a81a103745b1757754762a26e8cd01e4532e4d6c8ec431624b80d1d6" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.118", + "zbus_names", + "zvariant", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "4.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" +dependencies = [ + "serde", + "winnow 1.0.3", + "zvariant", +] + [[package]] name = "zerocopy" version = "0.8.52" @@ -5214,3 +5613,43 @@ name = "zmij" version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" + +[[package]] +name = "zvariant" +version = "5.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a192a0bde63360d77a7523c833d4b4ce6070a927e2c53246e4c540b1a3e27be0" +dependencies = [ + "endi", + "enumflags2", + "serde", + "winnow 1.0.3", + "zvariant_derive", + "zvariant_utils", +] + +[[package]] +name = "zvariant_derive" +version = "5.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bc6cde9c01c511074be97f7ccb6c19d0da89e3f8662e812e999dcfd4638737" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.118", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e8535915cfa75547e559d8c68e8139909a4aeee076831e4ef7fc59d8172c4d6" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "syn 2.0.118", + "winnow 1.0.3", +] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index d1825ec..5d52386 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -31,6 +31,10 @@ portable-pty = "0.9" uuid = { version = "1", features = ["v4"] } keyring = { version = "3", features = ["apple-native", "sync-secret-service", "windows-native"] } +[target.'cfg(target_os = "linux")'.dependencies] +zbus = "5" +glib = "0.18" + [target.'cfg(target_os = "macos")'.dependencies] objc2 = "0.6" objc2-app-kit = { version = "0.3", features = ["NSApplication", "NSImage", "NSResponder", "NSRunningApplication"] } diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index 2868d06..6a6513d 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -4,11 +4,18 @@ "description": "enables the default permissions", "windows": [ "main", + "popup", "term-*" ], "permissions": [ "core:default", "core:window:allow-start-dragging", + "core:window:allow-set-size", + "core:window:allow-minimize", + "core:window:allow-toggle-maximize", + "core:window:allow-close", + "core:window:allow-hide", + "core:window:allow-start-resize-dragging", "autostart:default", "dialog:default" ] diff --git a/src-tauri/icons/trayLinux.png b/src-tauri/icons/trayLinux.png new file mode 100644 index 0000000000000000000000000000000000000000..b305de098b5606571ee43d9ef98df9f400c4c627 GIT binary patch literal 36291 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