From 15be72893cdf718cf5198f1e4a69e416aba7b779 Mon Sep 17 00:00:00 2001 From: Jan Andrle Date: Thu, 29 Feb 2024 15:12:14 +0100 Subject: [PATCH] :zap: :bug: KDE Neon 6.0 --- .config/Seafile/Seafile Client.conf | 6 +-- README.md | 26 ++++++++++++ bin/github-releases.json | 24 ++++++------ bin/kde6-workarounds.mjs | 61 +++++++++++++++++++++++++++++ bin/§wallpaper_BIOTD.mjs | 44 ++++++++++----------- 5 files changed, 124 insertions(+), 37 deletions(-) create mode 100755 bin/kde6-workarounds.mjs diff --git a/.config/Seafile/Seafile Client.conf b/.config/Seafile/Seafile Client.conf index b7b7719..2582524 100644 --- a/.config/Seafile/Seafile Client.conf +++ b/.config/Seafile/Seafile Client.conf @@ -3,11 +3,11 @@ hideDockIcon=false hideMainWindowWhenStarted=true [MainWindow] -pos=@Point(0 0) -size=@Size(640 480) +pos=@Point(1094 150) +size=@Size(640 585) [RepoTreeView] -expandedCategories-e77d1fb=Moje knihovny\tNed\xe1vno aktualizovan\xe9\tSd\xedleno se skupinama +expandedCategories-e77d1fb=Ned\xe1vno aktualizovan\xe9\tMoje knihovny\tSd\xedleno se skupinama [Settings] computerName=TUXEDO-InfinityBook-s15gen6 diff --git a/README.md b/README.md index af36692..2bcc390 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,32 @@ see for example [How to Store Dotfiles - A Bare Git Repository \| Atlassian Git ## PC log (cs) Sekce obsahuje log změn v Tuxedo laptopu s KDE Neon. +### KDE Neon 6.0 (22.04) +{NEXT <2024-03-20> *tilling* *hud* *html-wallpaper* *virtual-desktop* *klipper* agenda}$ + +- mostly OK +- [ ] desktop exceptionally freeze for less than a second: *investigation → report a bug* +- [ ] logout/poweroff dialog not showing and not working: *investigation → report a bug* … see below +- [x] krunner not launching → created `/usr/share/dbus-1/services/org.kde.krunner.service` (see below) +- [x] meta+tab (last virtual desktop) → workaround [./bin/kde6-workarounds.mjs](./bin/kde6-workarounds.mjs) +- [x] klipper (edit last item) → workaround [./bin/kde6-workarounds.mjs](./bin/kde6-workarounds.mjs) +- [ ] !!! Event calendar widget +- [x] Active Window Control replaced with Window Title widget and its better +- [ ] html wallpaper → workaround just concat images (see [./bin/§wallpaper\_BIOTD](./bin/§wallpaper_BIOTD)) +- [ ] tilling → try to use native, try to use [zeroxoneafour/polonium: Tiling window manager for KWin 5.27](https://github.com/zeroxoneafour/polonium) (when there will be a new release) +- [ ] hud ([Zren/plasma-hud](https://github.com/Zren/plasma-hud) still works on X11), but maybe Ctrl+Alt+i and so on is OK? + +```bash +qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout 1 +Cannot find 'org.kde.KSMServerInterface.logout' in object /KSMServer at org.kde.ksmserver +``` +[KDE Bugtracking System Main Page](https://bugs.kde.org/) +```ini +[D-BUS Service] +Name=org.kde.krunner +Exec=/usr/bin/krunner +``` + ### KDE neon 5.26 (22.04) {DONE <2022-10-25 17:21> *mail* *hud* *klíčenka* agenda}$ diff --git a/bin/github-releases.json b/bin/github-releases.json index c14780a..8b98db3 100644 --- a/bin/github-releases.json +++ b/bin/github-releases.json @@ -7,9 +7,9 @@ "file_name": "github-desktop", "exec": "yes", "description": "Fork of GitHub Desktop to support various Linux distributions", - "last_update": "2023-12-20T15:25:06Z", + "last_update": "2024-02-04T22:31:22Z", "downloads": "/home/jaandrle/bin/github-desktop", - "version": "release-3.3.6-linux3" + "version": "release-3.3.8-linux2" }, { "repository": "jaandrle/jaaCSS-cli", @@ -29,9 +29,9 @@ "group": "nondev", "file_name": "youtube-music", "exec": "yes", - "last_update": "2024-01-05T14:44:27Z", + "last_update": "2024-02-20T12:07:29Z", "downloads": "/home/jaandrle/bin/youtube-music", - "version": "v3.2.2" + "version": "v3.3.2" }, { "repository": "ArchGPT/insomnium", @@ -108,9 +108,9 @@ "group": "nondev", "file_name": "upscayl", "exec": "yes", - "last_update": "2024-01-16T09:54:25Z", + "last_update": "2024-02-10T12:17:10Z", "downloads": "/home/jaandrle/bin/upscayl", - "version": "v2.9.8" + "version": "v2.9.9" }, { "repository": "RasmusLindroth/tut", @@ -152,9 +152,9 @@ "group": "nondev", "file_name": "fedistar", "exec": "yes", - "last_update": "2024-01-29T10:29:58Z", + "last_update": "2024-02-09T11:38:02Z", "downloads": "/home/jaandrle/bin/fedistar", - "version": "v1.8.3" + "version": "v1.8.4" }, { "repository": "ollama/ollama", @@ -163,9 +163,9 @@ "group": "ai", "file_name": "ollama", "exec": "yes", - "last_update": "2024-01-26T18:19:36Z", + "last_update": "2024-02-22T22:55:46Z", "downloads": "/home/jaandrle/bin/ollama", - "version": "v0.1.22" + "version": "v0.1.27" }, { "repository": "neovim/neovim", @@ -208,9 +208,9 @@ "group": "ai", "file_name": "jan", "exec": "yes", - "last_update": "2024-01-29T05:19:22Z", + "last_update": "2024-02-26T03:30:36Z", "downloads": "/home/jaandrle/bin/jan", - "version": "v0.4.5" + "version": "v0.4.7" } ] } \ No newline at end of file diff --git a/bin/kde6-workarounds.mjs b/bin/kde6-workarounds.mjs new file mode 100755 index 0000000..c17b2c3 --- /dev/null +++ b/bin/kde6-workarounds.mjs @@ -0,0 +1,61 @@ +#!/usr/bin/env nodejsscript +/* jshint esversion: 11,-W097, -W040, module: true, node: true, expr: true, undef: true *//* global echo, $, pipe, s, fetch, cyclicLoop */ + +const pathLastDesktop= ()=> $.xdg.temp`kde6-workarounds-last-desktop.txt`; +const css= echo.css` + .code { color: gray; } +`; + +$.api() +.version("2024-02-29") +.describe("Workarounds for KDE6.") +.command("klipper-edit", "Edit last item in klipper.") +.action(async function(){ + $.is_silent= true; + const qdbus= "qdbus org.kde.klipper /klipper org.kde.klipper.klipper."; + try{ + const candidate= s.run(`${qdbus}getClipboardContents`).trim(); + const content= await $.read({ "-p": "Edit", completions: [ candidate ] }); + s.run(`${qdbus}setClipboardContents "${content}"`); + $.exit(0); + } catch (_){ + $.exit(1); + } +}) +.command("desktops-alttab", "Workaround for KDE6 alt-tab between virtual desktops.") +.action(function(){ + const path= pathLastDesktop(); + // Regarding ★ : this is a workaround for diagonal switching (it duplicates desktop index) + let desktop= s.cat(path).trim() || "1"; + if(desktop.length>3){ // ★ + const [ _1, _2, ..._3 ]= desktop.slice(-4, desktop.length); + if(_1===_2) + desktop= desktop.slice(0, -4).concat(_1, ..._3); + } + if(desktop.length>2){ // ★ + const [ _1, _2 ]= desktop.slice(-2, desktop.length); + if(_1===_2) + desktop= desktop.slice(0, -1); + } + if(desktop.length>2){ + desktop= desktop.slice(-2, desktop.length); + s.echo(desktop).to(path); + } + echo(desktop); + s.run`qdbus org.kde.KWin /KWin org.kde.KWin.setCurrentDesktop ${desktop[0]}`; + $.exit(0); +}) +.command("desktops-last ", "Workaround for KDE6 alt-tab between virtual desktops.") +.describe([ + "Use", + echo.format('%cdbus-monitor "interface=org.kde.KWin.VirtualDesktopManager" "member=currentChanged" | xargs -e -I {} kde6-workarounds.mjs desktops-last {}', css.code) +]) +.action(function(dbus){ + if(-1===dbus.indexOf("path=/VirtualDesktopManager; interface=org.kde.KWin.VirtualDesktopManager; member=currentChanged")) + return $.exit(1); + const desktop= s.run`qdbus org.kde.KWin /KWin org.kde.KWin.currentDesktop`.trim(); + s.echo(desktop).toEnd(pathLastDesktop()); +}) +.parse(); + +/* rofi -dmenu -l 4 --theme-str 'window { width: 50ch; }' -p "promt" */ diff --git a/bin/§wallpaper_BIOTD.mjs b/bin/§wallpaper_BIOTD.mjs index aa382fa..f9c8e76 100755 --- a/bin/§wallpaper_BIOTD.mjs +++ b/bin/§wallpaper_BIOTD.mjs @@ -9,36 +9,36 @@ const folder= homedir()+"/Obrázky/Bing Image Of The Day/"; get_(url_main+"/HPImageArchive.aspx?format=js&idx=0&n=2&mkt=cs-CZ") .then(res=> { - let body= ""; - res.on("data", chunk=> body+= chunk); - res.on("end", ()=> pipe(data, update)(body)); + let body= ""; + res.on("data", chunk=> body+= chunk); + res.on("end", ()=> pipe(data, update)(body)); }) .catch(e=> console.error(String(e))); function update(data){ - if(data===null) return false; - Promise.allSettled(data.map(({ url, copyright }, id)=> getImage_(url, id ? "prev" : "now", copyright))) - .then(res=> { - let template= readFileSync(folder+"index_template.html").toString(); - writeFileSync(folder+"index.html", res.reduce((out, { status, value })=> status==="rejected" ? out : out.replace(`::${value.name}::`, value.description), template)); - }) - .catch(e=> console.error(String(e))); + if(data===null) return false; + Promise.allSettled(data.map(({ url, copyright }, id)=> getImage_(url, id ? "prev" : "now", copyright))) + .then(res=> { + let template= readFileSync(folder+"index_template.html").toString(); + writeFileSync(folder+"index.html", res.reduce((out, { status, value })=> status==="rejected" ? out : out.replace(`::${value.name}::`, value.description), template)); + }) + .catch(e=> console.error(String(e))); } function getImage_(url, name, desc){ - const description= desc.replace("(©", "
(©"); - return get_(url_main+url) - .then(res=> { - const fs= createWriteStream(folder+name+'.jpg'); - res.pipe(fs); - return new Promise(res=> fs.on("finish", ()=> { - fs.close(); - res({ name, description }); - })); - }); + const description= desc.replace("(©", "
(©"); + return get_(url_main+url) + .then(res=> { + const fs= createWriteStream(folder+name+'.jpg'); + res.pipe(fs); + return new Promise(res=> fs.on("finish", ()=> { + fs.close(); + res({ name, description }); + })); + }); } function data(body){ - try { return JSON.parse(body).images; } - catch (_) { return null; } + try { return JSON.parse(body).images; } + catch (_) { return null; } } function get_(url){ return new Promise(function(res,rej){ get(url, res).on("error", rej); }); } function pipe(...f){ return Array.prototype.reduce.bind(f, (acc, f)=> f(acc)); }