Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
de6cf98dcc | ||
|
|
95d602e1c4 | ||
|
|
9b6c64bd97 | ||
|
|
8a7e67b1f9 | ||
|
|
c0fca75cbc | ||
|
|
15a7cb9cf9 | ||
|
|
0234e81811 | ||
|
|
6f62c7f21c | ||
|
|
3c000b8a6e | ||
|
|
0f9b041b20 | ||
|
|
98f6ac9c48 | ||
|
|
9861d24c2a | ||
|
|
f74fc3e8ca | ||
|
|
09b2c49eb3 | ||
|
|
ab62d2a3cf | ||
|
|
fa55571118 | ||
|
|
a516cf8f59 | ||
|
|
074a654597 | ||
|
|
472cf5382c | ||
|
|
82afefe5f8 | ||
|
|
677660c1c6 | ||
|
|
e9311431f8 | ||
|
|
e5d2481d6d | ||
|
|
fc9dae95f9 | ||
|
|
dd0671440d | ||
|
|
0b1b33ea84 |
No files matched your search
+1
-1
@@ -1 +1 @@
|
|||||||
buy_me_a_coffee: felitendo
|
ko_fi: felitendo
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
name: 💡 Feature request
|
||||||
|
description: An idea to make middleclick-autoscroll better.
|
||||||
|
labels:
|
||||||
|
- enhancement
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
id: checks
|
||||||
|
attributes:
|
||||||
|
label: Before you start
|
||||||
|
options:
|
||||||
|
- label: I searched the issues and this is not requested yet.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: problem
|
||||||
|
attributes:
|
||||||
|
label: What problem would this solve?
|
||||||
|
description: What are you trying to do, and what gets in the way?
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: idea
|
||||||
|
attributes:
|
||||||
|
label: What would you like?
|
||||||
|
description: How it could work. A rough idea is fine.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: alternatives
|
||||||
|
attributes:
|
||||||
|
label: Other ways you thought of
|
||||||
|
- type: textarea
|
||||||
|
id: more
|
||||||
|
attributes:
|
||||||
|
label: Anything else?
|
||||||
|
description: Mockups, screenshots, or other tools that do it well.
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
name: 🐛 Bug report
|
||||||
|
description: Something does not work as it should.
|
||||||
|
labels:
|
||||||
|
- bug
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: Thanks for taking the time! The more you fill in, the faster it can be fixed.
|
||||||
|
- type: checkboxes
|
||||||
|
id: checks
|
||||||
|
attributes:
|
||||||
|
label: Before you start
|
||||||
|
options:
|
||||||
|
- label: I searched the issues and this is not reported yet.
|
||||||
|
required: true
|
||||||
|
- label: I use the latest version.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: what
|
||||||
|
attributes:
|
||||||
|
label: What happened?
|
||||||
|
description: What did you do, and what went wrong?
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: steps
|
||||||
|
attributes:
|
||||||
|
label: Steps to reproduce
|
||||||
|
placeholder: |
|
||||||
|
1.
|
||||||
|
2.
|
||||||
|
3.
|
||||||
|
- type: textarea
|
||||||
|
id: expected
|
||||||
|
attributes:
|
||||||
|
label: What did you expect?
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
id: app
|
||||||
|
attributes:
|
||||||
|
label: App
|
||||||
|
description: 'Which app, and how it is installed: native package, Flatpak, Snap or AppImage.'
|
||||||
|
placeholder: Discord, Flatpak
|
||||||
|
- type: input
|
||||||
|
id: version
|
||||||
|
attributes:
|
||||||
|
label: Version
|
||||||
|
description: The output of `middleclick-autoscroll --version`.
|
||||||
|
placeholder: middleclick-autoscroll 1.6.0
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
id: install
|
||||||
|
attributes:
|
||||||
|
label: How did you install it?
|
||||||
|
options:
|
||||||
|
- AUR (Arch, CachyOS, EndeavourOS, Manjaro)
|
||||||
|
- Fedora package
|
||||||
|
- Bazzite
|
||||||
|
- Debian or Ubuntu package
|
||||||
|
- openSUSE package
|
||||||
|
- Built from source
|
||||||
|
- Other
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
id: system
|
||||||
|
attributes:
|
||||||
|
label: System
|
||||||
|
description: Distribution, desktop and session (Wayland or X11).
|
||||||
|
placeholder: CachyOS, KDE Plasma 6.4, Wayland
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: logs
|
||||||
|
attributes:
|
||||||
|
label: Status and logs
|
||||||
|
description: The output of `middleclick-autoscroll status` and `middleclick-autoscroll list`.
|
||||||
|
render: shell
|
||||||
|
- type: textarea
|
||||||
|
id: more
|
||||||
|
attributes:
|
||||||
|
label: Anything else?
|
||||||
|
description: Screenshots, videos or anything else that could help.
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
name: 🧩 App does not work
|
||||||
|
description: Autoscroll does not work in an app. Just tell us which one.
|
||||||
|
title: 'App: '
|
||||||
|
labels:
|
||||||
|
- app
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: Just add the app's name to the title. The rest is optional.
|
||||||
|
- type: dropdown
|
||||||
|
id: install
|
||||||
|
attributes:
|
||||||
|
label: How is it installed?
|
||||||
|
description: Skip it if you are not sure.
|
||||||
|
options:
|
||||||
|
- Native package
|
||||||
|
- Flatpak
|
||||||
|
- Snap
|
||||||
|
- AppImage
|
||||||
|
- type: textarea
|
||||||
|
id: more
|
||||||
|
attributes:
|
||||||
|
label: More info
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
blank_issues_enabled: false
|
||||||
@@ -125,7 +125,7 @@ $entry
|
|||||||
|
|
||||||
If $name is useful to you, you can buy me a coffee. It keeps these tools going. Found a bug or have an idea? Tell me in the [issues](https://github.com/$repo/issues).
|
If $name is useful to you, you can buy me a coffee. It keeps these tools going. Found a bug or have an idea? Tell me in the [issues](https://github.com/$repo/issues).
|
||||||
|
|
||||||
<a href="https://buymeacoffee.com/felitendo"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" height="48"></a>
|
<a href="https://ko-fi.com/felitendo"><img src="https://storage.ko-fi.com/cdn/kofi5.png?v=6" alt="Buy me a coffee on Ko-fi" height="48"></a>
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
name: issues
|
||||||
|
|
||||||
|
on:
|
||||||
|
issues:
|
||||||
|
types: [labeled]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
# The "fixed" and "not chromium" labels answer and close the issue.
|
||||||
|
close:
|
||||||
|
name: close on label
|
||||||
|
if: >-
|
||||||
|
github.event.issue.state == 'open'
|
||||||
|
&& (github.event.label.name == 'fixed' || github.event.label.name == 'not chromium')
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- env:
|
||||||
|
GH_TOKEN: ${{ github.token }}
|
||||||
|
LABEL: ${{ github.event.label.name }}
|
||||||
|
NUMBER: ${{ github.event.issue.number }}
|
||||||
|
run: |
|
||||||
|
if [ "$LABEL" = fixed ]; then
|
||||||
|
reason=completed
|
||||||
|
comment='Fixed, thanks for the report! The fix comes with the next release.'
|
||||||
|
else
|
||||||
|
reason='not planned'
|
||||||
|
comment='Thanks for the report! This app is not built on Chromium, Electron or CEF. So it has no autoscroll built in that this tool could turn on.'
|
||||||
|
fi
|
||||||
|
gh issue close "$NUMBER" --repo "$GITHUB_REPOSITORY" --reason "$reason" --comment "$comment"
|
||||||
@@ -2,6 +2,51 @@
|
|||||||
|
|
||||||
What each release brings, newest first. The [GitHub releases](https://github.com/LoonixTools/middleclick-autoscroll/releases) add every commit that went into it. Versions before `v1.1.0` came without notes.
|
What each release brings, newest first. The [GitHub releases](https://github.com/LoonixTools/middleclick-autoscroll/releases) add every commit that went into it. Versions before `v1.1.0` came without notes.
|
||||||
|
|
||||||
|
## v1.7.0
|
||||||
|
|
||||||
|
_2026-10-01_
|
||||||
|
|
||||||
|
Welcome to middleclick-autoscroll `v1.7.0`! Firefox gets autoscroll now, and so do LibreWolf, Zen, Floorp, Waterfox and Thunderbird. It starts working after your next login, or right away with **Re-apply everything**. Then restart Firefox.
|
||||||
|
|
||||||
|
### Highlights
|
||||||
|
|
||||||
|
- Autoscroll in Firefox
|
||||||
|
- LibreWolf, Zen, Floorp, Waterfox and Thunderbird too
|
||||||
|
- Flatpak and snap included
|
||||||
|
- New Firefox profiles get it on their own
|
||||||
|
|
||||||
|
## v1.6.1
|
||||||
|
|
||||||
|
_2026-09-29_
|
||||||
|
|
||||||
|
A small patch. Autoscroll now works in Steam with **Use experimental SteamRT3 Steam Client** turned on. And apps that start at login through a link, like Mullvad VPN, get autoscroll now instead of an error.
|
||||||
|
|
||||||
|
## v1.6.0
|
||||||
|
|
||||||
|
_2026-09-24_
|
||||||
|
|
||||||
|
Welcome to middleclick-autoscroll `v1.6.0`! The menu got quicker and simpler: search your apps, fewer settings, and no more waiting for a key. It now speaks eleven languages. The ten new ones are machine translated, so corrections are very welcome.
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img width="620" alt="The applications list in Konsole, with a search field on top" src="https://raw.githubusercontent.com/LoonixTools/middleclick-autoscroll/v1.6.0/res/screenshots/applications.png">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
### Highlights
|
||||||
|
|
||||||
|
- Search field in the applications list
|
||||||
|
- Long lists scroll
|
||||||
|
- Faster start
|
||||||
|
- Simpler settings
|
||||||
|
- Spotify in the applications list
|
||||||
|
- Results show up in the menu
|
||||||
|
- Ten more languages
|
||||||
|
|
||||||
|
## v1.5.4
|
||||||
|
|
||||||
|
_2026-09-24_
|
||||||
|
|
||||||
|
A small patch. For some of you Discord was still missing after `v1.5.3`, because an old result from before the update kept it out. Every update now starts with a fresh scan, so Discord shows up again after your next login, or right away with **Re-apply everything**.
|
||||||
|
|
||||||
## v1.5.3
|
## v1.5.3
|
||||||
|
|
||||||
_2026-09-24_
|
_2026-09-24_
|
||||||
|
|||||||
@@ -14,6 +14,10 @@
|
|||||||
- Subject as short as possible. Imperative, lowercase, no trailing period.
|
- Subject as short as possible. Imperative, lowercase, no trailing period.
|
||||||
- Body only when something genuinely cannot be inferred from the diff.
|
- Body only when something genuinely cannot be inferred from the diff.
|
||||||
- Never add `Co-Authored-By`, "Generated with" or any other AI attribution to commits or PR descriptions.
|
- Never add `Co-Authored-By`, "Generated with" or any other AI attribution to commits or PR descriptions.
|
||||||
|
- Do not commit or push before I have checked the changes locally and said they are fine. Then
|
||||||
|
commit and push. Several attempts at the same thing make one commit, and attempts that did not
|
||||||
|
work make none. Different things done in one session get a commit each. This also goes for
|
||||||
|
releases and tags.
|
||||||
|
|
||||||
## Releases
|
## Releases
|
||||||
|
|
||||||
@@ -64,3 +68,9 @@ when you press Enter." The list of commits follows on its own.
|
|||||||
- Commands and settings they type go in backticks, buttons and labels in bold.
|
- Commands and settings they type go in backticks, buttons and labels in bold.
|
||||||
- To change an old release: edit its entry, commit, then
|
- To change an old release: edit its entry, commit, then
|
||||||
`gh release edit <tag> --title <tag> --notes "$(.github/release-notes.sh <tag>)"`.
|
`gh release edit <tag> --title <tag> --notes "$(.github/release-notes.sh <tag>)"`.
|
||||||
|
|
||||||
|
## README
|
||||||
|
|
||||||
|
- New UI (a window, a screen, a menu, a setting, a notification) gets a screenshot in the README,
|
||||||
|
next to the text about it. Like for releases: a real screenshot of it running, in English.
|
||||||
|
- When a screen changes, take its screenshot again. The README never shows an old one.
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
# Overridable so a packager can pass the version it is actually building
|
# Overridable so a packager can pass the version it is actually building
|
||||||
# (`make VERSION=$pkgver`). The literal below is the fallback for builds
|
# (`make VERSION=$pkgver`). The literal below is the fallback for builds
|
||||||
# straight from a checkout, and is what a release tag has to carry.
|
# straight from a checkout, and is what a release tag has to carry.
|
||||||
VERSION ?= 1.5.3
|
VERSION ?= 1.7.0
|
||||||
|
|
||||||
PREFIX ?= /usr
|
PREFIX ?= /usr
|
||||||
DESTDIR ?=
|
DESTDIR ?=
|
||||||
@@ -36,7 +36,7 @@ else
|
|||||||
USERUNITDIR ?= $(DATADIR)/systemd/user
|
USERUNITDIR ?= $(DATADIR)/systemd/user
|
||||||
endif
|
endif
|
||||||
|
|
||||||
LINGUAS := de
|
LINGUAS := cs de es fr it nl pl pt_BR ru tr uk
|
||||||
MOFILES := $(patsubst %,po/%.mo,$(LINGUAS))
|
MOFILES := $(patsubst %,po/%.mo,$(LINGUAS))
|
||||||
MANPAGE := doc/middleclick-autoscroll.1
|
MANPAGE := doc/middleclick-autoscroll.1
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<h3 align="center">Middle-click autoscroll in every app that supports it.</h3>
|
<h3 align="center">Middle-click autoscroll in every app that supports it.</h3>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
Browsers, Electron apps like Discord and Spotify, Steam and anything else built on Chromium.
|
Firefox, Chromium browsers, Electron apps like Discord and Spotify, Steam and anything else built on Chromium.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h5 align="center">
|
<h5 align="center">
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
</h5>
|
</h5>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://buymeacoffee.com/felitendo"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" height="48"></a>
|
<a href="https://ko-fi.com/felitendo"><img src="https://storage.ko-fi.com/cdn/kofi5.png?v=6" alt="Buy me a coffee on Ko-fi" height="48"></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
@@ -95,10 +95,10 @@ Press **1**. Autoscroll _✨just works✨_, like on Windows.
|
|||||||
<details>
|
<details>
|
||||||
<summary>Applications</summary>
|
<summary>Applications</summary>
|
||||||
|
|
||||||
**3** lists every app it found. Space turns one on or off.
|
**3** lists every app it found. Type to search, then Space turns one on or off.
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="res/screenshots/applications.png" alt="The applications list in Konsole, each with how it gets autoscroll" width="620">
|
<img src="res/screenshots/applications.png" alt="The applications list in Konsole, with a search field on top and how each app gets autoscroll" width="620">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
@@ -108,22 +108,31 @@ Press **1**. Autoscroll _✨just works✨_, like on Windows.
|
|||||||
<details>
|
<details>
|
||||||
<summary>How it works</summary>
|
<summary>How it works</summary>
|
||||||
|
|
||||||
Chromium, Electron and CEF all have autoscroll built in, but it is off on Linux. One flag turns it on:
|
Chromium, Electron and CEF all have autoscroll built in. On Linux it is off, because middle click
|
||||||
|
pastes there. One flag turns it back on:
|
||||||
|
|
||||||
```
|
```
|
||||||
--enable-blink-features=MiddleClickAutoscroll
|
--enable-blink-features=MiddleClickAutoscroll
|
||||||
```
|
```
|
||||||
|
|
||||||
Setting that for every app by hand is a pain and breaks with updates, so this tool does it for you.
|
Adding it to every app by hand is a pain, and updates can undo it. This tool does it for you:
|
||||||
New apps are picked up on their own. AppImages are covered too, without unpacking or starting them.
|
|
||||||
|
|
||||||
Some browsers want a different name. Brave and Helium ship the feature under their own, so browsers
|
- It finds every app built on Chromium. AppImages too, without unpacking or starting them.
|
||||||
are handed all of the names at once. A name a browser does not know is ignored.
|
- It puts the flag where the app reads it: the app's flags file, or a copy of its menu entry in
|
||||||
|
your home folder.
|
||||||
|
- It watches for new apps and covers them on their own.
|
||||||
|
- It only writes to your home folder, and `disable` puts everything back.
|
||||||
|
|
||||||
Steam is its own case. It builds the command line for its interface itself, and repairs every file
|
**Browsers** get a spelling of the flag that shows no warning bar. Brave and Helium also get their
|
||||||
that looks changed. So the flag goes into the script that starts the web helper, written to keep the
|
own name for the feature. A browser ignores names it does not know.
|
||||||
file at the size and date Steam recorded. Steam finds nothing to repair, and autoscroll works in the
|
|
||||||
store and the library. After a Steam update the patch is put back on its own.
|
**Firefox** has autoscroll too, but as a setting, not a flag. It goes into the `user.js` of each
|
||||||
|
profile. The same works for LibreWolf, Zen, Floorp, Waterfox and Thunderbird.
|
||||||
|
|
||||||
|
**Steam** builds its own command line and repairs any file that looks changed. So the flag goes into
|
||||||
|
the script that starts its web helper, and the file keeps the size and date Steam expects. Steam
|
||||||
|
finds nothing to repair, and autoscroll works in the store and the library. After a Steam update,
|
||||||
|
the patch comes back on its own.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|||||||
@@ -34,9 +34,15 @@ it). A name a browser does not know is ignored. It works on any distribution:
|
|||||||
which of the routes below an application takes is read off its launcher, not
|
which of the routes below an application takes is read off its launcher, not
|
||||||
assumed from where the launcher came from.
|
assumed from where the launcher came from.
|
||||||
|
|
||||||
|
Firefox and everything else built on Gecko has autoscroll as well, behind a
|
||||||
|
setting rather than a flag. See *FIREFOX*.
|
||||||
|
|
||||||
Run without a command it shows an interactive menu. Everything it can be told
|
Run without a command it shows an interactive menu. Everything it can be told
|
||||||
is reachable from there; the configuration file behind it does not need to be
|
is reachable from there; the configuration file behind it does not need to be
|
||||||
edited by hand.
|
edited by hand. Its applications list turns single applications on or off,
|
||||||
|
Steam, Spotify and Firefox included. Its settings hold the rest: the desktop's
|
||||||
|
middle-click paste, the watcher, and more Chromium arguments for every
|
||||||
|
application.
|
||||||
|
|
||||||
Nothing outside the user's home directory is written to, and running it as root
|
Nothing outside the user's home directory is written to, and running it as root
|
||||||
is refused.
|
is refused.
|
||||||
@@ -66,8 +72,7 @@ is refused.
|
|||||||
last run was.
|
last run was.
|
||||||
|
|
||||||
*list*
|
*list*
|
||||||
Every Chromium-based application that was found, and how each one is
|
Every application that was found, and how each one is handled.
|
||||||
handled.
|
|
||||||
|
|
||||||
*-h*, *--help*
|
*-h*, *--help*
|
||||||
Show a summary of the commands.
|
Show a summary of the commands.
|
||||||
@@ -112,7 +117,10 @@ Two ways, chosen per application.
|
|||||||
|
|
||||||
Programs that start themselves at login write their own entry into
|
Programs that start themselves at login write their own entry into
|
||||||
_~/.config/autostart_ pointing straight at their binary, bypassing the menu
|
_~/.config/autostart_ pointing straight at their binary, bypassing the menu
|
||||||
entry entirely. Those are patched in place as well.
|
entry entirely. Those are patched in place as well, unless the application is
|
||||||
|
turned off in the applications list. An entry that is a symlink, often to an
|
||||||
|
application's entry in _/usr/share/applications_, is replaced by a patched
|
||||||
|
file rather than written through, and undoing puts the link back.
|
||||||
|
|
||||||
Shortcuts on the desktop itself are patched in place too. Nothing in the XDG
|
Shortcuts on the desktop itself are patched in place too. Nothing in the XDG
|
||||||
search path looks at that folder, so a shortcut that lives only there would
|
search path looks at that folder, so a shortcut that lives only there would
|
||||||
@@ -129,6 +137,12 @@ helper, inside Steam's own installation:
|
|||||||
|
|
||||||
~/.local/share/Steam/ubuntu12_64/steamwebhelper_sniper_wrap.sh
|
~/.local/share/Steam/ubuntu12_64/steamwebhelper_sniper_wrap.sh
|
||||||
|
|
||||||
|
The steamrt3 client, a beta for now, has a script of its own:
|
||||||
|
|
||||||
|
~/.local/share/Steam/steamrt64/steamwebhelper.sh
|
||||||
|
|
||||||
|
Both are patched where both are there, so switching clients keeps autoscroll.
|
||||||
|
|
||||||
Where that installation is depends on how Steam was installed:
|
Where that installation is depends on how Steam was installed:
|
||||||
_~/.local/share/Steam_ for Valve's own package and Arch's,
|
_~/.local/share/Steam_ for Valve's own package and Arch's,
|
||||||
_~/.steam/debian-installation_ for Debian's, and the private tree of the
|
_~/.steam/debian-installation_ for Debian's, and the private tree of the
|
||||||
@@ -150,11 +164,16 @@ it was given arguments for, and that one carries no arguments of anybody's. One
|
|||||||
wrong length costs the whole client package downloaded, extracted and installed
|
wrong length costs the whole client package downloaded, extracted and installed
|
||||||
again, and a client that quits at the end of it instead of coming up.
|
again, and a client that quits at the end of it instead of coming up.
|
||||||
|
|
||||||
So where the comments cannot pay for the argument, or a client update has
|
The steamrt3 script has no comments to pay with. So it is copied aside as
|
||||||
changed how the helper is started, nothing is written and the status screen
|
_steamwebhelper.sh.orig_, and a stub of the same size takes its place. The stub
|
||||||
says Steam is not patched. Nothing goes on Steam's launcher entry, its
|
runs the copy with the argument added. Steam only checks the files it knows,
|
||||||
autostart entry or the shortcuts it writes for single games either, and Steam
|
and the copy is not one of them.
|
||||||
goes on repairing its own installation.
|
|
||||||
|
So where neither fits, or a client update has changed how the helper is
|
||||||
|
started, nothing is written and the status screen says Steam is not patched.
|
||||||
|
Nothing goes on Steam's launcher entry, its autostart entry or the shortcuts it
|
||||||
|
writes for single games either, and Steam goes on repairing its own
|
||||||
|
installation.
|
||||||
|
|
||||||
An installation patched by an earlier version, which appended where the
|
An installation patched by an earlier version, which appended where the
|
||||||
comments were short, is written again to fit at the next apply, or taken back
|
comments were short, is written again to fit at the next apply, or taken back
|
||||||
@@ -170,9 +189,33 @@ rather than the one from before the update.
|
|||||||
The official client is CEF rather than Electron. Installed through
|
The official client is CEF rather than Electron. Installed through
|
||||||
*spotify-launcher*, it is started by a program that builds its own command line
|
*spotify-launcher*, it is started by a program that builds its own command line
|
||||||
and has a configuration file with a slot for extra arguments; that slot is
|
and has a configuration file with a slot for extra arguments; that slot is
|
||||||
where the flag goes. Installed as a plain package, a Flatpak or a snap, it is
|
where the flag goes, and the launcher shows up in the applications list like
|
||||||
|
any other application. Installed as a plain package, a Flatpak or a snap, it is
|
||||||
an ordinary desktop entry and needs nothing special.
|
an ordinary desktop entry and needs nothing special.
|
||||||
|
|
||||||
|
# FIREFOX
|
||||||
|
|
||||||
|
Firefox has autoscroll of its own, switched off on Linux. There is no flag for
|
||||||
|
it, only a setting: *general.autoScroll*. It goes into _user.js_ in every
|
||||||
|
profile, as a marked block, and Firefox reads that file at every start. The
|
||||||
|
same goes for everything built on Gecko: LibreWolf, Zen, Floorp, Waterfox and
|
||||||
|
Thunderbird.
|
||||||
|
|
||||||
|
Where the profiles are is read from the application's own _application.ini_,
|
||||||
|
the way Firefox works it out: _~/.mozilla/firefox_, or
|
||||||
|
_~/.config/mozilla/firefox_ for a new install of Firefox 147 or later. A Flatpak
|
||||||
|
or a snap has the same inside its own folder. Every profile in _profiles.ini_
|
||||||
|
is covered. The watcher looks at that file too, so a new profile is covered
|
||||||
|
from its second start on.
|
||||||
|
|
||||||
|
A profile where the setting is already on, in Firefox's own settings or in
|
||||||
|
_user.js_, is left alone and not recorded.
|
||||||
|
|
||||||
|
Firefox copies the setting into _prefs.js_, so *disable* takes it out of both
|
||||||
|
files. A Firefox that is still open would write it back when it quits. So for
|
||||||
|
that profile _user.js_ says *false* instead, and the next *disable* or
|
||||||
|
*enable* clears it up.
|
||||||
|
|
||||||
# MIDDLE-CLICK PASTE
|
# MIDDLE-CLICK PASTE
|
||||||
|
|
||||||
Inside a Chromium application the argument settles this on its own: with
|
Inside a Chromium application the argument settles this on its own: with
|
||||||
@@ -251,8 +294,12 @@ _~/.config/kwinrc_
|
|||||||
written when the desktop's middle-click paste is turned off, and put
|
written when the desktop's middle-click paste is turned off, and put
|
||||||
back by *disable*.
|
back by *disable*.
|
||||||
|
|
||||||
|
_user.js_ in every Firefox profile
|
||||||
|
Gets a block between *// >>> middleclick-autoscroll* and
|
||||||
|
*// <<< middleclick-autoscroll*. Nothing else in the file is touched.
|
||||||
|
|
||||||
_~/.cache/middleclick-autoscroll/detect_
|
_~/.cache/middleclick-autoscroll/detect_
|
||||||
Which programs were found to be Chromium, keyed by size and modification
|
Which programs were found to be Chromium or Gecko, keyed by size and modification
|
||||||
time. Its first line says which version of the program wrote it, and a
|
time. Its first line says which version of the program wrote it, and a
|
||||||
file from an older one is ignored rather than trusted. Otherwise an entry
|
file from an older one is ignored rather than trusted. Otherwise an entry
|
||||||
for a file that has not changed would never be looked at again.
|
for a file that has not changed would never be looked at again.
|
||||||
|
|||||||
@@ -0,0 +1,268 @@
|
|||||||
|
# Czech translation for middleclick-autoscroll.
|
||||||
|
# Machine translated. Corrections are welcome.
|
||||||
|
# Copyright (C) 2026 Felitendo
|
||||||
|
# This file is distributed under the same license as middleclick-autoscroll.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: middleclick-autoscroll 1.6.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/middleclick-autoscroll/"
|
||||||
|
"issues\n"
|
||||||
|
"POT-Creation-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"PO-Revision-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"Last-Translator: machine translation\n"
|
||||||
|
"Language-Team: Czech\n"
|
||||||
|
"Language: cs\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#. Status labels
|
||||||
|
msgid "ON"
|
||||||
|
msgstr "ZAPNUTO"
|
||||||
|
|
||||||
|
msgid "OFF"
|
||||||
|
msgstr "VYPNUTO"
|
||||||
|
|
||||||
|
msgid "on"
|
||||||
|
msgstr "zapnuto"
|
||||||
|
|
||||||
|
msgid "off"
|
||||||
|
msgstr "vypnuto"
|
||||||
|
|
||||||
|
msgid "(none)"
|
||||||
|
msgstr "(žádné)"
|
||||||
|
|
||||||
|
msgid "flag file"
|
||||||
|
msgstr "soubor s příznaky"
|
||||||
|
|
||||||
|
msgid "launcher"
|
||||||
|
msgstr "spouštěč"
|
||||||
|
|
||||||
|
msgid "profile"
|
||||||
|
msgstr "profil"
|
||||||
|
|
||||||
|
msgid "cannot tell"
|
||||||
|
msgstr "nelze určit"
|
||||||
|
|
||||||
|
msgid "not patched yet"
|
||||||
|
msgstr "zatím nepoužito"
|
||||||
|
|
||||||
|
#. Status block
|
||||||
|
msgid "Autoscroll"
|
||||||
|
msgstr "Autoscroll"
|
||||||
|
|
||||||
|
msgid "Applications covered"
|
||||||
|
msgstr "Pokryté aplikace"
|
||||||
|
|
||||||
|
msgid "%d of %d"
|
||||||
|
msgstr "%d z %d"
|
||||||
|
|
||||||
|
msgid "Not identified"
|
||||||
|
msgstr "Nerozpoznáno"
|
||||||
|
|
||||||
|
msgid "%d (see the applications list)"
|
||||||
|
msgstr "%d (viz seznam aplikací)"
|
||||||
|
|
||||||
|
msgid "Steam"
|
||||||
|
msgstr "Steam"
|
||||||
|
|
||||||
|
msgid "Middle-click paste"
|
||||||
|
msgstr "Vkládání kolečkem"
|
||||||
|
|
||||||
|
msgid "New applications"
|
||||||
|
msgstr "Nové aplikace"
|
||||||
|
|
||||||
|
msgid "Last applied"
|
||||||
|
msgstr "Naposledy použito"
|
||||||
|
|
||||||
|
msgid "Applications pick this up the next time they are started."
|
||||||
|
msgstr "Aplikace to převezmou při příštím spuštění."
|
||||||
|
|
||||||
|
#. Menu
|
||||||
|
msgid "Turn autoscroll on or off"
|
||||||
|
msgstr "Zapnout nebo vypnout autoscroll"
|
||||||
|
|
||||||
|
msgid "Re-apply everything"
|
||||||
|
msgstr "Znovu použít vše"
|
||||||
|
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Aplikace"
|
||||||
|
|
||||||
|
msgid "Settings"
|
||||||
|
msgstr "Nastavení"
|
||||||
|
|
||||||
|
msgid "Quit"
|
||||||
|
msgstr "Konec"
|
||||||
|
|
||||||
|
msgid "Press any key to continue..."
|
||||||
|
msgstr "Stiskněte libovolnou klávesu..."
|
||||||
|
|
||||||
|
msgid "One moment..."
|
||||||
|
msgstr "Okamžik..."
|
||||||
|
|
||||||
|
#. Settings
|
||||||
|
msgid "Turn off middle-click paste"
|
||||||
|
msgstr "Vypnout vkládání kolečkem"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Stops middle click from pasting anywhere else. Starts with the next login."
|
||||||
|
msgstr "Kolečko už jinde nevkládá. Platí od příštího přihlášení."
|
||||||
|
|
||||||
|
msgid "Cover new applications"
|
||||||
|
msgstr "Pokrýt nové aplikace"
|
||||||
|
|
||||||
|
msgid "Applications installed later get autoscroll on their own."
|
||||||
|
msgstr "Později nainstalované aplikace dostanou autoscroll samy."
|
||||||
|
|
||||||
|
msgid "More Chromium arguments"
|
||||||
|
msgstr "Další argumenty Chromia"
|
||||||
|
|
||||||
|
msgid "Passed to every application along with the autoscroll one."
|
||||||
|
msgstr "Předávají se každé aplikaci spolu s tím pro autoscroll."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: change, q: back"
|
||||||
|
msgstr "Nahoru/Dolů: vybrat, Mezerník: změnit, q: zpět"
|
||||||
|
|
||||||
|
msgid "Arguments separated by spaces, empty for none:"
|
||||||
|
msgstr "Argumenty oddělené mezerami, prázdné pro žádné:"
|
||||||
|
|
||||||
|
msgid "Could not save the setting."
|
||||||
|
msgstr "Nastavení se nepodařilo uložit."
|
||||||
|
|
||||||
|
#. Applications screen
|
||||||
|
msgid "Looking at the installed applications..."
|
||||||
|
msgstr "Procházím nainstalované aplikace..."
|
||||||
|
|
||||||
|
msgid "No supported applications found."
|
||||||
|
msgstr "Nenalezeny žádné podporované aplikace."
|
||||||
|
|
||||||
|
msgid "Anything marked \"cannot tell\" stays off until it is turned on here."
|
||||||
|
msgstr "Co je označeno „nelze určit“, zůstane vypnuté, dokud to tu nezapnete."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. This is what would be covered."
|
||||||
|
msgstr "Autoscroll je vypnutý. Toto by bylo pokryto."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: turn on or off, q: back"
|
||||||
|
msgstr "Nahoru/Dolů: vybrat, Mezerník: zapnout či vypnout, q: zpět"
|
||||||
|
|
||||||
|
msgid "Search:"
|
||||||
|
msgstr "Hledat:"
|
||||||
|
|
||||||
|
msgid "Type to search, Down: go to the list, Esc: back"
|
||||||
|
msgstr "Pište pro hledání, Dolů: do seznamu, Esc: zpět"
|
||||||
|
|
||||||
|
msgid "No matches."
|
||||||
|
msgstr "Žádné výsledky."
|
||||||
|
|
||||||
|
#. Results
|
||||||
|
msgid "Autoscroll is on for %d applications."
|
||||||
|
msgstr "Autoscroll je zapnutý. Aplikací: %d."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Applications that are already running pick this up when they are restarted."
|
||||||
|
msgstr "Již spuštěné aplikace to převezmou po restartu."
|
||||||
|
|
||||||
|
msgid "Could not start the watcher for newly installed applications."
|
||||||
|
msgstr "Sledování nových aplikací se nepodařilo spustit."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"No systemd user session, so newly installed applications will not be picked "
|
||||||
|
"up on their own."
|
||||||
|
msgstr ""
|
||||||
|
"Chybí uživatelská relace systemd, takže nově nainstalované aplikace nebudou "
|
||||||
|
"zachyceny samy."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off and everything that was changed has been put back."
|
||||||
|
msgstr "Autoscroll je vypnutý a všechny změny byly vráceny."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. Turn it on first."
|
||||||
|
msgstr "Autoscroll je vypnutý. Nejdřív ho zapněte."
|
||||||
|
|
||||||
|
msgid "Applied again to %d applications."
|
||||||
|
msgstr "Znovu použito. Aplikací: %d."
|
||||||
|
|
||||||
|
msgid "Applied to %d applications."
|
||||||
|
msgstr "Použito. Aplikací: %d."
|
||||||
|
|
||||||
|
msgid "Already applied to %d applications."
|
||||||
|
msgstr "Už použito. Aplikací: %d."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam starts its interface in a way this version cannot change without Steam "
|
||||||
|
"noticing; leaving it alone."
|
||||||
|
msgstr ""
|
||||||
|
"Steam spouští své rozhraní způsobem, který tato verze nedokáže změnit, aniž "
|
||||||
|
"by si toho Steam všiml; Steam zůstává beze změny."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam's interface cannot be given the flag without leaving a file Steam "
|
||||||
|
"would reinstall; the change has been taken back."
|
||||||
|
msgstr ""
|
||||||
|
"Rozhraní Steamu nelze dát příznak bez souboru, který by Steam znovu "
|
||||||
|
"nainstaloval; změna byla vrácena."
|
||||||
|
|
||||||
|
msgid "Middle click stops pasting at the next login."
|
||||||
|
msgstr "Kolečko přestane vkládat od příštího přihlášení."
|
||||||
|
|
||||||
|
#. Help
|
||||||
|
msgid "Usage: middleclick-autoscroll [command]"
|
||||||
|
msgstr "Použití: middleclick-autoscroll [příkaz]"
|
||||||
|
|
||||||
|
msgid "Commands:"
|
||||||
|
msgstr "Příkazy:"
|
||||||
|
|
||||||
|
msgid "Turn autoscroll on"
|
||||||
|
msgstr "Zapnout autoscroll"
|
||||||
|
|
||||||
|
msgid "Turn it off and put everything back"
|
||||||
|
msgstr "Vypnout a vše vrátit"
|
||||||
|
|
||||||
|
msgid "Apply to anything installed since the last run"
|
||||||
|
msgstr "Použít na vše nainstalované od posledního spuštění"
|
||||||
|
|
||||||
|
msgid "Take everything back and apply it again"
|
||||||
|
msgstr "Vše vrátit a použít znovu"
|
||||||
|
|
||||||
|
msgid "Show what is covered"
|
||||||
|
msgstr "Ukázat, co je pokryto"
|
||||||
|
|
||||||
|
msgid "List every application that was found"
|
||||||
|
msgstr "Vypsat všechny nalezené aplikace"
|
||||||
|
|
||||||
|
msgid "Show this help"
|
||||||
|
msgstr "Zobrazit tuto nápovědu"
|
||||||
|
|
||||||
|
msgid "Show the version"
|
||||||
|
msgstr "Zobrazit verzi"
|
||||||
|
|
||||||
|
msgid "Without a command an interactive menu is shown."
|
||||||
|
msgstr "Bez příkazu se zobrazí interaktivní nabídka."
|
||||||
|
|
||||||
|
msgid "Unknown command: %s"
|
||||||
|
msgstr "Neznámý příkaz: %s"
|
||||||
|
|
||||||
|
#. Time
|
||||||
|
msgid "never"
|
||||||
|
msgstr "nikdy"
|
||||||
|
|
||||||
|
msgid "just now"
|
||||||
|
msgstr "právě teď"
|
||||||
|
|
||||||
|
msgid "1 minute ago"
|
||||||
|
msgstr "před 1 minutou"
|
||||||
|
|
||||||
|
msgid "%d minutes ago"
|
||||||
|
msgstr "před %d min"
|
||||||
|
|
||||||
|
msgid "1 hour ago"
|
||||||
|
msgstr "před 1 hodinou"
|
||||||
|
|
||||||
|
msgid "%d hours ago"
|
||||||
|
msgstr "před %d h"
|
||||||
|
|
||||||
|
msgid "1 day ago"
|
||||||
|
msgstr "před 1 dnem"
|
||||||
|
|
||||||
|
msgid "%d days ago"
|
||||||
|
msgstr "před %d dny"
|
||||||
@@ -4,11 +4,11 @@
|
|||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: middleclick-autoscroll 1.0.3\n"
|
"Project-Id-Version: middleclick-autoscroll 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/middleclick-autoscroll/"
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/middleclick-autoscroll/"
|
||||||
"issues\n"
|
"issues\n"
|
||||||
"POT-Creation-Date: 2026-08-16 00:00+0200\n"
|
"POT-Creation-Date: 2026-09-24 00:00+0200\n"
|
||||||
"PO-Revision-Date: 2026-08-16 00:00+0200\n"
|
"PO-Revision-Date: 2026-09-24 00:00+0200\n"
|
||||||
"Last-Translator: Felitendo\n"
|
"Last-Translator: Felitendo\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
@@ -38,6 +38,9 @@ msgstr "Flag-Datei"
|
|||||||
msgid "launcher"
|
msgid "launcher"
|
||||||
msgstr "Startereintrag"
|
msgstr "Startereintrag"
|
||||||
|
|
||||||
|
msgid "profile"
|
||||||
|
msgstr "Profil"
|
||||||
|
|
||||||
msgid "cannot tell"
|
msgid "cannot tell"
|
||||||
msgstr "nicht erkennbar"
|
msgstr "nicht erkennbar"
|
||||||
|
|
||||||
@@ -94,36 +97,32 @@ msgstr "Beenden"
|
|||||||
msgid "Press any key to continue..."
|
msgid "Press any key to continue..."
|
||||||
msgstr "Beliebige Taste drücken …"
|
msgstr "Beliebige Taste drücken …"
|
||||||
|
|
||||||
|
msgid "One moment..."
|
||||||
|
msgstr "Einen Moment …"
|
||||||
|
|
||||||
#. Settings
|
#. Settings
|
||||||
msgid "Electron and CEF applications"
|
msgid "Turn off middle-click paste"
|
||||||
msgstr "Electron- und CEF-Anwendungen"
|
msgstr "Mittelklick-Einfügen abschalten"
|
||||||
|
|
||||||
msgid "Chromium-based browsers"
|
msgid ""
|
||||||
msgstr "Chromium-basierte Browser"
|
"Stops middle click from pasting anywhere else. Starts with the next login."
|
||||||
|
msgstr ""
|
||||||
|
"Mittelklick fügt auch sonst nirgends mehr ein. Ab der nächsten Anmeldung."
|
||||||
|
|
||||||
msgid "Flatpak applications"
|
msgid "Cover new applications"
|
||||||
msgstr "Flatpak-Anwendungen"
|
msgstr "Neue Anwendungen abdecken"
|
||||||
|
|
||||||
msgid "Snap applications"
|
msgid "Applications installed later get autoscroll on their own."
|
||||||
msgstr "Snap-Anwendungen"
|
msgstr "Später installierte Anwendungen bekommen Autoscroll von selbst."
|
||||||
|
|
||||||
msgid "Programs that start themselves at login"
|
msgid "More Chromium arguments"
|
||||||
msgstr "Programme, die sich beim Anmelden selbst starten"
|
msgstr "Weitere Chromium-Argumente"
|
||||||
|
|
||||||
msgid "Spotify"
|
msgid "Passed to every application along with the autoscroll one."
|
||||||
msgstr "Spotify"
|
msgstr "Gehen zusammen mit dem Autoscroll-Argument an jede Anwendung."
|
||||||
|
|
||||||
msgid "Turn off KDE's middle-click paste"
|
msgid "Up/Down: select, Space: change, q: back"
|
||||||
msgstr "KDEs Mittelklick-Einfügen abschalten"
|
msgstr "Hoch/Runter: wählen, Leertaste: ändern, q: zurück"
|
||||||
|
|
||||||
msgid "Apply to newly installed applications"
|
|
||||||
msgstr "Auf neu installierte Anwendungen anwenden"
|
|
||||||
|
|
||||||
msgid "Additional Chromium arguments"
|
|
||||||
msgstr "Zusätzliche Chromium-Argumente"
|
|
||||||
|
|
||||||
msgid "Up/Down: select, Space or Right: change, q: back"
|
|
||||||
msgstr "Hoch/Runter: wählen, Leertaste oder Rechts: ändern, q: zurück"
|
|
||||||
|
|
||||||
msgid "Arguments separated by spaces, empty for none:"
|
msgid "Arguments separated by spaces, empty for none:"
|
||||||
msgstr "Argumente mit Leerzeichen getrennt, leer für keine:"
|
msgstr "Argumente mit Leerzeichen getrennt, leer für keine:"
|
||||||
@@ -135,13 +134,11 @@ msgstr "Einstellung konnte nicht gespeichert werden."
|
|||||||
msgid "Looking at the installed applications..."
|
msgid "Looking at the installed applications..."
|
||||||
msgstr "Installierte Anwendungen werden durchgesehen …"
|
msgstr "Installierte Anwendungen werden durchgesehen …"
|
||||||
|
|
||||||
msgid "No Chromium-based applications found."
|
msgid "No supported applications found."
|
||||||
msgstr "Keine Chromium-basierten Anwendungen gefunden."
|
msgstr "Keine unterstützten Anwendungen gefunden."
|
||||||
|
|
||||||
msgid "Anything not identified is left alone until it is turned on here."
|
msgid "Anything marked \"cannot tell\" stays off until it is turned on here."
|
||||||
msgstr ""
|
msgstr "Was „nicht erkennbar“ ist, bleibt aus, bis es hier eingeschaltet wird."
|
||||||
"Nicht erkannte Anwendungen bleiben unangetastet, bis sie hier eingeschaltet "
|
|
||||||
"werden."
|
|
||||||
|
|
||||||
msgid "Autoscroll is off. This is what would be covered."
|
msgid "Autoscroll is off. This is what would be covered."
|
||||||
msgstr "Autoscroll ist aus. Das hier wäre abgedeckt."
|
msgstr "Autoscroll ist aus. Das hier wäre abgedeckt."
|
||||||
@@ -149,6 +146,15 @@ msgstr "Autoscroll ist aus. Das hier wäre abgedeckt."
|
|||||||
msgid "Up/Down: select, Space: turn on or off, q: back"
|
msgid "Up/Down: select, Space: turn on or off, q: back"
|
||||||
msgstr "Hoch/Runter: wählen, Leertaste: ein- oder ausschalten, q: zurück"
|
msgstr "Hoch/Runter: wählen, Leertaste: ein- oder ausschalten, q: zurück"
|
||||||
|
|
||||||
|
msgid "Search:"
|
||||||
|
msgstr "Suchen:"
|
||||||
|
|
||||||
|
msgid "Type to search, Down: go to the list, Esc: back"
|
||||||
|
msgstr "Tippen zum Suchen, Runter: zur Liste, Esc: zurück"
|
||||||
|
|
||||||
|
msgid "No matches."
|
||||||
|
msgstr "Keine Treffer."
|
||||||
|
|
||||||
#. Results
|
#. Results
|
||||||
msgid "Autoscroll is on for %d applications."
|
msgid "Autoscroll is on for %d applications."
|
||||||
msgstr "Autoscroll ist für %d Anwendungen an."
|
msgstr "Autoscroll ist für %d Anwendungen an."
|
||||||
|
|||||||
@@ -0,0 +1,269 @@
|
|||||||
|
# Spanish translation for middleclick-autoscroll.
|
||||||
|
# Machine translated. Corrections are welcome.
|
||||||
|
# Copyright (C) 2026 Felitendo
|
||||||
|
# This file is distributed under the same license as middleclick-autoscroll.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: middleclick-autoscroll 1.6.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/middleclick-autoscroll/"
|
||||||
|
"issues\n"
|
||||||
|
"POT-Creation-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"PO-Revision-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"Last-Translator: machine translation\n"
|
||||||
|
"Language-Team: Spanish\n"
|
||||||
|
"Language: es\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#. Status labels
|
||||||
|
msgid "ON"
|
||||||
|
msgstr "ACTIVADO"
|
||||||
|
|
||||||
|
msgid "OFF"
|
||||||
|
msgstr "DESACTIVADO"
|
||||||
|
|
||||||
|
msgid "on"
|
||||||
|
msgstr "activado"
|
||||||
|
|
||||||
|
msgid "off"
|
||||||
|
msgstr "desactivado"
|
||||||
|
|
||||||
|
msgid "(none)"
|
||||||
|
msgstr "(ninguno)"
|
||||||
|
|
||||||
|
msgid "flag file"
|
||||||
|
msgstr "archivo de flags"
|
||||||
|
|
||||||
|
msgid "launcher"
|
||||||
|
msgstr "lanzador"
|
||||||
|
|
||||||
|
msgid "profile"
|
||||||
|
msgstr "perfil"
|
||||||
|
|
||||||
|
msgid "cannot tell"
|
||||||
|
msgstr "no se sabe"
|
||||||
|
|
||||||
|
msgid "not patched yet"
|
||||||
|
msgstr "aún sin aplicar"
|
||||||
|
|
||||||
|
#. Status block
|
||||||
|
msgid "Autoscroll"
|
||||||
|
msgstr "Autoscroll"
|
||||||
|
|
||||||
|
msgid "Applications covered"
|
||||||
|
msgstr "Aplicaciones cubiertas"
|
||||||
|
|
||||||
|
msgid "%d of %d"
|
||||||
|
msgstr "%d de %d"
|
||||||
|
|
||||||
|
msgid "Not identified"
|
||||||
|
msgstr "Sin identificar"
|
||||||
|
|
||||||
|
msgid "%d (see the applications list)"
|
||||||
|
msgstr "%d (ver la lista de aplicaciones)"
|
||||||
|
|
||||||
|
msgid "Steam"
|
||||||
|
msgstr "Steam"
|
||||||
|
|
||||||
|
msgid "Middle-click paste"
|
||||||
|
msgstr "Pegar con clic central"
|
||||||
|
|
||||||
|
msgid "New applications"
|
||||||
|
msgstr "Aplicaciones nuevas"
|
||||||
|
|
||||||
|
msgid "Last applied"
|
||||||
|
msgstr "Aplicado por última vez"
|
||||||
|
|
||||||
|
msgid "Applications pick this up the next time they are started."
|
||||||
|
msgstr "Las aplicaciones lo toman la próxima vez que se inicien."
|
||||||
|
|
||||||
|
#. Menu
|
||||||
|
msgid "Turn autoscroll on or off"
|
||||||
|
msgstr "Activar o desactivar autoscroll"
|
||||||
|
|
||||||
|
msgid "Re-apply everything"
|
||||||
|
msgstr "Volver a aplicar todo"
|
||||||
|
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Aplicaciones"
|
||||||
|
|
||||||
|
msgid "Settings"
|
||||||
|
msgstr "Ajustes"
|
||||||
|
|
||||||
|
msgid "Quit"
|
||||||
|
msgstr "Salir"
|
||||||
|
|
||||||
|
msgid "Press any key to continue..."
|
||||||
|
msgstr "Pulsa cualquier tecla para continuar..."
|
||||||
|
|
||||||
|
msgid "One moment..."
|
||||||
|
msgstr "Un momento..."
|
||||||
|
|
||||||
|
#. Settings
|
||||||
|
msgid "Turn off middle-click paste"
|
||||||
|
msgstr "Desactivar pegar con clic central"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Stops middle click from pasting anywhere else. Starts with the next login."
|
||||||
|
msgstr ""
|
||||||
|
"El clic central ya no pega en ningún otro sitio. Desde el próximo inicio."
|
||||||
|
|
||||||
|
msgid "Cover new applications"
|
||||||
|
msgstr "Cubrir aplicaciones nuevas"
|
||||||
|
|
||||||
|
msgid "Applications installed later get autoscroll on their own."
|
||||||
|
msgstr "Las aplicaciones instaladas más tarde reciben autoscroll solas."
|
||||||
|
|
||||||
|
msgid "More Chromium arguments"
|
||||||
|
msgstr "Más argumentos de Chromium"
|
||||||
|
|
||||||
|
msgid "Passed to every application along with the autoscroll one."
|
||||||
|
msgstr "Se pasan a cada aplicación junto con el de autoscroll."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: change, q: back"
|
||||||
|
msgstr "Arriba/Abajo: elegir, Espacio: cambiar, q: volver"
|
||||||
|
|
||||||
|
msgid "Arguments separated by spaces, empty for none:"
|
||||||
|
msgstr "Argumentos separados por espacios, vacío para ninguno:"
|
||||||
|
|
||||||
|
msgid "Could not save the setting."
|
||||||
|
msgstr "No se pudo guardar el ajuste."
|
||||||
|
|
||||||
|
#. Applications screen
|
||||||
|
msgid "Looking at the installed applications..."
|
||||||
|
msgstr "Revisando las aplicaciones instaladas..."
|
||||||
|
|
||||||
|
msgid "No supported applications found."
|
||||||
|
msgstr "No se encontraron aplicaciones compatibles."
|
||||||
|
|
||||||
|
msgid "Anything marked \"cannot tell\" stays off until it is turned on here."
|
||||||
|
msgstr "Lo marcado como «no se sabe» sigue desactivado hasta activarlo aquí."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. This is what would be covered."
|
||||||
|
msgstr "Autoscroll está desactivado. Esto es lo que se cubriría."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: turn on or off, q: back"
|
||||||
|
msgstr "Arriba/Abajo: elegir, Espacio: activar o desactivar, q: volver"
|
||||||
|
|
||||||
|
msgid "Search:"
|
||||||
|
msgstr "Buscar:"
|
||||||
|
|
||||||
|
msgid "Type to search, Down: go to the list, Esc: back"
|
||||||
|
msgstr "Escribe para buscar, Abajo: ir a la lista, Esc: volver"
|
||||||
|
|
||||||
|
msgid "No matches."
|
||||||
|
msgstr "Sin resultados."
|
||||||
|
|
||||||
|
#. Results
|
||||||
|
msgid "Autoscroll is on for %d applications."
|
||||||
|
msgstr "Autoscroll está activado para %d aplicaciones."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Applications that are already running pick this up when they are restarted."
|
||||||
|
msgstr "Las aplicaciones que ya están abiertas lo toman al reiniciarse."
|
||||||
|
|
||||||
|
msgid "Could not start the watcher for newly installed applications."
|
||||||
|
msgstr "No se pudo iniciar la vigilancia de aplicaciones nuevas."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"No systemd user session, so newly installed applications will not be picked "
|
||||||
|
"up on their own."
|
||||||
|
msgstr ""
|
||||||
|
"No hay sesión de usuario de systemd, así que las aplicaciones nuevas no se "
|
||||||
|
"detectarán solas."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off and everything that was changed has been put back."
|
||||||
|
msgstr "Autoscroll está desactivado y todo lo cambiado se ha restaurado."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. Turn it on first."
|
||||||
|
msgstr "Autoscroll está desactivado. Actívalo primero."
|
||||||
|
|
||||||
|
msgid "Applied again to %d applications."
|
||||||
|
msgstr "Aplicado de nuevo a %d aplicaciones."
|
||||||
|
|
||||||
|
msgid "Applied to %d applications."
|
||||||
|
msgstr "Aplicado a %d aplicaciones."
|
||||||
|
|
||||||
|
msgid "Already applied to %d applications."
|
||||||
|
msgstr "Ya aplicado a %d aplicaciones."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam starts its interface in a way this version cannot change without Steam "
|
||||||
|
"noticing; leaving it alone."
|
||||||
|
msgstr ""
|
||||||
|
"Steam inicia su interfaz de una forma que esta versión no puede cambiar sin "
|
||||||
|
"que Steam lo note; se deja como está."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam's interface cannot be given the flag without leaving a file Steam "
|
||||||
|
"would reinstall; the change has been taken back."
|
||||||
|
msgstr ""
|
||||||
|
"No se puede dar el flag a la interfaz de Steam sin dejar un archivo que "
|
||||||
|
"Steam reinstalaría; el cambio se ha deshecho."
|
||||||
|
|
||||||
|
msgid "Middle click stops pasting at the next login."
|
||||||
|
msgstr "El clic central dejará de pegar en el próximo inicio de sesión."
|
||||||
|
|
||||||
|
#. Help
|
||||||
|
msgid "Usage: middleclick-autoscroll [command]"
|
||||||
|
msgstr "Uso: middleclick-autoscroll [comando]"
|
||||||
|
|
||||||
|
msgid "Commands:"
|
||||||
|
msgstr "Comandos:"
|
||||||
|
|
||||||
|
msgid "Turn autoscroll on"
|
||||||
|
msgstr "Activar autoscroll"
|
||||||
|
|
||||||
|
msgid "Turn it off and put everything back"
|
||||||
|
msgstr "Desactivarlo y restaurar todo"
|
||||||
|
|
||||||
|
msgid "Apply to anything installed since the last run"
|
||||||
|
msgstr "Aplicar a todo lo instalado desde la última vez"
|
||||||
|
|
||||||
|
msgid "Take everything back and apply it again"
|
||||||
|
msgstr "Deshacer todo y volver a aplicarlo"
|
||||||
|
|
||||||
|
msgid "Show what is covered"
|
||||||
|
msgstr "Mostrar qué está cubierto"
|
||||||
|
|
||||||
|
msgid "List every application that was found"
|
||||||
|
msgstr "Listar todas las aplicaciones encontradas"
|
||||||
|
|
||||||
|
msgid "Show this help"
|
||||||
|
msgstr "Mostrar esta ayuda"
|
||||||
|
|
||||||
|
msgid "Show the version"
|
||||||
|
msgstr "Mostrar la versión"
|
||||||
|
|
||||||
|
msgid "Without a command an interactive menu is shown."
|
||||||
|
msgstr "Sin comando se muestra un menú interactivo."
|
||||||
|
|
||||||
|
msgid "Unknown command: %s"
|
||||||
|
msgstr "Comando desconocido: %s"
|
||||||
|
|
||||||
|
#. Time
|
||||||
|
msgid "never"
|
||||||
|
msgstr "nunca"
|
||||||
|
|
||||||
|
msgid "just now"
|
||||||
|
msgstr "ahora mismo"
|
||||||
|
|
||||||
|
msgid "1 minute ago"
|
||||||
|
msgstr "hace 1 minuto"
|
||||||
|
|
||||||
|
msgid "%d minutes ago"
|
||||||
|
msgstr "hace %d minutos"
|
||||||
|
|
||||||
|
msgid "1 hour ago"
|
||||||
|
msgstr "hace 1 hora"
|
||||||
|
|
||||||
|
msgid "%d hours ago"
|
||||||
|
msgstr "hace %d horas"
|
||||||
|
|
||||||
|
msgid "1 day ago"
|
||||||
|
msgstr "hace 1 día"
|
||||||
|
|
||||||
|
msgid "%d days ago"
|
||||||
|
msgstr "hace %d días"
|
||||||
@@ -0,0 +1,272 @@
|
|||||||
|
# French translation for middleclick-autoscroll.
|
||||||
|
# Machine translated. Corrections are welcome.
|
||||||
|
# Copyright (C) 2026 Felitendo
|
||||||
|
# This file is distributed under the same license as middleclick-autoscroll.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: middleclick-autoscroll 1.6.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/middleclick-autoscroll/"
|
||||||
|
"issues\n"
|
||||||
|
"POT-Creation-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"PO-Revision-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"Last-Translator: machine translation\n"
|
||||||
|
"Language-Team: French\n"
|
||||||
|
"Language: fr\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#. Status labels
|
||||||
|
msgid "ON"
|
||||||
|
msgstr "ACTIVÉ"
|
||||||
|
|
||||||
|
msgid "OFF"
|
||||||
|
msgstr "DÉSACTIVÉ"
|
||||||
|
|
||||||
|
msgid "on"
|
||||||
|
msgstr "activé"
|
||||||
|
|
||||||
|
msgid "off"
|
||||||
|
msgstr "désactivé"
|
||||||
|
|
||||||
|
msgid "(none)"
|
||||||
|
msgstr "(aucun)"
|
||||||
|
|
||||||
|
msgid "flag file"
|
||||||
|
msgstr "fichier de flags"
|
||||||
|
|
||||||
|
msgid "launcher"
|
||||||
|
msgstr "lanceur"
|
||||||
|
|
||||||
|
msgid "profile"
|
||||||
|
msgstr "profil"
|
||||||
|
|
||||||
|
msgid "cannot tell"
|
||||||
|
msgstr "indéterminé"
|
||||||
|
|
||||||
|
msgid "not patched yet"
|
||||||
|
msgstr "pas encore appliqué"
|
||||||
|
|
||||||
|
#. Status block
|
||||||
|
msgid "Autoscroll"
|
||||||
|
msgstr "Autoscroll"
|
||||||
|
|
||||||
|
msgid "Applications covered"
|
||||||
|
msgstr "Applications couvertes"
|
||||||
|
|
||||||
|
msgid "%d of %d"
|
||||||
|
msgstr "%d sur %d"
|
||||||
|
|
||||||
|
msgid "Not identified"
|
||||||
|
msgstr "Non identifiées"
|
||||||
|
|
||||||
|
msgid "%d (see the applications list)"
|
||||||
|
msgstr "%d (voir la liste des applications)"
|
||||||
|
|
||||||
|
msgid "Steam"
|
||||||
|
msgstr "Steam"
|
||||||
|
|
||||||
|
msgid "Middle-click paste"
|
||||||
|
msgstr "Collage au clic du milieu"
|
||||||
|
|
||||||
|
msgid "New applications"
|
||||||
|
msgstr "Nouvelles applications"
|
||||||
|
|
||||||
|
msgid "Last applied"
|
||||||
|
msgstr "Dernier passage"
|
||||||
|
|
||||||
|
msgid "Applications pick this up the next time they are started."
|
||||||
|
msgstr "Les applications le prennent en compte à leur prochain démarrage."
|
||||||
|
|
||||||
|
#. Menu
|
||||||
|
msgid "Turn autoscroll on or off"
|
||||||
|
msgstr "Activer ou désactiver l'autoscroll"
|
||||||
|
|
||||||
|
msgid "Re-apply everything"
|
||||||
|
msgstr "Tout réappliquer"
|
||||||
|
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Applications"
|
||||||
|
|
||||||
|
msgid "Settings"
|
||||||
|
msgstr "Paramètres"
|
||||||
|
|
||||||
|
msgid "Quit"
|
||||||
|
msgstr "Quitter"
|
||||||
|
|
||||||
|
msgid "Press any key to continue..."
|
||||||
|
msgstr "Appuyez sur une touche pour continuer..."
|
||||||
|
|
||||||
|
msgid "One moment..."
|
||||||
|
msgstr "Un instant..."
|
||||||
|
|
||||||
|
#. Settings
|
||||||
|
msgid "Turn off middle-click paste"
|
||||||
|
msgstr "Désactiver le collage au clic du milieu"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Stops middle click from pasting anywhere else. Starts with the next login."
|
||||||
|
msgstr "Le clic du milieu ne colle plus ailleurs. Dès la prochaine connexion."
|
||||||
|
|
||||||
|
msgid "Cover new applications"
|
||||||
|
msgstr "Couvrir les nouvelles applications"
|
||||||
|
|
||||||
|
msgid "Applications installed later get autoscroll on their own."
|
||||||
|
msgstr ""
|
||||||
|
"Les applications installées plus tard reçoivent l'autoscroll d'elles-mêmes."
|
||||||
|
|
||||||
|
msgid "More Chromium arguments"
|
||||||
|
msgstr "Autres arguments Chromium"
|
||||||
|
|
||||||
|
msgid "Passed to every application along with the autoscroll one."
|
||||||
|
msgstr "Transmis à chaque application avec celui de l'autoscroll."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: change, q: back"
|
||||||
|
msgstr "Haut/Bas : choisir, Espace : changer, q : retour"
|
||||||
|
|
||||||
|
msgid "Arguments separated by spaces, empty for none:"
|
||||||
|
msgstr "Arguments séparés par des espaces, vide pour aucun :"
|
||||||
|
|
||||||
|
msgid "Could not save the setting."
|
||||||
|
msgstr "Impossible d'enregistrer le paramètre."
|
||||||
|
|
||||||
|
#. Applications screen
|
||||||
|
msgid "Looking at the installed applications..."
|
||||||
|
msgstr "Examen des applications installées..."
|
||||||
|
|
||||||
|
msgid "No supported applications found."
|
||||||
|
msgstr "Aucune application prise en charge trouvée."
|
||||||
|
|
||||||
|
msgid "Anything marked \"cannot tell\" stays off until it is turned on here."
|
||||||
|
msgstr ""
|
||||||
|
"Ce qui est marqué « indéterminé » reste désactivé jusqu'à être activé ici."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. This is what would be covered."
|
||||||
|
msgstr "L'autoscroll est désactivé. Voici ce qui serait couvert."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: turn on or off, q: back"
|
||||||
|
msgstr "Haut/Bas : choisir, Espace : activer ou désactiver, q : retour"
|
||||||
|
|
||||||
|
msgid "Search:"
|
||||||
|
msgstr "Rechercher :"
|
||||||
|
|
||||||
|
msgid "Type to search, Down: go to the list, Esc: back"
|
||||||
|
msgstr "Tapez pour rechercher, Bas : aller à la liste, Échap : retour"
|
||||||
|
|
||||||
|
msgid "No matches."
|
||||||
|
msgstr "Aucun résultat."
|
||||||
|
|
||||||
|
#. Results
|
||||||
|
msgid "Autoscroll is on for %d applications."
|
||||||
|
msgstr "L'autoscroll est activé pour %d applications."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Applications that are already running pick this up when they are restarted."
|
||||||
|
msgstr ""
|
||||||
|
"Les applications déjà ouvertes le prennent en compte après un redémarrage."
|
||||||
|
|
||||||
|
msgid "Could not start the watcher for newly installed applications."
|
||||||
|
msgstr "Impossible de démarrer la surveillance des nouvelles applications."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"No systemd user session, so newly installed applications will not be picked "
|
||||||
|
"up on their own."
|
||||||
|
msgstr ""
|
||||||
|
"Pas de session utilisateur systemd, les nouvelles applications ne seront "
|
||||||
|
"donc pas prises en charge d'elles-mêmes."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off and everything that was changed has been put back."
|
||||||
|
msgstr ""
|
||||||
|
"L'autoscroll est désactivé et tout ce qui avait été modifié a été rétabli."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. Turn it on first."
|
||||||
|
msgstr "L'autoscroll est désactivé. Activez-le d'abord."
|
||||||
|
|
||||||
|
msgid "Applied again to %d applications."
|
||||||
|
msgstr "Réappliqué à %d applications."
|
||||||
|
|
||||||
|
msgid "Applied to %d applications."
|
||||||
|
msgstr "Appliqué à %d applications."
|
||||||
|
|
||||||
|
msgid "Already applied to %d applications."
|
||||||
|
msgstr "Déjà appliqué à %d applications."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam starts its interface in a way this version cannot change without Steam "
|
||||||
|
"noticing; leaving it alone."
|
||||||
|
msgstr ""
|
||||||
|
"Steam lance son interface d'une façon que cette version ne peut pas modifier "
|
||||||
|
"sans que Steam le remarque ; Steam reste tel quel."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam's interface cannot be given the flag without leaving a file Steam "
|
||||||
|
"would reinstall; the change has been taken back."
|
||||||
|
msgstr ""
|
||||||
|
"L'interface de Steam ne peut pas recevoir le flag sans laisser un fichier "
|
||||||
|
"que Steam réinstallerait ; la modification a été annulée."
|
||||||
|
|
||||||
|
msgid "Middle click stops pasting at the next login."
|
||||||
|
msgstr "Le clic du milieu ne collera plus à la prochaine connexion."
|
||||||
|
|
||||||
|
#. Help
|
||||||
|
msgid "Usage: middleclick-autoscroll [command]"
|
||||||
|
msgstr "Utilisation : middleclick-autoscroll [commande]"
|
||||||
|
|
||||||
|
msgid "Commands:"
|
||||||
|
msgstr "Commandes :"
|
||||||
|
|
||||||
|
msgid "Turn autoscroll on"
|
||||||
|
msgstr "Activer l'autoscroll"
|
||||||
|
|
||||||
|
msgid "Turn it off and put everything back"
|
||||||
|
msgstr "Le désactiver et tout rétablir"
|
||||||
|
|
||||||
|
msgid "Apply to anything installed since the last run"
|
||||||
|
msgstr "Appliquer à tout ce qui a été installé depuis le dernier passage"
|
||||||
|
|
||||||
|
msgid "Take everything back and apply it again"
|
||||||
|
msgstr "Tout annuler et réappliquer"
|
||||||
|
|
||||||
|
msgid "Show what is covered"
|
||||||
|
msgstr "Afficher ce qui est couvert"
|
||||||
|
|
||||||
|
msgid "List every application that was found"
|
||||||
|
msgstr "Lister toutes les applications trouvées"
|
||||||
|
|
||||||
|
msgid "Show this help"
|
||||||
|
msgstr "Afficher cette aide"
|
||||||
|
|
||||||
|
msgid "Show the version"
|
||||||
|
msgstr "Afficher la version"
|
||||||
|
|
||||||
|
msgid "Without a command an interactive menu is shown."
|
||||||
|
msgstr "Sans commande, un menu interactif s'affiche."
|
||||||
|
|
||||||
|
msgid "Unknown command: %s"
|
||||||
|
msgstr "Commande inconnue : %s"
|
||||||
|
|
||||||
|
#. Time
|
||||||
|
msgid "never"
|
||||||
|
msgstr "jamais"
|
||||||
|
|
||||||
|
msgid "just now"
|
||||||
|
msgstr "à l'instant"
|
||||||
|
|
||||||
|
msgid "1 minute ago"
|
||||||
|
msgstr "il y a 1 minute"
|
||||||
|
|
||||||
|
msgid "%d minutes ago"
|
||||||
|
msgstr "il y a %d minutes"
|
||||||
|
|
||||||
|
msgid "1 hour ago"
|
||||||
|
msgstr "il y a 1 heure"
|
||||||
|
|
||||||
|
msgid "%d hours ago"
|
||||||
|
msgstr "il y a %d heures"
|
||||||
|
|
||||||
|
msgid "1 day ago"
|
||||||
|
msgstr "il y a 1 jour"
|
||||||
|
|
||||||
|
msgid "%d days ago"
|
||||||
|
msgstr "il y a %d jours"
|
||||||
@@ -0,0 +1,272 @@
|
|||||||
|
# Italian translation for middleclick-autoscroll.
|
||||||
|
# Machine translated. Corrections are welcome.
|
||||||
|
# Copyright (C) 2026 Felitendo
|
||||||
|
# This file is distributed under the same license as middleclick-autoscroll.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: middleclick-autoscroll 1.6.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/middleclick-autoscroll/"
|
||||||
|
"issues\n"
|
||||||
|
"POT-Creation-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"PO-Revision-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"Last-Translator: machine translation\n"
|
||||||
|
"Language-Team: Italian\n"
|
||||||
|
"Language: it\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#. Status labels
|
||||||
|
msgid "ON"
|
||||||
|
msgstr "ACCESO"
|
||||||
|
|
||||||
|
msgid "OFF"
|
||||||
|
msgstr "SPENTO"
|
||||||
|
|
||||||
|
msgid "on"
|
||||||
|
msgstr "acceso"
|
||||||
|
|
||||||
|
msgid "off"
|
||||||
|
msgstr "spento"
|
||||||
|
|
||||||
|
msgid "(none)"
|
||||||
|
msgstr "(nessuno)"
|
||||||
|
|
||||||
|
msgid "flag file"
|
||||||
|
msgstr "file di flag"
|
||||||
|
|
||||||
|
msgid "launcher"
|
||||||
|
msgstr "lanciatore"
|
||||||
|
|
||||||
|
msgid "profile"
|
||||||
|
msgstr "profilo"
|
||||||
|
|
||||||
|
msgid "cannot tell"
|
||||||
|
msgstr "incerto"
|
||||||
|
|
||||||
|
msgid "not patched yet"
|
||||||
|
msgstr "non ancora applicato"
|
||||||
|
|
||||||
|
#. Status block
|
||||||
|
msgid "Autoscroll"
|
||||||
|
msgstr "Autoscroll"
|
||||||
|
|
||||||
|
msgid "Applications covered"
|
||||||
|
msgstr "Applicazioni coperte"
|
||||||
|
|
||||||
|
msgid "%d of %d"
|
||||||
|
msgstr "%d di %d"
|
||||||
|
|
||||||
|
msgid "Not identified"
|
||||||
|
msgstr "Non identificate"
|
||||||
|
|
||||||
|
msgid "%d (see the applications list)"
|
||||||
|
msgstr "%d (vedi l'elenco delle applicazioni)"
|
||||||
|
|
||||||
|
msgid "Steam"
|
||||||
|
msgstr "Steam"
|
||||||
|
|
||||||
|
msgid "Middle-click paste"
|
||||||
|
msgstr "Incolla con clic centrale"
|
||||||
|
|
||||||
|
msgid "New applications"
|
||||||
|
msgstr "Nuove applicazioni"
|
||||||
|
|
||||||
|
msgid "Last applied"
|
||||||
|
msgstr "Applicato l'ultima volta"
|
||||||
|
|
||||||
|
msgid "Applications pick this up the next time they are started."
|
||||||
|
msgstr "Le applicazioni lo recepiscono al prossimo avvio."
|
||||||
|
|
||||||
|
#. Menu
|
||||||
|
msgid "Turn autoscroll on or off"
|
||||||
|
msgstr "Accendi o spegni l'autoscroll"
|
||||||
|
|
||||||
|
msgid "Re-apply everything"
|
||||||
|
msgstr "Riapplica tutto"
|
||||||
|
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Applicazioni"
|
||||||
|
|
||||||
|
msgid "Settings"
|
||||||
|
msgstr "Impostazioni"
|
||||||
|
|
||||||
|
msgid "Quit"
|
||||||
|
msgstr "Esci"
|
||||||
|
|
||||||
|
msgid "Press any key to continue..."
|
||||||
|
msgstr "Premi un tasto per continuare..."
|
||||||
|
|
||||||
|
msgid "One moment..."
|
||||||
|
msgstr "Un momento..."
|
||||||
|
|
||||||
|
#. Settings
|
||||||
|
msgid "Turn off middle-click paste"
|
||||||
|
msgstr "Disattiva incolla con clic centrale"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Stops middle click from pasting anywhere else. Starts with the next login."
|
||||||
|
msgstr ""
|
||||||
|
"Il clic centrale non incolla più da nessun'altra parte. Dal prossimo accesso."
|
||||||
|
|
||||||
|
msgid "Cover new applications"
|
||||||
|
msgstr "Copri le nuove applicazioni"
|
||||||
|
|
||||||
|
msgid "Applications installed later get autoscroll on their own."
|
||||||
|
msgstr "Le applicazioni installate in seguito ricevono l'autoscroll da sole."
|
||||||
|
|
||||||
|
msgid "More Chromium arguments"
|
||||||
|
msgstr "Altri argomenti di Chromium"
|
||||||
|
|
||||||
|
msgid "Passed to every application along with the autoscroll one."
|
||||||
|
msgstr "Passati a ogni applicazione insieme a quello per l'autoscroll."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: change, q: back"
|
||||||
|
msgstr "Su/Giù: scegli, Spazio: cambia, q: indietro"
|
||||||
|
|
||||||
|
msgid "Arguments separated by spaces, empty for none:"
|
||||||
|
msgstr "Argomenti separati da spazi, vuoto per nessuno:"
|
||||||
|
|
||||||
|
msgid "Could not save the setting."
|
||||||
|
msgstr "Impossibile salvare l'impostazione."
|
||||||
|
|
||||||
|
#. Applications screen
|
||||||
|
msgid "Looking at the installed applications..."
|
||||||
|
msgstr "Esame delle applicazioni installate..."
|
||||||
|
|
||||||
|
msgid "No supported applications found."
|
||||||
|
msgstr "Nessuna applicazione supportata trovata."
|
||||||
|
|
||||||
|
msgid "Anything marked \"cannot tell\" stays off until it is turned on here."
|
||||||
|
msgstr ""
|
||||||
|
"Ciò che è segnato come «incerto» resta spento finché non viene acceso qui."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. This is what would be covered."
|
||||||
|
msgstr "L'autoscroll è spento. Ecco cosa verrebbe coperto."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: turn on or off, q: back"
|
||||||
|
msgstr "Su/Giù: scegli, Spazio: accendi o spegni, q: indietro"
|
||||||
|
|
||||||
|
msgid "Search:"
|
||||||
|
msgstr "Cerca:"
|
||||||
|
|
||||||
|
msgid "Type to search, Down: go to the list, Esc: back"
|
||||||
|
msgstr "Scrivi per cercare, Giù: vai all'elenco, Esc: indietro"
|
||||||
|
|
||||||
|
msgid "No matches."
|
||||||
|
msgstr "Nessun risultato."
|
||||||
|
|
||||||
|
#. Results
|
||||||
|
msgid "Autoscroll is on for %d applications."
|
||||||
|
msgstr "L'autoscroll è acceso per %d applicazioni."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Applications that are already running pick this up when they are restarted."
|
||||||
|
msgstr "Le applicazioni già aperte lo recepiscono dopo un riavvio."
|
||||||
|
|
||||||
|
msgid "Could not start the watcher for newly installed applications."
|
||||||
|
msgstr "Impossibile avviare il controllo delle nuove applicazioni."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"No systemd user session, so newly installed applications will not be picked "
|
||||||
|
"up on their own."
|
||||||
|
msgstr ""
|
||||||
|
"Nessuna sessione utente di systemd, quindi le nuove applicazioni non "
|
||||||
|
"verranno rilevate da sole."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off and everything that was changed has been put back."
|
||||||
|
msgstr ""
|
||||||
|
"L'autoscroll è spento e tutto ciò che era stato modificato è stato "
|
||||||
|
"ripristinato."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. Turn it on first."
|
||||||
|
msgstr "L'autoscroll è spento. Prima accendilo."
|
||||||
|
|
||||||
|
msgid "Applied again to %d applications."
|
||||||
|
msgstr "Riapplicato a %d applicazioni."
|
||||||
|
|
||||||
|
msgid "Applied to %d applications."
|
||||||
|
msgstr "Applicato a %d applicazioni."
|
||||||
|
|
||||||
|
msgid "Already applied to %d applications."
|
||||||
|
msgstr "Già applicato a %d applicazioni."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam starts its interface in a way this version cannot change without Steam "
|
||||||
|
"noticing; leaving it alone."
|
||||||
|
msgstr ""
|
||||||
|
"Steam avvia la sua interfaccia in un modo che questa versione non può "
|
||||||
|
"cambiare senza che Steam se ne accorga; Steam resta com'è."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam's interface cannot be given the flag without leaving a file Steam "
|
||||||
|
"would reinstall; the change has been taken back."
|
||||||
|
msgstr ""
|
||||||
|
"All'interfaccia di Steam non si può dare il flag senza lasciare un file che "
|
||||||
|
"Steam reinstallerebbe; la modifica è stata annullata."
|
||||||
|
|
||||||
|
msgid "Middle click stops pasting at the next login."
|
||||||
|
msgstr "Il clic centrale smetterà di incollare al prossimo accesso."
|
||||||
|
|
||||||
|
#. Help
|
||||||
|
msgid "Usage: middleclick-autoscroll [command]"
|
||||||
|
msgstr "Uso: middleclick-autoscroll [comando]"
|
||||||
|
|
||||||
|
msgid "Commands:"
|
||||||
|
msgstr "Comandi:"
|
||||||
|
|
||||||
|
msgid "Turn autoscroll on"
|
||||||
|
msgstr "Accendi l'autoscroll"
|
||||||
|
|
||||||
|
msgid "Turn it off and put everything back"
|
||||||
|
msgstr "Spegnilo e ripristina tutto"
|
||||||
|
|
||||||
|
msgid "Apply to anything installed since the last run"
|
||||||
|
msgstr "Applica a tutto ciò che è stato installato dall'ultima volta"
|
||||||
|
|
||||||
|
msgid "Take everything back and apply it again"
|
||||||
|
msgstr "Annulla tutto e riapplica"
|
||||||
|
|
||||||
|
msgid "Show what is covered"
|
||||||
|
msgstr "Mostra cosa è coperto"
|
||||||
|
|
||||||
|
msgid "List every application that was found"
|
||||||
|
msgstr "Elenca tutte le applicazioni trovate"
|
||||||
|
|
||||||
|
msgid "Show this help"
|
||||||
|
msgstr "Mostra questo aiuto"
|
||||||
|
|
||||||
|
msgid "Show the version"
|
||||||
|
msgstr "Mostra la versione"
|
||||||
|
|
||||||
|
msgid "Without a command an interactive menu is shown."
|
||||||
|
msgstr "Senza comando viene mostrato un menu interattivo."
|
||||||
|
|
||||||
|
msgid "Unknown command: %s"
|
||||||
|
msgstr "Comando sconosciuto: %s"
|
||||||
|
|
||||||
|
#. Time
|
||||||
|
msgid "never"
|
||||||
|
msgstr "mai"
|
||||||
|
|
||||||
|
msgid "just now"
|
||||||
|
msgstr "proprio ora"
|
||||||
|
|
||||||
|
msgid "1 minute ago"
|
||||||
|
msgstr "1 minuto fa"
|
||||||
|
|
||||||
|
msgid "%d minutes ago"
|
||||||
|
msgstr "%d minuti fa"
|
||||||
|
|
||||||
|
msgid "1 hour ago"
|
||||||
|
msgstr "1 ora fa"
|
||||||
|
|
||||||
|
msgid "%d hours ago"
|
||||||
|
msgstr "%d ore fa"
|
||||||
|
|
||||||
|
msgid "1 day ago"
|
||||||
|
msgstr "1 giorno fa"
|
||||||
|
|
||||||
|
msgid "%d days ago"
|
||||||
|
msgstr "%d giorni fa"
|
||||||
@@ -4,10 +4,10 @@
|
|||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: middleclick-autoscroll 1.0.3\n"
|
"Project-Id-Version: middleclick-autoscroll 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/middleclick-autoscroll/"
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/middleclick-autoscroll/"
|
||||||
"issues\n"
|
"issues\n"
|
||||||
"POT-Creation-Date: 2026-08-16 00:00+0200\n"
|
"POT-Creation-Date: 2026-09-24 00:00+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -38,6 +38,9 @@ msgstr ""
|
|||||||
msgid "launcher"
|
msgid "launcher"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "profile"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "cannot tell"
|
msgid "cannot tell"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -94,35 +97,30 @@ msgstr ""
|
|||||||
msgid "Press any key to continue..."
|
msgid "Press any key to continue..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "One moment..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#. Settings
|
#. Settings
|
||||||
msgid "Electron and CEF applications"
|
msgid "Turn off middle-click paste"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Chromium-based browsers"
|
msgid ""
|
||||||
|
"Stops middle click from pasting anywhere else. Starts with the next login."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Flatpak applications"
|
msgid "Cover new applications"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Snap applications"
|
msgid "Applications installed later get autoscroll on their own."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Programs that start themselves at login"
|
msgid "More Chromium arguments"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Spotify"
|
msgid "Passed to every application along with the autoscroll one."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Turn off KDE's middle-click paste"
|
msgid "Up/Down: select, Space: change, q: back"
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Apply to newly installed applications"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Additional Chromium arguments"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Up/Down: select, Space or Right: change, q: back"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Arguments separated by spaces, empty for none:"
|
msgid "Arguments separated by spaces, empty for none:"
|
||||||
@@ -135,10 +133,10 @@ msgstr ""
|
|||||||
msgid "Looking at the installed applications..."
|
msgid "Looking at the installed applications..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "No Chromium-based applications found."
|
msgid "No supported applications found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Anything not identified is left alone until it is turned on here."
|
msgid "Anything marked \"cannot tell\" stays off until it is turned on here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Autoscroll is off. This is what would be covered."
|
msgid "Autoscroll is off. This is what would be covered."
|
||||||
@@ -147,6 +145,15 @@ msgstr ""
|
|||||||
msgid "Up/Down: select, Space: turn on or off, q: back"
|
msgid "Up/Down: select, Space: turn on or off, q: back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Search:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Type to search, Down: go to the list, Esc: back"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "No matches."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#. Results
|
#. Results
|
||||||
msgid "Autoscroll is on for %d applications."
|
msgid "Autoscroll is on for %d applications."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
@@ -0,0 +1,270 @@
|
|||||||
|
# Dutch translation for middleclick-autoscroll.
|
||||||
|
# Machine translated. Corrections are welcome.
|
||||||
|
# Copyright (C) 2026 Felitendo
|
||||||
|
# This file is distributed under the same license as middleclick-autoscroll.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: middleclick-autoscroll 1.6.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/middleclick-autoscroll/"
|
||||||
|
"issues\n"
|
||||||
|
"POT-Creation-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"PO-Revision-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"Last-Translator: machine translation\n"
|
||||||
|
"Language-Team: Dutch\n"
|
||||||
|
"Language: nl\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#. Status labels
|
||||||
|
msgid "ON"
|
||||||
|
msgstr "AAN"
|
||||||
|
|
||||||
|
msgid "OFF"
|
||||||
|
msgstr "UIT"
|
||||||
|
|
||||||
|
msgid "on"
|
||||||
|
msgstr "aan"
|
||||||
|
|
||||||
|
msgid "off"
|
||||||
|
msgstr "uit"
|
||||||
|
|
||||||
|
msgid "(none)"
|
||||||
|
msgstr "(geen)"
|
||||||
|
|
||||||
|
msgid "flag file"
|
||||||
|
msgstr "flagbestand"
|
||||||
|
|
||||||
|
msgid "launcher"
|
||||||
|
msgstr "starter"
|
||||||
|
|
||||||
|
msgid "profile"
|
||||||
|
msgstr "profiel"
|
||||||
|
|
||||||
|
msgid "cannot tell"
|
||||||
|
msgstr "onbekend"
|
||||||
|
|
||||||
|
msgid "not patched yet"
|
||||||
|
msgstr "nog niet toegepast"
|
||||||
|
|
||||||
|
#. Status block
|
||||||
|
msgid "Autoscroll"
|
||||||
|
msgstr "Autoscroll"
|
||||||
|
|
||||||
|
msgid "Applications covered"
|
||||||
|
msgstr "Gedekte toepassingen"
|
||||||
|
|
||||||
|
msgid "%d of %d"
|
||||||
|
msgstr "%d van %d"
|
||||||
|
|
||||||
|
msgid "Not identified"
|
||||||
|
msgstr "Niet herkend"
|
||||||
|
|
||||||
|
msgid "%d (see the applications list)"
|
||||||
|
msgstr "%d (zie de lijst met toepassingen)"
|
||||||
|
|
||||||
|
msgid "Steam"
|
||||||
|
msgstr "Steam"
|
||||||
|
|
||||||
|
msgid "Middle-click paste"
|
||||||
|
msgstr "Plakken met middelklik"
|
||||||
|
|
||||||
|
msgid "New applications"
|
||||||
|
msgstr "Nieuwe toepassingen"
|
||||||
|
|
||||||
|
msgid "Last applied"
|
||||||
|
msgstr "Laatst toegepast"
|
||||||
|
|
||||||
|
msgid "Applications pick this up the next time they are started."
|
||||||
|
msgstr "Toepassingen nemen dit over bij de volgende start."
|
||||||
|
|
||||||
|
#. Menu
|
||||||
|
msgid "Turn autoscroll on or off"
|
||||||
|
msgstr "Autoscroll aan- of uitzetten"
|
||||||
|
|
||||||
|
msgid "Re-apply everything"
|
||||||
|
msgstr "Alles opnieuw toepassen"
|
||||||
|
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Toepassingen"
|
||||||
|
|
||||||
|
msgid "Settings"
|
||||||
|
msgstr "Instellingen"
|
||||||
|
|
||||||
|
msgid "Quit"
|
||||||
|
msgstr "Afsluiten"
|
||||||
|
|
||||||
|
msgid "Press any key to continue..."
|
||||||
|
msgstr "Druk op een toets om door te gaan..."
|
||||||
|
|
||||||
|
msgid "One moment..."
|
||||||
|
msgstr "Een moment..."
|
||||||
|
|
||||||
|
#. Settings
|
||||||
|
msgid "Turn off middle-click paste"
|
||||||
|
msgstr "Plakken met middelklik uitzetten"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Stops middle click from pasting anywhere else. Starts with the next login."
|
||||||
|
msgstr ""
|
||||||
|
"Middelklik plakt dan nergens anders meer. Vanaf de volgende aanmelding."
|
||||||
|
|
||||||
|
msgid "Cover new applications"
|
||||||
|
msgstr "Nieuwe toepassingen meenemen"
|
||||||
|
|
||||||
|
msgid "Applications installed later get autoscroll on their own."
|
||||||
|
msgstr "Later geïnstalleerde toepassingen krijgen vanzelf autoscroll."
|
||||||
|
|
||||||
|
msgid "More Chromium arguments"
|
||||||
|
msgstr "Meer Chromium-argumenten"
|
||||||
|
|
||||||
|
msgid "Passed to every application along with the autoscroll one."
|
||||||
|
msgstr "Gaan samen met dat voor autoscroll naar elke toepassing."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: change, q: back"
|
||||||
|
msgstr "Omhoog/Omlaag: kiezen, Spatie: wijzigen, q: terug"
|
||||||
|
|
||||||
|
msgid "Arguments separated by spaces, empty for none:"
|
||||||
|
msgstr "Argumenten gescheiden door spaties, leeg voor geen:"
|
||||||
|
|
||||||
|
msgid "Could not save the setting."
|
||||||
|
msgstr "De instelling kon niet worden opgeslagen."
|
||||||
|
|
||||||
|
#. Applications screen
|
||||||
|
msgid "Looking at the installed applications..."
|
||||||
|
msgstr "Geïnstalleerde toepassingen worden bekeken..."
|
||||||
|
|
||||||
|
msgid "No supported applications found."
|
||||||
|
msgstr "Geen ondersteunde toepassingen gevonden."
|
||||||
|
|
||||||
|
msgid "Anything marked \"cannot tell\" stays off until it is turned on here."
|
||||||
|
msgstr ""
|
||||||
|
"Wat als \"onbekend\" gemarkeerd is, blijft uit tot het hier aangezet wordt."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. This is what would be covered."
|
||||||
|
msgstr "Autoscroll staat uit. Dit zou gedekt worden."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: turn on or off, q: back"
|
||||||
|
msgstr "Omhoog/Omlaag: kiezen, Spatie: aan- of uitzetten, q: terug"
|
||||||
|
|
||||||
|
msgid "Search:"
|
||||||
|
msgstr "Zoeken:"
|
||||||
|
|
||||||
|
msgid "Type to search, Down: go to the list, Esc: back"
|
||||||
|
msgstr "Typ om te zoeken, Omlaag: naar de lijst, Esc: terug"
|
||||||
|
|
||||||
|
msgid "No matches."
|
||||||
|
msgstr "Geen resultaten."
|
||||||
|
|
||||||
|
#. Results
|
||||||
|
msgid "Autoscroll is on for %d applications."
|
||||||
|
msgstr "Autoscroll staat aan voor %d toepassingen."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Applications that are already running pick this up when they are restarted."
|
||||||
|
msgstr "Toepassingen die al draaien, nemen dit over na een herstart."
|
||||||
|
|
||||||
|
msgid "Could not start the watcher for newly installed applications."
|
||||||
|
msgstr "Kon het bewaken van nieuwe toepassingen niet starten."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"No systemd user session, so newly installed applications will not be picked "
|
||||||
|
"up on their own."
|
||||||
|
msgstr ""
|
||||||
|
"Geen systemd-gebruikerssessie, dus nieuw geïnstalleerde toepassingen worden "
|
||||||
|
"niet vanzelf opgepikt."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off and everything that was changed has been put back."
|
||||||
|
msgstr "Autoscroll staat uit en alles wat veranderd was, is teruggezet."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. Turn it on first."
|
||||||
|
msgstr "Autoscroll staat uit. Zet het eerst aan."
|
||||||
|
|
||||||
|
msgid "Applied again to %d applications."
|
||||||
|
msgstr "Opnieuw toegepast op %d toepassingen."
|
||||||
|
|
||||||
|
msgid "Applied to %d applications."
|
||||||
|
msgstr "Toegepast op %d toepassingen."
|
||||||
|
|
||||||
|
msgid "Already applied to %d applications."
|
||||||
|
msgstr "Al toegepast op %d toepassingen."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam starts its interface in a way this version cannot change without Steam "
|
||||||
|
"noticing; leaving it alone."
|
||||||
|
msgstr ""
|
||||||
|
"Steam start zijn interface op een manier die deze versie niet kan veranderen "
|
||||||
|
"zonder dat Steam het merkt; Steam blijft zoals het is."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam's interface cannot be given the flag without leaving a file Steam "
|
||||||
|
"would reinstall; the change has been taken back."
|
||||||
|
msgstr ""
|
||||||
|
"De interface van Steam kan de flag niet krijgen zonder een bestand achter te "
|
||||||
|
"laten dat Steam opnieuw zou installeren; de wijziging is teruggedraaid."
|
||||||
|
|
||||||
|
msgid "Middle click stops pasting at the next login."
|
||||||
|
msgstr "Middelklik plakt vanaf de volgende aanmelding niet meer."
|
||||||
|
|
||||||
|
#. Help
|
||||||
|
msgid "Usage: middleclick-autoscroll [command]"
|
||||||
|
msgstr "Gebruik: middleclick-autoscroll [opdracht]"
|
||||||
|
|
||||||
|
msgid "Commands:"
|
||||||
|
msgstr "Opdrachten:"
|
||||||
|
|
||||||
|
msgid "Turn autoscroll on"
|
||||||
|
msgstr "Autoscroll aanzetten"
|
||||||
|
|
||||||
|
msgid "Turn it off and put everything back"
|
||||||
|
msgstr "Uitzetten en alles terugzetten"
|
||||||
|
|
||||||
|
msgid "Apply to anything installed since the last run"
|
||||||
|
msgstr "Toepassen op alles wat sinds de vorige keer geïnstalleerd is"
|
||||||
|
|
||||||
|
msgid "Take everything back and apply it again"
|
||||||
|
msgstr "Alles terugdraaien en opnieuw toepassen"
|
||||||
|
|
||||||
|
msgid "Show what is covered"
|
||||||
|
msgstr "Tonen wat gedekt is"
|
||||||
|
|
||||||
|
msgid "List every application that was found"
|
||||||
|
msgstr "Alle gevonden toepassingen tonen"
|
||||||
|
|
||||||
|
msgid "Show this help"
|
||||||
|
msgstr "Deze hulp tonen"
|
||||||
|
|
||||||
|
msgid "Show the version"
|
||||||
|
msgstr "De versie tonen"
|
||||||
|
|
||||||
|
msgid "Without a command an interactive menu is shown."
|
||||||
|
msgstr "Zonder opdracht wordt een interactief menu getoond."
|
||||||
|
|
||||||
|
msgid "Unknown command: %s"
|
||||||
|
msgstr "Onbekende opdracht: %s"
|
||||||
|
|
||||||
|
#. Time
|
||||||
|
msgid "never"
|
||||||
|
msgstr "nooit"
|
||||||
|
|
||||||
|
msgid "just now"
|
||||||
|
msgstr "zojuist"
|
||||||
|
|
||||||
|
msgid "1 minute ago"
|
||||||
|
msgstr "1 minuut geleden"
|
||||||
|
|
||||||
|
msgid "%d minutes ago"
|
||||||
|
msgstr "%d minuten geleden"
|
||||||
|
|
||||||
|
msgid "1 hour ago"
|
||||||
|
msgstr "1 uur geleden"
|
||||||
|
|
||||||
|
msgid "%d hours ago"
|
||||||
|
msgstr "%d uur geleden"
|
||||||
|
|
||||||
|
msgid "1 day ago"
|
||||||
|
msgstr "1 dag geleden"
|
||||||
|
|
||||||
|
msgid "%d days ago"
|
||||||
|
msgstr "%d dagen geleden"
|
||||||
@@ -0,0 +1,269 @@
|
|||||||
|
# Polish translation for middleclick-autoscroll.
|
||||||
|
# Machine translated. Corrections are welcome.
|
||||||
|
# Copyright (C) 2026 Felitendo
|
||||||
|
# This file is distributed under the same license as middleclick-autoscroll.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: middleclick-autoscroll 1.6.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/middleclick-autoscroll/"
|
||||||
|
"issues\n"
|
||||||
|
"POT-Creation-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"PO-Revision-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"Last-Translator: machine translation\n"
|
||||||
|
"Language-Team: Polish\n"
|
||||||
|
"Language: pl\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#. Status labels
|
||||||
|
msgid "ON"
|
||||||
|
msgstr "WŁ."
|
||||||
|
|
||||||
|
msgid "OFF"
|
||||||
|
msgstr "WYŁ."
|
||||||
|
|
||||||
|
msgid "on"
|
||||||
|
msgstr "wł."
|
||||||
|
|
||||||
|
msgid "off"
|
||||||
|
msgstr "wył."
|
||||||
|
|
||||||
|
msgid "(none)"
|
||||||
|
msgstr "(brak)"
|
||||||
|
|
||||||
|
msgid "flag file"
|
||||||
|
msgstr "plik flag"
|
||||||
|
|
||||||
|
msgid "launcher"
|
||||||
|
msgstr "skrót"
|
||||||
|
|
||||||
|
msgid "profile"
|
||||||
|
msgstr "profil"
|
||||||
|
|
||||||
|
msgid "cannot tell"
|
||||||
|
msgstr "nie wiadomo"
|
||||||
|
|
||||||
|
msgid "not patched yet"
|
||||||
|
msgstr "jeszcze nie zastosowano"
|
||||||
|
|
||||||
|
#. Status block
|
||||||
|
msgid "Autoscroll"
|
||||||
|
msgstr "Autoscroll"
|
||||||
|
|
||||||
|
msgid "Applications covered"
|
||||||
|
msgstr "Objęte aplikacje"
|
||||||
|
|
||||||
|
msgid "%d of %d"
|
||||||
|
msgstr "%d z %d"
|
||||||
|
|
||||||
|
msgid "Not identified"
|
||||||
|
msgstr "Nierozpoznane"
|
||||||
|
|
||||||
|
msgid "%d (see the applications list)"
|
||||||
|
msgstr "%d (zob. listę aplikacji)"
|
||||||
|
|
||||||
|
msgid "Steam"
|
||||||
|
msgstr "Steam"
|
||||||
|
|
||||||
|
msgid "Middle-click paste"
|
||||||
|
msgstr "Wklejanie kółkiem myszy"
|
||||||
|
|
||||||
|
msgid "New applications"
|
||||||
|
msgstr "Nowe aplikacje"
|
||||||
|
|
||||||
|
msgid "Last applied"
|
||||||
|
msgstr "Ostatnio zastosowano"
|
||||||
|
|
||||||
|
msgid "Applications pick this up the next time they are started."
|
||||||
|
msgstr "Aplikacje przejmą to przy następnym uruchomieniu."
|
||||||
|
|
||||||
|
#. Menu
|
||||||
|
msgid "Turn autoscroll on or off"
|
||||||
|
msgstr "Włącz lub wyłącz autoscroll"
|
||||||
|
|
||||||
|
msgid "Re-apply everything"
|
||||||
|
msgstr "Zastosuj wszystko ponownie"
|
||||||
|
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Aplikacje"
|
||||||
|
|
||||||
|
msgid "Settings"
|
||||||
|
msgstr "Ustawienia"
|
||||||
|
|
||||||
|
msgid "Quit"
|
||||||
|
msgstr "Zakończ"
|
||||||
|
|
||||||
|
msgid "Press any key to continue..."
|
||||||
|
msgstr "Naciśnij dowolny klawisz, aby kontynuować..."
|
||||||
|
|
||||||
|
msgid "One moment..."
|
||||||
|
msgstr "Chwileczkę..."
|
||||||
|
|
||||||
|
#. Settings
|
||||||
|
msgid "Turn off middle-click paste"
|
||||||
|
msgstr "Wyłącz wklejanie kółkiem myszy"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Stops middle click from pasting anywhere else. Starts with the next login."
|
||||||
|
msgstr "Kółko myszy nie wkleja już nigdzie indziej. Od następnego logowania."
|
||||||
|
|
||||||
|
msgid "Cover new applications"
|
||||||
|
msgstr "Obejmuj nowe aplikacje"
|
||||||
|
|
||||||
|
msgid "Applications installed later get autoscroll on their own."
|
||||||
|
msgstr "Aplikacje zainstalowane później same dostaną autoscroll."
|
||||||
|
|
||||||
|
msgid "More Chromium arguments"
|
||||||
|
msgstr "Więcej argumentów Chromium"
|
||||||
|
|
||||||
|
msgid "Passed to every application along with the autoscroll one."
|
||||||
|
msgstr "Przekazywane każdej aplikacji razem z tym od autoscrolla."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: change, q: back"
|
||||||
|
msgstr "Góra/Dół: wybierz, Spacja: zmień, q: wstecz"
|
||||||
|
|
||||||
|
msgid "Arguments separated by spaces, empty for none:"
|
||||||
|
msgstr "Argumenty oddzielone spacjami, puste oznacza brak:"
|
||||||
|
|
||||||
|
msgid "Could not save the setting."
|
||||||
|
msgstr "Nie udało się zapisać ustawienia."
|
||||||
|
|
||||||
|
#. Applications screen
|
||||||
|
msgid "Looking at the installed applications..."
|
||||||
|
msgstr "Przeglądanie zainstalowanych aplikacji..."
|
||||||
|
|
||||||
|
msgid "No supported applications found."
|
||||||
|
msgstr "Nie znaleziono obsługiwanych aplikacji."
|
||||||
|
|
||||||
|
msgid "Anything marked \"cannot tell\" stays off until it is turned on here."
|
||||||
|
msgstr ""
|
||||||
|
"Pozycje „nie wiadomo” zostają wyłączone, dopóki nie włączysz ich tutaj."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. This is what would be covered."
|
||||||
|
msgstr "Autoscroll jest wyłączony. Tyle zostałoby objęte."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: turn on or off, q: back"
|
||||||
|
msgstr "Góra/Dół: wybierz, Spacja: włącz lub wyłącz, q: wstecz"
|
||||||
|
|
||||||
|
msgid "Search:"
|
||||||
|
msgstr "Szukaj:"
|
||||||
|
|
||||||
|
msgid "Type to search, Down: go to the list, Esc: back"
|
||||||
|
msgstr "Pisz, aby szukać, Dół: do listy, Esc: wstecz"
|
||||||
|
|
||||||
|
msgid "No matches."
|
||||||
|
msgstr "Brak wyników."
|
||||||
|
|
||||||
|
#. Results
|
||||||
|
msgid "Autoscroll is on for %d applications."
|
||||||
|
msgstr "Autoscroll włączony dla %d aplikacji."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Applications that are already running pick this up when they are restarted."
|
||||||
|
msgstr "Uruchomione już aplikacje przejmą to po ponownym uruchomieniu."
|
||||||
|
|
||||||
|
msgid "Could not start the watcher for newly installed applications."
|
||||||
|
msgstr "Nie udało się uruchomić obserwowania nowych aplikacji."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"No systemd user session, so newly installed applications will not be picked "
|
||||||
|
"up on their own."
|
||||||
|
msgstr ""
|
||||||
|
"Brak sesji użytkownika systemd, więc nowo zainstalowane aplikacje nie "
|
||||||
|
"zostaną wykryte same."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off and everything that was changed has been put back."
|
||||||
|
msgstr "Autoscroll jest wyłączony, a wszystkie zmiany zostały cofnięte."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. Turn it on first."
|
||||||
|
msgstr "Autoscroll jest wyłączony. Najpierw go włącz."
|
||||||
|
|
||||||
|
msgid "Applied again to %d applications."
|
||||||
|
msgstr "Ponownie zastosowano dla %d aplikacji."
|
||||||
|
|
||||||
|
msgid "Applied to %d applications."
|
||||||
|
msgstr "Zastosowano dla %d aplikacji."
|
||||||
|
|
||||||
|
msgid "Already applied to %d applications."
|
||||||
|
msgstr "Już zastosowano dla %d aplikacji."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam starts its interface in a way this version cannot change without Steam "
|
||||||
|
"noticing; leaving it alone."
|
||||||
|
msgstr ""
|
||||||
|
"Steam uruchamia swój interfejs w sposób, którego ta wersja nie może zmienić "
|
||||||
|
"bez wiedzy Steama; Steam pozostaje bez zmian."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam's interface cannot be given the flag without leaving a file Steam "
|
||||||
|
"would reinstall; the change has been taken back."
|
||||||
|
msgstr ""
|
||||||
|
"Interfejsowi Steama nie można dodać flagi bez zostawienia pliku, który Steam "
|
||||||
|
"zainstalowałby ponownie; zmiana została cofnięta."
|
||||||
|
|
||||||
|
msgid "Middle click stops pasting at the next login."
|
||||||
|
msgstr "Kółko myszy przestanie wklejać od następnego logowania."
|
||||||
|
|
||||||
|
#. Help
|
||||||
|
msgid "Usage: middleclick-autoscroll [command]"
|
||||||
|
msgstr "Użycie: middleclick-autoscroll [polecenie]"
|
||||||
|
|
||||||
|
msgid "Commands:"
|
||||||
|
msgstr "Polecenia:"
|
||||||
|
|
||||||
|
msgid "Turn autoscroll on"
|
||||||
|
msgstr "Włącz autoscroll"
|
||||||
|
|
||||||
|
msgid "Turn it off and put everything back"
|
||||||
|
msgstr "Wyłącz i cofnij wszystko"
|
||||||
|
|
||||||
|
msgid "Apply to anything installed since the last run"
|
||||||
|
msgstr "Zastosuj do wszystkiego zainstalowanego od ostatniego razu"
|
||||||
|
|
||||||
|
msgid "Take everything back and apply it again"
|
||||||
|
msgstr "Cofnij wszystko i zastosuj ponownie"
|
||||||
|
|
||||||
|
msgid "Show what is covered"
|
||||||
|
msgstr "Pokaż, co jest objęte"
|
||||||
|
|
||||||
|
msgid "List every application that was found"
|
||||||
|
msgstr "Wypisz wszystkie znalezione aplikacje"
|
||||||
|
|
||||||
|
msgid "Show this help"
|
||||||
|
msgstr "Pokaż tę pomoc"
|
||||||
|
|
||||||
|
msgid "Show the version"
|
||||||
|
msgstr "Pokaż wersję"
|
||||||
|
|
||||||
|
msgid "Without a command an interactive menu is shown."
|
||||||
|
msgstr "Bez polecenia wyświetlane jest menu interaktywne."
|
||||||
|
|
||||||
|
msgid "Unknown command: %s"
|
||||||
|
msgstr "Nieznane polecenie: %s"
|
||||||
|
|
||||||
|
#. Time
|
||||||
|
msgid "never"
|
||||||
|
msgstr "nigdy"
|
||||||
|
|
||||||
|
msgid "just now"
|
||||||
|
msgstr "przed chwilą"
|
||||||
|
|
||||||
|
msgid "1 minute ago"
|
||||||
|
msgstr "1 minutę temu"
|
||||||
|
|
||||||
|
msgid "%d minutes ago"
|
||||||
|
msgstr "%d min temu"
|
||||||
|
|
||||||
|
msgid "1 hour ago"
|
||||||
|
msgstr "1 godzinę temu"
|
||||||
|
|
||||||
|
msgid "%d hours ago"
|
||||||
|
msgstr "%d godz. temu"
|
||||||
|
|
||||||
|
msgid "1 day ago"
|
||||||
|
msgstr "1 dzień temu"
|
||||||
|
|
||||||
|
msgid "%d days ago"
|
||||||
|
msgstr "%d dni temu"
|
||||||
+271
@@ -0,0 +1,271 @@
|
|||||||
|
# Brazilian Portuguese translation for middleclick-autoscroll.
|
||||||
|
# Machine translated. Corrections are welcome.
|
||||||
|
# Copyright (C) 2026 Felitendo
|
||||||
|
# This file is distributed under the same license as middleclick-autoscroll.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: middleclick-autoscroll 1.6.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/middleclick-autoscroll/"
|
||||||
|
"issues\n"
|
||||||
|
"POT-Creation-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"PO-Revision-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"Last-Translator: machine translation\n"
|
||||||
|
"Language-Team: Brazilian Portuguese\n"
|
||||||
|
"Language: pt_BR\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#. Status labels
|
||||||
|
msgid "ON"
|
||||||
|
msgstr "LIGADO"
|
||||||
|
|
||||||
|
msgid "OFF"
|
||||||
|
msgstr "DESLIGADO"
|
||||||
|
|
||||||
|
msgid "on"
|
||||||
|
msgstr "ligado"
|
||||||
|
|
||||||
|
msgid "off"
|
||||||
|
msgstr "desligado"
|
||||||
|
|
||||||
|
msgid "(none)"
|
||||||
|
msgstr "(nenhum)"
|
||||||
|
|
||||||
|
msgid "flag file"
|
||||||
|
msgstr "arquivo de flags"
|
||||||
|
|
||||||
|
msgid "launcher"
|
||||||
|
msgstr "lançador"
|
||||||
|
|
||||||
|
msgid "profile"
|
||||||
|
msgstr "perfil"
|
||||||
|
|
||||||
|
msgid "cannot tell"
|
||||||
|
msgstr "indeterminado"
|
||||||
|
|
||||||
|
msgid "not patched yet"
|
||||||
|
msgstr "ainda não aplicado"
|
||||||
|
|
||||||
|
#. Status block
|
||||||
|
msgid "Autoscroll"
|
||||||
|
msgstr "Autoscroll"
|
||||||
|
|
||||||
|
msgid "Applications covered"
|
||||||
|
msgstr "Aplicativos cobertos"
|
||||||
|
|
||||||
|
msgid "%d of %d"
|
||||||
|
msgstr "%d de %d"
|
||||||
|
|
||||||
|
msgid "Not identified"
|
||||||
|
msgstr "Não identificados"
|
||||||
|
|
||||||
|
msgid "%d (see the applications list)"
|
||||||
|
msgstr "%d (veja a lista de aplicativos)"
|
||||||
|
|
||||||
|
msgid "Steam"
|
||||||
|
msgstr "Steam"
|
||||||
|
|
||||||
|
msgid "Middle-click paste"
|
||||||
|
msgstr "Colar com clique do meio"
|
||||||
|
|
||||||
|
msgid "New applications"
|
||||||
|
msgstr "Novos aplicativos"
|
||||||
|
|
||||||
|
msgid "Last applied"
|
||||||
|
msgstr "Aplicado pela última vez"
|
||||||
|
|
||||||
|
msgid "Applications pick this up the next time they are started."
|
||||||
|
msgstr "Os aplicativos passam a usar isso na próxima vez que forem abertos."
|
||||||
|
|
||||||
|
#. Menu
|
||||||
|
msgid "Turn autoscroll on or off"
|
||||||
|
msgstr "Ligar ou desligar o autoscroll"
|
||||||
|
|
||||||
|
msgid "Re-apply everything"
|
||||||
|
msgstr "Aplicar tudo de novo"
|
||||||
|
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Aplicativos"
|
||||||
|
|
||||||
|
msgid "Settings"
|
||||||
|
msgstr "Configurações"
|
||||||
|
|
||||||
|
msgid "Quit"
|
||||||
|
msgstr "Sair"
|
||||||
|
|
||||||
|
msgid "Press any key to continue..."
|
||||||
|
msgstr "Pressione qualquer tecla para continuar..."
|
||||||
|
|
||||||
|
msgid "One moment..."
|
||||||
|
msgstr "Um momento..."
|
||||||
|
|
||||||
|
#. Settings
|
||||||
|
msgid "Turn off middle-click paste"
|
||||||
|
msgstr "Desligar colar com clique do meio"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Stops middle click from pasting anywhere else. Starts with the next login."
|
||||||
|
msgstr ""
|
||||||
|
"O clique do meio para de colar em outros lugares. A partir do próximo login."
|
||||||
|
|
||||||
|
msgid "Cover new applications"
|
||||||
|
msgstr "Cobrir novos aplicativos"
|
||||||
|
|
||||||
|
msgid "Applications installed later get autoscroll on their own."
|
||||||
|
msgstr "Aplicativos instalados depois recebem o autoscroll sozinhos."
|
||||||
|
|
||||||
|
msgid "More Chromium arguments"
|
||||||
|
msgstr "Mais argumentos do Chromium"
|
||||||
|
|
||||||
|
msgid "Passed to every application along with the autoscroll one."
|
||||||
|
msgstr "Passados a todo aplicativo junto com o do autoscroll."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: change, q: back"
|
||||||
|
msgstr "Cima/Baixo: escolher, Espaço: mudar, q: voltar"
|
||||||
|
|
||||||
|
msgid "Arguments separated by spaces, empty for none:"
|
||||||
|
msgstr "Argumentos separados por espaços, vazio para nenhum:"
|
||||||
|
|
||||||
|
msgid "Could not save the setting."
|
||||||
|
msgstr "Não foi possível salvar a configuração."
|
||||||
|
|
||||||
|
#. Applications screen
|
||||||
|
msgid "Looking at the installed applications..."
|
||||||
|
msgstr "Verificando os aplicativos instalados..."
|
||||||
|
|
||||||
|
msgid "No supported applications found."
|
||||||
|
msgstr "Nenhum aplicativo compatível encontrado."
|
||||||
|
|
||||||
|
msgid "Anything marked \"cannot tell\" stays off until it is turned on here."
|
||||||
|
msgstr ""
|
||||||
|
"O que está marcado como \"indeterminado\" fica desligado até ser ligado aqui."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. This is what would be covered."
|
||||||
|
msgstr "O autoscroll está desligado. Isto é o que seria coberto."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: turn on or off, q: back"
|
||||||
|
msgstr "Cima/Baixo: escolher, Espaço: ligar ou desligar, q: voltar"
|
||||||
|
|
||||||
|
msgid "Search:"
|
||||||
|
msgstr "Buscar:"
|
||||||
|
|
||||||
|
msgid "Type to search, Down: go to the list, Esc: back"
|
||||||
|
msgstr "Digite para buscar, Baixo: ir para a lista, Esc: voltar"
|
||||||
|
|
||||||
|
msgid "No matches."
|
||||||
|
msgstr "Nenhum resultado."
|
||||||
|
|
||||||
|
#. Results
|
||||||
|
msgid "Autoscroll is on for %d applications."
|
||||||
|
msgstr "O autoscroll está ligado para %d aplicativos."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Applications that are already running pick this up when they are restarted."
|
||||||
|
msgstr ""
|
||||||
|
"Aplicativos que já estão abertos passam a usar isso ao serem reiniciados."
|
||||||
|
|
||||||
|
msgid "Could not start the watcher for newly installed applications."
|
||||||
|
msgstr "Não foi possível iniciar o monitoramento de novos aplicativos."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"No systemd user session, so newly installed applications will not be picked "
|
||||||
|
"up on their own."
|
||||||
|
msgstr ""
|
||||||
|
"Sem sessão de usuário do systemd, então novos aplicativos não serão "
|
||||||
|
"detectados sozinhos."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off and everything that was changed has been put back."
|
||||||
|
msgstr "O autoscroll está desligado e tudo o que foi alterado foi restaurado."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. Turn it on first."
|
||||||
|
msgstr "O autoscroll está desligado. Ligue-o primeiro."
|
||||||
|
|
||||||
|
msgid "Applied again to %d applications."
|
||||||
|
msgstr "Aplicado de novo a %d aplicativos."
|
||||||
|
|
||||||
|
msgid "Applied to %d applications."
|
||||||
|
msgstr "Aplicado a %d aplicativos."
|
||||||
|
|
||||||
|
msgid "Already applied to %d applications."
|
||||||
|
msgstr "Já aplicado a %d aplicativos."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam starts its interface in a way this version cannot change without Steam "
|
||||||
|
"noticing; leaving it alone."
|
||||||
|
msgstr ""
|
||||||
|
"O Steam inicia sua interface de um jeito que esta versão não consegue mudar "
|
||||||
|
"sem que o Steam perceba; ele fica como está."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam's interface cannot be given the flag without leaving a file Steam "
|
||||||
|
"would reinstall; the change has been taken back."
|
||||||
|
msgstr ""
|
||||||
|
"A interface do Steam não pode receber o flag sem deixar um arquivo que o "
|
||||||
|
"Steam reinstalaria; a alteração foi desfeita."
|
||||||
|
|
||||||
|
msgid "Middle click stops pasting at the next login."
|
||||||
|
msgstr "O clique do meio para de colar no próximo login."
|
||||||
|
|
||||||
|
#. Help
|
||||||
|
msgid "Usage: middleclick-autoscroll [command]"
|
||||||
|
msgstr "Uso: middleclick-autoscroll [comando]"
|
||||||
|
|
||||||
|
msgid "Commands:"
|
||||||
|
msgstr "Comandos:"
|
||||||
|
|
||||||
|
msgid "Turn autoscroll on"
|
||||||
|
msgstr "Ligar o autoscroll"
|
||||||
|
|
||||||
|
msgid "Turn it off and put everything back"
|
||||||
|
msgstr "Desligar e restaurar tudo"
|
||||||
|
|
||||||
|
msgid "Apply to anything installed since the last run"
|
||||||
|
msgstr "Aplicar a tudo o que foi instalado desde a última vez"
|
||||||
|
|
||||||
|
msgid "Take everything back and apply it again"
|
||||||
|
msgstr "Desfazer tudo e aplicar de novo"
|
||||||
|
|
||||||
|
msgid "Show what is covered"
|
||||||
|
msgstr "Mostrar o que está coberto"
|
||||||
|
|
||||||
|
msgid "List every application that was found"
|
||||||
|
msgstr "Listar todos os aplicativos encontrados"
|
||||||
|
|
||||||
|
msgid "Show this help"
|
||||||
|
msgstr "Mostrar esta ajuda"
|
||||||
|
|
||||||
|
msgid "Show the version"
|
||||||
|
msgstr "Mostrar a versão"
|
||||||
|
|
||||||
|
msgid "Without a command an interactive menu is shown."
|
||||||
|
msgstr "Sem comando, um menu interativo é exibido."
|
||||||
|
|
||||||
|
msgid "Unknown command: %s"
|
||||||
|
msgstr "Comando desconhecido: %s"
|
||||||
|
|
||||||
|
#. Time
|
||||||
|
msgid "never"
|
||||||
|
msgstr "nunca"
|
||||||
|
|
||||||
|
msgid "just now"
|
||||||
|
msgstr "agora mesmo"
|
||||||
|
|
||||||
|
msgid "1 minute ago"
|
||||||
|
msgstr "há 1 minuto"
|
||||||
|
|
||||||
|
msgid "%d minutes ago"
|
||||||
|
msgstr "há %d minutos"
|
||||||
|
|
||||||
|
msgid "1 hour ago"
|
||||||
|
msgstr "há 1 hora"
|
||||||
|
|
||||||
|
msgid "%d hours ago"
|
||||||
|
msgstr "há %d horas"
|
||||||
|
|
||||||
|
msgid "1 day ago"
|
||||||
|
msgstr "há 1 dia"
|
||||||
|
|
||||||
|
msgid "%d days ago"
|
||||||
|
msgstr "há %d dias"
|
||||||
@@ -0,0 +1,270 @@
|
|||||||
|
# Russian translation for middleclick-autoscroll.
|
||||||
|
# Machine translated. Corrections are welcome.
|
||||||
|
# Copyright (C) 2026 Felitendo
|
||||||
|
# This file is distributed under the same license as middleclick-autoscroll.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: middleclick-autoscroll 1.6.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/middleclick-autoscroll/"
|
||||||
|
"issues\n"
|
||||||
|
"POT-Creation-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"PO-Revision-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"Last-Translator: machine translation\n"
|
||||||
|
"Language-Team: Russian\n"
|
||||||
|
"Language: ru\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#. Status labels
|
||||||
|
msgid "ON"
|
||||||
|
msgstr "ВКЛ"
|
||||||
|
|
||||||
|
msgid "OFF"
|
||||||
|
msgstr "ВЫКЛ"
|
||||||
|
|
||||||
|
msgid "on"
|
||||||
|
msgstr "вкл"
|
||||||
|
|
||||||
|
msgid "off"
|
||||||
|
msgstr "выкл"
|
||||||
|
|
||||||
|
msgid "(none)"
|
||||||
|
msgstr "(нет)"
|
||||||
|
|
||||||
|
msgid "flag file"
|
||||||
|
msgstr "файл флагов"
|
||||||
|
|
||||||
|
msgid "launcher"
|
||||||
|
msgstr "ярлык"
|
||||||
|
|
||||||
|
msgid "profile"
|
||||||
|
msgstr "профиль"
|
||||||
|
|
||||||
|
msgid "cannot tell"
|
||||||
|
msgstr "неизвестно"
|
||||||
|
|
||||||
|
msgid "not patched yet"
|
||||||
|
msgstr "ещё не применено"
|
||||||
|
|
||||||
|
#. Status block
|
||||||
|
msgid "Autoscroll"
|
||||||
|
msgstr "Автопрокрутка"
|
||||||
|
|
||||||
|
msgid "Applications covered"
|
||||||
|
msgstr "Приложения с автопрокруткой"
|
||||||
|
|
||||||
|
msgid "%d of %d"
|
||||||
|
msgstr "%d из %d"
|
||||||
|
|
||||||
|
msgid "Not identified"
|
||||||
|
msgstr "Не распознано"
|
||||||
|
|
||||||
|
msgid "%d (see the applications list)"
|
||||||
|
msgstr "%d (см. список приложений)"
|
||||||
|
|
||||||
|
msgid "Steam"
|
||||||
|
msgstr "Steam"
|
||||||
|
|
||||||
|
msgid "Middle-click paste"
|
||||||
|
msgstr "Вставка средней кнопкой"
|
||||||
|
|
||||||
|
msgid "New applications"
|
||||||
|
msgstr "Новые приложения"
|
||||||
|
|
||||||
|
msgid "Last applied"
|
||||||
|
msgstr "Последнее применение"
|
||||||
|
|
||||||
|
msgid "Applications pick this up the next time they are started."
|
||||||
|
msgstr "Приложения подхватят это при следующем запуске."
|
||||||
|
|
||||||
|
#. Menu
|
||||||
|
msgid "Turn autoscroll on or off"
|
||||||
|
msgstr "Включить или выключить автопрокрутку"
|
||||||
|
|
||||||
|
msgid "Re-apply everything"
|
||||||
|
msgstr "Применить всё заново"
|
||||||
|
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Приложения"
|
||||||
|
|
||||||
|
msgid "Settings"
|
||||||
|
msgstr "Настройки"
|
||||||
|
|
||||||
|
msgid "Quit"
|
||||||
|
msgstr "Выход"
|
||||||
|
|
||||||
|
msgid "Press any key to continue..."
|
||||||
|
msgstr "Нажмите любую клавишу..."
|
||||||
|
|
||||||
|
msgid "One moment..."
|
||||||
|
msgstr "Минутку..."
|
||||||
|
|
||||||
|
#. Settings
|
||||||
|
msgid "Turn off middle-click paste"
|
||||||
|
msgstr "Отключить вставку средней кнопкой"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Stops middle click from pasting anywhere else. Starts with the next login."
|
||||||
|
msgstr ""
|
||||||
|
"Средняя кнопка больше нигде не вставляет. Со следующего входа в систему."
|
||||||
|
|
||||||
|
msgid "Cover new applications"
|
||||||
|
msgstr "Охватывать новые приложения"
|
||||||
|
|
||||||
|
msgid "Applications installed later get autoscroll on their own."
|
||||||
|
msgstr "Приложения, установленные позже, получат автопрокрутку сами."
|
||||||
|
|
||||||
|
msgid "More Chromium arguments"
|
||||||
|
msgstr "Другие аргументы Chromium"
|
||||||
|
|
||||||
|
msgid "Passed to every application along with the autoscroll one."
|
||||||
|
msgstr "Передаются каждому приложению вместе с аргументом автопрокрутки."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: change, q: back"
|
||||||
|
msgstr "Вверх/Вниз: выбор, Пробел: изменить, q: назад"
|
||||||
|
|
||||||
|
msgid "Arguments separated by spaces, empty for none:"
|
||||||
|
msgstr "Аргументы через пробел (пусто, если не нужны):"
|
||||||
|
|
||||||
|
msgid "Could not save the setting."
|
||||||
|
msgstr "Не удалось сохранить настройку."
|
||||||
|
|
||||||
|
#. Applications screen
|
||||||
|
msgid "Looking at the installed applications..."
|
||||||
|
msgstr "Просмотр установленных приложений..."
|
||||||
|
|
||||||
|
msgid "No supported applications found."
|
||||||
|
msgstr "Поддерживаемые приложения не найдены."
|
||||||
|
|
||||||
|
msgid "Anything marked \"cannot tell\" stays off until it is turned on here."
|
||||||
|
msgstr ""
|
||||||
|
"Помеченное как «неизвестно» остаётся выключенным, пока его здесь не включат."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. This is what would be covered."
|
||||||
|
msgstr "Автопрокрутка выключена. Вот что было бы охвачено."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: turn on or off, q: back"
|
||||||
|
msgstr "Вверх/Вниз: выбор, Пробел: включить или выключить, q: назад"
|
||||||
|
|
||||||
|
msgid "Search:"
|
||||||
|
msgstr "Поиск:"
|
||||||
|
|
||||||
|
msgid "Type to search, Down: go to the list, Esc: back"
|
||||||
|
msgstr "Печатайте для поиска, Вниз: к списку, Esc: назад"
|
||||||
|
|
||||||
|
msgid "No matches."
|
||||||
|
msgstr "Ничего не найдено."
|
||||||
|
|
||||||
|
#. Results
|
||||||
|
msgid "Autoscroll is on for %d applications."
|
||||||
|
msgstr "Автопрокрутка включена. Приложений: %d."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Applications that are already running pick this up when they are restarted."
|
||||||
|
msgstr "Уже запущенные приложения подхватят это после перезапуска."
|
||||||
|
|
||||||
|
msgid "Could not start the watcher for newly installed applications."
|
||||||
|
msgstr "Не удалось запустить отслеживание новых приложений."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"No systemd user session, so newly installed applications will not be picked "
|
||||||
|
"up on their own."
|
||||||
|
msgstr ""
|
||||||
|
"Нет пользовательского сеанса systemd, поэтому новые приложения не будут "
|
||||||
|
"подхвачены сами."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off and everything that was changed has been put back."
|
||||||
|
msgstr "Автопрокрутка выключена, все изменения отменены."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. Turn it on first."
|
||||||
|
msgstr "Автопрокрутка выключена. Сначала включите её."
|
||||||
|
|
||||||
|
msgid "Applied again to %d applications."
|
||||||
|
msgstr "Применено заново. Приложений: %d."
|
||||||
|
|
||||||
|
msgid "Applied to %d applications."
|
||||||
|
msgstr "Применено. Приложений: %d."
|
||||||
|
|
||||||
|
msgid "Already applied to %d applications."
|
||||||
|
msgstr "Уже применено. Приложений: %d."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam starts its interface in a way this version cannot change without Steam "
|
||||||
|
"noticing; leaving it alone."
|
||||||
|
msgstr ""
|
||||||
|
"Steam запускает свой интерфейс так, что эта версия не может это изменить "
|
||||||
|
"незаметно для Steam; Steam остаётся без изменений."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam's interface cannot be given the flag without leaving a file Steam "
|
||||||
|
"would reinstall; the change has been taken back."
|
||||||
|
msgstr ""
|
||||||
|
"Интерфейсу Steam нельзя передать флаг, не оставив файл, который Steam "
|
||||||
|
"переустановил бы; изменение отменено."
|
||||||
|
|
||||||
|
msgid "Middle click stops pasting at the next login."
|
||||||
|
msgstr "Средняя кнопка перестанет вставлять со следующего входа в систему."
|
||||||
|
|
||||||
|
#. Help
|
||||||
|
msgid "Usage: middleclick-autoscroll [command]"
|
||||||
|
msgstr "Использование: middleclick-autoscroll [команда]"
|
||||||
|
|
||||||
|
msgid "Commands:"
|
||||||
|
msgstr "Команды:"
|
||||||
|
|
||||||
|
msgid "Turn autoscroll on"
|
||||||
|
msgstr "Включить автопрокрутку"
|
||||||
|
|
||||||
|
msgid "Turn it off and put everything back"
|
||||||
|
msgstr "Выключить и всё вернуть"
|
||||||
|
|
||||||
|
msgid "Apply to anything installed since the last run"
|
||||||
|
msgstr "Применить ко всему, что установлено с прошлого запуска"
|
||||||
|
|
||||||
|
msgid "Take everything back and apply it again"
|
||||||
|
msgstr "Всё отменить и применить заново"
|
||||||
|
|
||||||
|
msgid "Show what is covered"
|
||||||
|
msgstr "Показать, что охвачено"
|
||||||
|
|
||||||
|
msgid "List every application that was found"
|
||||||
|
msgstr "Показать все найденные приложения"
|
||||||
|
|
||||||
|
msgid "Show this help"
|
||||||
|
msgstr "Показать эту справку"
|
||||||
|
|
||||||
|
msgid "Show the version"
|
||||||
|
msgstr "Показать версию"
|
||||||
|
|
||||||
|
msgid "Without a command an interactive menu is shown."
|
||||||
|
msgstr "Без команды показывается интерактивное меню."
|
||||||
|
|
||||||
|
msgid "Unknown command: %s"
|
||||||
|
msgstr "Неизвестная команда: %s"
|
||||||
|
|
||||||
|
#. Time
|
||||||
|
msgid "never"
|
||||||
|
msgstr "никогда"
|
||||||
|
|
||||||
|
msgid "just now"
|
||||||
|
msgstr "только что"
|
||||||
|
|
||||||
|
msgid "1 minute ago"
|
||||||
|
msgstr "1 минуту назад"
|
||||||
|
|
||||||
|
msgid "%d minutes ago"
|
||||||
|
msgstr "%d мин. назад"
|
||||||
|
|
||||||
|
msgid "1 hour ago"
|
||||||
|
msgstr "1 час назад"
|
||||||
|
|
||||||
|
msgid "%d hours ago"
|
||||||
|
msgstr "%d ч назад"
|
||||||
|
|
||||||
|
msgid "1 day ago"
|
||||||
|
msgstr "1 день назад"
|
||||||
|
|
||||||
|
msgid "%d days ago"
|
||||||
|
msgstr "%d дн. назад"
|
||||||
@@ -0,0 +1,269 @@
|
|||||||
|
# Turkish translation for middleclick-autoscroll.
|
||||||
|
# Machine translated. Corrections are welcome.
|
||||||
|
# Copyright (C) 2026 Felitendo
|
||||||
|
# This file is distributed under the same license as middleclick-autoscroll.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: middleclick-autoscroll 1.6.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/middleclick-autoscroll/"
|
||||||
|
"issues\n"
|
||||||
|
"POT-Creation-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"PO-Revision-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"Last-Translator: machine translation\n"
|
||||||
|
"Language-Team: Turkish\n"
|
||||||
|
"Language: tr\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#. Status labels
|
||||||
|
msgid "ON"
|
||||||
|
msgstr "AÇIK"
|
||||||
|
|
||||||
|
msgid "OFF"
|
||||||
|
msgstr "KAPALI"
|
||||||
|
|
||||||
|
msgid "on"
|
||||||
|
msgstr "açık"
|
||||||
|
|
||||||
|
msgid "off"
|
||||||
|
msgstr "kapalı"
|
||||||
|
|
||||||
|
msgid "(none)"
|
||||||
|
msgstr "(yok)"
|
||||||
|
|
||||||
|
msgid "flag file"
|
||||||
|
msgstr "bayrak dosyası"
|
||||||
|
|
||||||
|
msgid "launcher"
|
||||||
|
msgstr "başlatıcı"
|
||||||
|
|
||||||
|
msgid "profile"
|
||||||
|
msgstr "profil"
|
||||||
|
|
||||||
|
msgid "cannot tell"
|
||||||
|
msgstr "belirsiz"
|
||||||
|
|
||||||
|
msgid "not patched yet"
|
||||||
|
msgstr "henüz uygulanmadı"
|
||||||
|
|
||||||
|
#. Status block
|
||||||
|
msgid "Autoscroll"
|
||||||
|
msgstr "Autoscroll"
|
||||||
|
|
||||||
|
msgid "Applications covered"
|
||||||
|
msgstr "Kapsanan uygulamalar"
|
||||||
|
|
||||||
|
msgid "%d of %d"
|
||||||
|
msgstr "%d / %d"
|
||||||
|
|
||||||
|
msgid "Not identified"
|
||||||
|
msgstr "Tanınmadı"
|
||||||
|
|
||||||
|
msgid "%d (see the applications list)"
|
||||||
|
msgstr "%d (uygulama listesine bakın)"
|
||||||
|
|
||||||
|
msgid "Steam"
|
||||||
|
msgstr "Steam"
|
||||||
|
|
||||||
|
msgid "Middle-click paste"
|
||||||
|
msgstr "Orta tıkla yapıştırma"
|
||||||
|
|
||||||
|
msgid "New applications"
|
||||||
|
msgstr "Yeni uygulamalar"
|
||||||
|
|
||||||
|
msgid "Last applied"
|
||||||
|
msgstr "Son uygulanma"
|
||||||
|
|
||||||
|
msgid "Applications pick this up the next time they are started."
|
||||||
|
msgstr "Uygulamalar bunu bir sonraki açılışta alır."
|
||||||
|
|
||||||
|
#. Menu
|
||||||
|
msgid "Turn autoscroll on or off"
|
||||||
|
msgstr "Autoscroll'u aç veya kapat"
|
||||||
|
|
||||||
|
msgid "Re-apply everything"
|
||||||
|
msgstr "Her şeyi yeniden uygula"
|
||||||
|
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Uygulamalar"
|
||||||
|
|
||||||
|
msgid "Settings"
|
||||||
|
msgstr "Ayarlar"
|
||||||
|
|
||||||
|
msgid "Quit"
|
||||||
|
msgstr "Çık"
|
||||||
|
|
||||||
|
msgid "Press any key to continue..."
|
||||||
|
msgstr "Devam etmek için bir tuşa basın..."
|
||||||
|
|
||||||
|
msgid "One moment..."
|
||||||
|
msgstr "Bir dakika..."
|
||||||
|
|
||||||
|
#. Settings
|
||||||
|
msgid "Turn off middle-click paste"
|
||||||
|
msgstr "Orta tıkla yapıştırmayı kapat"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Stops middle click from pasting anywhere else. Starts with the next login."
|
||||||
|
msgstr ""
|
||||||
|
"Orta tık artık başka hiçbir yerde yapıştırmaz. Bir sonraki girişten itibaren."
|
||||||
|
|
||||||
|
msgid "Cover new applications"
|
||||||
|
msgstr "Yeni uygulamaları kapsa"
|
||||||
|
|
||||||
|
msgid "Applications installed later get autoscroll on their own."
|
||||||
|
msgstr "Sonradan kurulan uygulamalar Autoscroll'u kendiliğinden alır."
|
||||||
|
|
||||||
|
msgid "More Chromium arguments"
|
||||||
|
msgstr "Ek Chromium argümanları"
|
||||||
|
|
||||||
|
msgid "Passed to every application along with the autoscroll one."
|
||||||
|
msgstr "Autoscroll argümanıyla birlikte her uygulamaya verilir."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: change, q: back"
|
||||||
|
msgstr "Yukarı/Aşağı: seç, Boşluk: değiştir, q: geri"
|
||||||
|
|
||||||
|
msgid "Arguments separated by spaces, empty for none:"
|
||||||
|
msgstr "Boşlukla ayrılmış argümanlar, hiçbiri için boş bırakın:"
|
||||||
|
|
||||||
|
msgid "Could not save the setting."
|
||||||
|
msgstr "Ayar kaydedilemedi."
|
||||||
|
|
||||||
|
#. Applications screen
|
||||||
|
msgid "Looking at the installed applications..."
|
||||||
|
msgstr "Kurulu uygulamalara bakılıyor..."
|
||||||
|
|
||||||
|
msgid "No supported applications found."
|
||||||
|
msgstr "Desteklenen uygulama bulunamadı."
|
||||||
|
|
||||||
|
msgid "Anything marked \"cannot tell\" stays off until it is turned on here."
|
||||||
|
msgstr "\"belirsiz\" olarak işaretlenenler burada açılana kadar kapalı kalır."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. This is what would be covered."
|
||||||
|
msgstr "Autoscroll kapalı. Kapsanacak olanlar bunlar."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: turn on or off, q: back"
|
||||||
|
msgstr "Yukarı/Aşağı: seç, Boşluk: aç veya kapat, q: geri"
|
||||||
|
|
||||||
|
msgid "Search:"
|
||||||
|
msgstr "Ara:"
|
||||||
|
|
||||||
|
msgid "Type to search, Down: go to the list, Esc: back"
|
||||||
|
msgstr "Aramak için yazın, Aşağı: listeye git, Esc: geri"
|
||||||
|
|
||||||
|
msgid "No matches."
|
||||||
|
msgstr "Eşleşme yok."
|
||||||
|
|
||||||
|
#. Results
|
||||||
|
msgid "Autoscroll is on for %d applications."
|
||||||
|
msgstr "Autoscroll %d uygulama için açık."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Applications that are already running pick this up when they are restarted."
|
||||||
|
msgstr "Zaten çalışan uygulamalar bunu yeniden başlatıldıklarında alır."
|
||||||
|
|
||||||
|
msgid "Could not start the watcher for newly installed applications."
|
||||||
|
msgstr "Yeni uygulamaları izleme başlatılamadı."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"No systemd user session, so newly installed applications will not be picked "
|
||||||
|
"up on their own."
|
||||||
|
msgstr ""
|
||||||
|
"systemd kullanıcı oturumu yok, bu yüzden yeni kurulan uygulamalar "
|
||||||
|
"kendiliğinden algılanmayacak."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off and everything that was changed has been put back."
|
||||||
|
msgstr "Autoscroll kapalı ve değiştirilen her şey geri alındı."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. Turn it on first."
|
||||||
|
msgstr "Autoscroll kapalı. Önce açın."
|
||||||
|
|
||||||
|
msgid "Applied again to %d applications."
|
||||||
|
msgstr "%d uygulamaya yeniden uygulandı."
|
||||||
|
|
||||||
|
msgid "Applied to %d applications."
|
||||||
|
msgstr "%d uygulamaya uygulandı."
|
||||||
|
|
||||||
|
msgid "Already applied to %d applications."
|
||||||
|
msgstr "Zaten %d uygulamaya uygulanmış."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam starts its interface in a way this version cannot change without Steam "
|
||||||
|
"noticing; leaving it alone."
|
||||||
|
msgstr ""
|
||||||
|
"Steam arayüzünü, bu sürümün Steam fark etmeden değiştiremeyeceği bir şekilde "
|
||||||
|
"başlatıyor; olduğu gibi bırakılıyor."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam's interface cannot be given the flag without leaving a file Steam "
|
||||||
|
"would reinstall; the change has been taken back."
|
||||||
|
msgstr ""
|
||||||
|
"Steam arayüzüne, Steam'in yeniden kuracağı bir dosya bırakmadan bayrak "
|
||||||
|
"verilemiyor; değişiklik geri alındı."
|
||||||
|
|
||||||
|
msgid "Middle click stops pasting at the next login."
|
||||||
|
msgstr "Orta tık bir sonraki girişte yapıştırmayı bırakır."
|
||||||
|
|
||||||
|
#. Help
|
||||||
|
msgid "Usage: middleclick-autoscroll [command]"
|
||||||
|
msgstr "Kullanım: middleclick-autoscroll [komut]"
|
||||||
|
|
||||||
|
msgid "Commands:"
|
||||||
|
msgstr "Komutlar:"
|
||||||
|
|
||||||
|
msgid "Turn autoscroll on"
|
||||||
|
msgstr "Autoscroll'u aç"
|
||||||
|
|
||||||
|
msgid "Turn it off and put everything back"
|
||||||
|
msgstr "Kapat ve her şeyi geri al"
|
||||||
|
|
||||||
|
msgid "Apply to anything installed since the last run"
|
||||||
|
msgstr "Son çalıştırmadan beri kurulan her şeye uygula"
|
||||||
|
|
||||||
|
msgid "Take everything back and apply it again"
|
||||||
|
msgstr "Her şeyi geri al ve yeniden uygula"
|
||||||
|
|
||||||
|
msgid "Show what is covered"
|
||||||
|
msgstr "Neyin kapsandığını göster"
|
||||||
|
|
||||||
|
msgid "List every application that was found"
|
||||||
|
msgstr "Bulunan tüm uygulamaları listele"
|
||||||
|
|
||||||
|
msgid "Show this help"
|
||||||
|
msgstr "Bu yardımı göster"
|
||||||
|
|
||||||
|
msgid "Show the version"
|
||||||
|
msgstr "Sürümü göster"
|
||||||
|
|
||||||
|
msgid "Without a command an interactive menu is shown."
|
||||||
|
msgstr "Komut verilmezse etkileşimli bir menü gösterilir."
|
||||||
|
|
||||||
|
msgid "Unknown command: %s"
|
||||||
|
msgstr "Bilinmeyen komut: %s"
|
||||||
|
|
||||||
|
#. Time
|
||||||
|
msgid "never"
|
||||||
|
msgstr "hiç"
|
||||||
|
|
||||||
|
msgid "just now"
|
||||||
|
msgstr "az önce"
|
||||||
|
|
||||||
|
msgid "1 minute ago"
|
||||||
|
msgstr "1 dakika önce"
|
||||||
|
|
||||||
|
msgid "%d minutes ago"
|
||||||
|
msgstr "%d dakika önce"
|
||||||
|
|
||||||
|
msgid "1 hour ago"
|
||||||
|
msgstr "1 saat önce"
|
||||||
|
|
||||||
|
msgid "%d hours ago"
|
||||||
|
msgstr "%d saat önce"
|
||||||
|
|
||||||
|
msgid "1 day ago"
|
||||||
|
msgstr "1 gün önce"
|
||||||
|
|
||||||
|
msgid "%d days ago"
|
||||||
|
msgstr "%d gün önce"
|
||||||
@@ -0,0 +1,269 @@
|
|||||||
|
# Ukrainian translation for middleclick-autoscroll.
|
||||||
|
# Machine translated. Corrections are welcome.
|
||||||
|
# Copyright (C) 2026 Felitendo
|
||||||
|
# This file is distributed under the same license as middleclick-autoscroll.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: middleclick-autoscroll 1.6.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/middleclick-autoscroll/"
|
||||||
|
"issues\n"
|
||||||
|
"POT-Creation-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"PO-Revision-Date: 2026-09-24 00:00+0200\n"
|
||||||
|
"Last-Translator: machine translation\n"
|
||||||
|
"Language-Team: Ukrainian\n"
|
||||||
|
"Language: uk\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#. Status labels
|
||||||
|
msgid "ON"
|
||||||
|
msgstr "УВІМК"
|
||||||
|
|
||||||
|
msgid "OFF"
|
||||||
|
msgstr "ВИМК"
|
||||||
|
|
||||||
|
msgid "on"
|
||||||
|
msgstr "увімк"
|
||||||
|
|
||||||
|
msgid "off"
|
||||||
|
msgstr "вимк"
|
||||||
|
|
||||||
|
msgid "(none)"
|
||||||
|
msgstr "(немає)"
|
||||||
|
|
||||||
|
msgid "flag file"
|
||||||
|
msgstr "файл прапорців"
|
||||||
|
|
||||||
|
msgid "launcher"
|
||||||
|
msgstr "ярлик"
|
||||||
|
|
||||||
|
msgid "profile"
|
||||||
|
msgstr "профіль"
|
||||||
|
|
||||||
|
msgid "cannot tell"
|
||||||
|
msgstr "невідомо"
|
||||||
|
|
||||||
|
msgid "not patched yet"
|
||||||
|
msgstr "ще не застосовано"
|
||||||
|
|
||||||
|
#. Status block
|
||||||
|
msgid "Autoscroll"
|
||||||
|
msgstr "Автопрокручування"
|
||||||
|
|
||||||
|
msgid "Applications covered"
|
||||||
|
msgstr "Охоплені застосунки"
|
||||||
|
|
||||||
|
msgid "%d of %d"
|
||||||
|
msgstr "%d з %d"
|
||||||
|
|
||||||
|
msgid "Not identified"
|
||||||
|
msgstr "Не розпізнано"
|
||||||
|
|
||||||
|
msgid "%d (see the applications list)"
|
||||||
|
msgstr "%d (див. список застосунків)"
|
||||||
|
|
||||||
|
msgid "Steam"
|
||||||
|
msgstr "Steam"
|
||||||
|
|
||||||
|
msgid "Middle-click paste"
|
||||||
|
msgstr "Вставлення середньою кнопкою"
|
||||||
|
|
||||||
|
msgid "New applications"
|
||||||
|
msgstr "Нові застосунки"
|
||||||
|
|
||||||
|
msgid "Last applied"
|
||||||
|
msgstr "Востаннє застосовано"
|
||||||
|
|
||||||
|
msgid "Applications pick this up the next time they are started."
|
||||||
|
msgstr "Застосунки підхоплять це під час наступного запуску."
|
||||||
|
|
||||||
|
#. Menu
|
||||||
|
msgid "Turn autoscroll on or off"
|
||||||
|
msgstr "Увімкнути або вимкнути автопрокручування"
|
||||||
|
|
||||||
|
msgid "Re-apply everything"
|
||||||
|
msgstr "Застосувати все знову"
|
||||||
|
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Застосунки"
|
||||||
|
|
||||||
|
msgid "Settings"
|
||||||
|
msgstr "Налаштування"
|
||||||
|
|
||||||
|
msgid "Quit"
|
||||||
|
msgstr "Вийти"
|
||||||
|
|
||||||
|
msgid "Press any key to continue..."
|
||||||
|
msgstr "Натисніть будь-яку клавішу..."
|
||||||
|
|
||||||
|
msgid "One moment..."
|
||||||
|
msgstr "Хвилинку..."
|
||||||
|
|
||||||
|
#. Settings
|
||||||
|
msgid "Turn off middle-click paste"
|
||||||
|
msgstr "Вимкнути вставлення середньою кнопкою"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Stops middle click from pasting anywhere else. Starts with the next login."
|
||||||
|
msgstr "Середня кнопка більше ніде не вставляє. З наступного входу в систему."
|
||||||
|
|
||||||
|
msgid "Cover new applications"
|
||||||
|
msgstr "Охоплювати нові застосунки"
|
||||||
|
|
||||||
|
msgid "Applications installed later get autoscroll on their own."
|
||||||
|
msgstr "Застосунки, встановлені пізніше, отримають автопрокручування самі."
|
||||||
|
|
||||||
|
msgid "More Chromium arguments"
|
||||||
|
msgstr "Інші аргументи Chromium"
|
||||||
|
|
||||||
|
msgid "Passed to every application along with the autoscroll one."
|
||||||
|
msgstr "Передаються кожному застосунку разом з аргументом автопрокручування."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: change, q: back"
|
||||||
|
msgstr "Вгору/Вниз: вибір, Пробіл: змінити, q: назад"
|
||||||
|
|
||||||
|
msgid "Arguments separated by spaces, empty for none:"
|
||||||
|
msgstr "Аргументи через пробіл (порожньо, якщо не потрібні):"
|
||||||
|
|
||||||
|
msgid "Could not save the setting."
|
||||||
|
msgstr "Не вдалося зберегти налаштування."
|
||||||
|
|
||||||
|
#. Applications screen
|
||||||
|
msgid "Looking at the installed applications..."
|
||||||
|
msgstr "Перегляд встановлених застосунків..."
|
||||||
|
|
||||||
|
msgid "No supported applications found."
|
||||||
|
msgstr "Підтримуваних застосунків не знайдено."
|
||||||
|
|
||||||
|
msgid "Anything marked \"cannot tell\" stays off until it is turned on here."
|
||||||
|
msgstr ""
|
||||||
|
"Позначене як «невідомо» лишається вимкненим, доки його тут не увімкнуть."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. This is what would be covered."
|
||||||
|
msgstr "Автопрокручування вимкнено. Ось що було б охоплено."
|
||||||
|
|
||||||
|
msgid "Up/Down: select, Space: turn on or off, q: back"
|
||||||
|
msgstr "Вгору/Вниз: вибір, Пробіл: увімкнути чи вимкнути, q: назад"
|
||||||
|
|
||||||
|
msgid "Search:"
|
||||||
|
msgstr "Пошук:"
|
||||||
|
|
||||||
|
msgid "Type to search, Down: go to the list, Esc: back"
|
||||||
|
msgstr "Друкуйте для пошуку, Вниз: до списку, Esc: назад"
|
||||||
|
|
||||||
|
msgid "No matches."
|
||||||
|
msgstr "Нічого не знайдено."
|
||||||
|
|
||||||
|
#. Results
|
||||||
|
msgid "Autoscroll is on for %d applications."
|
||||||
|
msgstr "Автопрокручування увімкнено. Застосунків: %d."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Applications that are already running pick this up when they are restarted."
|
||||||
|
msgstr "Уже запущені застосунки підхоплять це після перезапуску."
|
||||||
|
|
||||||
|
msgid "Could not start the watcher for newly installed applications."
|
||||||
|
msgstr "Не вдалося запустити стеження за новими застосунками."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"No systemd user session, so newly installed applications will not be picked "
|
||||||
|
"up on their own."
|
||||||
|
msgstr ""
|
||||||
|
"Немає користувацького сеансу systemd, тож нові застосунки не буде підхоплено "
|
||||||
|
"самостійно."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off and everything that was changed has been put back."
|
||||||
|
msgstr "Автопрокручування вимкнено, усі зміни скасовано."
|
||||||
|
|
||||||
|
msgid "Autoscroll is off. Turn it on first."
|
||||||
|
msgstr "Автопрокручування вимкнено. Спершу увімкніть його."
|
||||||
|
|
||||||
|
msgid "Applied again to %d applications."
|
||||||
|
msgstr "Застосовано знову. Застосунків: %d."
|
||||||
|
|
||||||
|
msgid "Applied to %d applications."
|
||||||
|
msgstr "Застосовано. Застосунків: %d."
|
||||||
|
|
||||||
|
msgid "Already applied to %d applications."
|
||||||
|
msgstr "Уже застосовано. Застосунків: %d."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam starts its interface in a way this version cannot change without Steam "
|
||||||
|
"noticing; leaving it alone."
|
||||||
|
msgstr ""
|
||||||
|
"Steam запускає свій інтерфейс так, що ця версія не може це змінити непомітно "
|
||||||
|
"для Steam; Steam лишається без змін."
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Steam's interface cannot be given the flag without leaving a file Steam "
|
||||||
|
"would reinstall; the change has been taken back."
|
||||||
|
msgstr ""
|
||||||
|
"Інтерфейсу Steam не можна передати прапорець, не залишивши файл, який Steam "
|
||||||
|
"перевстановив би; зміну скасовано."
|
||||||
|
|
||||||
|
msgid "Middle click stops pasting at the next login."
|
||||||
|
msgstr "Середня кнопка перестане вставляти з наступного входу в систему."
|
||||||
|
|
||||||
|
#. Help
|
||||||
|
msgid "Usage: middleclick-autoscroll [command]"
|
||||||
|
msgstr "Використання: middleclick-autoscroll [команда]"
|
||||||
|
|
||||||
|
msgid "Commands:"
|
||||||
|
msgstr "Команди:"
|
||||||
|
|
||||||
|
msgid "Turn autoscroll on"
|
||||||
|
msgstr "Увімкнути автопрокручування"
|
||||||
|
|
||||||
|
msgid "Turn it off and put everything back"
|
||||||
|
msgstr "Вимкнути й усе повернути"
|
||||||
|
|
||||||
|
msgid "Apply to anything installed since the last run"
|
||||||
|
msgstr "Застосувати до всього, що встановлено з минулого запуску"
|
||||||
|
|
||||||
|
msgid "Take everything back and apply it again"
|
||||||
|
msgstr "Усе скасувати й застосувати знову"
|
||||||
|
|
||||||
|
msgid "Show what is covered"
|
||||||
|
msgstr "Показати, що охоплено"
|
||||||
|
|
||||||
|
msgid "List every application that was found"
|
||||||
|
msgstr "Показати всі знайдені застосунки"
|
||||||
|
|
||||||
|
msgid "Show this help"
|
||||||
|
msgstr "Показати цю довідку"
|
||||||
|
|
||||||
|
msgid "Show the version"
|
||||||
|
msgstr "Показати версію"
|
||||||
|
|
||||||
|
msgid "Without a command an interactive menu is shown."
|
||||||
|
msgstr "Без команди показується інтерактивне меню."
|
||||||
|
|
||||||
|
msgid "Unknown command: %s"
|
||||||
|
msgstr "Невідома команда: %s"
|
||||||
|
|
||||||
|
#. Time
|
||||||
|
msgid "never"
|
||||||
|
msgstr "ніколи"
|
||||||
|
|
||||||
|
msgid "just now"
|
||||||
|
msgstr "щойно"
|
||||||
|
|
||||||
|
msgid "1 minute ago"
|
||||||
|
msgstr "1 хвилину тому"
|
||||||
|
|
||||||
|
msgid "%d minutes ago"
|
||||||
|
msgstr "%d хв тому"
|
||||||
|
|
||||||
|
msgid "1 hour ago"
|
||||||
|
msgstr "1 годину тому"
|
||||||
|
|
||||||
|
msgid "%d hours ago"
|
||||||
|
msgstr "%d год тому"
|
||||||
|
|
||||||
|
msgid "1 day ago"
|
||||||
|
msgstr "1 день тому"
|
||||||
|
|
||||||
|
msgid "%d days ago"
|
||||||
|
msgstr "%d дн. тому"
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 49 KiB |
@@ -1,5 +1,5 @@
|
|||||||
[Unit]
|
[Unit]
|
||||||
Description=Watch for newly installed Chromium-based applications
|
Description=Watch for newly installed applications
|
||||||
Documentation=man:middleclick-autoscroll(1)
|
Documentation=man:middleclick-autoscroll(1)
|
||||||
|
|
||||||
[Path]
|
[Path]
|
||||||
@@ -30,12 +30,17 @@ PathModified=%h/.guix-profile/share/applications
|
|||||||
|
|
||||||
# Steam replaces the script that starts its interface on every client update,
|
# Steam replaces the script that starts its interface on every client update,
|
||||||
# which takes the patch with it. Where that installation lives depends on how
|
# which takes the patch with it. Where that installation lives depends on how
|
||||||
# Steam was installed.
|
# Steam was installed. The steamrt3 client has a script of its own.
|
||||||
PathChanged=%h/.local/share/Steam/ubuntu12_64/steamwebhelper_sniper_wrap.sh
|
PathChanged=%h/.local/share/Steam/ubuntu12_64/steamwebhelper_sniper_wrap.sh
|
||||||
PathChanged=%h/.steam/debian-installation/ubuntu12_64/steamwebhelper_sniper_wrap.sh
|
PathChanged=%h/.steam/debian-installation/ubuntu12_64/steamwebhelper_sniper_wrap.sh
|
||||||
PathChanged=%h/.var/app/com.valvesoftware.Steam/.local/share/Steam/ubuntu12_64/steamwebhelper_sniper_wrap.sh
|
PathChanged=%h/.var/app/com.valvesoftware.Steam/.local/share/Steam/ubuntu12_64/steamwebhelper_sniper_wrap.sh
|
||||||
PathChanged=%h/.var/app/com.valvesoftware.Steam/data/Steam/ubuntu12_64/steamwebhelper_sniper_wrap.sh
|
PathChanged=%h/.var/app/com.valvesoftware.Steam/data/Steam/ubuntu12_64/steamwebhelper_sniper_wrap.sh
|
||||||
PathChanged=%h/snap/steam/common/.local/share/Steam/ubuntu12_64/steamwebhelper_sniper_wrap.sh
|
PathChanged=%h/snap/steam/common/.local/share/Steam/ubuntu12_64/steamwebhelper_sniper_wrap.sh
|
||||||
|
PathChanged=%h/.local/share/Steam/steamrt64/steamwebhelper.sh
|
||||||
|
PathChanged=%h/.steam/debian-installation/steamrt64/steamwebhelper.sh
|
||||||
|
PathChanged=%h/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamrt64/steamwebhelper.sh
|
||||||
|
PathChanged=%h/.var/app/com.valvesoftware.Steam/data/Steam/steamrt64/steamwebhelper.sh
|
||||||
|
PathChanged=%h/snap/steam/common/.local/share/Steam/steamrt64/steamwebhelper.sh
|
||||||
|
|
||||||
Unit=middleclick-autoscroll.service
|
Unit=middleclick-autoscroll.service
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[Unit]
|
[Unit]
|
||||||
Description=Apply middle-click autoscroll to Chromium-based applications
|
Description=Apply middle-click autoscroll
|
||||||
Documentation=man:middleclick-autoscroll(1)
|
Documentation=man:middleclick-autoscroll(1)
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
|
|||||||
+71
-22
@@ -15,6 +15,8 @@ MCA_ROUTES=()
|
|||||||
# flags - the launcher reads a flag file; write it there
|
# flags - the launcher reads a flag file; write it there
|
||||||
# desktop - no flag file; shadow or edit the desktop entry
|
# desktop - no flag file; shadow or edit the desktop entry
|
||||||
# steam - Steam's own two-part treatment
|
# steam - Steam's own two-part treatment
|
||||||
|
# spotify - the flag goes into spotify-launcher's configuration file
|
||||||
|
# gecko - a setting in each of the application's profiles
|
||||||
# unknown - cannot tell what engine this is (an AppImage), so nothing is done
|
# unknown - cannot tell what engine this is (an AppImage), so nothing is done
|
||||||
# off - detected, but switched off
|
# off - detected, but switched off
|
||||||
#
|
#
|
||||||
@@ -26,16 +28,16 @@ MCA_ROUTE=''
|
|||||||
mca_route() {
|
mca_route() {
|
||||||
local kind="$1" id="$2" prog="$3" packaging="${4:-native}"
|
local kind="$1" id="$2" prog="$3" packaging="${4:-native}"
|
||||||
|
|
||||||
if [[ $kind == steam ]]; then
|
if [[ $kind == steam || $kind == spotify || $kind == gecko ]]; then
|
||||||
if mca_config_list_has Skip "$id" || [[ $CFG_STEAM != yes ]]; then
|
if mca_config_list_has Skip "$id"; then
|
||||||
MCA_ROUTE=off
|
MCA_ROUTE=off
|
||||||
else
|
else
|
||||||
MCA_ROUTE=steam
|
MCA_ROUTE="$kind"
|
||||||
fi
|
fi
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! mca_kind_wanted "$kind" "$id" "$packaging"; then
|
if ! mca_kind_wanted "$kind" "$id"; then
|
||||||
[[ $kind == unknown ]] && MCA_ROUTE=unknown || MCA_ROUTE=off
|
[[ $kind == unknown ]] && MCA_ROUTE=unknown || MCA_ROUTE=off
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
@@ -59,11 +61,12 @@ mca_route() {
|
|||||||
# as it likes to be. It writes only what differs, which is what keeps the
|
# as it likes to be. It writes only what differs, which is what keeps the
|
||||||
# watcher from chasing its own changes.
|
# watcher from chasing its own changes.
|
||||||
mca_apply() {
|
mca_apply() {
|
||||||
local i id file prog kind packaging route steam_done=0
|
local i id file prog kind packaging route steam_done=0 spotify_done=0
|
||||||
|
|
||||||
MCA_CHANGES=0
|
MCA_CHANGES=0
|
||||||
MCA_ROUTES=()
|
MCA_ROUTES=()
|
||||||
MCA_N_ON=0; MCA_N_OFF=0; MCA_N_UNKNOWN=0
|
MCA_N_ON=0; MCA_N_OFF=0; MCA_N_UNKNOWN=0
|
||||||
|
MCA_GECKO_SEEN=(); MCA_GECKO_WATCH=()
|
||||||
|
|
||||||
mca_config_load
|
mca_config_load
|
||||||
|
|
||||||
@@ -111,29 +114,32 @@ mca_apply() {
|
|||||||
steam_done=1
|
steam_done=1
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
spotify)
|
||||||
|
(( spotify_done )) || mca_spotify_apply
|
||||||
|
spotify_done=1
|
||||||
|
;;
|
||||||
|
gecko)
|
||||||
|
mca_gecko_apply "${MCA_PROFILES[i]}" "$packaging" "$prog"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
# Steam is worth patching even when its desktop entry is missing. A user
|
# Steam is worth patching even when its desktop entry is missing. A user
|
||||||
# who starts it from a script or a game launcher still gets the interface.
|
# who starts it from a script or a game launcher still gets the interface.
|
||||||
if [[ $CFG_STEAM == yes ]] && (( ! steam_done )) && mca_steam_installed; then
|
if (( ! steam_done )) && mca_steam_wanted && mca_steam_installed; then
|
||||||
mca_steam_apply
|
mca_steam_apply
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Autostart entries. A Chromium application that starts itself at login
|
# Autostart entries. A Chromium application that starts itself at login
|
||||||
# points straight at its binary and never reads the entry in the menu, so
|
# points straight at its binary and never reads the entry in the menu, so
|
||||||
# Discord at login used to behave differently from Discord from the menu.
|
# Discord at login used to behave differently from Discord from the menu.
|
||||||
if [[ $CFG_AUTOSTART == yes ]]; then
|
|
||||||
mca_autostart_apply
|
mca_autostart_apply
|
||||||
fi
|
|
||||||
|
|
||||||
# Shortcuts on the desktop itself, which nothing above has seen: the XDG
|
# Shortcuts on the desktop itself, which nothing above has seen: the XDG
|
||||||
# search path does not go there. Each entry is gated on its own, so there is
|
# search path does not go there. Each entry is gated on its own, so there is
|
||||||
# nothing to check out here.
|
# nothing to check out here.
|
||||||
mca_shortcuts_apply
|
mca_shortcuts_apply
|
||||||
|
|
||||||
[[ $CFG_SPOTIFY == yes ]] && mca_spotify_apply
|
|
||||||
|
|
||||||
# Not about any one application: middle click goes on pasting everywhere
|
# Not about any one application: middle click goes on pasting everywhere
|
||||||
# else on the desktop, and KDE is the one desktop that can be told not to.
|
# else on the desktop, and KDE is the one desktop that can be told not to.
|
||||||
# See kde.sh.
|
# See kde.sh.
|
||||||
@@ -177,7 +183,8 @@ MCA_UNIT_SERVICE="middleclick-autoscroll.service"
|
|||||||
# The desktop folder is watched like every other directory an entry can turn up
|
# The desktop folder is watched like every other directory an entry can turn up
|
||||||
# in, but its name is translated and the unit that ships with the package
|
# in, but its name is translated and the unit that ships with the package
|
||||||
# cannot know it. So that one path is written here, into a drop-in, from the
|
# cannot know it. So that one path is written here, into a drop-in, from the
|
||||||
# name this system actually uses.
|
# name this system actually uses. The same goes for where Firefox and its forks
|
||||||
|
# keep their profiles, which depends on what is installed.
|
||||||
MCA_UNIT_DROPIN="${MCA_XDG_CONFIG}/systemd/user/${MCA_UNIT_PATH}.d"
|
MCA_UNIT_DROPIN="${MCA_XDG_CONFIG}/systemd/user/${MCA_UNIT_PATH}.d"
|
||||||
|
|
||||||
mca_watch_available() {
|
mca_watch_available() {
|
||||||
@@ -195,23 +202,47 @@ mca_watch_enabled() {
|
|||||||
# same reason: the watcher runs after every desktop entry that appears anywhere on
|
# same reason: the watcher runs after every desktop entry that appears anywhere on
|
||||||
# the system, and a daemon-reload each time would be absurd.
|
# the system, and a daemon-reload each time would be absurd.
|
||||||
_mca_watch_dropin_write() {
|
_mca_watch_dropin_write() {
|
||||||
local dir file="$MCA_UNIT_DROPIN/desktop.conf" content
|
local dir path content='' changed=1
|
||||||
|
|
||||||
dir="$(mca_desktop_folder)"
|
|
||||||
[[ -d $dir ]] || { _mca_watch_dropin_remove; return $?; }
|
|
||||||
|
|
||||||
# A per cent sign starts a specifier in a unit file and has to be doubled
|
# A per cent sign starts a specifier in a unit file and has to be doubled
|
||||||
# to mean itself. Rare in a folder name, fatal when it happens.
|
# to mean itself. Rare in a folder name, fatal when it happens.
|
||||||
content="[Path]"$'\n'"PathModified=${dir//%/%%}"$'\n'
|
dir="$(mca_desktop_folder)"
|
||||||
|
[[ -d $dir ]] && content="[Path]"$'\n'"PathModified=${dir//%/%%}"$'\n'
|
||||||
|
_mca_watch_conf desktop.conf "$content" && changed=0
|
||||||
|
|
||||||
mca_write_if_changed "$file" "$content"
|
# Filled by the apply that ran just before. A new profile is added there.
|
||||||
|
content=''
|
||||||
|
for path in "${MCA_GECKO_WATCH[@]}"; do
|
||||||
|
content+="PathChanged=${path//%/%%}"$'\n'
|
||||||
|
done
|
||||||
|
[[ -n $content ]] && content="[Path]"$'\n'"$content"
|
||||||
|
_mca_watch_conf profiles.conf "$content" && changed=0
|
||||||
|
|
||||||
|
return "$changed"
|
||||||
|
}
|
||||||
|
|
||||||
|
# _mca_watch_conf <name> <content>
|
||||||
|
# Writes one drop-in, or removes it when the content is empty. Returns 0 when
|
||||||
|
# it changed.
|
||||||
|
_mca_watch_conf() {
|
||||||
|
local file="$MCA_UNIT_DROPIN/$1"
|
||||||
|
|
||||||
|
if [[ -n $2 ]]; then
|
||||||
|
mca_write_if_changed "$file" "$2"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
[[ -e $file ]] || return 1
|
||||||
|
rm -f -- "$file"
|
||||||
|
rmdir "$MCA_UNIT_DROPIN" 2>/dev/null || true
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
_mca_watch_dropin_remove() {
|
_mca_watch_dropin_remove() {
|
||||||
[[ -e "$MCA_UNIT_DROPIN/desktop.conf" ]] || return 1
|
local changed=1
|
||||||
rm -f -- "$MCA_UNIT_DROPIN/desktop.conf"
|
_mca_watch_conf desktop.conf '' && changed=0
|
||||||
rmdir "$MCA_UNIT_DROPIN" 2>/dev/null || true
|
_mca_watch_conf profiles.conf '' && changed=0
|
||||||
return 0
|
return "$changed"
|
||||||
}
|
}
|
||||||
|
|
||||||
mca_watch_enable() {
|
mca_watch_enable() {
|
||||||
@@ -225,7 +256,8 @@ mca_watch_enable() {
|
|||||||
|
|
||||||
# mca_watch_refresh
|
# mca_watch_refresh
|
||||||
# Keeps a running watcher in step with a desktop folder that has been renamed,
|
# Keeps a running watcher in step with a desktop folder that has been renamed,
|
||||||
# which is what a change of session language does to it.
|
# which is what a change of session language does to it, and with the Firefox
|
||||||
|
# profiles there are now.
|
||||||
mca_watch_refresh() {
|
mca_watch_refresh() {
|
||||||
mca_watch_available || return 0
|
mca_watch_available || return 0
|
||||||
_mca_watch_dropin_write || return 0
|
_mca_watch_dropin_write || return 0
|
||||||
@@ -272,12 +304,29 @@ mca_count_routes() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# mca_steam_wanted
|
||||||
|
# Whether Steam gets patched, from the routes of the last scan: yes unless it
|
||||||
|
# was turned off in the applications list. Also yes when it has no entry there
|
||||||
|
# at all, so there is nothing to turn off.
|
||||||
|
mca_steam_wanted() {
|
||||||
|
local i seen=0
|
||||||
|
|
||||||
|
for i in "${!MCA_KINDS[@]}"; do
|
||||||
|
[[ ${MCA_KINDS[i]} == steam ]] || continue
|
||||||
|
[[ ${MCA_ROUTES[i]} == steam ]] && return 0
|
||||||
|
seen=1
|
||||||
|
done
|
||||||
|
(( ! seen ))
|
||||||
|
}
|
||||||
|
|
||||||
# mca_route_label <route>
|
# mca_route_label <route>
|
||||||
mca_route_label() {
|
mca_route_label() {
|
||||||
case "$1" in
|
case "$1" in
|
||||||
flags) mca_msg "flag file" ;;
|
flags) mca_msg "flag file" ;;
|
||||||
desktop) mca_msg "launcher" ;;
|
desktop) mca_msg "launcher" ;;
|
||||||
steam) mca_msg "Steam" ;;
|
steam) mca_msg "Steam" ;;
|
||||||
|
spotify) printf 'spotify-launcher' ;;
|
||||||
|
gecko) mca_msg "profile" ;;
|
||||||
unknown) mca_msg "cannot tell" ;;
|
unknown) mca_msg "cannot tell" ;;
|
||||||
*) mca_msg "off" ;;
|
*) mca_msg "off" ;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
+12
-10
@@ -215,12 +215,6 @@ else
|
|||||||
MCA_C_GREEN='' MCA_C_YELLOW='' MCA_C_RED=''
|
MCA_C_GREEN='' MCA_C_YELLOW='' MCA_C_RED=''
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set by mca_bad and mca_note. The menu redraws straight after an action, which
|
|
||||||
# would wipe the screen; this marks that something was printed the user still
|
|
||||||
# has to read. A plain success needs no acknowledgement, because the status
|
|
||||||
# block at the top of the menu already shows the new state.
|
|
||||||
MCA_UI_NEEDS_ACK=''
|
|
||||||
|
|
||||||
# --quiet silences progress chatter; errors still go to stderr. Used by the
|
# --quiet silences progress chatter; errors still go to stderr. Used by the
|
||||||
# systemd unit, which has no terminal and logs to the journal anyway.
|
# systemd unit, which has no terminal and logs to the journal anyway.
|
||||||
MCA_QUIET=''
|
MCA_QUIET=''
|
||||||
@@ -228,8 +222,8 @@ MCA_QUIET=''
|
|||||||
mca_say() { [[ -n $MCA_QUIET ]] || printf '%s\n' "$*"; }
|
mca_say() { [[ -n $MCA_QUIET ]] || printf '%s\n' "$*"; }
|
||||||
mca_head() { printf '\n%s%s%s\n\n' "$MCA_C_BOLD$MCA_C_BLUE" "$*" "$MCA_C_RESET"; }
|
mca_head() { printf '\n%s%s%s\n\n' "$MCA_C_BOLD$MCA_C_BLUE" "$*" "$MCA_C_RESET"; }
|
||||||
mca_ok() { [[ -n $MCA_QUIET ]] || printf '%s✔%s %s\n' "$MCA_C_GREEN" "$MCA_C_RESET" "$*"; }
|
mca_ok() { [[ -n $MCA_QUIET ]] || printf '%s✔%s %s\n' "$MCA_C_GREEN" "$MCA_C_RESET" "$*"; }
|
||||||
mca_bad() { MCA_UI_NEEDS_ACK=1; printf '%s✘%s %s\n' "$MCA_C_RED" "$MCA_C_RESET" "$*" >&2; }
|
mca_bad() { printf '%s✘%s %s\n' "$MCA_C_RED" "$MCA_C_RESET" "$*" >&2; }
|
||||||
mca_note() { MCA_UI_NEEDS_ACK=1; [[ -n $MCA_QUIET ]] || printf '%s•%s %s\n' "$MCA_C_DIM" "$MCA_C_RESET" "$*"; }
|
mca_note() { [[ -n $MCA_QUIET ]] || printf '%s•%s %s\n' "$MCA_C_DIM" "$MCA_C_RESET" "$*"; }
|
||||||
|
|
||||||
mca_have() { command -v "$1" > /dev/null 2>&1; }
|
mca_have() { command -v "$1" > /dev/null 2>&1; }
|
||||||
|
|
||||||
@@ -289,11 +283,13 @@ mca_state_write() {
|
|||||||
# inplace <edited file> <basename of its backup copy>
|
# inplace <edited file> <basename of its backup copy>
|
||||||
# flags <flag file> created | appended | merged
|
# flags <flag file> created | appended | merged
|
||||||
# kwin <kwinrc> what EnablePrimarySelection said before
|
# kwin <kwinrc> what EnablePrimarySelection said before
|
||||||
|
# gecko <user.js in a profile> created | block
|
||||||
#
|
#
|
||||||
# The kinds differ in how they are undone: a backup is restored wholesale, a
|
# The kinds differ in how they are undone: a backup is restored wholesale, a
|
||||||
# flag file only loses the one line that was added to it, and kwinrc gets one
|
# flag file only loses the one line that was added to it, and kwinrc gets one
|
||||||
# key written back. It is a file KDE writes to itself, and putting a whole
|
# key written back. It is a file KDE writes to itself, and putting a whole
|
||||||
# copy of it back would take everything else settled since with it.
|
# copy of it back would take everything else settled since with it. A user.js
|
||||||
|
# loses its block, and prefs.js the line Firefox copied out of it.
|
||||||
|
|
||||||
mca_ledger_add() {
|
mca_ledger_add() {
|
||||||
local kind="$1" path="$2" detail="${3:-}"
|
local kind="$1" path="$2" detail="${3:-}"
|
||||||
@@ -349,12 +345,18 @@ mca_backup_name() {
|
|||||||
# copy was stored under. Existing backups are never overwritten: the first copy
|
# copy was stored under. Existing backups are never overwritten: the first copy
|
||||||
# is the pristine one, and a second apply must not replace it with an already
|
# is the pristine one, and a second apply must not replace it with an already
|
||||||
# patched version.
|
# patched version.
|
||||||
|
#
|
||||||
|
# A symlink is kept as a symlink, so undo can put the link back. It is taken
|
||||||
|
# again every time: this program never writes a link, so one is always pristine.
|
||||||
mca_backup() {
|
mca_backup() {
|
||||||
local file="$1" name
|
local file="$1" name
|
||||||
name="$(mca_backup_name "$file")"
|
name="$(mca_backup_name "$file")"
|
||||||
|
|
||||||
mkdir -p "$MCA_BACKUPDIR" 2>/dev/null || return 1
|
mkdir -p "$MCA_BACKUPDIR" 2>/dev/null || return 1
|
||||||
if [[ ! -e "$MCA_BACKUPDIR/$name" ]]; then
|
if [[ -L $file ]]; then
|
||||||
|
rm -f -- "$MCA_BACKUPDIR/$name"
|
||||||
|
cp -P -p -- "$file" "$MCA_BACKUPDIR/$name" 2>/dev/null || return 1
|
||||||
|
elif [[ ! -e "$MCA_BACKUPDIR/$name" && ! -L "$MCA_BACKUPDIR/$name" ]]; then
|
||||||
cp -p -- "$file" "$MCA_BACKUPDIR/$name" 2>/dev/null || return 1
|
cp -p -- "$file" "$MCA_BACKUPDIR/$name" 2>/dev/null || return 1
|
||||||
fi
|
fi
|
||||||
printf '%s\n' "$name"
|
printf '%s\n' "$name"
|
||||||
|
|||||||
+48
-7
@@ -101,6 +101,20 @@ mca_config_set() {
|
|||||||
MCA_CONFIG_CACHED=0
|
MCA_CONFIG_CACHED=0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# mca_config_del <Key>
|
||||||
|
mca_config_del() {
|
||||||
|
local key="$1" tmp
|
||||||
|
|
||||||
|
[[ -w $MCA_CONFIG ]] || return 1
|
||||||
|
grep -qE "^[[:space:]]*${key}[[:space:]]*=" "$MCA_CONFIG" || return 0
|
||||||
|
|
||||||
|
tmp="$(mktemp "${MCA_CONFIG}.XXXXXX")" || return 1
|
||||||
|
chmod --reference="$MCA_CONFIG" "$tmp" 2>/dev/null || chmod 0644 "$tmp"
|
||||||
|
grep -vE "^[[:space:]]*${key}[[:space:]]*=" "$MCA_CONFIG" > "$tmp"
|
||||||
|
mv -f "$tmp" "$MCA_CONFIG"
|
||||||
|
MCA_CONFIG_CACHED=0
|
||||||
|
}
|
||||||
|
|
||||||
# mca_config_list_has <Key> <item>
|
# mca_config_list_has <Key> <item>
|
||||||
# The per-application overrides are stored as space separated lists.
|
# The per-application overrides are stored as space separated lists.
|
||||||
mca_config_list_has() {
|
mca_config_list_has() {
|
||||||
@@ -136,13 +150,6 @@ mca_config_list_del() {
|
|||||||
|
|
||||||
mca_config_load() {
|
mca_config_load() {
|
||||||
CFG_ENABLED=no; mca_config_bool Enabled no && CFG_ENABLED=yes
|
CFG_ENABLED=no; mca_config_bool Enabled no && CFG_ENABLED=yes
|
||||||
CFG_APPS=no; mca_config_bool PatchApps yes && CFG_APPS=yes
|
|
||||||
CFG_BROWSERS=no; mca_config_bool PatchBrowsers yes && CFG_BROWSERS=yes
|
|
||||||
CFG_FLATPAK=no; mca_config_bool PatchFlatpak yes && CFG_FLATPAK=yes
|
|
||||||
CFG_SNAP=no; mca_config_bool PatchSnap yes && CFG_SNAP=yes
|
|
||||||
CFG_AUTOSTART=no; mca_config_bool PatchAutostart yes && CFG_AUTOSTART=yes
|
|
||||||
CFG_STEAM=no; mca_config_bool PatchSteam yes && CFG_STEAM=yes
|
|
||||||
CFG_SPOTIFY=no; mca_config_bool PatchSpotify yes && CFG_SPOTIFY=yes
|
|
||||||
CFG_WATCH=no; mca_config_bool WatchNewApps yes && CFG_WATCH=yes
|
CFG_WATCH=no; mca_config_bool WatchNewApps yes && CFG_WATCH=yes
|
||||||
CFG_PASTE=no; mca_config_bool DisablePaste yes && CFG_PASTE=yes
|
CFG_PASTE=no; mca_config_bool DisablePaste yes && CFG_PASTE=yes
|
||||||
|
|
||||||
@@ -155,6 +162,40 @@ mca_config_load() {
|
|||||||
CFG_SKIP="$(mca_config_get Skip '')"
|
CFG_SKIP="$(mca_config_get Skip '')"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# mca_config_migrate
|
||||||
|
# Up to 1.5 the settings had a switch per group: applications, browsers,
|
||||||
|
# Flatpak, snap, programs at login, Steam and Spotify. The applications list
|
||||||
|
# does that job now, one application at a time. So a group that was switched
|
||||||
|
# off turns into a Skip for each application in it, once, and the old keys go.
|
||||||
|
# Called at the end of a scan, because the groups come from there.
|
||||||
|
mca_config_migrate() {
|
||||||
|
local i key off='' group pack
|
||||||
|
|
||||||
|
_mca_config_slurp
|
||||||
|
[[ $MCA_CONFIG_CACHE == *Patch[A-Z]*=* ]] || return 0
|
||||||
|
|
||||||
|
for key in Apps Browsers Flatpak Snap Steam Spotify; do
|
||||||
|
mca_config_bool "Patch$key" yes || off+=" $key "
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -n $off ]]; then
|
||||||
|
for i in "${!MCA_IDS[@]}"; do
|
||||||
|
mca_config_list_has Include "${MCA_IDS[i]}" && continue
|
||||||
|
group="${MCA_KINDS[i]^}"
|
||||||
|
[[ $group == App || $group == Browser ]] && group+=s
|
||||||
|
pack="${MCA_PACKAGING[i]^}"
|
||||||
|
if [[ $off == *" $group "* || $off == *" $pack "* ]]; then
|
||||||
|
mca_config_list_add Skip "${MCA_IDS[i]}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
for key in Apps Browsers Flatpak Snap Autostart Steam Spotify; do
|
||||||
|
mca_config_del "Patch$key"
|
||||||
|
done
|
||||||
|
mca_config_load
|
||||||
|
}
|
||||||
|
|
||||||
# mca_flags [kind]
|
# mca_flags [kind]
|
||||||
# The full argument string that gets injected. Kept in one place so the flag
|
# The full argument string that gets injected. Kept in one place so the flag
|
||||||
# file writer and the desktop entry writer cannot drift apart.
|
# file writer and the desktop entry writer cannot drift apart.
|
||||||
|
|||||||
+77
-30
@@ -336,9 +336,16 @@ _mca_stat_batch() {
|
|||||||
# below it are keyed on size and mtime, so an entry for a file that has not
|
# below it are keyed on size and mtime, so an entry for a file that has not
|
||||||
# changed is never looked at again. A cache written when a verdict meant
|
# changed is never looked at again. A cache written when a verdict meant
|
||||||
# something else (before an AppImage could come out as anything but "no")
|
# something else (before an AppImage could come out as anything but "no")
|
||||||
# would therefore keep answering the old way forever. Bumping this is how such
|
# would therefore keep answering the old way forever.
|
||||||
# a cache gets dropped instead.
|
#
|
||||||
MCA_CACHE_FORMAT='# middleclick-autoscroll detect 2'
|
# So the version is part of it, and every update drops the cache. The rules
|
||||||
|
# change far more often than anyone remembers to bump a number by hand: v1.5.3
|
||||||
|
# taught the hint scan about Discord's launcher, and Discord stayed out of the
|
||||||
|
# list anyway, because /usr/bin/discord had not changed and its old "no" was
|
||||||
|
# still in here.
|
||||||
|
#
|
||||||
|
# 3 adds the gecko verdict.
|
||||||
|
MCA_CACHE_FORMAT="# middleclick-autoscroll detect 3 $MCA_VERSION"
|
||||||
|
|
||||||
_mca_cache_load() {
|
_mca_cache_load() {
|
||||||
local path stamp verdict first=1
|
local path stamp verdict first=1
|
||||||
@@ -481,6 +488,11 @@ _mca_script_target() {
|
|||||||
|
|
||||||
MCA_SCRIPT_VARS=()
|
MCA_SCRIPT_VARS=()
|
||||||
|
|
||||||
|
# Only assignments and exec lines matter, and the shell is slow at reading
|
||||||
|
# a big script line by line. So grep picks them out, and a script with no
|
||||||
|
# exec at all (winetricks has 20000 lines of that) is not read here at all.
|
||||||
|
grep -qaE '^[[:space:]]*exec[[:space:]]' -- "$script" 2>/dev/null || return 1
|
||||||
|
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
if [[ $line =~ $re_assign ]]; then
|
if [[ $line =~ $re_assign ]]; then
|
||||||
name="${BASH_REMATCH[2]}"
|
name="${BASH_REMATCH[2]}"
|
||||||
@@ -538,7 +550,8 @@ _mca_script_target() {
|
|||||||
fi
|
fi
|
||||||
return $?
|
return $?
|
||||||
done
|
done
|
||||||
done < "$script"
|
done < <(grep -aE '^[[:space:]]*((export[[:space:]]+)?[A-Za-z_][A-Za-z0-9_]*=|exec[[:space:]])' \
|
||||||
|
-- "$script" 2>/dev/null)
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -851,6 +864,8 @@ _mca_appimage_verdict() {
|
|||||||
# no - something else
|
# no - something else
|
||||||
# unknown - an image whose payload could not be read, so neither answer has
|
# unknown - an image whose payload could not be read, so neither answer has
|
||||||
# been earned and the applications screen offers it as a choice
|
# been earned and the applications screen offers it as a choice
|
||||||
|
# gecko:<rel> - Firefox or another Gecko application, which keeps its
|
||||||
|
# profiles in <rel>. See gecko.sh.
|
||||||
#
|
#
|
||||||
# Assigns rather than returns three states through an exit code, and is the one
|
# Assigns rather than returns three states through an exit code, and is the one
|
||||||
# place the memo and the on-disk cache are consulted.
|
# place the memo and the on-disk cache are consulted.
|
||||||
@@ -889,8 +904,11 @@ mca_detect_verdict() {
|
|||||||
real="$(readlink -f -- "$prog" 2>/dev/null)" || real="$prog"
|
real="$(readlink -f -- "$prog" 2>/dev/null)" || real="$prog"
|
||||||
|
|
||||||
MCA_DETECT_UNSURE=0
|
MCA_DETECT_UNSURE=0
|
||||||
|
MCA_DETECT_GECKO=''
|
||||||
if _mca_detect_uncached "$real"; then
|
if _mca_detect_uncached "$real"; then
|
||||||
MCA_VERDICT=yes
|
MCA_VERDICT=yes
|
||||||
|
elif [[ -n $MCA_DETECT_GECKO ]]; then
|
||||||
|
MCA_VERDICT="gecko:$MCA_DETECT_GECKO"
|
||||||
elif (( MCA_DETECT_UNSURE )); then
|
elif (( MCA_DETECT_UNSURE )); then
|
||||||
MCA_VERDICT=unknown
|
MCA_VERDICT=unknown
|
||||||
else
|
else
|
||||||
@@ -919,6 +937,10 @@ mca_is_chromium() {
|
|||||||
# was nothing there. Only mca_detect_verdict reads it, straight after the call.
|
# was nothing there. Only mca_detect_verdict reads it, straight after the call.
|
||||||
MCA_DETECT_UNSURE=0
|
MCA_DETECT_UNSURE=0
|
||||||
|
|
||||||
|
# Set by _mca_detect_uncached to where the profiles are, when the program turned
|
||||||
|
# out to be Gecko rather than Chromium.
|
||||||
|
MCA_DETECT_GECKO=''
|
||||||
|
|
||||||
_mca_detect_uncached() {
|
_mca_detect_uncached() {
|
||||||
local real="$1" depth="${2:-0}" dir target
|
local real="$1" depth="${2:-0}" dir target
|
||||||
|
|
||||||
@@ -932,6 +954,7 @@ _mca_detect_uncached() {
|
|||||||
if target="$(_mca_script_target "$real")" && [[ -n $target ]]; then
|
if target="$(_mca_script_target "$real")" && [[ -n $target ]]; then
|
||||||
_mca_detect_uncached "$(readlink -f -- "$target" 2>/dev/null || printf '%s' "$target")" \
|
_mca_detect_uncached "$(readlink -f -- "$target" 2>/dev/null || printf '%s' "$target")" \
|
||||||
$(( depth + 1 )) && return 0
|
$(( depth + 1 )) && return 0
|
||||||
|
[[ -n $MCA_DETECT_GECKO ]] && return 1
|
||||||
fi
|
fi
|
||||||
grep -qE "$MCA_SCRIPT_HINTS" -- "$real" 2>/dev/null && return 0
|
grep -qE "$MCA_SCRIPT_HINTS" -- "$real" 2>/dev/null && return 0
|
||||||
return 1
|
return 1
|
||||||
@@ -943,6 +966,14 @@ _mca_detect_uncached() {
|
|||||||
_mca_has_markers "$dir" && return 0
|
_mca_has_markers "$dir" && return 0
|
||||||
[[ ${dir##*/} == bin ]] && _mca_has_markers "${dir%/*}" && return 0
|
[[ ${dir##*/} == bin ]] && _mca_has_markers "${dir%/*}" && return 0
|
||||||
|
|
||||||
|
# Not Chromium but Gecko, which has autoscroll of its own.
|
||||||
|
if _mca_gecko_rel "$dir" \
|
||||||
|
|| { [[ ${dir##*/} == bin ]] && _mca_gecko_rel "${dir%/*}"; }
|
||||||
|
then
|
||||||
|
MCA_DETECT_GECKO="$MCA_GECKO_REL"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
# An AppImage keeps all of that inside a filesystem appended to itself, so
|
# An AppImage keeps all of that inside a filesystem appended to itself, so
|
||||||
# there is nothing next to the binary to find. But the names of everything
|
# there is nothing next to the binary to find. But the names of everything
|
||||||
# in there can be read, and that settles it either way.
|
# in there can be read, and that settles it either way.
|
||||||
@@ -978,8 +1009,9 @@ MCA_IDS=() # desktop file id, without the .desktop suffix
|
|||||||
MCA_FILES=() # the desktop entry that is in effect for that id
|
MCA_FILES=() # the desktop entry that is in effect for that id
|
||||||
MCA_NAMES=() # display name
|
MCA_NAMES=() # display name
|
||||||
MCA_PROGS=() # resolved program, or a Flatpak app id or a snap name
|
MCA_PROGS=() # resolved program, or a Flatpak app id or a snap name
|
||||||
MCA_KINDS=() # app | browser | steam | unknown | no
|
MCA_KINDS=() # app | browser | steam | spotify | gecko | unknown | no
|
||||||
MCA_PACKAGING=() # native | flatpak | snap
|
MCA_PACKAGING=() # native | flatpak | snap
|
||||||
|
MCA_PROFILES=() # where a Gecko application keeps its profiles, see gecko.sh
|
||||||
|
|
||||||
# A scan reads every desktop entry on the system, so the menu does it once and
|
# A scan reads every desktop entry on the system, so the menu does it once and
|
||||||
# then redraws from what it found. Applying rescans on its own, so nothing else
|
# then redraws from what it found. Applying rescans on its own, so nothing else
|
||||||
@@ -992,12 +1024,12 @@ mca_scan_once() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mca_scan() {
|
mca_scan() {
|
||||||
local dir file id name exec_line prog kind packaging i
|
local dir file id name exec_line prog kind packaging profiles i
|
||||||
local -A seen=()
|
local -A seen=()
|
||||||
local -a c_ids=() c_files=() c_names=() c_progs=() c_browser=() c_stat=()
|
local -a c_ids=() c_files=() c_names=() c_progs=() c_browser=() c_stat=()
|
||||||
|
|
||||||
MCA_IDS=(); MCA_FILES=(); MCA_NAMES=(); MCA_PROGS=(); MCA_KINDS=()
|
MCA_IDS=(); MCA_FILES=(); MCA_NAMES=(); MCA_PROGS=(); MCA_KINDS=()
|
||||||
MCA_PACKAGING=()
|
MCA_PACKAGING=(); MCA_PROFILES=()
|
||||||
|
|
||||||
# Pass one: read the entries and work out what each of them starts. No
|
# Pass one: read the entries and work out what each of them starts. No
|
||||||
# detection yet: that needs a stat per program, and those are collected so
|
# detection yet: that needs a stat per program, and those are collected so
|
||||||
@@ -1062,6 +1094,7 @@ mca_scan() {
|
|||||||
prog="${c_progs[i]}"
|
prog="${c_progs[i]}"
|
||||||
kind=no
|
kind=no
|
||||||
packaging=native
|
packaging=native
|
||||||
|
profiles=''
|
||||||
|
|
||||||
if [[ $prog == flatpak:* ]]; then
|
if [[ $prog == flatpak:* ]]; then
|
||||||
packaging=flatpak
|
packaging=flatpak
|
||||||
@@ -1069,6 +1102,8 @@ mca_scan() {
|
|||||||
kind=steam
|
kind=steam
|
||||||
elif mca_flatpak_is_chromium "${prog#flatpak:}"; then
|
elif mca_flatpak_is_chromium "${prog#flatpak:}"; then
|
||||||
(( c_browser[i] )) && kind=browser || kind=app
|
(( c_browser[i] )) && kind=browser || kind=app
|
||||||
|
elif mca_flatpak_gecko "${prog#flatpak:}"; then
|
||||||
|
kind=gecko profiles="$MCA_GECKO_REL"
|
||||||
fi
|
fi
|
||||||
prog="${prog#flatpak:}"
|
prog="${prog#flatpak:}"
|
||||||
elif [[ $prog == snap:* ]]; then
|
elif [[ $prog == snap:* ]]; then
|
||||||
@@ -1078,16 +1113,23 @@ mca_scan() {
|
|||||||
kind=steam
|
kind=steam
|
||||||
elif mca_snap_is_chromium "$prog"; then
|
elif mca_snap_is_chromium "$prog"; then
|
||||||
(( c_browser[i] )) && kind=browser || kind=app
|
(( c_browser[i] )) && kind=browser || kind=app
|
||||||
|
elif mca_snap_gecko "$prog"; then
|
||||||
|
kind=gecko profiles="$MCA_GECKO_REL"
|
||||||
fi
|
fi
|
||||||
elif mca_prog_is_steam "$prog"; then
|
elif mca_prog_is_steam "$prog"; then
|
||||||
# Steam is Chromium inside, but nothing about it can be changed
|
# Steam is Chromium inside, but nothing about it can be changed
|
||||||
# from a command line argument; it has its own module.
|
# from a command line argument; it has its own module.
|
||||||
kind=steam
|
kind=steam
|
||||||
|
elif [[ ${prog##*/} == spotify-launcher ]]; then
|
||||||
|
# Not Chromium itself, but it starts Spotify, which is CEF. It
|
||||||
|
# takes the flag from its own configuration file.
|
||||||
|
kind=spotify
|
||||||
else
|
else
|
||||||
mca_detect_verdict "$prog"
|
mca_detect_verdict "$prog"
|
||||||
case "$MCA_VERDICT" in
|
case "$MCA_VERDICT" in
|
||||||
yes) (( c_browser[i] )) && kind=browser || kind=app ;;
|
yes) (( c_browser[i] )) && kind=browser || kind=app ;;
|
||||||
unknown) kind=unknown ;;
|
unknown) kind=unknown ;;
|
||||||
|
gecko:*) kind=gecko profiles="${MCA_VERDICT#gecko:}" ;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1099,10 +1141,12 @@ mca_scan() {
|
|||||||
MCA_PROGS+=("$prog")
|
MCA_PROGS+=("$prog")
|
||||||
MCA_KINDS+=("$kind")
|
MCA_KINDS+=("$kind")
|
||||||
MCA_PACKAGING+=("$packaging")
|
MCA_PACKAGING+=("$packaging")
|
||||||
|
MCA_PROFILES+=("$profiles")
|
||||||
done
|
done
|
||||||
|
|
||||||
mca_cache_flush
|
mca_cache_flush
|
||||||
MCA_SCANNED=1
|
MCA_SCANNED=1
|
||||||
|
mca_config_migrate
|
||||||
}
|
}
|
||||||
|
|
||||||
# mca_has_flags_file <program>
|
# mca_has_flags_file <program>
|
||||||
@@ -1195,16 +1239,14 @@ mca_snap_is_chromium() {
|
|||||||
# Flatpak keeps every application in its own tree, so the marker check works the
|
# Flatpak keeps every application in its own tree, so the marker check works the
|
||||||
# same way once that tree has been located.
|
# same way once that tree has been located.
|
||||||
mca_flatpak_is_chromium() {
|
mca_flatpak_is_chromium() {
|
||||||
local id="$1" loc
|
local id="$1"
|
||||||
mca_have flatpak || return 1
|
|
||||||
|
|
||||||
if [[ -n ${MCA_DETECT_MEMO[flatpak:$id]+set} ]]; then
|
if [[ -n ${MCA_DETECT_MEMO[flatpak:$id]+set} ]]; then
|
||||||
[[ ${MCA_DETECT_MEMO[flatpak:$id]} == yes ]]
|
[[ ${MCA_DETECT_MEMO[flatpak:$id]} == yes ]]
|
||||||
return $?
|
return $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
loc="$(flatpak info --show-location "$id" 2>/dev/null)"
|
if mca_flatpak_location "$id" && _mca_find_markers "$MCA_FLATPAK_AT/files" 4; then
|
||||||
if [[ -n $loc ]] && _mca_find_markers "$loc/files" 4; then
|
|
||||||
MCA_DETECT_MEMO[flatpak:$id]=yes
|
MCA_DETECT_MEMO[flatpak:$id]=yes
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
@@ -1213,28 +1255,33 @@ mca_flatpak_is_chromium() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# mca_kind_wanted <kind> <id> [packaging]
|
# mca_flatpak_location <app id>
|
||||||
# Whether the current settings say this entry should be patched. Skip beats
|
# Where Flatpak keeps the application, in MCA_FLATPAK_AT. Assigned rather than
|
||||||
# everything, an explicit include beats detection, and detection beats nothing.
|
# printed so the memo survives: both the Chromium and the Gecko check ask.
|
||||||
#
|
declare -A MCA_FLATPAK_LOC=()
|
||||||
# Packaging is a gate in front of the category rather than a category of its
|
MCA_FLATPAK_AT=''
|
||||||
# own: a Flatpak or a snap sees none of the host's configuration and is worth
|
|
||||||
# switching off as a group, but it is still an application or a browser and
|
mca_flatpak_location() {
|
||||||
# whichever of those the user turned off applies to it too.
|
local id="$1"
|
||||||
|
|
||||||
|
if [[ -z ${MCA_FLATPAK_LOC[$id]+set} ]]; then
|
||||||
|
MCA_FLATPAK_LOC[$id]=''
|
||||||
|
mca_have flatpak \
|
||||||
|
&& MCA_FLATPAK_LOC[$id]="$(flatpak info --show-location "$id" 2>/dev/null)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
MCA_FLATPAK_AT="${MCA_FLATPAK_LOC[$id]}"
|
||||||
|
[[ -n $MCA_FLATPAK_AT ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
# mca_kind_wanted <kind> <id>
|
||||||
|
# Whether this entry should be patched. Skip beats everything, an explicit
|
||||||
|
# include beats detection, and detection beats nothing.
|
||||||
mca_kind_wanted() {
|
mca_kind_wanted() {
|
||||||
local kind="$1" id="$2" packaging="${3:-native}"
|
local kind="$1" id="$2"
|
||||||
|
|
||||||
mca_config_list_has Skip "$id" && return 1
|
mca_config_list_has Skip "$id" && return 1
|
||||||
mca_config_list_has Include "$id" && return 0
|
mca_config_list_has Include "$id" && return 0
|
||||||
|
|
||||||
case "$packaging" in
|
[[ $kind == app || $kind == browser ]]
|
||||||
flatpak) [[ $CFG_FLATPAK == yes ]] || return 1 ;;
|
|
||||||
snap) [[ $CFG_SNAP == yes ]] || return 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case "$kind" in
|
|
||||||
app) [[ $CFG_APPS == yes ]] ;;
|
|
||||||
browser) [[ $CFG_BROWSERS == yes ]] ;;
|
|
||||||
*) return 1 ;;
|
|
||||||
esac
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,254 @@
|
|||||||
|
# shellcheck shell=bash
|
||||||
|
#
|
||||||
|
# Firefox, and everything else built on Gecko: LibreWolf, Zen, Floorp,
|
||||||
|
# Waterfox, Thunderbird.
|
||||||
|
#
|
||||||
|
# Gecko has autoscroll of its own, off on Linux. There is no command line flag
|
||||||
|
# for it, only a setting: general.autoScroll. Settings live in each profile, so
|
||||||
|
# the line goes into the profile's user.js, which Gecko reads at every start.
|
||||||
|
#
|
||||||
|
# Gecko copies what user.js sets into prefs.js. So undoing takes the line out
|
||||||
|
# of prefs.js as well. A browser that is still open would write it back when it
|
||||||
|
# quits, so for that profile user.js says false instead, and the record stays
|
||||||
|
# until the next undo can finish the job.
|
||||||
|
|
||||||
|
MCA_GECKO_BEGIN='// >>> middleclick-autoscroll'
|
||||||
|
MCA_GECKO_END='// <<< middleclick-autoscroll'
|
||||||
|
MCA_GECKO_ON='user_pref("general.autoScroll", true);'
|
||||||
|
MCA_GECKO_OFF='user_pref("general.autoScroll", false);'
|
||||||
|
|
||||||
|
# The profile folders one apply has done already, and the profiles.ini files
|
||||||
|
# the watcher should look at. Both are filled by mca_gecko_apply.
|
||||||
|
declare -A MCA_GECKO_SEEN=()
|
||||||
|
MCA_GECKO_WATCH=()
|
||||||
|
|
||||||
|
# Set by mca_gecko_revert when a profile is still open and has to be undone
|
||||||
|
# again later.
|
||||||
|
MCA_GECKO_PENDING=0
|
||||||
|
|
||||||
|
# _mca_gecko_rel <directory>
|
||||||
|
# Whether a Gecko application is installed there. If so, where it keeps its
|
||||||
|
# profiles, relative to the home or config folder, in MCA_GECKO_REL. Read from
|
||||||
|
# application.ini the way Gecko does it: [App] Profile= when it is set, else
|
||||||
|
# Vendor/Name, in lowercase.
|
||||||
|
MCA_GECKO_REL=''
|
||||||
|
|
||||||
|
_mca_gecko_rel() {
|
||||||
|
local dir="$1" line group='' vendor='' name='' profile='' rel=''
|
||||||
|
|
||||||
|
MCA_GECKO_REL=''
|
||||||
|
[[ -e $dir/libxul.so && -r $dir/application.ini ]] || return 1
|
||||||
|
|
||||||
|
while IFS= read -r line || [[ -n $line ]]; do
|
||||||
|
line="${line%$'\r'}"
|
||||||
|
case "$line" in
|
||||||
|
'['*) group="$line" ;;
|
||||||
|
Vendor=*) [[ $group == '[App]' ]] && vendor="${line#*=}" ;;
|
||||||
|
Name=*) [[ $group == '[App]' ]] && name="${line#*=}" ;;
|
||||||
|
Profile=*) [[ $group == '[App]' ]] && profile="${line#*=}" ;;
|
||||||
|
esac
|
||||||
|
done < "$dir/application.ini"
|
||||||
|
|
||||||
|
if [[ -n $profile ]]; then
|
||||||
|
rel="${profile//\\//}"
|
||||||
|
while [[ $rel == /* ]]; do rel="${rel#/}"; done
|
||||||
|
rel="${rel#.}"
|
||||||
|
elif [[ -n $name ]]; then
|
||||||
|
rel="${vendor:+$vendor/}$name"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Gecko lowercases in ASCII. A Turkish locale turns I into a dotless ı.
|
||||||
|
rel="${rel,,}"
|
||||||
|
rel="${rel//ı/i}"
|
||||||
|
|
||||||
|
[[ -n $rel && /$rel/ != */../* ]] || return 1
|
||||||
|
MCA_GECKO_REL="$rel"
|
||||||
|
}
|
||||||
|
|
||||||
|
# _mca_gecko_tree <root> <depth>
|
||||||
|
# The same for a Flatpak or a snap, where libxul.so is somewhere in the tree.
|
||||||
|
_mca_gecko_tree() {
|
||||||
|
local lib
|
||||||
|
|
||||||
|
MCA_GECKO_REL=''
|
||||||
|
[[ -d $1 ]] || return 1
|
||||||
|
lib="$(find "$1" -maxdepth "$2" -name libxul.so -print -quit 2>/dev/null)"
|
||||||
|
[[ -n $lib ]] && _mca_gecko_rel "${lib%/*}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# mca_flatpak_gecko <app id> / mca_snap_gecko <snap name>
|
||||||
|
# Whether it is Gecko, with the folder in MCA_GECKO_REL. Memoized like the
|
||||||
|
# Chromium check, and an empty answer means no.
|
||||||
|
declare -A MCA_GECKO_MEMO=()
|
||||||
|
|
||||||
|
mca_flatpak_gecko() {
|
||||||
|
local key="flatpak:$1"
|
||||||
|
|
||||||
|
if [[ -z ${MCA_GECKO_MEMO[$key]+set} ]]; then
|
||||||
|
MCA_GECKO_REL=''
|
||||||
|
mca_flatpak_location "$1" && _mca_gecko_tree "$MCA_FLATPAK_AT/files" 4
|
||||||
|
MCA_GECKO_MEMO[$key]="$MCA_GECKO_REL"
|
||||||
|
fi
|
||||||
|
|
||||||
|
MCA_GECKO_REL="${MCA_GECKO_MEMO[$key]}"
|
||||||
|
[[ -n $MCA_GECKO_REL ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
mca_snap_gecko() {
|
||||||
|
local key="snap:$1" d
|
||||||
|
|
||||||
|
if [[ -z ${MCA_GECKO_MEMO[$key]+set} ]]; then
|
||||||
|
MCA_GECKO_REL=''
|
||||||
|
for d in "${MCA_SNAP_DIRS[@]}"; do
|
||||||
|
_mca_gecko_tree "$d/$1/current" 5 && break
|
||||||
|
done
|
||||||
|
MCA_GECKO_MEMO[$key]="$MCA_GECKO_REL"
|
||||||
|
fi
|
||||||
|
|
||||||
|
MCA_GECKO_REL="${MCA_GECKO_MEMO[$key]}"
|
||||||
|
[[ -n $MCA_GECKO_REL ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
# mca_gecko_roots <rel> <packaging> <name>
|
||||||
|
# Every folder that can hold the application's profiles.ini. An older install
|
||||||
|
# uses ~/.<rel>. A new one (Firefox 147 and later) uses $XDG_CONFIG_HOME/<rel>,
|
||||||
|
# or ~/<rel> for a fork with a profile name of its own. A Flatpak or a snap has
|
||||||
|
# the same inside its own folder.
|
||||||
|
mca_gecko_roots() {
|
||||||
|
local rel="$1" packaging="$2" name="$3" d
|
||||||
|
|
||||||
|
case "$packaging" in
|
||||||
|
flatpak)
|
||||||
|
printf '%s\n' "$HOME/.var/app/$name/.$rel" "$HOME/.var/app/$name/config/$rel"
|
||||||
|
;;
|
||||||
|
snap)
|
||||||
|
for d in common current; do
|
||||||
|
printf '%s\n' "$HOME/snap/$name/$d/.$rel" "$HOME/snap/$name/$d/.config/$rel"
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
printf '%s\n' "$HOME/.$rel" "$MCA_XDG_CONFIG/$rel"
|
||||||
|
[[ $rel == */* ]] || printf '%s\n' "$HOME/$rel"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# mca_gecko_profiles <root>
|
||||||
|
# Every profile folder that profiles.ini there lists.
|
||||||
|
mca_gecko_profiles() {
|
||||||
|
local root="$1" line path='' relative=1 inprofile=0
|
||||||
|
|
||||||
|
[[ -r $root/profiles.ini ]] || return 0
|
||||||
|
|
||||||
|
while IFS= read -r line || [[ -n $line ]]; do
|
||||||
|
line="${line%$'\r'}"
|
||||||
|
case "$line" in
|
||||||
|
'['*)
|
||||||
|
_mca_gecko_profile_emit
|
||||||
|
[[ $line == '[Profile'* ]] && inprofile=1 || inprofile=0
|
||||||
|
path='' relative=1
|
||||||
|
;;
|
||||||
|
Path=*) path="${line#Path=}" ;;
|
||||||
|
IsRelative=*) relative="${line#IsRelative=}" ;;
|
||||||
|
esac
|
||||||
|
done < "$root/profiles.ini"
|
||||||
|
_mca_gecko_profile_emit
|
||||||
|
}
|
||||||
|
|
||||||
|
_mca_gecko_profile_emit() {
|
||||||
|
(( inprofile )) && [[ -n $path ]] || return 0
|
||||||
|
[[ $relative == 1 ]] && path="$root/$path"
|
||||||
|
[[ -d $path ]] && printf '%s\n' "$path"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# _mca_gecko_write <user.js> <line>
|
||||||
|
# Puts the line into user.js as a marked block, replacing an older block.
|
||||||
|
# Returns like mca_write_if_changed.
|
||||||
|
_mca_gecko_write() {
|
||||||
|
local file="$1" line="$2" content=''
|
||||||
|
|
||||||
|
[[ -f $file ]] && content="$(_mca_flags_drop_block "$file" "$MCA_GECKO_BEGIN" "$MCA_GECKO_END")"
|
||||||
|
content="${content:+$content$'\n'}$MCA_GECKO_BEGIN"$'\n'"$line"$'\n'"$MCA_GECKO_END"
|
||||||
|
mca_write_if_changed "$file" "$content"$'\n'
|
||||||
|
}
|
||||||
|
|
||||||
|
# mca_gecko_apply <rel> <packaging> <name>
|
||||||
|
# Turns autoscroll on in every profile of the application.
|
||||||
|
mca_gecko_apply() {
|
||||||
|
local root profile
|
||||||
|
|
||||||
|
while IFS= read -r root; do
|
||||||
|
[[ -n ${MCA_GECKO_SEEN[$root]+set} ]] && continue
|
||||||
|
MCA_GECKO_SEEN[$root]=1
|
||||||
|
|
||||||
|
# A new profile is written into profiles.ini, so the watcher can pick
|
||||||
|
# it up.
|
||||||
|
MCA_GECKO_WATCH+=("$root/profiles.ini")
|
||||||
|
|
||||||
|
while IFS= read -r profile; do
|
||||||
|
_mca_gecko_profile_apply "$profile"
|
||||||
|
done < <(mca_gecko_profiles "$root")
|
||||||
|
done < <(mca_gecko_roots "$@")
|
||||||
|
}
|
||||||
|
|
||||||
|
_mca_gecko_profile_apply() {
|
||||||
|
local dir="$1" file="$1/user.js" detail=created
|
||||||
|
|
||||||
|
# A user.js that links somewhere else is part of a setup of its own.
|
||||||
|
[[ -L $file ]] && return 0
|
||||||
|
[[ -f $file ]] && detail=block
|
||||||
|
|
||||||
|
if ! grep -qxF -- "$MCA_GECKO_BEGIN" "$file" 2>/dev/null; then
|
||||||
|
# Set by the user already, in user.js or in the browser's own
|
||||||
|
# settings. Their choice: nothing is written and nothing recorded.
|
||||||
|
grep -qE '^[[:space:]]*user_pref\([[:space:]]*"general\.autoScroll"' \
|
||||||
|
-- "$file" 2>/dev/null && return 0
|
||||||
|
grep -qxF -- "$MCA_GECKO_ON" "$dir/prefs.js" 2>/dev/null && return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
_mca_gecko_write "$file" "$MCA_GECKO_ON"
|
||||||
|
case $? in
|
||||||
|
0) MCA_CHANGES=$(( MCA_CHANGES + 1 )) ;;
|
||||||
|
2) return 0 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# A file this program created stays one it created.
|
||||||
|
mca_ledger_has "$file" && detail="$(mca_ledger_detail "$file")"
|
||||||
|
mca_ledger_add gecko "$file" "$detail"
|
||||||
|
}
|
||||||
|
|
||||||
|
# mca_gecko_revert <user.js> <created|block>
|
||||||
|
# Returns 0 when something changed. Sets MCA_GECKO_PENDING when the profile is
|
||||||
|
# open and the record has to stay.
|
||||||
|
mca_gecko_revert() {
|
||||||
|
local file="$1" detail="$2" dir="${1%/*}" prefs content tmp rc=0
|
||||||
|
|
||||||
|
MCA_GECKO_PENDING=0
|
||||||
|
[[ -f $file && ! -L $file ]] || return 1
|
||||||
|
grep -qxF -- "$MCA_GECKO_BEGIN" "$file" 2>/dev/null || return 1
|
||||||
|
|
||||||
|
# The lock link only exists while the profile is open.
|
||||||
|
if [[ -L $dir/lock ]]; then
|
||||||
|
MCA_GECKO_PENDING=1
|
||||||
|
_mca_gecko_write "$file" "$MCA_GECKO_OFF"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
content="$(_mca_flags_drop_block "$file" "$MCA_GECKO_BEGIN" "$MCA_GECKO_END")"
|
||||||
|
if [[ $detail == created && -z ${content//[[:space:]]/} ]]; then
|
||||||
|
rm -f -- "$file"
|
||||||
|
else
|
||||||
|
printf '%s\n' "$content" > "$file"
|
||||||
|
fi
|
||||||
|
|
||||||
|
prefs="$dir/prefs.js"
|
||||||
|
if [[ -f $prefs && ! -L $prefs ]] && grep -qxF -- "$MCA_GECKO_ON" "$prefs"; then
|
||||||
|
tmp="$(mktemp "$prefs.XXXXXX")" || return 0
|
||||||
|
chmod --reference="$prefs" -- "$tmp" 2>/dev/null || chmod 600 -- "$tmp"
|
||||||
|
# grep says 1 when no line is left, which is fine here.
|
||||||
|
grep -vxF -- "$MCA_GECKO_ON" "$prefs" > "$tmp" || rc=$?
|
||||||
|
if (( rc <= 1 )); then mv -f -- "$tmp" "$prefs"; else rm -f -- "$tmp"; fi
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
+167
-61
@@ -31,14 +31,25 @@ mca_ui_term_restore() {
|
|||||||
MCA_TERM_SAVED=''
|
MCA_TERM_SAVED=''
|
||||||
}
|
}
|
||||||
|
|
||||||
# Runs an action with the terminal handed back to normal line mode, so anything
|
# What the last action printed. The menu shows it under the status until the
|
||||||
# it prints or prompts for behaves the way a program expects.
|
# next key, so nothing has to wait for a key on a screen of its own.
|
||||||
mca_ui_cooked() {
|
MCA_UI_MSG=''
|
||||||
mca_ui_term_restore
|
|
||||||
"$@"
|
# Set while the menu runs. Its status block already says that running
|
||||||
local rc=$?
|
# applications need a restart, so the actions leave that line out there.
|
||||||
mca_ui_term_raw
|
MCA_IN_MENU=''
|
||||||
return $rc
|
|
||||||
|
# mca_ui_run <command...>
|
||||||
|
# Runs an action in this shell (so what it scans and loads stays) with its
|
||||||
|
# output kept for the menu. None of them asks anything.
|
||||||
|
mca_ui_run() {
|
||||||
|
local tmp
|
||||||
|
|
||||||
|
printf ' %s%s%s\n' "$MCA_C_DIM" "$(mca_msg "One moment...")" "$MCA_C_RESET"
|
||||||
|
tmp="$(mktemp)" || { "$@"; return; }
|
||||||
|
"$@" > "$tmp" 2>&1
|
||||||
|
MCA_UI_MSG="$(< "$tmp")"
|
||||||
|
rm -f -- "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
# mca_read_key
|
# mca_read_key
|
||||||
@@ -178,7 +189,7 @@ mca_ui_status() {
|
|||||||
if mca_steam_installed; then
|
if mca_steam_installed; then
|
||||||
if mca_steam_patched; then
|
if mca_steam_patched; then
|
||||||
_mca_row "$(mca_msg "Steam")" "$(_mca_onoff yes)"
|
_mca_row "$(mca_msg "Steam")" "$(_mca_onoff yes)"
|
||||||
elif [[ $CFG_STEAM == yes && $CFG_ENABLED == yes ]]; then
|
elif [[ $CFG_ENABLED == yes ]] && mca_steam_wanted; then
|
||||||
_mca_row "$(mca_msg "Steam")" \
|
_mca_row "$(mca_msg "Steam")" \
|
||||||
"${MCA_C_YELLOW}$(mca_msg "not patched yet")${MCA_C_RESET}"
|
"${MCA_C_YELLOW}$(mca_msg "not patched yet")${MCA_C_RESET}"
|
||||||
else
|
else
|
||||||
@@ -218,19 +229,16 @@ mca_ui_status() {
|
|||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Settings
|
# Settings
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Format: Key|type|default|label-msgid
|
# Only what is not about one application. Which applications get autoscroll is
|
||||||
# type is bool or text.
|
# decided in the applications list.
|
||||||
|
#
|
||||||
|
# Format: Key|type|default|check|label-msgid|help-msgid
|
||||||
|
# type is bool or text. The row is only shown when the check passes: a switch
|
||||||
|
# for something this system does not have is only noise.
|
||||||
MCA_SETTINGS=(
|
MCA_SETTINGS=(
|
||||||
"PatchApps|bool|yes|Electron and CEF applications"
|
"DisablePaste|bool|yes|mca_kde_available|Turn off middle-click paste|Stops middle click from pasting anywhere else. Starts with the next login."
|
||||||
"PatchBrowsers|bool|yes|Chromium-based browsers"
|
"WatchNewApps|bool|yes|mca_watch_available|Cover new applications|Applications installed later get autoscroll on their own."
|
||||||
"PatchFlatpak|bool|yes|Flatpak applications"
|
"ExtraFlags|text|||More Chromium arguments|Passed to every application along with the autoscroll one."
|
||||||
"PatchSnap|bool|yes|Snap applications"
|
|
||||||
"PatchAutostart|bool|yes|Programs that start themselves at login"
|
|
||||||
"PatchSteam|bool|yes|Steam"
|
|
||||||
"PatchSpotify|bool|yes|Spotify"
|
|
||||||
"DisablePaste|bool|yes|Turn off KDE's middle-click paste"
|
|
||||||
"WatchNewApps|bool|yes|Apply to newly installed applications"
|
|
||||||
"ExtraFlags|text||Additional Chromium arguments"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
_mca_is_true() {
|
_mca_is_true() {
|
||||||
@@ -275,10 +283,9 @@ _mca_setting_display() {
|
|||||||
#
|
#
|
||||||
# Returns 0 when something was changed, so the caller knows to re-apply.
|
# Returns 0 when something was changed, so the caller knows to re-apply.
|
||||||
mca_ui_settings() {
|
mca_ui_settings() {
|
||||||
local count=${#MCA_SETTINGS[@]}
|
local -a names=() types=() defaults=() labels=() helps=() values=()
|
||||||
local -a names=() types=() defaults=() labels=() values=()
|
local spec name type default check label help locale i key frame row pad
|
||||||
local spec name type default label locale i key frame row pad dirty=1 cursor=0
|
local count width=0 dirty=1 cursor=0 touched=0
|
||||||
local touched=0
|
|
||||||
|
|
||||||
locale="$(mca_ui_locale)"
|
locale="$(mca_ui_locale)"
|
||||||
mca_msg_into "$locale" "ON"; MCA_LBL_ON="$MCA_MSG_RESULT"
|
mca_msg_into "$locale" "ON"; MCA_LBL_ON="$MCA_MSG_RESULT"
|
||||||
@@ -286,15 +293,20 @@ mca_ui_settings() {
|
|||||||
mca_msg_into "$locale" "(none)"; MCA_LBL_NONE="$MCA_MSG_RESULT"
|
mca_msg_into "$locale" "(none)"; MCA_LBL_NONE="$MCA_MSG_RESULT"
|
||||||
|
|
||||||
for spec in "${MCA_SETTINGS[@]}"; do
|
for spec in "${MCA_SETTINGS[@]}"; do
|
||||||
IFS='|' read -r name type default label <<< "$spec"
|
IFS='|' read -r name type default check label help <<< "$spec"
|
||||||
|
[[ -z $check ]] || "$check" || continue
|
||||||
names+=("$name"); types+=("$type"); defaults+=("$default")
|
names+=("$name"); types+=("$type"); defaults+=("$default")
|
||||||
mca_msg_into "$locale" "$label"
|
mca_msg_into "$locale" "$label"
|
||||||
labels+=("$MCA_MSG_RESULT")
|
labels+=("$MCA_MSG_RESULT")
|
||||||
|
(( ${#MCA_MSG_RESULT} > width )) && width=${#MCA_MSG_RESULT}
|
||||||
|
mca_msg_into "$locale" "$help"
|
||||||
|
helps+=("$MCA_MSG_RESULT")
|
||||||
done
|
done
|
||||||
|
count=${#names[@]}
|
||||||
|
|
||||||
local title hint
|
local title hint
|
||||||
mca_msg_into "$locale" "Settings"; title="$MCA_MSG_RESULT"
|
mca_msg_into "$locale" "Settings"; title="$MCA_MSG_RESULT"
|
||||||
mca_msg_into "$locale" "Up/Down: select, Space or Right: change, q: back"
|
mca_msg_into "$locale" "Up/Down: select, Space: change, q: back"
|
||||||
hint="$MCA_MSG_RESULT"
|
hint="$MCA_MSG_RESULT"
|
||||||
|
|
||||||
local clearseq
|
local clearseq
|
||||||
@@ -314,7 +326,7 @@ mca_ui_settings() {
|
|||||||
local marker selected="${MCA_C_BLUE}▸${MCA_C_RESET} "
|
local marker selected="${MCA_C_BLUE}▸${MCA_C_RESET} "
|
||||||
for i in "${!names[@]}"; do
|
for i in "${!names[@]}"; do
|
||||||
_mca_setting_display "${types[i]}" "${values[i]}"
|
_mca_setting_display "${types[i]}" "${values[i]}"
|
||||||
pad=$(( 46 - ${#labels[i]} ))
|
pad=$(( width + 3 - ${#labels[i]} ))
|
||||||
(( pad < 0 )) && pad=0
|
(( pad < 0 )) && pad=0
|
||||||
if (( i == cursor )); then marker="$selected"; else marker=' '; fi
|
if (( i == cursor )); then marker="$selected"; else marker=' '; fi
|
||||||
printf -v row ' %s%s%*s %s' \
|
printf -v row ' %s%s%*s %s' \
|
||||||
@@ -322,6 +334,7 @@ mca_ui_settings() {
|
|||||||
frame+="$row"$'\n'
|
frame+="$row"$'\n'
|
||||||
done
|
done
|
||||||
|
|
||||||
|
frame+=$'\n'" ${helps[cursor]}"$'\n'
|
||||||
frame+=$'\n'" ${MCA_C_DIM}${hint}${MCA_C_RESET}"$'\n'
|
frame+=$'\n'" ${MCA_C_DIM}${hint}${MCA_C_RESET}"$'\n'
|
||||||
printf '%s' "$frame"
|
printf '%s' "$frame"
|
||||||
|
|
||||||
@@ -378,10 +391,14 @@ mca_ui_edit_text() {
|
|||||||
# turned on, and where a single application gets left out without having to
|
# turned on, and where a single application gets left out without having to
|
||||||
# switch off its whole category.
|
# switch off its whole category.
|
||||||
#
|
#
|
||||||
|
# The screen opens on a search field above the list, so typing filters it
|
||||||
|
# right away. The field is row -1: Down leaves it, Up from the top returns.
|
||||||
|
#
|
||||||
# Returns 0 when something was changed.
|
# Returns 0 when something was changed.
|
||||||
mca_ui_apps() {
|
mca_ui_apps() {
|
||||||
local count key frame row pad i cursor=0 dirty=1 touched=0 locale
|
local count key frame row pad i idx cursor=-1 dirty=1 touched=0 locale query='' needle
|
||||||
local -a labels=() states=()
|
local footer flines size rows height top=0
|
||||||
|
local -a labels=() lower=() states=() matches=()
|
||||||
|
|
||||||
locale="$(mca_ui_locale)"
|
locale="$(mca_ui_locale)"
|
||||||
|
|
||||||
@@ -389,7 +406,12 @@ mca_ui_apps() {
|
|||||||
mca_msg_into "$locale" "Applications"; title="$MCA_MSG_RESULT"
|
mca_msg_into "$locale" "Applications"; title="$MCA_MSG_RESULT"
|
||||||
mca_msg_into "$locale" "Up/Down: select, Space: turn on or off, q: back"
|
mca_msg_into "$locale" "Up/Down: select, Space: turn on or off, q: back"
|
||||||
hint="$MCA_MSG_RESULT"
|
hint="$MCA_MSG_RESULT"
|
||||||
mca_msg_into "$locale" "Anything not identified is left alone until it is turned on here."
|
local l_search hint_search nomatch
|
||||||
|
mca_msg_into "$locale" "Search:"; l_search="$MCA_MSG_RESULT"
|
||||||
|
mca_msg_into "$locale" "Type to search, Down: go to the list, Esc: back"
|
||||||
|
hint_search="$MCA_MSG_RESULT"
|
||||||
|
mca_msg_into "$locale" "No matches."; nomatch="$MCA_MSG_RESULT"
|
||||||
|
mca_msg_into "$locale" 'Anything marked "cannot tell" stays off until it is turned on here.'
|
||||||
legend="$MCA_MSG_RESULT"
|
legend="$MCA_MSG_RESULT"
|
||||||
mca_msg_into "$locale" "Autoscroll is off. This is what would be covered."
|
mca_msg_into "$locale" "Autoscroll is off. This is what would be covered."
|
||||||
warn="$MCA_MSG_RESULT"
|
warn="$MCA_MSG_RESULT"
|
||||||
@@ -397,13 +419,14 @@ mca_ui_apps() {
|
|||||||
# The per-row labels are resolved once, here. Looking them up inside the
|
# The per-row labels are resolved once, here. Looking them up inside the
|
||||||
# drawing loop is a fork per row per keypress, and that is enough to make
|
# drawing loop is a fork per row per keypress, and that is enough to make
|
||||||
# the arrow keys feel like the screen is reloading.
|
# the arrow keys feel like the screen is reloading.
|
||||||
local l_off l_cannot l_on l_steam l_flagfile l_launcher
|
local l_off l_cannot l_on l_steam l_flagfile l_launcher l_profile
|
||||||
mca_msg_into "$locale" "off"; l_off="$MCA_MSG_RESULT"
|
mca_msg_into "$locale" "off"; l_off="$MCA_MSG_RESULT"
|
||||||
mca_msg_into "$locale" "cannot tell"; l_cannot="$MCA_MSG_RESULT"
|
mca_msg_into "$locale" "cannot tell"; l_cannot="$MCA_MSG_RESULT"
|
||||||
mca_msg_into "$locale" "on"; l_on="$MCA_MSG_RESULT"
|
mca_msg_into "$locale" "on"; l_on="$MCA_MSG_RESULT"
|
||||||
mca_msg_into "$locale" "Steam"; l_steam="$MCA_MSG_RESULT"
|
mca_msg_into "$locale" "Steam"; l_steam="$MCA_MSG_RESULT"
|
||||||
mca_msg_into "$locale" "flag file"; l_flagfile="$MCA_MSG_RESULT"
|
mca_msg_into "$locale" "flag file"; l_flagfile="$MCA_MSG_RESULT"
|
||||||
mca_msg_into "$locale" "launcher"; l_launcher="$MCA_MSG_RESULT"
|
mca_msg_into "$locale" "launcher"; l_launcher="$MCA_MSG_RESULT"
|
||||||
|
mca_msg_into "$locale" "profile"; l_profile="$MCA_MSG_RESULT"
|
||||||
|
|
||||||
local s_off="${MCA_C_DIM}${l_off}${MCA_C_RESET}"
|
local s_off="${MCA_C_DIM}${l_off}${MCA_C_RESET}"
|
||||||
local s_cannot="${MCA_C_DIM}${l_cannot}${MCA_C_RESET}"
|
local s_cannot="${MCA_C_DIM}${l_cannot}${MCA_C_RESET}"
|
||||||
@@ -411,6 +434,8 @@ mca_ui_apps() {
|
|||||||
local s_steam="${s_on} ${MCA_C_DIM}(${l_steam})${MCA_C_RESET}"
|
local s_steam="${s_on} ${MCA_C_DIM}(${l_steam})${MCA_C_RESET}"
|
||||||
local s_flags="${s_on} ${MCA_C_DIM}(${l_flagfile})${MCA_C_RESET}"
|
local s_flags="${s_on} ${MCA_C_DIM}(${l_flagfile})${MCA_C_RESET}"
|
||||||
local s_desktop="${s_on} ${MCA_C_DIM}(${l_launcher})${MCA_C_RESET}"
|
local s_desktop="${s_on} ${MCA_C_DIM}(${l_launcher})${MCA_C_RESET}"
|
||||||
|
local s_spotify="${s_on} ${MCA_C_DIM}(spotify-launcher)${MCA_C_RESET}"
|
||||||
|
local s_gecko="${s_on} ${MCA_C_DIM}(${l_profile})${MCA_C_RESET}"
|
||||||
|
|
||||||
local clearseq
|
local clearseq
|
||||||
clearseq="$(clear 2>/dev/null)" || clearseq=$'\033[H\033[2J'
|
clearseq="$(clear 2>/dev/null)" || clearseq=$'\033[H\033[2J'
|
||||||
@@ -421,8 +446,7 @@ mca_ui_apps() {
|
|||||||
count=${#MCA_IDS[@]}
|
count=${#MCA_IDS[@]}
|
||||||
|
|
||||||
if (( count == 0 )); then
|
if (( count == 0 )); then
|
||||||
printf '\n %s\n' "$(mca_msg "No Chromium-based applications found.")"
|
MCA_UI_MSG="$(mca_msg "No supported applications found.")"
|
||||||
mca_pause
|
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -430,56 +454,133 @@ mca_ui_apps() {
|
|||||||
if (( dirty )); then
|
if (( dirty )); then
|
||||||
mca_config_load
|
mca_config_load
|
||||||
mca_count_routes
|
mca_count_routes
|
||||||
labels=(); states=()
|
labels=(); lower=(); states=()
|
||||||
for i in "${!MCA_IDS[@]}"; do
|
for i in "${!MCA_IDS[@]}"; do
|
||||||
labels+=("${MCA_NAMES[i]}")
|
labels+=("${MCA_NAMES[i]}")
|
||||||
|
row="${MCA_NAMES[i],,}"
|
||||||
|
lower+=("${row//ı/i}")
|
||||||
states+=("${MCA_ROUTES[i]}")
|
states+=("${MCA_ROUTES[i]}")
|
||||||
done
|
done
|
||||||
dirty=0
|
dirty=0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# In a Turkish locale I lowercases to a dotless ı, so "office" would
|
||||||
|
# not find ONLYOFFICE. Both sides fold it back to i.
|
||||||
|
needle="${query,,}"
|
||||||
|
needle="${needle//ı/i}"
|
||||||
|
matches=()
|
||||||
|
for i in "${!labels[@]}"; do
|
||||||
|
[[ ${lower[i]} == *"$needle"* ]] && matches+=("$i")
|
||||||
|
done
|
||||||
|
count=${#matches[@]}
|
||||||
|
(( cursor >= count )) && cursor=$(( count - 1 ))
|
||||||
|
|
||||||
|
# The footer is built first: the list gets the rows it leaves over.
|
||||||
|
footer='' flines=1
|
||||||
|
# Without this the list reads as a list of what is switched on, which
|
||||||
|
# it is not while the whole thing is off.
|
||||||
|
if [[ $CFG_ENABLED != yes ]]; then
|
||||||
|
footer+=" ${MCA_C_YELLOW}${warn}${MCA_C_RESET}"$'\n'
|
||||||
|
flines=$(( flines + 1 ))
|
||||||
|
fi
|
||||||
|
# Only needed while there is something it explains.
|
||||||
|
if (( MCA_N_UNKNOWN )); then
|
||||||
|
footer+=" ${MCA_C_DIM}${legend}${MCA_C_RESET}"$'\n'
|
||||||
|
flines=$(( flines + 1 ))
|
||||||
|
fi
|
||||||
|
if (( cursor < 0 )); then
|
||||||
|
footer+=" ${MCA_C_DIM}${hint_search}${MCA_C_RESET}"$'\n'
|
||||||
|
# Puts the terminal cursor at the end of the query (row 4).
|
||||||
|
printf -v row '\033[4;%dH' $(( 6 + ${#l_search} + ${#query} ))
|
||||||
|
footer+="$row"
|
||||||
|
else
|
||||||
|
footer+=" ${MCA_C_DIM}${hint}${MCA_C_RESET}"$'\n'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# A list longer than the terminal would scroll the search field off
|
||||||
|
# the top. So only a window of it is drawn, and it follows the cursor.
|
||||||
|
# Five rows above the list, one below it, the footer, and the row the
|
||||||
|
# terminal cursor ends up on.
|
||||||
|
# A terminal that does not know its size says 0; then all of it is drawn.
|
||||||
|
size="$(stty size 2>/dev/null)"
|
||||||
|
rows="${size%% *}"
|
||||||
|
[[ $rows =~ ^[1-9][0-9]*$ ]] || rows=10000
|
||||||
|
height=$(( rows - 7 - flines ))
|
||||||
|
(( height < 1 )) && height=1
|
||||||
|
(( top > count - height )) && top=$(( count - height ))
|
||||||
|
(( top < 0 )) && top=0
|
||||||
|
if (( cursor >= 0 )); then
|
||||||
|
(( cursor < top )) && top=$cursor
|
||||||
|
(( cursor >= top + height )) && top=$(( cursor - height + 1 ))
|
||||||
|
fi
|
||||||
|
|
||||||
frame="$clearseq"$'\n'"${MCA_C_BOLD}${MCA_C_BLUE} ${title}${MCA_C_RESET}"$'\n\n'
|
frame="$clearseq"$'\n'"${MCA_C_BOLD}${MCA_C_BLUE} ${title}${MCA_C_RESET}"$'\n\n'
|
||||||
|
|
||||||
local marker selected="${MCA_C_BLUE}▸${MCA_C_RESET} " shown
|
local marker selected="${MCA_C_BLUE}▸${MCA_C_RESET} " shown
|
||||||
for i in "${!labels[@]}"; do
|
if (( cursor < 0 )); then marker="$selected"; else marker=' '; fi
|
||||||
case "${states[i]}" in
|
frame+=" ${marker}${l_search} ${query}"$'\n\n'
|
||||||
|
|
||||||
|
for (( i = top; i < count && i < top + height; i++ )); do
|
||||||
|
idx=${matches[i]}
|
||||||
|
case "${states[idx]}" in
|
||||||
off) shown="$s_off" ;;
|
off) shown="$s_off" ;;
|
||||||
unknown) shown="$s_cannot" ;;
|
unknown) shown="$s_cannot" ;;
|
||||||
steam) shown="$s_steam" ;;
|
steam) shown="$s_steam" ;;
|
||||||
flags) shown="$s_flags" ;;
|
flags) shown="$s_flags" ;;
|
||||||
|
spotify) shown="$s_spotify" ;;
|
||||||
|
gecko) shown="$s_gecko" ;;
|
||||||
*) shown="$s_desktop" ;;
|
*) shown="$s_desktop" ;;
|
||||||
esac
|
esac
|
||||||
pad=$(( 34 - ${#labels[i]} ))
|
pad=$(( 34 - ${#labels[idx]} ))
|
||||||
(( pad < 0 )) && pad=0
|
(( pad < 0 )) && pad=0
|
||||||
if (( i == cursor )); then marker="$selected"; else marker=' '; fi
|
if (( i == cursor )); then marker="$selected"; else marker=' '; fi
|
||||||
printf -v row ' %s%s%*s %s' "$marker" "${labels[i]}" "$pad" '' "$shown"
|
printf -v row ' %s%s%*s %s' "$marker" "${labels[idx]}" "$pad" '' "$shown"
|
||||||
frame+="$row"$'\n'
|
frame+="$row"$'\n'
|
||||||
done
|
done
|
||||||
|
(( count )) || frame+=" ${MCA_C_DIM}${nomatch}${MCA_C_RESET}"$'\n'
|
||||||
|
|
||||||
|
# Where the window is, in the row under it, when there is more.
|
||||||
|
if (( count > height )); then
|
||||||
|
frame+=" ${MCA_C_DIM}$(( top + 1 ))–$(( i )) / ${count}${MCA_C_RESET}"$'\n'
|
||||||
|
else
|
||||||
frame+=$'\n'
|
frame+=$'\n'
|
||||||
# Without this the list reads as a list of what is switched on, which
|
|
||||||
# it is not while the whole thing is off.
|
|
||||||
if [[ $CFG_ENABLED != yes ]]; then
|
|
||||||
frame+=" ${MCA_C_YELLOW}${warn}${MCA_C_RESET}"$'\n'
|
|
||||||
fi
|
fi
|
||||||
frame+=" ${MCA_C_DIM}${legend}${MCA_C_RESET}"$'\n'
|
frame+="$footer"
|
||||||
frame+=" ${MCA_C_DIM}${hint}${MCA_C_RESET}"$'\n'
|
|
||||||
printf '%s' "$frame"
|
printf '%s' "$frame"
|
||||||
|
|
||||||
key="$(mca_read_key)" || return "$(( ! touched ))"
|
key="$(mca_read_key)" || return "$(( ! touched ))"
|
||||||
|
|
||||||
|
# In the search field every key that can be typed goes into the query,
|
||||||
|
# q and the vi keys too.
|
||||||
|
if (( cursor < 0 )); then
|
||||||
case "$key" in
|
case "$key" in
|
||||||
up|k) cursor=$(( (cursor - 1 + count) % count )) ;;
|
down|enter) (( count )) && cursor=0 ;;
|
||||||
down|j) cursor=$(( (cursor + 1) % count )) ;;
|
up) cursor=$(( count - 1 )) ;;
|
||||||
|
backspace) query="${query%?}" ;;
|
||||||
|
space) query+=' ' ;;
|
||||||
|
escape)
|
||||||
|
[[ -z $query ]] && return "$(( ! touched ))"
|
||||||
|
query=''
|
||||||
|
;;
|
||||||
|
left|right) ;;
|
||||||
|
*) [[ $key == [[:print:]] ]] && query+="$key" ;;
|
||||||
|
esac
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
idx=${matches[cursor]}
|
||||||
|
case "$key" in
|
||||||
|
up|k) cursor=$(( cursor - 1 )) ;;
|
||||||
|
down|j) cursor=$(( cursor + 1 < count ? cursor + 1 : -1 )) ;;
|
||||||
space|enter|right|left|l|h)
|
space|enter|right|left|l|h)
|
||||||
case "${states[cursor]}" in
|
case "${states[idx]}" in
|
||||||
off|unknown)
|
off|unknown)
|
||||||
mca_config_list_del Skip "${MCA_IDS[cursor]}"
|
mca_config_list_del Skip "${MCA_IDS[idx]}"
|
||||||
mca_config_list_add Include "${MCA_IDS[cursor]}"
|
mca_config_list_add Include "${MCA_IDS[idx]}"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
mca_config_list_del Include "${MCA_IDS[cursor]}"
|
mca_config_list_del Include "${MCA_IDS[idx]}"
|
||||||
mca_config_list_add Skip "${MCA_IDS[cursor]}"
|
mca_config_list_add Skip "${MCA_IDS[idx]}"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
touched=1
|
touched=1
|
||||||
@@ -496,8 +597,9 @@ mca_ui_apps() {
|
|||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
mca_ui_menu() {
|
mca_ui_menu() {
|
||||||
local choice
|
local choice line
|
||||||
|
|
||||||
|
MCA_IN_MENU=1
|
||||||
mca_ui_term_raw
|
mca_ui_term_raw
|
||||||
trap 'mca_ui_term_restore' EXIT INT TERM
|
trap 'mca_ui_term_restore' EXIT INT TERM
|
||||||
|
|
||||||
@@ -508,6 +610,13 @@ mca_ui_menu() {
|
|||||||
mca_head " $MCA_PRETTY"
|
mca_head " $MCA_PRETTY"
|
||||||
mca_ui_status
|
mca_ui_status
|
||||||
printf '\n'
|
printf '\n'
|
||||||
|
if [[ -n $MCA_UI_MSG ]]; then
|
||||||
|
while IFS= read -r line; do
|
||||||
|
printf ' %s\n' "$line"
|
||||||
|
done <<< "$MCA_UI_MSG"
|
||||||
|
printf '\n'
|
||||||
|
MCA_UI_MSG=''
|
||||||
|
fi
|
||||||
printf ' [1] %s\n' "$(mca_msg "Turn autoscroll on or off")"
|
printf ' [1] %s\n' "$(mca_msg "Turn autoscroll on or off")"
|
||||||
printf ' [2] %s\n' "$(mca_msg "Re-apply everything")"
|
printf ' [2] %s\n' "$(mca_msg "Re-apply everything")"
|
||||||
printf ' [3] %s\n' "$(mca_msg "Applications")"
|
printf ' [3] %s\n' "$(mca_msg "Applications")"
|
||||||
@@ -525,13 +634,11 @@ mca_ui_menu() {
|
|||||||
|
|
||||||
case "$choice" in
|
case "$choice" in
|
||||||
1)
|
1)
|
||||||
MCA_UI_NEEDS_ACK=''
|
|
||||||
if [[ $CFG_ENABLED == yes ]]; then
|
if [[ $CFG_ENABLED == yes ]]; then
|
||||||
mca_ui_cooked mca_do_disable
|
mca_ui_run mca_do_disable
|
||||||
else
|
else
|
||||||
mca_ui_cooked mca_do_enable
|
mca_ui_run mca_do_enable
|
||||||
fi
|
fi
|
||||||
[[ -n $MCA_UI_NEEDS_ACK ]] && mca_pause
|
|
||||||
;;
|
;;
|
||||||
# Not a plain apply: with the watcher running there is never
|
# Not a plain apply: with the watcher running there is never
|
||||||
# anything left for one to do, and a menu entry that answers
|
# anything left for one to do, and a menu entry that answers
|
||||||
@@ -540,17 +647,16 @@ mca_ui_menu() {
|
|||||||
# what fixes an application that drifted, a flag file somebody
|
# what fixes an application that drifted, a flag file somebody
|
||||||
# edited, or Steam after it restored its own script.
|
# edited, or Steam after it restored its own script.
|
||||||
2)
|
2)
|
||||||
mca_ui_cooked mca_do_apply --rebuild
|
mca_ui_run mca_do_apply --rebuild
|
||||||
mca_pause
|
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
if mca_ui_apps; then
|
if mca_ui_apps; then
|
||||||
[[ $CFG_ENABLED == yes ]] && mca_ui_cooked mca_do_apply --rebuild
|
[[ $CFG_ENABLED == yes ]] && mca_ui_run mca_do_apply --rebuild
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
if mca_ui_settings; then
|
if mca_ui_settings; then
|
||||||
[[ $CFG_ENABLED == yes ]] && mca_ui_cooked mca_do_apply --rebuild
|
[[ $CFG_ENABLED == yes ]] && mca_ui_run mca_do_apply --rebuild
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
q|Q) mca_ui_term_restore; trap - EXIT INT TERM; return 0 ;;
|
q|Q) mca_ui_term_restore; trap - EXIT INT TERM; return 0 ;;
|
||||||
|
|||||||
+50
-22
@@ -260,8 +260,9 @@ _mca_flags_write() {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# _mca_flags_drop_block <file> [begin marker] [end marker]
|
||||||
_mca_flags_drop_block() {
|
_mca_flags_drop_block() {
|
||||||
awk -v b="$MCA_MARK_BEGIN" -v e="$MCA_MARK_END" '
|
awk -v b="${2:-$MCA_MARK_BEGIN}" -v e="${3:-$MCA_MARK_END}" '
|
||||||
$0 == b { skip = 1; next }
|
$0 == b { skip = 1; next }
|
||||||
$0 == e { skip = 0; next }
|
$0 == e { skip = 0; next }
|
||||||
!skip
|
!skip
|
||||||
@@ -375,7 +376,7 @@ mca_desktop_apply() {
|
|||||||
[[ "$content" == "$(< "$src")" ]] && return 0
|
[[ "$content" == "$(< "$src")" ]] && return 0
|
||||||
|
|
||||||
backup="$(mca_backup "$src")" || return 1
|
backup="$(mca_backup "$src")" || return 1
|
||||||
if mca_write_if_changed "$src" "$content"$'\n'; then
|
if _mca_entry_write "$src" "$content"$'\n'; then
|
||||||
MCA_CHANGES=$(( MCA_CHANGES + 1 ))
|
MCA_CHANGES=$(( MCA_CHANGES + 1 ))
|
||||||
fi
|
fi
|
||||||
mca_ledger_add inplace "$src" "$backup"
|
mca_ledger_add inplace "$src" "$backup"
|
||||||
@@ -418,16 +419,36 @@ mca_desktop_apply() {
|
|||||||
# Neither can be shadowed from anywhere, so both are edited where they stand,
|
# Neither can be shadowed from anywhere, so both are edited where they stand,
|
||||||
# with the original kept.
|
# with the original kept.
|
||||||
|
|
||||||
# _mca_entry_patch_inplace <file> <gate: autostart|apps>
|
# _mca_entry_write <file> <content>
|
||||||
|
# Writes an entry edited in place, like mca_write_if_changed. A symlink is
|
||||||
|
# replaced by the edited file instead of written through: it usually points at
|
||||||
|
# a package's entry in /usr, which is not ours to change. Undo puts the link
|
||||||
|
# back from the backup.
|
||||||
|
_mca_entry_write() {
|
||||||
|
local file="$1" content="$2" tmp
|
||||||
|
|
||||||
|
[[ -L $file ]] || { mca_write_if_changed "$file" "$content"; return; }
|
||||||
|
|
||||||
|
tmp="$(mktemp "$file.XXXXXX")" || return 2
|
||||||
|
chmod --reference="$file" -- "$tmp" 2>/dev/null || chmod 644 -- "$tmp"
|
||||||
|
|
||||||
|
# A link into /usr/share/applications is trusted for where it points. A
|
||||||
|
# copy on the desktop is only trusted by KDE when it can be run.
|
||||||
|
chmod u+x -- "$tmp" 2>/dev/null || true
|
||||||
|
|
||||||
|
if printf '%s' "$content" > "$tmp" && mv -f -- "$tmp" "$file"; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
rm -f -- "$tmp"
|
||||||
|
return 2
|
||||||
|
}
|
||||||
|
|
||||||
|
# _mca_entry_patch_inplace <file>
|
||||||
# One desktop entry that lives outside the XDG search path, edited where it is
|
# One desktop entry that lives outside the XDG search path, edited where it is
|
||||||
# because there is nowhere to shadow it from.
|
# because there is nowhere to shadow it from. It follows the applications list
|
||||||
#
|
# under its own file name, which is the name of the application's own entry.
|
||||||
# What decides whether an application here is in scope differs by where the
|
|
||||||
# entry came from, which is what the gate says: an autostart entry follows the
|
|
||||||
# autostart setting, a shortcut follows the same rules as the application it is
|
|
||||||
# a shortcut to.
|
|
||||||
_mca_entry_patch_inplace() {
|
_mca_entry_patch_inplace() {
|
||||||
local file="$1" gate="$2"
|
local file="$1"
|
||||||
local id prog packaging=native content backup kind copy
|
local id prog packaging=native content backup kind copy
|
||||||
|
|
||||||
# Already ours, and normally that is the end of it: what is in there is what
|
# Already ours, and normally that is the end of it: what is in there is what
|
||||||
@@ -476,12 +497,8 @@ _mca_entry_patch_inplace() {
|
|||||||
|
|
||||||
mca_desktop_is_browser && kind=browser || kind=app
|
mca_desktop_is_browser && kind=browser || kind=app
|
||||||
|
|
||||||
if [[ $gate == autostart ]]; then
|
|
||||||
[[ $CFG_AUTOSTART == yes ]] || return 0
|
|
||||||
else
|
|
||||||
id="${file##*/}"; id="${id%.desktop}"
|
id="${file##*/}"; id="${id%.desktop}"
|
||||||
mca_kind_wanted "$kind" "$id" "$packaging" || return 0
|
mca_kind_wanted "$kind" "$id" || return 0
|
||||||
fi
|
|
||||||
|
|
||||||
content="$(_mca_desktop_transform "$file" "$MCA_MARK_INPLACE" \
|
content="$(_mca_desktop_transform "$file" "$MCA_MARK_INPLACE" \
|
||||||
"$(mca_flags "$kind")")"
|
"$(mca_flags "$kind")")"
|
||||||
@@ -490,7 +507,7 @@ _mca_entry_patch_inplace() {
|
|||||||
[[ "$content" == "$(< "$file")" ]] && return 0
|
[[ "$content" == "$(< "$file")" ]] && return 0
|
||||||
|
|
||||||
backup="$(mca_backup "$file")" || return 0
|
backup="$(mca_backup "$file")" || return 0
|
||||||
if mca_write_if_changed "$file" "$content"$'\n'; then
|
if _mca_entry_write "$file" "$content"$'\n'; then
|
||||||
MCA_CHANGES=$(( MCA_CHANGES + 1 ))
|
MCA_CHANGES=$(( MCA_CHANGES + 1 ))
|
||||||
fi
|
fi
|
||||||
mca_ledger_add inplace "$file" "$backup"
|
mca_ledger_add inplace "$file" "$backup"
|
||||||
@@ -503,7 +520,7 @@ mca_autostart_apply() {
|
|||||||
|
|
||||||
for file in "$dir"/*.desktop; do
|
for file in "$dir"/*.desktop; do
|
||||||
[[ -f $file ]] || continue
|
[[ -f $file ]] || continue
|
||||||
_mca_entry_patch_inplace "$file" autostart
|
_mca_entry_patch_inplace "$file"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -515,7 +532,7 @@ mca_shortcuts_apply() {
|
|||||||
|
|
||||||
for file in "$dir"/*.desktop; do
|
for file in "$dir"/*.desktop; do
|
||||||
[[ -f $file ]] || continue
|
[[ -f $file ]] || continue
|
||||||
_mca_entry_patch_inplace "$file" apps
|
_mca_entry_patch_inplace "$file"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -615,7 +632,8 @@ mca_prune_orphans() {
|
|||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
mca_revert_all() {
|
mca_revert_all() {
|
||||||
local kind path detail
|
local kind path detail backup
|
||||||
|
local -a keep=()
|
||||||
|
|
||||||
[[ -f $MCA_LEDGER ]] || return 0
|
[[ -f $MCA_LEDGER ]] || return 0
|
||||||
|
|
||||||
@@ -631,12 +649,15 @@ mca_revert_all() {
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
inplace)
|
inplace)
|
||||||
if [[ -n $detail && -f "$MCA_BACKUPDIR/$detail" ]]; then
|
backup="$MCA_BACKUPDIR/$detail"
|
||||||
|
if [[ -n $detail ]] && [[ -f $backup || -L $backup ]]; then
|
||||||
if [[ -e $path ]] || [[ -d "$(dirname -- "$path")" ]]; then
|
if [[ -e $path ]] || [[ -d "$(dirname -- "$path")" ]]; then
|
||||||
cp -p -- "$MCA_BACKUPDIR/$detail" "$path" 2>/dev/null \
|
# A link goes back as a link, not written through.
|
||||||
|
[[ -L $backup ]] && rm -f -- "$path"
|
||||||
|
cp -P -p -- "$backup" "$path" 2>/dev/null \
|
||||||
&& MCA_CHANGES=$(( MCA_CHANGES + 1 ))
|
&& MCA_CHANGES=$(( MCA_CHANGES + 1 ))
|
||||||
fi
|
fi
|
||||||
rm -f -- "$MCA_BACKUPDIR/$detail"
|
rm -f -- "$backup"
|
||||||
elif [[ -f $path ]]; then
|
elif [[ -f $path ]]; then
|
||||||
# No backup: the file did not exist before we wrote it.
|
# No backup: the file did not exist before we wrote it.
|
||||||
rm -f -- "$path"
|
rm -f -- "$path"
|
||||||
@@ -655,10 +676,17 @@ mca_revert_all() {
|
|||||||
mca_kde_paste_revert "$path" "$detail" \
|
mca_kde_paste_revert "$path" "$detail" \
|
||||||
&& MCA_CHANGES=$(( MCA_CHANGES + 1 ))
|
&& MCA_CHANGES=$(( MCA_CHANGES + 1 ))
|
||||||
;;
|
;;
|
||||||
|
gecko)
|
||||||
|
mca_gecko_revert "$path" "$detail" \
|
||||||
|
&& MCA_CHANGES=$(( MCA_CHANGES + 1 ))
|
||||||
|
# Still open, so not done yet. See gecko.sh.
|
||||||
|
(( MCA_GECKO_PENDING )) && keep+=("$kind"$'\t'"$path"$'\t'"$detail")
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
done < <(tac "$MCA_LEDGER" 2>/dev/null)
|
done < <(tac "$MCA_LEDGER" 2>/dev/null)
|
||||||
|
|
||||||
rm -f -- "$MCA_LEDGER"
|
rm -f -- "$MCA_LEDGER"
|
||||||
|
(( ${#keep[@]} )) && printf '%s\n' "${keep[@]}" > "$MCA_LEDGER"
|
||||||
rmdir "$MCA_BACKUPDIR" 2>/dev/null || true
|
rmdir "$MCA_BACKUPDIR" 2>/dev/null || true
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
+138
-45
@@ -9,6 +9,10 @@
|
|||||||
#
|
#
|
||||||
# ~/.local/share/Steam/ubuntu12_64/steamwebhelper_sniper_wrap.sh
|
# ~/.local/share/Steam/ubuntu12_64/steamwebhelper_sniper_wrap.sh
|
||||||
#
|
#
|
||||||
|
# The steamrt3 client, a beta for now, has a script of its own:
|
||||||
|
#
|
||||||
|
# ~/.local/share/Steam/steamrt64/steamwebhelper.sh
|
||||||
|
#
|
||||||
# Steam compares the installed files against its manifest at every start (by
|
# Steam compares the installed files against its manifest at every start (by
|
||||||
# size and timestamp, not by content) and restores whatever differs.
|
# size and timestamp, not by content) and restores whatever differs.
|
||||||
# So the patch is written to look untouched: the bytes the flag costs are taken
|
# So the patch is written to look untouched: the bytes the flag costs are taken
|
||||||
@@ -28,6 +32,10 @@
|
|||||||
# all: no autoscroll in the interface is a smaller thing than a client that
|
# all: no autoscroll in the interface is a smaller thing than a client that
|
||||||
# reinstalls itself.
|
# reinstalls itself.
|
||||||
#
|
#
|
||||||
|
# The steamrt3 script has no comments to give back. So it is copied aside, as
|
||||||
|
# it is, and replaced by a stub of the same size that runs the copy with the
|
||||||
|
# flag. See _mca_steam_stub.
|
||||||
|
#
|
||||||
# The file comes back on every client update, and the watcher re-applies the
|
# The file comes back on every client update, and the watcher re-applies the
|
||||||
# patch when that happens.
|
# patch when that happens.
|
||||||
|
|
||||||
@@ -60,24 +68,28 @@ mca_steam_roots() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# The script to patch inside a Steam installation. Newer clients start the
|
# The scripts to patch inside a Steam installation, one per client. The default
|
||||||
# helper through a wrapper inside the container runtime; older ones exec it
|
# client starts the helper through a wrapper inside the container runtime;
|
||||||
# from steamwebhelper.sh directly, and that one forwards its arguments too.
|
# older ones exec it from steamwebhelper.sh directly, and that one forwards its
|
||||||
mca_steam_script() {
|
# arguments too. The steamrt3 client has its own. Both clients are patched
|
||||||
local root="$1" f
|
# where both are there, so switching between them keeps autoscroll.
|
||||||
|
mca_steam_scripts() {
|
||||||
|
local root="$1" f found=1
|
||||||
for f in \
|
for f in \
|
||||||
"$root/ubuntu12_64/steamwebhelper_sniper_wrap.sh" \
|
"$root/ubuntu12_64/steamwebhelper_sniper_wrap.sh" \
|
||||||
"$root/ubuntu12_64/steamwebhelper.sh"
|
"$root/ubuntu12_64/steamwebhelper.sh"
|
||||||
do
|
do
|
||||||
[[ -f $f && -w $f ]] && { printf '%s\n' "$f"; return 0; }
|
[[ -f $f && -w $f ]] && { printf '%s\n' "$f"; found=0; break; }
|
||||||
done
|
done
|
||||||
return 1
|
f="$root/steamrt64/steamwebhelper.sh"
|
||||||
|
[[ -f $f && -w $f ]] && { printf '%s\n' "$f"; found=0; }
|
||||||
|
return "$found"
|
||||||
}
|
}
|
||||||
|
|
||||||
mca_steam_installed() {
|
mca_steam_installed() {
|
||||||
local root
|
local root
|
||||||
while IFS= read -r root; do
|
while IFS= read -r root; do
|
||||||
mca_steam_script "$root" > /dev/null && return 0
|
mca_steam_scripts "$root" > /dev/null && return 0
|
||||||
done < <(mca_steam_roots)
|
done < <(mca_steam_roots)
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
@@ -87,13 +99,17 @@ mca_steam_script_patched() {
|
|||||||
grep -q -- "$MCA_FEATURE" "$1" 2>/dev/null
|
grep -q -- "$MCA_FEATURE" "$1" 2>/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Whether every script there is patched. One that is not is a client that
|
||||||
|
# starts without autoscroll.
|
||||||
mca_steam_patched() {
|
mca_steam_patched() {
|
||||||
local root script
|
local root script found=0
|
||||||
while IFS= read -r root; do
|
while IFS= read -r root; do
|
||||||
script="$(mca_steam_script "$root")" || continue
|
while IFS= read -r script; do
|
||||||
mca_steam_script_patched "$script" && return 0
|
mca_steam_script_patched "$script" || return 1
|
||||||
|
found=1
|
||||||
|
done < <(mca_steam_scripts "$root")
|
||||||
done < <(mca_steam_roots)
|
done < <(mca_steam_roots)
|
||||||
return 1
|
(( found ))
|
||||||
}
|
}
|
||||||
|
|
||||||
# _mca_steam_exec_line <script>
|
# _mca_steam_exec_line <script>
|
||||||
@@ -163,6 +179,81 @@ _mca_steam_same_size() {
|
|||||||
(( $(wc -c < "$script") == $(printf '%s\n' "$content" | wc -c) ))
|
(( $(wc -c < "$script") == $(printf '%s\n' "$content" | wc -c) ))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Where a stub keeps Steam's own script, and the line that runs it from there.
|
||||||
|
MCA_STEAM_ORIG=.orig
|
||||||
|
MCA_STEAM_STUB="exec \"\$0$MCA_STEAM_ORIG\" \"\$@\""
|
||||||
|
|
||||||
|
# _mca_steam_stub <script> <flags>
|
||||||
|
# The stub on stdout, for a script with no comments to pay for the flags. It
|
||||||
|
# is exactly as long as the script and runs Steam's own script, kept next to
|
||||||
|
# it, with the flags added. That script hands its arguments on to the helper.
|
||||||
|
# Steam only checks the files in its manifest, and the copy is not one of them.
|
||||||
|
# Fails when the script does not hand its arguments on, has no #! line, or is
|
||||||
|
# too short to hold the stub.
|
||||||
|
_mca_steam_stub() {
|
||||||
|
local script="$1" flags="$2" head body pad
|
||||||
|
|
||||||
|
[[ -n "$(_mca_steam_exec_line "$script")" ]] || return 1
|
||||||
|
head="$(head -n 1 -- "$script")"
|
||||||
|
[[ $head == '#!'* ]] || return 1
|
||||||
|
|
||||||
|
body="$MCA_STEAM_STUB $flags"
|
||||||
|
pad=$(( $(wc -c < "$script") - $(printf '%s\n%s\n' "$head" "$body" | wc -c) ))
|
||||||
|
(( pad >= 0 )) || return 1
|
||||||
|
|
||||||
|
# The bytes left over go into a comment line.
|
||||||
|
printf '%s\n' "$head"
|
||||||
|
if (( pad == 1 )); then
|
||||||
|
printf '\n'
|
||||||
|
elif (( pad > 1 )); then
|
||||||
|
printf '#%*s\n' $(( pad - 2 )) ''
|
||||||
|
fi
|
||||||
|
printf '%s' "$body"
|
||||||
|
}
|
||||||
|
|
||||||
|
# _mca_steam_is_stub <script>
|
||||||
|
_mca_steam_is_stub() {
|
||||||
|
grep -qF -- "$MCA_STEAM_STUB" "$1" 2>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
# _mca_steam_text <script> <flags>
|
||||||
|
# The patched script on stdout: from the comments if they can pay for the
|
||||||
|
# flags, as a stub if not. Fails when neither keeps the size.
|
||||||
|
_mca_steam_text() {
|
||||||
|
local script="$1" flags="$2" out
|
||||||
|
|
||||||
|
if ! { out="$(_mca_steam_build "$script" "$flags")" \
|
||||||
|
&& _mca_steam_same_size "$script" "$out"; }
|
||||||
|
then
|
||||||
|
out="$(_mca_steam_stub "$script" "$flags")" \
|
||||||
|
&& _mca_steam_same_size "$script" "$out" || return 1
|
||||||
|
fi
|
||||||
|
printf '%s' "$out"
|
||||||
|
}
|
||||||
|
|
||||||
|
# _mca_steam_write <script> <backup> <content>
|
||||||
|
# Writes the patched script. <backup> is the untouched copy kept for undoing.
|
||||||
|
_mca_steam_write() {
|
||||||
|
local script="$1" backup="$2" content="$3"
|
||||||
|
|
||||||
|
# A stub needs Steam's script next to it before it can start anything.
|
||||||
|
if [[ $content == *"$MCA_STEAM_STUB"* ]]; then
|
||||||
|
cp -p -- "$backup" "$script$MCA_STEAM_ORIG" 2>/dev/null || return 1
|
||||||
|
chmod +x -- "$script$MCA_STEAM_ORIG" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if mca_write_if_changed "$script" "$content"$'\n'; then
|
||||||
|
MCA_CHANGES=$(( MCA_CHANGES + 1 ))
|
||||||
|
fi
|
||||||
|
chmod +x -- "$script" 2>/dev/null || true
|
||||||
|
|
||||||
|
# Steam looks at when the file was last written as well as at how big
|
||||||
|
# it is, and the copy taken before the edit still carries the original
|
||||||
|
# timestamp. Putting it back costs nothing and removes the other half
|
||||||
|
# of what the client would notice.
|
||||||
|
touch -r "$backup" -- "$script" 2>/dev/null || true
|
||||||
|
}
|
||||||
|
|
||||||
# _mca_steam_refresh_backup <script>
|
# _mca_steam_refresh_backup <script>
|
||||||
# A client update brings a new version of the script, and the copy kept from
|
# A client update brings a new version of the script, and the copy kept from
|
||||||
# before it is no longer what putting it back means. Only ever done while the
|
# before it is no longer what putting it back means. Only ever done while the
|
||||||
@@ -195,15 +286,18 @@ _mca_steam_settle() {
|
|||||||
# Nothing to compare against, so nothing can be said about the length.
|
# Nothing to compare against, so nothing can be said about the length.
|
||||||
[[ -f $copy ]] || return 0
|
[[ -f $copy ]] || return 0
|
||||||
|
|
||||||
# Already the length Steam expects: the patch is a good one.
|
# Already the length Steam expects: the patch is a good one. Unless it is
|
||||||
(( $(wc -c < "$script") == $(wc -c < "$copy") )) && return 0
|
# a stub that lost Steam's script next to it, and would start nothing.
|
||||||
|
if (( $(wc -c < "$script") == $(wc -c < "$copy") )); then
|
||||||
if out="$(_mca_steam_build "$copy" "$flags")" && _mca_steam_same_size "$copy" "$out"; then
|
if _mca_steam_is_stub "$script" && [[ ! -f $script$MCA_STEAM_ORIG ]]; then
|
||||||
if mca_write_if_changed "$script" "$out"$'\n'; then
|
cp -p -- "$copy" "$script$MCA_STEAM_ORIG" 2>/dev/null || true
|
||||||
MCA_CHANGES=$(( MCA_CHANGES + 1 ))
|
|
||||||
fi
|
fi
|
||||||
chmod +x -- "$script" 2>/dev/null || true
|
return 0
|
||||||
touch -r "$copy" -- "$script" 2>/dev/null || true
|
fi
|
||||||
|
|
||||||
|
if out="$(_mca_steam_text "$copy" "$flags")" \
|
||||||
|
&& _mca_steam_write "$script" "$copy" "$out"
|
||||||
|
then
|
||||||
mca_ledger_add steam "$script" "$name"
|
mca_ledger_add steam "$script" "$name"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
@@ -224,7 +318,7 @@ mca_steam_apply() {
|
|||||||
flags="$(mca_flags)"
|
flags="$(mca_flags)"
|
||||||
|
|
||||||
while IFS= read -r root; do
|
while IFS= read -r root; do
|
||||||
script="$(mca_steam_script "$root")" || continue
|
while IFS= read -r script; do
|
||||||
found=1
|
found=1
|
||||||
|
|
||||||
if mca_steam_script_patched "$script"; then
|
if mca_steam_script_patched "$script"; then
|
||||||
@@ -234,31 +328,21 @@ mca_steam_apply() {
|
|||||||
|
|
||||||
_mca_steam_refresh_backup "$script"
|
_mca_steam_refresh_backup "$script"
|
||||||
|
|
||||||
# Either the comments can pay for the flag or nothing is written.
|
# Either the file keeps its length or nothing is written. A
|
||||||
# A longer file is one Steam reinstalls itself over; a client update
|
# longer file is one Steam reinstalls itself over; a client
|
||||||
# that changed how the helper is started leaves no line to patch at
|
# update that changed how the helper is started leaves no line
|
||||||
# all. Both end here, and this script is what starts Steam's entire
|
# to patch at all. Both end here, and this script is what starts
|
||||||
# interface, so leaving it alone is the only safe answer to either.
|
# Steam's entire interface, so leaving it alone is the only safe
|
||||||
if ! { out="$(_mca_steam_build "$script" "$flags")" \
|
# answer to either.
|
||||||
&& _mca_steam_same_size "$script" "$out"; }
|
if ! out="$(_mca_steam_text "$script" "$flags")"; then
|
||||||
then
|
|
||||||
mca_note "$(mca_msg "Steam starts its interface in a way this version cannot change without Steam noticing; leaving it alone.")"
|
mca_note "$(mca_msg "Steam starts its interface in a way this version cannot change without Steam noticing; leaving it alone.")"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
backup="$(mca_backup "$script")" || continue
|
backup="$(mca_backup "$script")" || continue
|
||||||
if mca_write_if_changed "$script" "$out"$'\n'; then
|
_mca_steam_write "$script" "$MCA_BACKUPDIR/$backup" "$out" || continue
|
||||||
MCA_CHANGES=$(( MCA_CHANGES + 1 ))
|
|
||||||
fi
|
|
||||||
chmod +x -- "$script" 2>/dev/null || true
|
|
||||||
|
|
||||||
# Steam looks at when the file was last written as well as at how big
|
|
||||||
# it is, and the copy taken before the edit still carries the original
|
|
||||||
# timestamp. Putting it back costs nothing and removes the other half
|
|
||||||
# of what the client would notice.
|
|
||||||
touch -r "$MCA_BACKUPDIR/$backup" -- "$script" 2>/dev/null || true
|
|
||||||
|
|
||||||
mca_ledger_add steam "$script" "$backup"
|
mca_ledger_add steam "$script" "$backup"
|
||||||
|
done < <(mca_steam_scripts "$root")
|
||||||
done < <(mca_steam_roots)
|
done < <(mca_steam_roots)
|
||||||
|
|
||||||
(( found ))
|
(( found ))
|
||||||
@@ -266,7 +350,9 @@ mca_steam_apply() {
|
|||||||
|
|
||||||
# mca_steam_revert <script> <backup name>
|
# mca_steam_revert <script> <backup name>
|
||||||
mca_steam_revert() {
|
mca_steam_revert() {
|
||||||
local script="$1" backup="$2"
|
local script="$1" backup="$2" orig="$1$MCA_STEAM_ORIG" stub=1 tmp
|
||||||
|
|
||||||
|
_mca_steam_is_stub "$script" || stub=0
|
||||||
|
|
||||||
if [[ -n $backup && -f "$MCA_BACKUPDIR/$backup" ]]; then
|
if [[ -n $backup && -f "$MCA_BACKUPDIR/$backup" ]]; then
|
||||||
if [[ -e $script ]]; then
|
if [[ -e $script ]]; then
|
||||||
@@ -274,14 +360,21 @@ mca_steam_revert() {
|
|||||||
chmod +x -- "$script" 2>/dev/null || true
|
chmod +x -- "$script" 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
rm -f -- "$MCA_BACKUPDIR/$backup"
|
rm -f -- "$MCA_BACKUPDIR/$backup"
|
||||||
return 0
|
elif (( stub )) && [[ -f $orig ]]; then
|
||||||
fi
|
# No backup, but a stub keeps Steam's own script right next to it.
|
||||||
|
cp -p -- "$orig" "$script" 2>/dev/null || return 1
|
||||||
|
else
|
||||||
# No backup to fall back on, so take the flags back out of the exec line.
|
# No backup to fall back on, so take the flags back out of the exec line.
|
||||||
[[ -f $script ]] || return 1
|
[[ -f $script ]] || return 1
|
||||||
local tmp
|
|
||||||
tmp="$(mktemp "${script}.XXXXXX")" || return 1
|
tmp="$(mktemp "${script}.XXXXXX")" || return 1
|
||||||
sed "s| $MCA_FLAG||g" "$script" > "$tmp" && mv -f "$tmp" "$script" || { rm -f "$tmp"; return 1; }
|
sed "s| $MCA_FLAG||g" "$script" > "$tmp" && mv -f "$tmp" "$script" || { rm -f "$tmp"; return 1; }
|
||||||
chmod +x -- "$script" 2>/dev/null || true
|
chmod +x -- "$script" 2>/dev/null || true
|
||||||
return 0
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# The copy goes once the stub that ran it is gone.
|
||||||
|
if (( stub )) && ! _mca_steam_is_stub "$script"; then
|
||||||
|
rm -f -- "$orig"
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
#
|
||||||
# middleclick-autoscroll: middle-click autoscroll for Chromium-based
|
# middleclick-autoscroll: middle-click autoscroll for Chromium-based
|
||||||
# applications on Linux
|
# applications and Firefox on Linux
|
||||||
#
|
#
|
||||||
# Blink has had Windows-style autoscroll for years, behind a runtime flag that
|
# Blink has had Windows-style autoscroll for years, behind a runtime flag that
|
||||||
# is not turned on for Linux because middle click is taken by primary-selection
|
# is not turned on for Linux because middle click is taken by primary-selection
|
||||||
# paste there. Turning it on is a matter of one command line argument. The
|
# paste there. Turning it on is a matter of one command line argument. The
|
||||||
# work is finding every application that needs it, putting the argument
|
# work is finding every application that needs it, putting the argument
|
||||||
# somewhere it survives an update, and doing the same for the two programs that
|
# somewhere it survives an update, and doing the same for the two programs that
|
||||||
# do not take arguments at all.
|
# do not take arguments at all. Firefox has the same feature behind a setting.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2026 Felitendo
|
# Copyright (C) 2026 Felitendo
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
@@ -17,7 +17,7 @@ set -uo pipefail
|
|||||||
|
|
||||||
MCA_LIBDIR="${MCA_LIBDIR:-@LIBDIR@}"
|
MCA_LIBDIR="${MCA_LIBDIR:-@LIBDIR@}"
|
||||||
|
|
||||||
for _mod in common config detect patch steam kde apply menu; do
|
for _mod in common config detect patch steam gecko kde apply menu; do
|
||||||
# shellcheck source=/dev/null
|
# shellcheck source=/dev/null
|
||||||
if ! source "$MCA_LIBDIR/$_mod.sh"; then
|
if ! source "$MCA_LIBDIR/$_mod.sh"; then
|
||||||
printf 'middleclick-autoscroll: cannot load %s/%s.sh\n' "$MCA_LIBDIR" "$_mod" >&2
|
printf 'middleclick-autoscroll: cannot load %s/%s.sh\n' "$MCA_LIBDIR" "$_mod" >&2
|
||||||
@@ -56,7 +56,8 @@ mca_do_enable() {
|
|||||||
|
|
||||||
mca_ok "$(mca_msg "Autoscroll is on for %d applications." "$MCA_N_ON")"
|
mca_ok "$(mca_msg "Autoscroll is on for %d applications." "$MCA_N_ON")"
|
||||||
|
|
||||||
mca_note "$(mca_msg "Applications that are already running pick this up when they are restarted.")"
|
[[ -n $MCA_IN_MENU ]] \
|
||||||
|
|| mca_note "$(mca_msg "Applications that are already running pick this up when they are restarted.")"
|
||||||
}
|
}
|
||||||
|
|
||||||
mca_do_disable() {
|
mca_do_disable() {
|
||||||
@@ -107,10 +108,12 @@ mca_do_apply() {
|
|||||||
|
|
||||||
if (( rebuild )); then
|
if (( rebuild )); then
|
||||||
mca_ok "$(mca_msg "Applied again to %d applications." "$MCA_N_ON")"
|
mca_ok "$(mca_msg "Applied again to %d applications." "$MCA_N_ON")"
|
||||||
mca_say " $(mca_msg "Applications that are already running pick this up when they are restarted.")"
|
[[ -n $MCA_IN_MENU ]] \
|
||||||
|
|| mca_say " $(mca_msg "Applications that are already running pick this up when they are restarted.")"
|
||||||
elif (( MCA_CHANGES )); then
|
elif (( MCA_CHANGES )); then
|
||||||
mca_ok "$(mca_msg "Applied to %d applications." "$MCA_N_ON")"
|
mca_ok "$(mca_msg "Applied to %d applications." "$MCA_N_ON")"
|
||||||
mca_say " $(mca_msg "Applications that are already running pick this up when they are restarted.")"
|
[[ -n $MCA_IN_MENU ]] \
|
||||||
|
|| mca_say " $(mca_msg "Applications that are already running pick this up when they are restarted.")"
|
||||||
else
|
else
|
||||||
mca_ok "$(mca_msg "Already applied to %d applications." "$MCA_N_ON")"
|
mca_ok "$(mca_msg "Already applied to %d applications." "$MCA_N_ON")"
|
||||||
fi
|
fi
|
||||||
@@ -141,7 +144,7 @@ mca_do_list() {
|
|||||||
mca_count_routes
|
mca_count_routes
|
||||||
|
|
||||||
if (( ${#MCA_IDS[@]} == 0 )); then
|
if (( ${#MCA_IDS[@]} == 0 )); then
|
||||||
mca_note "$(mca_msg "No Chromium-based applications found.")"
|
mca_note "$(mca_msg "No supported applications found.")"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user