🐛 KDE Neon 6.0

This commit is contained in:
Jan Andrle 2024-02-29 15:12:14 +01:00
parent 43d220be01
commit 15be72893c
Signed by: jaandrle
GPG Key ID: B3A25AED155AFFAB
5 changed files with 124 additions and 37 deletions

View File

@ -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

View File

@ -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}$

View File

@ -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"
}
]
}

61
bin/kde6-workarounds.mjs Executable file
View File

@ -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 <dbus>", "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" */

View File

@ -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("(©", "<br>(©");
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("(©", "<br>(©");
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)); }