Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6c35e10a66 | ||
|
|
18b523e458 | ||
|
|
41d608efda | ||
|
|
f1c59a2748 | ||
|
|
0e897b0678 | ||
|
|
7a2a5482ae | ||
|
|
170bd673e0 | ||
|
|
ff1e92303a | ||
|
|
edbbf2082c | ||
|
|
1ab419dd09 | ||
|
|
6bd5f26e1c | ||
|
|
ecafbe7212 | ||
|
|
173950af08 | ||
|
|
5ed6c1d9ce | ||
|
|
630527e0b7 | ||
|
|
a1f8b18888 | ||
|
|
9f3e20a826 | ||
|
|
dbc77fe214 | ||
|
|
be2de1ab83 | ||
|
|
56c1927584 | ||
|
|
7dd11cff01 | ||
|
|
15ede93868 | ||
|
|
4502e8bd15 | ||
|
|
6105bb30ad | ||
|
|
545d81d872 | ||
|
|
3b1c7c76a9 | ||
|
|
8962ad1a54 | ||
|
|
39b818de11 | ||
|
|
b008d63928 | ||
|
|
de9aaa1fc1 | ||
|
|
739649a749 | ||
|
|
2adf741355 | ||
|
|
ec763814a9 | ||
|
|
b21168a033 | ||
|
|
cf8a41528d | ||
|
|
57c95a6e35 | ||
|
|
17615d00a9 | ||
|
|
35ddbe72ed | ||
|
|
fd4e3734e8 | ||
|
|
cacb7891e7 | ||
|
|
9969a07b22 | ||
|
|
9aea8f62c9 | ||
|
|
106f7c90f9 | ||
|
|
3b831d4e59 | ||
|
|
dbadb2b4e5 | ||
|
|
7d0eb278bf | ||
|
|
0f8d6f140a | ||
|
|
15caa33a60 | ||
|
|
d905617248 | ||
|
|
643cc80ae0 | ||
|
|
a867171a45 | ||
|
|
2c6c9fb2cc | ||
|
|
0ad389aa6f | ||
|
|
a632e42fbc | ||
|
|
a809ffad61 | ||
|
|
ea7284b387 | ||
|
|
37ba9662f1 | ||
|
|
1f340a3590 | ||
|
|
f7368f0dfe | ||
|
|
dc538dc994 | ||
|
|
9f563bcec2 | ||
|
|
1ff8c9c19a | ||
|
|
810b7116cd | ||
|
|
3fb66d412a | ||
|
|
741b074134 | ||
|
|
c3ef4bc87c | ||
|
|
f5e81fe8cd | ||
|
|
3c95c6c276 | ||
|
|
f54aca3fd9 | ||
|
|
7220643c82 | ||
|
|
ede879f3d6 | ||
|
|
8c7263e8f1 | ||
|
|
402b6f6ff1 | ||
|
|
451bbbe035 | ||
|
|
db34a7eb8f | ||
|
|
5ce48c18e6 | ||
|
|
219098d6a3 | ||
|
|
5f87336f3f | ||
|
|
f5e1014bce | ||
|
|
75347adc8d | ||
|
|
35eae11389 | ||
|
|
28c4b121ca | ||
|
|
d5d699659c | ||
|
|
4b85fb8cf7 | ||
|
|
c51376fd26 | ||
|
|
b9e0344da4 | ||
|
|
ea51d57d3d | ||
|
|
a7b7a79ece | ||
|
|
09789e297d | ||
|
|
69a9dfa41b | ||
|
|
4e6361ff7b | ||
|
|
91d4a7781e | ||
|
|
da6be203f0 | ||
|
|
d074faafd1 | ||
|
|
39d7af8483 | ||
|
|
2ee406c909 | ||
|
|
66db895dd3 | ||
|
|
07e4024a9c | ||
|
|
8cab3e1f8b | ||
|
|
3f1617cba0 | ||
|
|
82795d845c | ||
|
|
99201191f4 | ||
|
|
3de027644c | ||
|
|
3e47ebec8e | ||
|
|
3890beb9d3 | ||
|
|
93e2b35dc7 | ||
|
|
da21cb8e21 | ||
|
|
14a0b716b6 | ||
|
|
4e986f37a0 | ||
|
|
e3092b4299 | ||
|
|
ceed334b06 | ||
|
|
51db0cb8e4 | ||
|
|
3961f2a888 | ||
|
|
91d44e72df | ||
|
|
314259032d | ||
|
|
fa9e4d0ee1 | ||
|
|
6de7fee90c | ||
|
|
f7226f681a | ||
|
|
26d46e3768 | ||
|
|
216563b635 | ||
|
|
3f2f391c93 | ||
|
|
9edf31244a | ||
|
|
d89bc29425 | ||
|
|
d525d350fc | ||
|
|
d1ba6bd333 | ||
|
|
6695e9be9c | ||
|
|
396ef6f0b0 | ||
|
|
b9637e5802 | ||
|
|
fe52511885 | ||
|
|
337e2fbfec | ||
|
|
4f5e32593b | ||
|
|
db314c9948 | ||
|
|
7dec9da401 | ||
|
|
3a8c0f3bee | ||
|
|
ec5802a487 | ||
|
|
fefc491ce5 | ||
|
|
41e0e7c688 | ||
|
|
ce2dfc1f19 | ||
|
|
13ed78bc23 | ||
|
|
904bd17c53 | ||
|
|
1f3a653faa | ||
|
|
cd1d6574f7 | ||
|
|
a5135c5560 | ||
|
|
2bce0d2d40 | ||
|
|
016052ca14 | ||
|
|
305870b3ee | ||
|
|
52530b2d5c | ||
|
|
5a35aa95bc | ||
|
|
53da0344bf | ||
|
|
f30d3760a1 | ||
|
|
fbcc3f5f02 | ||
|
|
5d0a92f3f7 | ||
|
|
4b830e6ba7 | ||
|
|
698e5e8e0c | ||
|
|
a4f5a23846 | ||
|
|
268121850d | ||
|
|
aeaf782feb | ||
|
|
21aeafd8dd | ||
|
|
ab704dc4be | ||
|
|
42c0a03ddc | ||
|
|
550529f1fa | ||
|
|
23fbc01a0e | ||
|
|
56546571b6 | ||
|
|
e5c634e672 | ||
|
|
7fdfe4a9ee | ||
|
|
3e95f77cc0 | ||
|
|
9b5e43eec5 | ||
|
|
ac3c3740c2 | ||
|
|
35a67ddf16 | ||
|
|
53815e0f28 | ||
|
|
7b7a73bd46 | ||
|
|
bf3fa6734e | ||
|
|
be06aef6d7 | ||
|
|
3e27abd1e8 | ||
|
|
0a6485e024 | ||
|
|
5b0df6bd4c | ||
|
|
a3f2a54f20 | ||
|
|
d1fd1fd9d0 | ||
|
|
cd5fb46963 | ||
|
|
09ebff06ee | ||
|
|
ac24d6d148 | ||
|
|
f481d22b75 | ||
|
|
149e3a5026 | ||
|
|
ef83525e9a | ||
|
|
56a042716e | ||
|
|
0fe722bfba | ||
|
|
3b53ce77bb | ||
|
|
b2f5c6c4d5 | ||
|
|
7c64864c2f | ||
|
|
9d0b947a48 | ||
|
|
9ed8a199b0 | ||
|
|
a0c9feefca | ||
|
|
1a2822d130 | ||
|
|
44007195b7 | ||
|
|
74b5a119d3 | ||
|
|
0539a3ad49 | ||
|
|
a06afd4bd2 | ||
|
|
1090acf3a5 | ||
|
|
b8ba0f0888 | ||
|
|
989b344b1d | ||
|
|
bf58335bbe | ||
|
|
5c4199ec74 | ||
|
|
7821d7c979 | ||
|
|
e2b47790a9 | ||
|
|
ff66a0664d | ||
|
|
6d42bef7ec | ||
|
|
cca3423a59 | ||
|
|
5e842d5850 | ||
|
|
0c724f3c7b | ||
|
|
55f3f59208 | ||
|
|
edc2f00603 | ||
|
|
bcb130e7eb | ||
|
|
d8de1e80b8 | ||
|
|
610378525a | ||
|
|
2f72c5d6ae | ||
|
|
a62949f0dc | ||
|
|
7ded01c277 | ||
|
|
a45361321d | ||
|
|
b7204f9694 | ||
|
|
b8a3b779e1 | ||
|
|
7906d630be | ||
|
|
3c04a4ce15 | ||
|
|
2f875b3bcb | ||
|
|
914f91f9f7 | ||
|
|
fcc6651b6a | ||
|
|
dda612c15e | ||
|
|
894a69d41f | ||
|
|
e2523f1d99 | ||
|
|
6fa35ae35c | ||
|
|
d0a2d31b5a | ||
|
|
43838e1ccc | ||
|
|
741e7902db | ||
|
|
6426d318fb | ||
|
|
8a98b4ee40 | ||
|
|
dcaac482de | ||
|
|
ee27df7680 | ||
|
|
e0ae29d64a | ||
|
|
db78e66451 | ||
|
|
b8ecd58005 | ||
|
|
2725834c4a | ||
|
|
42cb2d5d88 | ||
|
|
3994429b88 | ||
|
|
237bb1e0d9 | ||
|
|
911aad42cc | ||
|
|
36ded28ce4 | ||
|
|
9761bb91e9 | ||
|
|
435a310590 | ||
|
|
d377b3dbca | ||
|
|
850fe285b4 | ||
|
|
2adeb8dbcb | ||
|
|
fb5dfc4399 | ||
|
|
29e1cff8f1 | ||
|
|
2c3373ae16 | ||
|
|
c294ad0d4d | ||
|
|
ee436cc7cc | ||
|
|
168995493f | ||
|
|
e477f8b3da | ||
|
|
516329a408 | ||
|
|
938b7353ff | ||
|
|
a80721b2d3 | ||
|
|
4e065b9a80 | ||
|
|
aa8d7d02d1 | ||
|
|
05b36fc58f | ||
|
|
d6196ecad8 | ||
|
|
21a91421a6 | ||
|
|
272f51ad5b | ||
|
|
c352591d72 | ||
|
|
96caad46a5 | ||
|
|
309cae316b | ||
|
|
ffd0c75e8b | ||
|
|
fdf313472c | ||
|
|
011fdba7d3 | ||
|
|
e5e8521ae3 | ||
|
|
786e752417 | ||
|
|
d2220c68bd | ||
|
|
26d40e1149 | ||
|
|
15a55e6e07 | ||
|
|
32ab8d6573 | ||
|
|
ec55ae8b00 | ||
|
|
689adc0a30 | ||
|
|
fab9d7c0ab | ||
|
|
4aec2aa6da | ||
|
|
f46372b97c | ||
|
|
33c661505e | ||
|
|
91e16f7863 | ||
|
|
55e8c331a6 | ||
|
|
ae092cd1a7 | ||
|
|
122dc2ec0f | ||
|
|
c25b918a51 | ||
|
|
173bc97d0f | ||
|
|
84166ab954 | ||
|
|
a1cfd1de25 | ||
|
|
58fcae7af8 | ||
|
|
29f0a08391 | ||
|
|
2d683e7e46 | ||
|
|
247f6353b0 | ||
|
|
08e28fd0a5 | ||
|
|
cab591eb48 | ||
|
|
33e5acf0ea | ||
|
|
15554ef767 | ||
|
|
a9cb03c26f | ||
|
|
fb6110d0eb | ||
|
|
c3ace1faff | ||
|
|
c5286c3a6e | ||
|
|
1316eb2769 | ||
|
|
27909f1824 | ||
|
|
78c852514f | ||
|
|
985a681d72 | ||
|
|
3c79840a29 | ||
|
|
95ee614d9f | ||
|
|
591ce5274f | ||
|
|
3f18951368 | ||
|
|
be077f1a67 | ||
|
|
1a4b53917d | ||
|
|
726e13edcd | ||
|
|
4ebd990e30 | ||
|
|
4567550978 | ||
|
|
f489bd7d36 | ||
|
|
e93e42f952 | ||
|
|
250c9c4bce | ||
|
|
aa46a62457 | ||
|
|
f66c92aefb | ||
|
|
a696611615 | ||
|
|
5db53b5a9e | ||
|
|
e9e732756e | ||
|
|
ca96b85352 | ||
|
|
67f5098c95 | ||
|
|
f37652942d | ||
|
|
f67d182a92 | ||
|
|
b325cc75c0 | ||
|
|
6cc76903b0 | ||
|
|
b4bc0b006a | ||
|
|
b0ce899a71 | ||
|
|
bd162a9e08 | ||
|
|
8b7d69c0ff | ||
|
|
518f8b402e | ||
|
|
397457cacb | ||
|
|
eee0db133c | ||
|
|
dec05198c7 | ||
|
|
911c3c17c5 | ||
|
|
9d852eee9c | ||
|
|
17e1f1e4c7 | ||
|
|
c0ac29fdd8 | ||
|
|
9b3f93688e | ||
|
|
f4f7d9addc | ||
|
|
4e35f9f290 | ||
|
|
820b6ea3aa | ||
|
|
647f900b85 | ||
|
|
6c0f97ffe9 | ||
|
|
bc95b905af | ||
|
|
330ac54c6f | ||
|
|
54249d03dd | ||
|
|
d543393e3f | ||
|
|
ee010de36c | ||
|
|
3c7aaafa63 | ||
|
|
b62cec0cdc | ||
|
|
a474660498 | ||
|
|
6e2a5ff081 | ||
|
|
8dd63c722f | ||
|
|
e98dff325d | ||
|
|
8d93508062 | ||
|
|
fd0411b508 | ||
|
|
8564ed255a | ||
|
|
9d78700ab7 | ||
|
|
c72fedbb30 | ||
|
|
e637c61cc9 | ||
|
|
dae19ca067 | ||
|
|
9d6fc68642 | ||
|
|
2cd8b96d38 | ||
|
|
541337259d | ||
|
|
93defcd3a7 | ||
|
|
69edbbdf42 | ||
|
|
dcea005d8d | ||
|
|
cfd59d31a1 | ||
|
|
f42ffa61d1 | ||
|
|
0a2254702f | ||
|
|
d02327af2d | ||
|
|
c10ca2a77e | ||
|
|
2f8c01418d | ||
|
|
3a0c84a8f5 | ||
|
|
597b443796 | ||
|
|
0ea925289b | ||
|
|
f3b116e47c | ||
|
|
4c3ec7d067 | ||
|
|
941d8afb9a | ||
|
|
8e41662088 | ||
|
|
71bb2d889b | ||
|
|
c712473c7a | ||
|
|
121515cbc7 | ||
|
|
8b52dc8acb | ||
|
|
db5644e058 | ||
|
|
684cc666d3 | ||
|
|
dfff608ad1 | ||
|
|
f1c5ae73c2 | ||
|
|
d85ec7bcfb | ||
|
|
2855b1bb0b | ||
|
|
2a616e2518 | ||
|
|
d5d131185e | ||
|
|
0f2c0e794c | ||
|
|
d4e697c0de | ||
|
|
720dde1c06 | ||
|
|
1e017475ff | ||
|
|
95e51d1c27 | ||
|
|
d653a54fc3 | ||
|
|
c2ccccd093 | ||
|
|
837fa03f64 | ||
|
|
f027b4795f | ||
|
|
6ede54e3e0 | ||
|
|
922d259193 | ||
|
|
56075b5766 | ||
|
|
b0f02c6a36 | ||
|
|
de1326e118 | ||
|
|
53d1d1fded | ||
|
|
e17f427a5d | ||
|
|
df5af7d60c | ||
|
|
702cb0d140 | ||
|
|
9e415bff54 | ||
|
|
a696a0e0b2 | ||
|
|
52026701e4 | ||
|
|
7471488e33 | ||
|
|
0ef8a0b2d4 | ||
|
|
76a72a5ead | ||
|
|
3b0cba493b | ||
|
|
bc9f97f852 | ||
|
|
295eb2bd60 | ||
|
|
dfcf9de78e | ||
|
|
fc6d63603a | ||
|
|
9156ad915a | ||
|
|
a138a922ef | ||
|
|
b51ff6583d | ||
|
|
7207ad6da7 | ||
|
|
e3fafbc6ff | ||
|
|
be5eb26385 | ||
|
|
e9b529a644 | ||
|
|
250a1bcc81 | ||
|
|
96edb065d7 | ||
|
|
7e501a460a | ||
|
|
dd05ba239e | ||
|
|
b373fc465b | ||
|
|
f92f7ca803 | ||
|
|
51062a2499 | ||
|
|
48a3967b82 | ||
|
|
18ef16f6ee | ||
|
|
fda3ada055 | ||
|
|
db5500f130 | ||
|
|
42bbd0fe01 | ||
|
|
b257752812 | ||
|
|
54b7c8d697 | ||
|
|
bcafd0790f | ||
|
|
e07da9cad9 | ||
|
|
d3b5befe3e | ||
|
|
4481d94fa2 | ||
|
|
982a6dd5f2 | ||
|
|
898fc8c13c | ||
|
|
9ec2762bff | ||
|
|
6d9059ee86 | ||
|
|
ef6ab620fb | ||
|
|
ecf4cb15be | ||
|
|
c9d36b5bad | ||
|
|
9e932799ee | ||
|
|
6215b65ec9 | ||
|
|
9adf64c374 | ||
|
|
d32f9533e3 | ||
|
|
2a0a8585df | ||
|
|
87a2b219a5 | ||
|
|
c5e13ccc84 | ||
|
|
40c9a18be4 | ||
|
|
8a4aa7908f | ||
|
|
82879e39e7 | ||
|
|
60534bcfe3 | ||
|
|
41ddd7c1a6 | ||
|
|
5601a556c9 | ||
|
|
764e0f3f25 | ||
|
|
3619807cb9 | ||
|
|
d65f220530 | ||
|
|
903e758528 | ||
|
|
9b85f00564 | ||
|
|
cb191d60f3 | ||
|
|
ac70fcc5f9 |
No files matched your search
@@ -11,7 +11,7 @@ env:
|
||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
APPLE_P12_CERTIFICATE: ${{ secrets.APPLE_P12_CERTIFICATE }}
|
||||
FEEDBACK_TOKEN: ${{ secrets.FEEDBACK_TOKEN }}
|
||||
NETLIFY_WEBHOOK: ${{ secrets.NETLIFY_WEBHOOK }}
|
||||
CLOUDFLARE_WEBHOOK: ${{ secrets.CLOUDFLARE_WEBHOOK }}
|
||||
SPARKLE_ED_PRIVATE_KEY: ${{ secrets.SPARKLE_ED_PRIVATE_KEY }}
|
||||
GITHUB_EVENT_BEFORE: ${{ github.event.before }}
|
||||
GITHUB_EVENT_AFTER: ${{ github.event.after }}
|
||||
@@ -21,7 +21,7 @@ env:
|
||||
APP_NAME: AltTab
|
||||
jobs:
|
||||
build:
|
||||
runs-on: macos-13 # Intel VM; see https://github.com/actions/runner-images/tree/main
|
||||
runs-on: macos-15 # all options: https://github.com/actions/runner-images/tree/main
|
||||
environment: production
|
||||
steps:
|
||||
# - env:
|
||||
@@ -32,7 +32,7 @@ jobs:
|
||||
COMMITS: ${{ toJson(github.event.commits) }}
|
||||
run: |
|
||||
if [[ "${{ github.event_name }}" == "push" ]]; then
|
||||
COUNT=$(( $(echo "$COMMITS" | jq length) + 1 ))
|
||||
COUNT=$(( $(echo "$COMMITS" | jq length) + 30 ))
|
||||
else
|
||||
COUNT=1
|
||||
fi
|
||||
@@ -44,7 +44,7 @@ jobs:
|
||||
with:
|
||||
node-version: 16
|
||||
cache: 'npm'
|
||||
- run: sudo xcode-select -s /Applications/Xcode_14.2.app/Contents/Developer
|
||||
- run: sudo xcode-select -s /Applications/Xcode_26.0.1.app/Contents/Developer
|
||||
- run: scripts/print_env.sh
|
||||
- run: npm ci
|
||||
- run: npx commitlint --from "$GITHUB_EVENT_BEFORE" --to "$GITHUB_EVENT_AFTER" --verbose
|
||||
@@ -57,11 +57,13 @@ jobs:
|
||||
- run: scripts/package_and_notarize_release.sh
|
||||
- run: scripts/upload_symbols_to_appcenter.sh
|
||||
- run: scripts/update_appcast.sh
|
||||
- run: scripts/update_readme_and_website.sh
|
||||
- run: npx semantic-release
|
||||
- id: set_tag_name
|
||||
run: echo "tag_name=v"$(cat $VERSION_FILE)"" >> "$GITHUB_OUTPUT"
|
||||
- id: set_release_info
|
||||
run: scripts/extract_latest_changelog.sh
|
||||
- uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
tag_name: ${{ steps.set_tag_name.outputs.tag_name }}
|
||||
tag_name: ${{ steps.set_release_info.outputs.tag_name }}
|
||||
body: ${{ steps.set_release_info.outputs.body }}
|
||||
files: ${{ env.XCODE_BUILD_PATH }}/*.zip
|
||||
- run: scripts/update_website.sh
|
||||
@@ -1,5 +1,7 @@
|
||||
/.idea/
|
||||
xcuserdata/
|
||||
/.vscode/
|
||||
/buildServer.json
|
||||
WorkspaceSettings.xcsettings
|
||||
IDEWorkspaceChecks.plist
|
||||
/node_modules/
|
||||
@@ -12,3 +14,4 @@ codesign.conf
|
||||
codesign.crt
|
||||
codesign.key
|
||||
codesign.p12
|
||||
/.claude/worktrees/
|
||||
@@ -1,8 +1,6 @@
|
||||
retain_objc_accessible: true
|
||||
project: alt-tab-macos.xcworkspace
|
||||
schemes:
|
||||
- Release
|
||||
targets:
|
||||
- alt-tab-macos
|
||||
workspace: alt-tab-macos.xcworkspace
|
||||
report_exclude:
|
||||
- src/api-wrappers/PrivateApis.swift
|
||||
- Release
|
||||
index_exclude:
|
||||
- Pods/**
|
||||
- src/api-wrappers/private-apis/**
|
||||
@@ -1,6 +1,10 @@
|
||||
# We can find the rules here.
|
||||
# https://github.com/nicklockwood/SwiftFormat/blob/main/Rules.md
|
||||
# rules: https://github.com/nicklockwood/SwiftFormat/blob/main/Rules.md
|
||||
|
||||
--swiftversion 5.5
|
||||
|
||||
--maxwidth 120
|
||||
--swiftversion 5.8
|
||||
--maxwidth 110
|
||||
--nowrapoperators .,==,!=,<,>,>=,<=
|
||||
--wrapternary before-operators
|
||||
--disable andOperator
|
||||
--disable wrapConditionalBodies
|
||||
--disable wrapLoopBodies
|
||||
--disable wrapMultilineStatementBraces
|
||||
@@ -0,0 +1,10 @@
|
||||
# macOS development
|
||||
- Don't use xcode directly to develop
|
||||
- Use pure swift 5.8 code to make the app. No interface builder. No SwiftUI.
|
||||
- Aim for compact code. Within methods, don't have groups of statements separated with newlines. No inline comments for simple code. Instead, split statements into sub-methods.
|
||||
- Use guard closes as much as possible to separate the happy-path under them
|
||||
- Organize source files into folders. Folders should group files that change together, at the same pace (e.g. one feature)
|
||||
- Favor low latency and responsiveness. Reuse objects, avoid wasting memory or I/O.
|
||||
|
||||
# Workflow
|
||||
- Copy commands from ai/build.sh and run them, to confirm compilation works after you're done with implementing a change
|
||||
@@ -14,4 +14,4 @@ python_version = "3.6"
|
||||
|
||||
[scripts]
|
||||
font2png = "scripts/convert_font_to_png.sh"
|
||||
translate = "python scripts/translate_i18n_tools.py resources/l10n --retry_translate"
|
||||
translate = "python scripts/l10n/google_translate_all_terms_locally.py resources/l10n --retry_translate"
|
||||
@@ -1,10 +1,12 @@
|
||||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "00c7c75d00988a027e56c90f3a0bbba05aec3b41b2f7fd9be24f3cb27bf15eaf"
|
||||
"sha256": "3646221352b85667ac21f1b528dc8b29f56ff1e24cb97e7eaba79b5040c78e21"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {},
|
||||
"requires": {
|
||||
"python_version": "3.6"
|
||||
},
|
||||
"sources": [
|
||||
{
|
||||
"name": "pypi",
|
||||
@@ -16,11 +18,11 @@
|
||||
"default": {
|
||||
"certifi": {
|
||||
"hashes": [
|
||||
"sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8",
|
||||
"sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"
|
||||
"sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407",
|
||||
"sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==2024.8.30"
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==2025.8.3"
|
||||
},
|
||||
"chardet": {
|
||||
"hashes": [
|
||||
@@ -68,11 +70,11 @@
|
||||
},
|
||||
"hstspreload": {
|
||||
"hashes": [
|
||||
"sha256:2ab4518495a132c4ae430c474afffd12938852c6eec68ce1368c8f7858dc3076",
|
||||
"sha256:9c1b2d0313899d3ff9dac03ab39d53fed95c32eef9862e7eabee8dc07dfd589c"
|
||||
"sha256:02bd5b0885b62f0d5239ca6c6876ffcad8d9c08dc97cee54292598141a16e9dc",
|
||||
"sha256:346552a807b3a1762376de8ecce097544e7fcd64fb64231b4652da52f86fa6f1"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==2024.9.1"
|
||||
"version": "==2025.1.1"
|
||||
},
|
||||
"httpcore": {
|
||||
"hashes": [
|
||||
|
||||
@@ -1,11 +1,28 @@
|
||||
platform :osx, '10.12'
|
||||
# disable warnings coming from pods, which are always noise from our perspective
|
||||
inhibit_all_warnings!
|
||||
|
||||
def deployment_target_from_xcconfig()
|
||||
xcconfig_path = 'config/base.xcconfig'
|
||||
File.foreach(xcconfig_path) do |line|
|
||||
if line.start_with?('MACOSX_DEPLOYMENT_TARGET')
|
||||
target = line.split("=").last.strip
|
||||
puts "MACOSX_DEPLOYMENT_TARGET: #{target}"
|
||||
return target
|
||||
end
|
||||
end
|
||||
puts "\e[31mCouldn't read MACOSX_DEPLOYMENT_TARGET from #{xcconfig_path}\e[0m"
|
||||
exit 1
|
||||
end
|
||||
|
||||
deployment_target = deployment_target_from_xcconfig()
|
||||
|
||||
platform :osx, deployment_target
|
||||
|
||||
target 'alt-tab-macos' do
|
||||
use_frameworks!
|
||||
pod 'LetsMove', :git => 'https://github.com/lwouis/LetsMove.git', :commit => '7abf4daed1a25218f2b52f2dfd190aee5a50071c'
|
||||
pod 'Sparkle', :podspec => 'https://raw.githubusercontent.com/lwouis/Sparkle/fix-iframe-popup-1.24/Sparkle.podspec'
|
||||
pod 'ShortcutRecorder', :git => 'https://github.com/lwouis/ShortcutRecorder.git', :branch => 'alt-tab-current'
|
||||
pod 'SwiftyMarkdown', '1.1.0'
|
||||
pod 'AppCenter/Crashes', '4.3.0'
|
||||
pod 'SwiftyBeaver', '1.9.0'
|
||||
end
|
||||
@@ -13,13 +30,16 @@ end
|
||||
target 'unit-tests' do
|
||||
use_frameworks!
|
||||
pod 'ShortcutRecorder', :git => 'https://github.com/lwouis/ShortcutRecorder.git', :branch => 'alt-tab-current'
|
||||
# disable code signing which is unnecessary for tests
|
||||
post_install do |installer|
|
||||
installer.pods_project.targets.each do |target|
|
||||
target.build_configurations.each do |config|
|
||||
config.build_settings['CODE_SIGNING_REQUIRED'] = 'NO'
|
||||
config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
|
||||
end
|
||||
end
|
||||
|
||||
post_install do |installer|
|
||||
installer.pods_project.targets.each do |target|
|
||||
target.build_configurations.each do |config|
|
||||
# disable code signing which is unnecessary for pods
|
||||
config.build_settings['CODE_SIGNING_REQUIRED'] = 'NO'
|
||||
config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
|
||||
# set deployment_target for all pods, to avoid libarclite compiler error
|
||||
config.build_settings['MACOSX_DEPLOYMENT_TARGET'] = deployment_target
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -6,7 +6,6 @@ PODS:
|
||||
- ShortcutRecorder (3.1)
|
||||
- Sparkle (1.24.0)
|
||||
- SwiftyBeaver (1.9.0)
|
||||
- SwiftyMarkdown (1.1.0)
|
||||
|
||||
DEPENDENCIES:
|
||||
- AppCenter/Crashes (= 4.3.0)
|
||||
@@ -14,13 +13,11 @@ DEPENDENCIES:
|
||||
- ShortcutRecorder (from `https://github.com/lwouis/ShortcutRecorder.git`, branch `alt-tab-current`)
|
||||
- Sparkle (from `https://raw.githubusercontent.com/lwouis/Sparkle/fix-iframe-popup-1.24/Sparkle.podspec`)
|
||||
- SwiftyBeaver (= 1.9.0)
|
||||
- SwiftyMarkdown (= 1.1.0)
|
||||
|
||||
SPEC REPOS:
|
||||
trunk:
|
||||
- AppCenter
|
||||
- SwiftyBeaver
|
||||
- SwiftyMarkdown
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
LetsMove:
|
||||
@@ -37,7 +34,7 @@ CHECKOUT OPTIONS:
|
||||
:commit: 7abf4daed1a25218f2b52f2dfd190aee5a50071c
|
||||
:git: https://github.com/lwouis/LetsMove.git
|
||||
ShortcutRecorder:
|
||||
:commit: 5bb32febdab48038ce1762bf14f5ce8024b11fe7
|
||||
:commit: 594b360e07a8a368ffec2567f77e465477b9994f
|
||||
:git: https://github.com/lwouis/ShortcutRecorder.git
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
@@ -46,8 +43,7 @@ SPEC CHECKSUMS:
|
||||
ShortcutRecorder: fdf620aca34101b0cba3b10fca815e0459254189
|
||||
Sparkle: 1fa490bb4ab2a9b37cfb9ea4feec19dd33b81cd2
|
||||
SwiftyBeaver: d39e7c376bf15e9fffca8263b8fd1f42ea56aa2d
|
||||
SwiftyMarkdown: 033abc9dad9a37903f81aec5188cade436f40520
|
||||
|
||||
PODFILE CHECKSUM: 29e9c8f00c3b594083545d6218fdfecdcd6e0037
|
||||
PODFILE CHECKSUM: c20cb0e8753361ba1c1daea73624f879862271ed
|
||||
|
||||
COCOAPODS: 1.16.2
|
||||
@@ -6,7 +6,6 @@ PODS:
|
||||
- ShortcutRecorder (3.1)
|
||||
- Sparkle (1.24.0)
|
||||
- SwiftyBeaver (1.9.0)
|
||||
- SwiftyMarkdown (1.1.0)
|
||||
|
||||
DEPENDENCIES:
|
||||
- AppCenter/Crashes (= 4.3.0)
|
||||
@@ -14,13 +13,11 @@ DEPENDENCIES:
|
||||
- ShortcutRecorder (from `https://github.com/lwouis/ShortcutRecorder.git`, branch `alt-tab-current`)
|
||||
- Sparkle (from `https://raw.githubusercontent.com/lwouis/Sparkle/fix-iframe-popup-1.24/Sparkle.podspec`)
|
||||
- SwiftyBeaver (= 1.9.0)
|
||||
- SwiftyMarkdown (= 1.1.0)
|
||||
|
||||
SPEC REPOS:
|
||||
trunk:
|
||||
- AppCenter
|
||||
- SwiftyBeaver
|
||||
- SwiftyMarkdown
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
LetsMove:
|
||||
@@ -37,7 +34,7 @@ CHECKOUT OPTIONS:
|
||||
:commit: 7abf4daed1a25218f2b52f2dfd190aee5a50071c
|
||||
:git: https://github.com/lwouis/LetsMove.git
|
||||
ShortcutRecorder:
|
||||
:commit: 5bb32febdab48038ce1762bf14f5ce8024b11fe7
|
||||
:commit: 594b360e07a8a368ffec2567f77e465477b9994f
|
||||
:git: https://github.com/lwouis/ShortcutRecorder.git
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
@@ -46,8 +43,7 @@ SPEC CHECKSUMS:
|
||||
ShortcutRecorder: fdf620aca34101b0cba3b10fca815e0459254189
|
||||
Sparkle: 1fa490bb4ab2a9b37cfb9ea4feec19dd33b81cd2
|
||||
SwiftyBeaver: d39e7c376bf15e9fffca8263b8fd1f42ea56aa2d
|
||||
SwiftyMarkdown: 033abc9dad9a37903f81aec5188cade436f40520
|
||||
|
||||
PODFILE CHECKSUM: 29e9c8f00c3b594083545d6218fdfecdcd6e0037
|
||||
PODFILE CHECKSUM: c20cb0e8753361ba1c1daea73624f879862271ed
|
||||
|
||||
COCOAPODS: 1.16.2
|
||||
@@ -442,8 +442,8 @@ NSString *const SRShortcutCharactersIgnoringModifiers = SRShortcutKeyCharactersI
|
||||
|
||||
- (UInt32)carbonKeyCode
|
||||
{
|
||||
if (self.keyCode == SRKeyCodeNone)
|
||||
os_trace_error("#Critical SRKeyCodeNone has no representation in Carbon");
|
||||
// if (self.keyCode == SRKeyCodeNone)
|
||||
// os_trace_error("#Critical SRKeyCodeNone has no representation in Carbon");
|
||||
|
||||
return self.keyCode;
|
||||
}
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 Simon Fairbairn
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -1,360 +0,0 @@
|
||||
# SwiftyMarkdown 1.0
|
||||
|
||||
SwiftyMarkdown converts Markdown files and strings into `NSAttributedString`s using sensible defaults and a Swift-style syntax. It uses dynamic type to set the font size correctly with whatever font you'd like to use.
|
||||
|
||||
- [What's New](#fully-rebuilt-for-2020)
|
||||
- [Installation](#installation)
|
||||
- [How to Use](#how-to-use-swiftymarkdown)
|
||||
- [Screenshot](#screenshot)
|
||||
- [Front Matter](#front-matter)
|
||||
- [Appendix](#appendix)
|
||||
|
||||
## Fully Rebuilt For 2020!
|
||||
|
||||
SwiftyMarkdown now features a more robust and reliable rules-based line processing and character tokenisation engine. It has added support for images stored in the bundle (``), codeblocks, blockquotes, and unordered lists!
|
||||
|
||||
Line-level attributes can now have a paragraph alignment applied to them (e.g. `h2.aligment = .center`), and links can be optionally underlined by setting `underlineLinks` to `true`.
|
||||
|
||||
It also uses the system color `.label` as the default font color on iOS 13 and above for Dark Mode support out of the box.
|
||||
|
||||
Support for all of Apple's platforms has been enabled.
|
||||
|
||||
## Installation
|
||||
|
||||
### CocoaPods:
|
||||
|
||||
`pod 'SwiftyMarkdown'`
|
||||
|
||||
### SPM:
|
||||
|
||||
In Xcode, `File -> Swift Packages -> Add Package Dependency` and add the GitHub URL.
|
||||
|
||||
## How To Use SwiftyMarkdown
|
||||
|
||||
Read Markdown from a text string...
|
||||
|
||||
```swift
|
||||
let md = SwiftyMarkdown(string: "# Heading\nMy *Markdown* string")
|
||||
md.attributedString()
|
||||
```
|
||||
|
||||
...or from a URL.
|
||||
|
||||
```swift
|
||||
if let url = Bundle.main.url(forResource: "file", withExtension: "md"), md = SwiftyMarkdown(url: url ) {
|
||||
md.attributedString()
|
||||
}
|
||||
```
|
||||
|
||||
If you want to use a different string once SwiftyMarkdown has been initialised, you can now do so like this:
|
||||
|
||||
```swift
|
||||
let md = SwiftyMarkdown(string: "# Heading\nMy *Markdown* string")
|
||||
md.attributedString(from: "A **SECOND** Markdown string. *Fancy!*")
|
||||
```
|
||||
|
||||
The attributed string can then be assigned to any label or text control that has support for attributed text.
|
||||
|
||||
```swift
|
||||
let md = SwiftyMarkdown(string: "# Heading\nMy *Markdown* string")
|
||||
let label = UILabel()
|
||||
label.attributedText = md.attributedString()
|
||||
```
|
||||
|
||||
## Supported Markdown Features
|
||||
|
||||
*italics* or _italics_
|
||||
**bold** or __bold__
|
||||
~~Linethrough~~Strikethroughs.
|
||||
`code`
|
||||
|
||||
# Header 1
|
||||
|
||||
or
|
||||
|
||||
Header 1
|
||||
====
|
||||
|
||||
## Header 2
|
||||
|
||||
or
|
||||
|
||||
Header 2
|
||||
---
|
||||
|
||||
### Header 3
|
||||
#### Header 4
|
||||
##### Header 5 #####
|
||||
###### Header 6 ######
|
||||
|
||||
Indented code blocks (spaces or tabs)
|
||||
|
||||
[Links](http://voyagetravelapps.com/)
|
||||

|
||||
|
||||
> Blockquotes
|
||||
|
||||
- Bulleted
|
||||
- Lists
|
||||
- Including indented lists
|
||||
- Up to three levels
|
||||
- Neat!
|
||||
|
||||
1. Ordered
|
||||
1. Lists
|
||||
1. Including indented lists
|
||||
- Up to three levels
|
||||
|
||||
|
||||
|
||||
Compound rules also work, for example:
|
||||
|
||||
It recognises **[Bold Links](http://voyagetravelapps.com/)**
|
||||
|
||||
Or [**Bold Links**](http://voyagetravelapps.com/)
|
||||
|
||||
Images will be inserted into the returned `NSAttributedString` as an `NSTextAttachment` (sadly, this will not work on watchOS as `NSTextAttachment` is not available).
|
||||
|
||||
## Customisation
|
||||
|
||||
Set the attributes of every paragraph and character style type using straightforward dot syntax:
|
||||
|
||||
```swift
|
||||
md.body.fontName = "AvenirNextCondensed-Medium"
|
||||
|
||||
md.h1.color = UIColor.redColor()
|
||||
md.h1.fontName = "AvenirNextCondensed-Bold"
|
||||
md.h1.fontSize = 16
|
||||
md.h1.alignmnent = .center
|
||||
|
||||
md.italic.color = UIColor.blueColor()
|
||||
|
||||
md.underlineLinks = true
|
||||
|
||||
md.bullet = "🍏"
|
||||
```
|
||||
|
||||
On iOS, Specified font sizes will be adjusted relative to the the user's dynamic type settings.
|
||||
|
||||
## Screenshot
|
||||
|
||||

|
||||
|
||||
There's an example project included in the repository. Open the `.xcworkspace` file to get started.
|
||||
|
||||
## Front Matter
|
||||
|
||||
SwiftyMarkdown recognises YAML front matter and will populate the `frontMatterAttributes` property with the key-value pairs that it fines.
|
||||
|
||||
## Appendix
|
||||
|
||||
### A) All Customisable Properties
|
||||
|
||||
```swift
|
||||
h1.fontName : String
|
||||
h1.fontSize : CGFloat
|
||||
h1.color : UI/NSColor
|
||||
h1.fontStyle : FontStyle
|
||||
h1.alignment : NSTextAlignment
|
||||
|
||||
h2.fontName : String
|
||||
h2.fontSize : CGFloat
|
||||
h2.color : UI/NSColor
|
||||
h2.fontStyle : FontStyle
|
||||
h2.alignment : NSTextAlignment
|
||||
|
||||
h3.fontName : String
|
||||
h3.fontSize : CGFloat
|
||||
h3.color : UI/NSColor
|
||||
h3.fontStyle : FontStyle
|
||||
h3.alignment : NSTextAlignment
|
||||
|
||||
h4.fontName : String
|
||||
h4.fontSize : CGFloat
|
||||
h4.color : UI/NSColor
|
||||
h4.fontStyle : FontStyle
|
||||
h4.alignment : NSTextAlignment
|
||||
|
||||
h5.fontName : String
|
||||
h5.fontSize : CGFloat
|
||||
h5.color : UI/NSColor
|
||||
h5.fontStyle : FontStyle
|
||||
h5.alignment : NSTextAlignment
|
||||
|
||||
h6.fontName : String
|
||||
h6.fontSize : CGFloat
|
||||
h6.color : UI/NSColor
|
||||
h6.fontStyle : FontStyle
|
||||
h6.alignment : NSTextAlignment
|
||||
|
||||
body.fontName : String
|
||||
body.fontSize : CGFloat
|
||||
body.color : UI/NSColor
|
||||
body.fontStyle : FontStyle
|
||||
body.alignment : NSTextAlignment
|
||||
|
||||
blockquotes.fontName : String
|
||||
blockquotes.fontSize : CGFloat
|
||||
blockquotes.color : UI/NSColor
|
||||
blockquotes.fontStyle : FontStyle
|
||||
blockquotes.alignment : NSTextAlignment
|
||||
|
||||
link.fontName : String
|
||||
link.fontSize : CGFloat
|
||||
link.color : UI/NSColor
|
||||
link.fontStyle : FontStyle
|
||||
|
||||
bold.fontName : String
|
||||
bold.fontSize : CGFloat
|
||||
bold.color : UI/NSColor
|
||||
bold.fontStyle : FontStyle
|
||||
|
||||
italic.fontName : String
|
||||
italic.fontSize : CGFloat
|
||||
italic.color : UI/NSColor
|
||||
italic.fontStyle : FontStyle
|
||||
|
||||
code.fontName : String
|
||||
code.fontSize : CGFloat
|
||||
code.color : UI/NSColor
|
||||
code.fontStyle : FontStyle
|
||||
|
||||
strikethrough.fontName : String
|
||||
strikethrough.fontSize : CGFloat
|
||||
strikethrough.color : UI/NSColor
|
||||
strikethrough.fontStyle : FontStyle
|
||||
|
||||
underlineLinks : Bool
|
||||
|
||||
bullet : String
|
||||
```
|
||||
|
||||
`FontStyle` is an enum with these cases: `normal`, `bold`, `italic`, and `bolditalic` to give you more precise control over how lines and character styles should look.
|
||||
|
||||
If you like a bit of chaos:
|
||||
|
||||
```swift
|
||||
md.bold.fontStyle = .italic
|
||||
md.italic.fontStyle = .bold
|
||||
```
|
||||
|
||||
### B) Advanced Customisation
|
||||
|
||||
SwiftyMarkdown uses a rules-based line processing and customisation engine that is no longer limited to Markdown. Rules are processed in order, from top to bottom. Line processing happens first, then character styles are applied based on the character rules.
|
||||
|
||||
For example, here's how a small subset of Markdown line tags are set up within SwiftyMarkdown:
|
||||
|
||||
```swift
|
||||
enum MarkdownLineStyle : LineStyling {
|
||||
case h1
|
||||
case h2
|
||||
case previousH1
|
||||
case codeblock
|
||||
case body
|
||||
|
||||
var shouldTokeniseLine: Bool {
|
||||
switch self {
|
||||
case .codeblock:
|
||||
return false
|
||||
default:
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
func styleIfFoundStyleAffectsPreviousLine() -> LineStyling? {
|
||||
switch self {
|
||||
case .previousH1:
|
||||
return MarkdownLineStyle.h1
|
||||
default :
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static public var lineRules = [
|
||||
LineRule(token: " ",type : MarkdownLineStyle.codeblock, removeFrom: .leading),
|
||||
LineRule(token: "=",type : MarkdownLineStyle.previousH1, removeFrom: .entireLine, changeAppliesTo: .previous),
|
||||
LineRule(token: "## ",type : MarkdownLineStyle.h2, removeFrom: .both),
|
||||
LineRule(token: "# ",type : MarkdownLineStyle.h1, removeFrom: .both)
|
||||
]
|
||||
|
||||
let lineProcessor = SwiftyLineProcessor(rules: SwiftyMarkdown.lineRules, default: MarkdownLineStyle.body)
|
||||
```
|
||||
|
||||
Similarly, the character styles all follow rules:
|
||||
|
||||
```swift
|
||||
enum CharacterStyle : CharacterStyling {
|
||||
case link, bold, italic, code
|
||||
}
|
||||
|
||||
static public var characterRules = [
|
||||
CharacterRule(openTag: "[", intermediateTag: "](", closingTag: ")", escapeCharacter: "\\", styles: [1 : [CharacterStyle.link]], maxTags: 1),
|
||||
CharacterRule(openTag: "`", intermediateTag: nil, closingTag: nil, escapeCharacter: "\\", styles: [1 : [CharacterStyle.code]], maxTags: 1),
|
||||
CharacterRule(openTag: "*", intermediateTag: nil, closingTag: nil, escapeCharacter: "\\", styles: [1 : [CharacterStyle.italic], 2 : [CharacterStyle.bold], 3 : [CharacterStyle.bold, CharacterStyle.italic]], maxTags: 3),
|
||||
CharacterRule(openTag: "_", intermediateTag: nil, closingTag: nil, escapeCharacter: "\\", styles: [1 : [CharacterStyle.italic], 2 : [CharacterStyle.bold], 3 : [CharacterStyle.bold, CharacterStyle.italic]], maxTags: 3)
|
||||
]
|
||||
```
|
||||
|
||||
#### Rule Subsets
|
||||
|
||||
If you want to only support a small subset of Markdown, it's now easy to do.
|
||||
|
||||
This example would only process strings with `*` and `_` characters, ignoring links, images, code, and all line-level attributes (headings, blockquotes, etc.)
|
||||
```swift
|
||||
SwiftyMarkdown.lineRules = []
|
||||
|
||||
SwiftyMarkdown.characterRules = [
|
||||
CharacterRule(openTag: "*", intermediateTag: nil, closingTag: nil, escapeCharacter: "\\", styles: [1 : [CharacterStyle.italic], 2 : [CharacterStyle.bold], 3 : [CharacterStyle.bold, CharacterStyle.italic]], maxTags: 3),
|
||||
CharacterRule(openTag: "_", intermediateTag: nil, closingTag: nil, escapeCharacter: "\\", styles: [1 : [CharacterStyle.italic], 2 : [CharacterStyle.bold], 3 : [CharacterStyle.bold, CharacterStyle.italic]], maxTags: 3)
|
||||
]
|
||||
```
|
||||
|
||||
#### Custom Rules
|
||||
|
||||
If you wanted to create a rule that applied a style of `Elf` to a range of characters between "The elf will speak now: %Here is my elf speaking%", you could set things up like this:
|
||||
|
||||
```swift
|
||||
enum Characters : CharacterStyling {
|
||||
case elf
|
||||
|
||||
func isEqualTo( _ other : CharacterStyling) -> Bool {
|
||||
if let other = other as? Characters else {
|
||||
return false
|
||||
}
|
||||
return other == self
|
||||
}
|
||||
}
|
||||
|
||||
let characterRules = [
|
||||
CharacterRule(openTag: "%", intermediateTag: nil, closingTag: nil, escapeCharacter: "\\", styles: [1 : [CharacterStyle.elf]], maxTags: 1)
|
||||
]
|
||||
|
||||
let processor = SwiftyTokeniser( with : characterRules )
|
||||
let string = "The elf will speak now: %Here is my elf speaking%"
|
||||
let tokens = processor.process(string)
|
||||
```
|
||||
|
||||
The output is an array of tokens would be equivalent to:
|
||||
|
||||
```swift
|
||||
[
|
||||
Token(type: .string, inputString: "The elf will speak now: ", characterStyles: []),
|
||||
Token(type: .repeatingTag, inputString: "%", characterStyles: []),
|
||||
Token(type: .string, inputString: "Here is my elf speaking", characterStyles: [.elf]),
|
||||
Token(type: .repeatingTag, inputString: "%", characterStyles: [])
|
||||
]
|
||||
```
|
||||
|
||||
### C) SpriteKit Support
|
||||
|
||||
Did you know that `SKLabelNode` supports attributed text? I didn't.
|
||||
|
||||
```swift
|
||||
let smd = SwiftyMarkdown(string: "My Character's **Dialogue**")
|
||||
|
||||
let label = SKLabelNode()
|
||||
label.preferredMaxLayoutWidth = 500
|
||||
label.numberOfLines = 0
|
||||
label.attributedText = smd.attributedString()
|
||||
```
|
||||
@@ -1,44 +0,0 @@
|
||||
//
|
||||
// String+SwiftyMarkdown.swift
|
||||
// SwiftyMarkdown
|
||||
//
|
||||
// Created by Simon Fairbairn on 08/12/2019.
|
||||
// Copyright © 2019 Voyage Travel Apps. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
/// Some helper functions based on this:
|
||||
/// https://stackoverflow.com/questions/32305891/index-of-a-substring-in-a-string-with-swift/32306142#32306142
|
||||
extension StringProtocol {
|
||||
func index<S: StringProtocol>(of string: S, options: String.CompareOptions = []) -> Index? {
|
||||
range(of: string, options: options)?.lowerBound
|
||||
}
|
||||
func endIndex<S: StringProtocol>(of string: S, options: String.CompareOptions = []) -> Index? {
|
||||
range(of: string, options: options)?.upperBound
|
||||
}
|
||||
func indices<S: StringProtocol>(of string: S, options: String.CompareOptions = []) -> [Index] {
|
||||
var indices: [Index] = []
|
||||
var startIndex = self.startIndex
|
||||
while startIndex < endIndex,
|
||||
let range = self[startIndex...]
|
||||
.range(of: string, options: options) {
|
||||
indices.append(range.lowerBound)
|
||||
startIndex = range.lowerBound < range.upperBound ? range.upperBound :
|
||||
index(range.lowerBound, offsetBy: 1, limitedBy: endIndex) ?? endIndex
|
||||
}
|
||||
return indices
|
||||
}
|
||||
func ranges<S: StringProtocol>(of string: S, options: String.CompareOptions = []) -> [Range<String.Index>] {
|
||||
var result: [Range<Index>] = []
|
||||
var startIndex = self.startIndex
|
||||
while startIndex < endIndex,
|
||||
let range = self[startIndex...]
|
||||
.range(of: string, options: options) {
|
||||
result.append(range)
|
||||
startIndex = range.lowerBound < range.upperBound ? range.upperBound :
|
||||
index(range.lowerBound, offsetBy: 1, limitedBy: endIndex) ?? endIndex
|
||||
}
|
||||
return result
|
||||
}
|
||||
}
|
||||
@@ -1,229 +0,0 @@
|
||||
//
|
||||
// SwiftyLineProcessor.swift
|
||||
// SwiftyMarkdown
|
||||
//
|
||||
// Created by Simon Fairbairn on 16/12/2019.
|
||||
// Copyright © 2019 Voyage Travel Apps. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
public protocol LineStyling {
|
||||
var shouldTokeniseLine : Bool { get }
|
||||
func styleIfFoundStyleAffectsPreviousLine() -> LineStyling?
|
||||
}
|
||||
|
||||
public struct SwiftyLine : CustomStringConvertible {
|
||||
public let line : String
|
||||
public let lineStyle : LineStyling
|
||||
public var description: String {
|
||||
return self.line
|
||||
}
|
||||
}
|
||||
|
||||
extension SwiftyLine : Equatable {
|
||||
public static func == ( _ lhs : SwiftyLine, _ rhs : SwiftyLine ) -> Bool {
|
||||
return lhs.line == rhs.line
|
||||
}
|
||||
}
|
||||
|
||||
public enum Remove {
|
||||
case leading
|
||||
case trailing
|
||||
case both
|
||||
case entireLine
|
||||
case none
|
||||
}
|
||||
|
||||
public enum ChangeApplication {
|
||||
case current
|
||||
case previous
|
||||
case untilClose
|
||||
}
|
||||
|
||||
public struct FrontMatterRule {
|
||||
let openTag : String
|
||||
let closeTag : String
|
||||
let keyValueSeparator : Character
|
||||
}
|
||||
|
||||
public struct LineRule {
|
||||
let token : String
|
||||
let removeFrom : Remove
|
||||
let type : LineStyling
|
||||
let shouldTrim : Bool
|
||||
let changeAppliesTo : ChangeApplication
|
||||
|
||||
public init(token : String, type : LineStyling, removeFrom : Remove = .leading, shouldTrim : Bool = true, changeAppliesTo : ChangeApplication = .current ) {
|
||||
self.token = token
|
||||
self.type = type
|
||||
self.removeFrom = removeFrom
|
||||
self.shouldTrim = shouldTrim
|
||||
self.changeAppliesTo = changeAppliesTo
|
||||
}
|
||||
}
|
||||
|
||||
public class SwiftyLineProcessor {
|
||||
|
||||
public var processEmptyStrings : LineStyling?
|
||||
public internal(set) var frontMatterAttributes : [String : String] = [:]
|
||||
|
||||
var closeToken : String? = nil
|
||||
let defaultType : LineStyling
|
||||
|
||||
let lineRules : [LineRule]
|
||||
let frontMatterRules : [FrontMatterRule]
|
||||
|
||||
public init( rules : [LineRule], defaultRule: LineStyling, frontMatterRules : [FrontMatterRule] = []) {
|
||||
self.lineRules = rules
|
||||
self.defaultType = defaultRule
|
||||
self.frontMatterRules = frontMatterRules
|
||||
}
|
||||
|
||||
func findLeadingLineElement( _ element : LineRule, in string : String ) -> String {
|
||||
var output = string
|
||||
if let range = output.index(output.startIndex, offsetBy: element.token.count, limitedBy: output.endIndex), output[output.startIndex..<range] == element.token {
|
||||
output.removeSubrange(output.startIndex..<range)
|
||||
return output
|
||||
}
|
||||
return output
|
||||
}
|
||||
|
||||
func findTrailingLineElement( _ element : LineRule, in string : String ) -> String {
|
||||
var output = string
|
||||
let token = element.token.trimmingCharacters(in: .whitespaces)
|
||||
if let range = output.index(output.endIndex, offsetBy: -(token.count), limitedBy: output.startIndex), output[range..<output.endIndex] == token {
|
||||
output.removeSubrange(range..<output.endIndex)
|
||||
return output
|
||||
|
||||
}
|
||||
return output
|
||||
}
|
||||
|
||||
func processLineLevelAttributes( _ text : String ) -> SwiftyLine? {
|
||||
if text.isEmpty, let style = processEmptyStrings {
|
||||
return SwiftyLine(line: "", lineStyle: style)
|
||||
}
|
||||
let previousLines = lineRules.filter({ $0.changeAppliesTo == .previous })
|
||||
|
||||
for element in lineRules {
|
||||
guard element.token.count > 0 else {
|
||||
continue
|
||||
}
|
||||
var output : String = (element.shouldTrim) ? text.trimmingCharacters(in: .whitespaces) : text
|
||||
let unprocessed = output
|
||||
|
||||
if let hasToken = self.closeToken, unprocessed != hasToken {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch element.removeFrom {
|
||||
case .leading:
|
||||
output = findLeadingLineElement(element, in: output)
|
||||
case .trailing:
|
||||
output = findTrailingLineElement(element, in: output)
|
||||
case .both:
|
||||
output = findLeadingLineElement(element, in: output)
|
||||
output = findTrailingLineElement(element, in: output)
|
||||
case .entireLine:
|
||||
let maybeOutput = output.replacingOccurrences(of: element.token, with: "")
|
||||
output = ( maybeOutput.isEmpty ) ? maybeOutput : output
|
||||
default:
|
||||
break
|
||||
}
|
||||
// Only if the output has changed in some way
|
||||
guard unprocessed != output else {
|
||||
continue
|
||||
}
|
||||
if element.changeAppliesTo == .untilClose {
|
||||
self.closeToken = (self.closeToken == nil) ? element.token : nil
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
|
||||
output = (element.shouldTrim) ? output.trimmingCharacters(in: .whitespaces) : output
|
||||
return SwiftyLine(line: output, lineStyle: element.type)
|
||||
|
||||
}
|
||||
|
||||
for element in previousLines {
|
||||
let output = (element.shouldTrim) ? text.trimmingCharacters(in: .whitespaces) : text
|
||||
let charSet = CharacterSet(charactersIn: element.token )
|
||||
if output.unicodeScalars.allSatisfy({ charSet.contains($0) }) {
|
||||
return SwiftyLine(line: "", lineStyle: element.type)
|
||||
}
|
||||
}
|
||||
|
||||
return SwiftyLine(line: text.trimmingCharacters(in: .whitespaces), lineStyle: defaultType)
|
||||
}
|
||||
|
||||
func processFrontMatter( _ strings : [String] ) -> [String] {
|
||||
guard let firstString = strings.first?.trimmingCharacters(in: .whitespacesAndNewlines) else {
|
||||
return strings
|
||||
}
|
||||
var rulesToApply : FrontMatterRule? = nil
|
||||
for matter in self.frontMatterRules {
|
||||
if firstString == matter.openTag {
|
||||
rulesToApply = matter
|
||||
break
|
||||
}
|
||||
}
|
||||
guard let existentRules = rulesToApply else {
|
||||
return strings
|
||||
}
|
||||
var outputString = strings
|
||||
// Remove the first line, which is the front matter opening tag
|
||||
let _ = outputString.removeFirst()
|
||||
var closeFound = false
|
||||
while !closeFound {
|
||||
let nextString = outputString.removeFirst()
|
||||
if nextString == existentRules.closeTag {
|
||||
closeFound = true
|
||||
continue
|
||||
}
|
||||
var keyValue = nextString.components(separatedBy: "\(existentRules.keyValueSeparator)")
|
||||
if keyValue.count < 2 {
|
||||
continue
|
||||
}
|
||||
let key = keyValue.removeFirst()
|
||||
let value = keyValue.joined()
|
||||
self.frontMatterAttributes[key] = value
|
||||
}
|
||||
while outputString.first?.isEmpty ?? false {
|
||||
outputString.removeFirst()
|
||||
}
|
||||
return outputString
|
||||
}
|
||||
|
||||
public func process( _ string : String ) -> [SwiftyLine] {
|
||||
var foundAttributes : [SwiftyLine] = []
|
||||
|
||||
var lines = string.components(separatedBy: CharacterSet.newlines)
|
||||
lines = self.processFrontMatter(lines)
|
||||
|
||||
for heading in lines {
|
||||
|
||||
if processEmptyStrings == nil && heading.isEmpty {
|
||||
continue
|
||||
}
|
||||
|
||||
guard let input = processLineLevelAttributes(String(heading)) else {
|
||||
continue
|
||||
}
|
||||
|
||||
if let existentPrevious = input.lineStyle.styleIfFoundStyleAffectsPreviousLine(), foundAttributes.count > 0 {
|
||||
if let idx = foundAttributes.firstIndex(of: foundAttributes.last!) {
|
||||
let updatedPrevious = foundAttributes.last!
|
||||
foundAttributes[idx] = SwiftyLine(line: updatedPrevious.line, lineStyle: existentPrevious)
|
||||
}
|
||||
continue
|
||||
}
|
||||
foundAttributes.append(input)
|
||||
}
|
||||
return foundAttributes
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,173 +0,0 @@
|
||||
//
|
||||
// SwiftyMarkdown+macOS.swift
|
||||
// SwiftyMarkdown
|
||||
//
|
||||
// Created by Simon Fairbairn on 17/12/2019.
|
||||
// Copyright © 2019 Voyage Travel Apps. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
#if !os(macOS)
|
||||
import UIKit
|
||||
|
||||
extension SwiftyMarkdown {
|
||||
|
||||
func font( for line : SwiftyLine, characterOverride : CharacterStyle? = nil ) -> UIFont {
|
||||
let textStyle : UIFont.TextStyle
|
||||
var fontName : String?
|
||||
var fontSize : CGFloat?
|
||||
|
||||
var globalBold = false
|
||||
var globalItalic = false
|
||||
|
||||
let style : FontProperties
|
||||
// What type are we and is there a font name set?
|
||||
switch line.lineStyle as! MarkdownLineStyle {
|
||||
case .h1:
|
||||
style = self.h1
|
||||
if #available(iOS 9, *) {
|
||||
textStyle = UIFont.TextStyle.title1
|
||||
} else {
|
||||
textStyle = UIFont.TextStyle.headline
|
||||
}
|
||||
case .h2:
|
||||
style = self.h2
|
||||
if #available(iOS 9, *) {
|
||||
textStyle = UIFont.TextStyle.title2
|
||||
} else {
|
||||
textStyle = UIFont.TextStyle.headline
|
||||
}
|
||||
case .h3:
|
||||
style = self.h3
|
||||
if #available(iOS 9, *) {
|
||||
textStyle = UIFont.TextStyle.title2
|
||||
} else {
|
||||
textStyle = UIFont.TextStyle.subheadline
|
||||
}
|
||||
case .h4:
|
||||
style = self.h4
|
||||
textStyle = UIFont.TextStyle.headline
|
||||
case .h5:
|
||||
style = self.h5
|
||||
textStyle = UIFont.TextStyle.subheadline
|
||||
case .h6:
|
||||
style = self.h6
|
||||
textStyle = UIFont.TextStyle.footnote
|
||||
case .codeblock:
|
||||
style = self.code
|
||||
textStyle = UIFont.TextStyle.body
|
||||
case .blockquote:
|
||||
style = self.blockquotes
|
||||
textStyle = UIFont.TextStyle.body
|
||||
default:
|
||||
style = self.body
|
||||
textStyle = UIFont.TextStyle.body
|
||||
}
|
||||
|
||||
fontName = style.fontName
|
||||
fontSize = style.fontSize
|
||||
switch style.fontStyle {
|
||||
case .bold:
|
||||
globalBold = true
|
||||
case .italic:
|
||||
globalItalic = true
|
||||
case .boldItalic:
|
||||
globalItalic = true
|
||||
globalBold = true
|
||||
case .normal:
|
||||
break
|
||||
}
|
||||
|
||||
if fontName == nil {
|
||||
fontName = body.fontName
|
||||
}
|
||||
|
||||
if let characterOverride = characterOverride {
|
||||
switch characterOverride {
|
||||
case .code:
|
||||
fontName = code.fontName ?? fontName
|
||||
fontSize = code.fontSize
|
||||
case .link:
|
||||
fontName = link.fontName ?? fontName
|
||||
fontSize = link.fontSize
|
||||
case .bold:
|
||||
fontName = bold.fontName ?? fontName
|
||||
fontSize = bold.fontSize
|
||||
globalBold = true
|
||||
case .italic:
|
||||
fontName = italic.fontName ?? fontName
|
||||
fontSize = italic.fontSize
|
||||
globalItalic = true
|
||||
case .strikethrough:
|
||||
fontName = strikethrough.fontName ?? fontName
|
||||
fontSize = strikethrough.fontSize
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
fontSize = fontSize == 0.0 ? nil : fontSize
|
||||
var font : UIFont
|
||||
if let existentFontName = fontName {
|
||||
font = UIFont.preferredFont(forTextStyle: textStyle)
|
||||
let finalSize : CGFloat
|
||||
if let existentFontSize = fontSize {
|
||||
finalSize = existentFontSize
|
||||
} else {
|
||||
let styleDescriptor = UIFontDescriptor.preferredFontDescriptor(withTextStyle: textStyle)
|
||||
finalSize = styleDescriptor.fontAttributes[.size] as? CGFloat ?? CGFloat(14)
|
||||
}
|
||||
|
||||
if let customFont = UIFont(name: existentFontName, size: finalSize) {
|
||||
let fontMetrics = UIFontMetrics(forTextStyle: textStyle)
|
||||
font = fontMetrics.scaledFont(for: customFont)
|
||||
} else {
|
||||
font = UIFont.preferredFont(forTextStyle: textStyle)
|
||||
}
|
||||
} else {
|
||||
font = UIFont.preferredFont(forTextStyle: textStyle)
|
||||
}
|
||||
|
||||
if globalItalic, let italicDescriptor = font.fontDescriptor.withSymbolicTraits(.traitItalic) {
|
||||
font = UIFont(descriptor: italicDescriptor, size: 0)
|
||||
}
|
||||
if globalBold, let boldDescriptor = font.fontDescriptor.withSymbolicTraits(.traitBold) {
|
||||
font = UIFont(descriptor: boldDescriptor, size: 0)
|
||||
}
|
||||
|
||||
return font
|
||||
|
||||
}
|
||||
|
||||
func color( for line : SwiftyLine ) -> UIColor {
|
||||
// What type are we and is there a font name set?
|
||||
switch line.lineStyle as! MarkdownLineStyle {
|
||||
case .yaml:
|
||||
return body.color
|
||||
case .h1, .previousH1:
|
||||
return h1.color
|
||||
case .h2, .previousH2:
|
||||
return h2.color
|
||||
case .h3:
|
||||
return h3.color
|
||||
case .h4:
|
||||
return h4.color
|
||||
case .h5:
|
||||
return h5.color
|
||||
case .h6:
|
||||
return h6.color
|
||||
case .body:
|
||||
return body.color
|
||||
case .codeblock:
|
||||
return code.color
|
||||
case .blockquote:
|
||||
return blockquotes.color
|
||||
case .unorderedList, .unorderedListIndentFirstOrder, .unorderedListIndentSecondOrder, .orderedList, .orderedListIndentFirstOrder, .orderedListIndentSecondOrder:
|
||||
return body.color
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
@@ -1,144 +0,0 @@
|
||||
//
|
||||
// SwiftyMarkdown+macOS.swift
|
||||
// SwiftyMarkdown
|
||||
//
|
||||
// Created by Simon Fairbairn on 17/12/2019.
|
||||
// Copyright © 2019 Voyage Travel Apps. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
#if os(macOS)
|
||||
import AppKit
|
||||
|
||||
extension SwiftyMarkdown {
|
||||
|
||||
func font( for line : SwiftyLine, characterOverride : CharacterStyle? = nil ) -> NSFont {
|
||||
var fontName : String?
|
||||
var fontSize : CGFloat?
|
||||
|
||||
var globalBold = false
|
||||
var globalItalic = false
|
||||
|
||||
let style : FontProperties
|
||||
// What type are we and is there a font name set?
|
||||
switch line.lineStyle as! MarkdownLineStyle {
|
||||
case .h1:
|
||||
style = self.h1
|
||||
case .h2:
|
||||
style = self.h2
|
||||
case .h3:
|
||||
style = self.h3
|
||||
case .h4:
|
||||
style = self.h4
|
||||
case .h5:
|
||||
style = self.h5
|
||||
case .h6:
|
||||
style = self.h6
|
||||
case .codeblock:
|
||||
style = self.code
|
||||
case .blockquote:
|
||||
style = self.blockquotes
|
||||
default:
|
||||
style = self.body
|
||||
}
|
||||
|
||||
fontName = style.fontName
|
||||
fontSize = style.fontSize
|
||||
switch style.fontStyle {
|
||||
case .bold:
|
||||
globalBold = true
|
||||
case .italic:
|
||||
globalItalic = true
|
||||
case .boldItalic:
|
||||
globalItalic = true
|
||||
globalBold = true
|
||||
case .normal:
|
||||
break
|
||||
}
|
||||
|
||||
if fontName == nil {
|
||||
fontName = body.fontName
|
||||
}
|
||||
|
||||
if let characterOverride = characterOverride {
|
||||
switch characterOverride {
|
||||
case .code:
|
||||
fontName = code.fontName ?? fontName
|
||||
fontSize = code.fontSize
|
||||
case .link:
|
||||
fontName = link.fontName ?? fontName
|
||||
fontSize = link.fontSize
|
||||
case .bold:
|
||||
fontName = bold.fontName ?? fontName
|
||||
fontSize = bold.fontSize
|
||||
globalBold = true
|
||||
case .italic:
|
||||
fontName = italic.fontName ?? fontName
|
||||
fontSize = italic.fontSize
|
||||
globalItalic = true
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
fontSize = fontSize == 0.0 ? nil : fontSize
|
||||
let finalSize : CGFloat
|
||||
if let existentFontSize = fontSize {
|
||||
finalSize = existentFontSize
|
||||
} else {
|
||||
finalSize = NSFont.systemFontSize
|
||||
}
|
||||
var font : NSFont
|
||||
if let existentFontName = fontName {
|
||||
if let customFont = NSFont(name: existentFontName, size: finalSize) {
|
||||
font = customFont
|
||||
} else {
|
||||
font = NSFont.systemFont(ofSize: finalSize)
|
||||
}
|
||||
} else {
|
||||
font = NSFont.systemFont(ofSize: finalSize)
|
||||
}
|
||||
|
||||
if globalItalic {
|
||||
let italicDescriptor = font.fontDescriptor.withSymbolicTraits(.italic)
|
||||
font = NSFont(descriptor: italicDescriptor, size: 0) ?? font
|
||||
}
|
||||
if globalBold {
|
||||
let boldDescriptor = font.fontDescriptor.withSymbolicTraits(.bold)
|
||||
font = NSFont(descriptor: boldDescriptor, size: 0) ?? font
|
||||
}
|
||||
|
||||
return font
|
||||
|
||||
}
|
||||
|
||||
func color( for line : SwiftyLine ) -> NSColor {
|
||||
// What type are we and is there a font name set?
|
||||
switch line.lineStyle as! MarkdownLineStyle {
|
||||
case .h1, .previousH1:
|
||||
return h1.color
|
||||
case .h2, .previousH2:
|
||||
return h2.color
|
||||
case .h3:
|
||||
return h3.color
|
||||
case .h4:
|
||||
return h4.color
|
||||
case .h5:
|
||||
return h5.color
|
||||
case .h6:
|
||||
return h6.color
|
||||
case .body:
|
||||
return body.color
|
||||
case .codeblock:
|
||||
return code.color
|
||||
case .blockquote:
|
||||
return blockquotes.color
|
||||
case .unorderedList, .unorderedListIndentFirstOrder, .unorderedListIndentSecondOrder, .orderedList, .orderedListIndentFirstOrder, .orderedListIndentSecondOrder:
|
||||
return body.color
|
||||
case .yaml:
|
||||
return body.color
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
@@ -1,545 +0,0 @@
|
||||
//
|
||||
// SwiftyMarkdown.swift
|
||||
// SwiftyMarkdown
|
||||
//
|
||||
// Created by Simon Fairbairn on 05/03/2016.
|
||||
// Copyright © 2016 Voyage Travel Apps. All rights reserved.
|
||||
//
|
||||
|
||||
#if os(macOS)
|
||||
import AppKit
|
||||
#else
|
||||
import UIKit
|
||||
#endif
|
||||
|
||||
enum CharacterStyle : CharacterStyling {
|
||||
case none
|
||||
case bold
|
||||
case italic
|
||||
case code
|
||||
case link
|
||||
case image
|
||||
case strikethrough
|
||||
|
||||
func isEqualTo(_ other: CharacterStyling) -> Bool {
|
||||
guard let other = other as? CharacterStyle else {
|
||||
return false
|
||||
}
|
||||
return other == self
|
||||
}
|
||||
}
|
||||
|
||||
enum MarkdownLineStyle : LineStyling {
|
||||
var shouldTokeniseLine: Bool {
|
||||
switch self {
|
||||
case .codeblock:
|
||||
return false
|
||||
default:
|
||||
return true
|
||||
}
|
||||
|
||||
}
|
||||
case yaml
|
||||
case h1
|
||||
case h2
|
||||
case h3
|
||||
case h4
|
||||
case h5
|
||||
case h6
|
||||
case previousH1
|
||||
case previousH2
|
||||
case body
|
||||
case blockquote
|
||||
case codeblock
|
||||
case unorderedList
|
||||
case unorderedListIndentFirstOrder
|
||||
case unorderedListIndentSecondOrder
|
||||
case orderedList
|
||||
case orderedListIndentFirstOrder
|
||||
case orderedListIndentSecondOrder
|
||||
|
||||
|
||||
func styleIfFoundStyleAffectsPreviousLine() -> LineStyling? {
|
||||
switch self {
|
||||
case .previousH1:
|
||||
return MarkdownLineStyle.h1
|
||||
case .previousH2:
|
||||
return MarkdownLineStyle.h2
|
||||
default :
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@objc public enum FontStyle : Int {
|
||||
case normal
|
||||
case bold
|
||||
case italic
|
||||
case boldItalic
|
||||
}
|
||||
|
||||
#if os(macOS)
|
||||
@objc public protocol FontProperties {
|
||||
var fontName : String? { get set }
|
||||
var color : NSColor { get set }
|
||||
var fontSize : CGFloat { get set }
|
||||
var fontStyle : FontStyle { get set }
|
||||
}
|
||||
#else
|
||||
@objc public protocol FontProperties {
|
||||
var fontName : String? { get set }
|
||||
var color : UIColor { get set }
|
||||
var fontSize : CGFloat { get set }
|
||||
var fontStyle : FontStyle { get set }
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@objc public protocol LineProperties {
|
||||
var alignment : NSTextAlignment { get set }
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
A class defining the styles that can be applied to the parsed Markdown. The `fontName` property is optional, and if it's not set then the `fontName` property of the Body style will be applied.
|
||||
|
||||
If that is not set, then the system default will be used.
|
||||
*/
|
||||
@objc open class BasicStyles : NSObject, FontProperties {
|
||||
public var fontName : String?
|
||||
#if os(macOS)
|
||||
public var color = NSColor.black
|
||||
#else
|
||||
public var color = UIColor.black
|
||||
#endif
|
||||
public var fontSize : CGFloat = 0.0
|
||||
public var fontStyle : FontStyle = .normal
|
||||
}
|
||||
|
||||
@objc open class LineStyles : NSObject, FontProperties, LineProperties {
|
||||
public var fontName : String?
|
||||
#if os(macOS)
|
||||
public var color = NSColor.black
|
||||
#else
|
||||
public var color = UIColor.black
|
||||
#endif
|
||||
public var fontSize : CGFloat = 0.0
|
||||
public var fontStyle : FontStyle = .normal
|
||||
public var alignment: NSTextAlignment = .left
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// A class that takes a [Markdown](https://daringfireball.net/projects/markdown/) string or file and returns an NSAttributedString with the applied styles. Supports Dynamic Type.
|
||||
@objc open class SwiftyMarkdown: NSObject {
|
||||
static public var lineRules = [
|
||||
|
||||
LineRule(token: "=", type: MarkdownLineStyle.previousH1, removeFrom: .entireLine, changeAppliesTo: .previous),
|
||||
LineRule(token: "-", type: MarkdownLineStyle.previousH2, removeFrom: .entireLine, changeAppliesTo: .previous),
|
||||
LineRule(token: "\t\t- ", type: MarkdownLineStyle.unorderedListIndentSecondOrder, removeFrom: .leading, shouldTrim: false),
|
||||
LineRule(token: "\t- ", type: MarkdownLineStyle.unorderedListIndentFirstOrder, removeFrom: .leading, shouldTrim: false),
|
||||
LineRule(token: "- ",type : MarkdownLineStyle.unorderedList, removeFrom: .leading),
|
||||
LineRule(token: "\t\t* ", type: MarkdownLineStyle.unorderedListIndentSecondOrder, removeFrom: .leading, shouldTrim: false),
|
||||
LineRule(token: "\t* ", type: MarkdownLineStyle.unorderedListIndentFirstOrder, removeFrom: .leading, shouldTrim: false),
|
||||
LineRule(token: "\t\t1. ", type: MarkdownLineStyle.orderedListIndentSecondOrder, removeFrom: .leading, shouldTrim: false),
|
||||
LineRule(token: "\t1. ", type: MarkdownLineStyle.orderedListIndentFirstOrder, removeFrom: .leading, shouldTrim: false),
|
||||
LineRule(token: "1. ",type : MarkdownLineStyle.orderedList, removeFrom: .leading),
|
||||
LineRule(token: "* ",type : MarkdownLineStyle.unorderedList, removeFrom: .leading),
|
||||
LineRule(token: " ", type: MarkdownLineStyle.codeblock, removeFrom: .leading, shouldTrim: false),
|
||||
LineRule(token: "\t", type: MarkdownLineStyle.codeblock, removeFrom: .leading, shouldTrim: false),
|
||||
LineRule(token: ">",type : MarkdownLineStyle.blockquote, removeFrom: .leading),
|
||||
LineRule(token: "###### ",type : MarkdownLineStyle.h6, removeFrom: .both),
|
||||
LineRule(token: "##### ",type : MarkdownLineStyle.h5, removeFrom: .both),
|
||||
LineRule(token: "#### ",type : MarkdownLineStyle.h4, removeFrom: .both),
|
||||
LineRule(token: "### ",type : MarkdownLineStyle.h3, removeFrom: .both),
|
||||
LineRule(token: "## ",type : MarkdownLineStyle.h2, removeFrom: .both),
|
||||
LineRule(token: "# ",type : MarkdownLineStyle.h1, removeFrom: .both)
|
||||
]
|
||||
|
||||
static public var characterRules = [
|
||||
CharacterRule(openTag: "", escapeCharacter: "\\", styles: [1 : [CharacterStyle.image]], maxTags: 1),
|
||||
CharacterRule(openTag: "[", intermediateTag: "](", closingTag: ")", escapeCharacter: "\\", styles: [1 : [CharacterStyle.link]], maxTags: 1),
|
||||
CharacterRule(openTag: "`", intermediateTag: nil, closingTag: nil, escapeCharacter: "\\", styles: [1 : [CharacterStyle.code]], maxTags: 1, cancels: .allRemaining),
|
||||
CharacterRule(openTag: "~", intermediateTag: nil, closingTag: nil, escapeCharacter: "\\", styles: [2 : [CharacterStyle.strikethrough]], minTags: 2, maxTags: 2),
|
||||
CharacterRule(openTag: "*", intermediateTag: nil, closingTag: nil, escapeCharacter: "\\", styles: [1 : [CharacterStyle.italic], 2 : [CharacterStyle.bold], 3 : [CharacterStyle.bold, CharacterStyle.italic]], maxTags: 3),
|
||||
CharacterRule(openTag: "_", intermediateTag: nil, closingTag: nil, escapeCharacter: "\\", styles: [1 : [CharacterStyle.italic], 2 : [CharacterStyle.bold], 3 : [CharacterStyle.bold, CharacterStyle.italic]], maxTags: 3)
|
||||
]
|
||||
|
||||
static public var frontMatterRules = [
|
||||
FrontMatterRule(openTag: "---", closeTag: "---", keyValueSeparator: ":")
|
||||
]
|
||||
|
||||
let lineProcessor = SwiftyLineProcessor(rules: SwiftyMarkdown.lineRules, defaultRule: MarkdownLineStyle.body, frontMatterRules: SwiftyMarkdown.frontMatterRules)
|
||||
let tokeniser = SwiftyTokeniser(with: SwiftyMarkdown.characterRules)
|
||||
|
||||
/// The styles to apply to any H1 headers found in the Markdown
|
||||
open var h1 = LineStyles()
|
||||
|
||||
/// The styles to apply to any H2 headers found in the Markdown
|
||||
open var h2 = LineStyles()
|
||||
|
||||
/// The styles to apply to any H3 headers found in the Markdown
|
||||
open var h3 = LineStyles()
|
||||
|
||||
/// The styles to apply to any H4 headers found in the Markdown
|
||||
open var h4 = LineStyles()
|
||||
|
||||
/// The styles to apply to any H5 headers found in the Markdown
|
||||
open var h5 = LineStyles()
|
||||
|
||||
/// The styles to apply to any H6 headers found in the Markdown
|
||||
open var h6 = LineStyles()
|
||||
|
||||
/// The default body styles. These are the base styles and will be used for e.g. headers if no other styles override them.
|
||||
open var body = LineStyles()
|
||||
|
||||
/// The styles to apply to any blockquotes found in the Markdown
|
||||
open var blockquotes = LineStyles()
|
||||
|
||||
/// The styles to apply to any links found in the Markdown
|
||||
open var link = BasicStyles()
|
||||
|
||||
/// The styles to apply to any bold text found in the Markdown
|
||||
open var bold = BasicStyles()
|
||||
|
||||
/// The styles to apply to any italic text found in the Markdown
|
||||
open var italic = BasicStyles()
|
||||
|
||||
/// The styles to apply to any code blocks or inline code text found in the Markdown
|
||||
open var code = BasicStyles()
|
||||
|
||||
open var strikethrough = BasicStyles()
|
||||
|
||||
public var bullet : String = "・"
|
||||
|
||||
public var underlineLinks : Bool = false
|
||||
|
||||
public var frontMatterAttributes : [String : String] {
|
||||
get {
|
||||
return self.lineProcessor.frontMatterAttributes
|
||||
}
|
||||
}
|
||||
|
||||
var currentType : MarkdownLineStyle = .body
|
||||
|
||||
|
||||
var string : String
|
||||
|
||||
let tagList = "!\\_*`[]()"
|
||||
let validMarkdownTags = CharacterSet(charactersIn: "!\\_*`[]()")
|
||||
|
||||
var orderedListCount = 0
|
||||
var orderedListIndentFirstOrderCount = 0
|
||||
var orderedListIndentSecondOrderCount = 0
|
||||
|
||||
|
||||
/**
|
||||
|
||||
- parameter string: A string containing [Markdown](https://daringfireball.net/projects/markdown/) syntax to be converted to an NSAttributedString
|
||||
|
||||
- returns: An initialized SwiftyMarkdown object
|
||||
*/
|
||||
public init(string : String ) {
|
||||
self.string = string
|
||||
super.init()
|
||||
self.setup()
|
||||
}
|
||||
|
||||
/**
|
||||
A failable initializer that takes a URL and attempts to read it as a UTF-8 string
|
||||
|
||||
- parameter url: The location of the file to read
|
||||
|
||||
- returns: An initialized SwiftyMarkdown object, or nil if the string couldn't be read
|
||||
*/
|
||||
public init?(url : URL ) {
|
||||
|
||||
do {
|
||||
self.string = try NSString(contentsOf: url, encoding: String.Encoding.utf8.rawValue) as String
|
||||
|
||||
} catch {
|
||||
self.string = ""
|
||||
return nil
|
||||
}
|
||||
super.init()
|
||||
self.setup()
|
||||
}
|
||||
|
||||
func setup() {
|
||||
#if os(macOS)
|
||||
self.setFontColorForAllStyles(with: .labelColor)
|
||||
#elseif !os(watchOS)
|
||||
if #available(iOS 13.0, tvOS 13.0, *) {
|
||||
self.setFontColorForAllStyles(with: .label)
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
Set font size for all styles
|
||||
|
||||
- parameter size: size of font
|
||||
*/
|
||||
open func setFontSizeForAllStyles(with size: CGFloat) {
|
||||
h1.fontSize = size
|
||||
h2.fontSize = size
|
||||
h3.fontSize = size
|
||||
h4.fontSize = size
|
||||
h5.fontSize = size
|
||||
h6.fontSize = size
|
||||
body.fontSize = size
|
||||
italic.fontSize = size
|
||||
bold.fontSize = size
|
||||
code.fontSize = size
|
||||
link.fontSize = size
|
||||
link.fontSize = size
|
||||
strikethrough.fontSize = size
|
||||
}
|
||||
|
||||
#if os(macOS)
|
||||
open func setFontColorForAllStyles(with color: NSColor) {
|
||||
h1.color = color
|
||||
h2.color = color
|
||||
h3.color = color
|
||||
h4.color = color
|
||||
h5.color = color
|
||||
h6.color = color
|
||||
body.color = color
|
||||
italic.color = color
|
||||
bold.color = color
|
||||
code.color = color
|
||||
link.color = color
|
||||
blockquotes.color = color
|
||||
strikethrough.color = color
|
||||
}
|
||||
#else
|
||||
open func setFontColorForAllStyles(with color: UIColor) {
|
||||
h1.color = color
|
||||
h2.color = color
|
||||
h3.color = color
|
||||
h4.color = color
|
||||
h5.color = color
|
||||
h6.color = color
|
||||
body.color = color
|
||||
italic.color = color
|
||||
bold.color = color
|
||||
code.color = color
|
||||
link.color = color
|
||||
blockquotes.color = color
|
||||
strikethrough.color = color
|
||||
}
|
||||
#endif
|
||||
|
||||
open func setFontNameForAllStyles(with name: String) {
|
||||
h1.fontName = name
|
||||
h2.fontName = name
|
||||
h3.fontName = name
|
||||
h4.fontName = name
|
||||
h5.fontName = name
|
||||
h6.fontName = name
|
||||
body.fontName = name
|
||||
italic.fontName = name
|
||||
bold.fontName = name
|
||||
code.fontName = name
|
||||
link.fontName = name
|
||||
blockquotes.fontName = name
|
||||
strikethrough.fontName = name
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Generates an NSAttributedString from the string or URL passed at initialisation. Custom fonts or styles are applied to the appropriate elements when this method is called.
|
||||
|
||||
- returns: An NSAttributedString with the styles applied
|
||||
*/
|
||||
open func attributedString(from markdownString : String? = nil) -> NSAttributedString {
|
||||
if let existentMarkdownString = markdownString {
|
||||
self.string = existentMarkdownString
|
||||
}
|
||||
let attributedString = NSMutableAttributedString(string: "")
|
||||
self.lineProcessor.processEmptyStrings = MarkdownLineStyle.body
|
||||
let foundAttributes : [SwiftyLine] = lineProcessor.process(self.string)
|
||||
|
||||
for (idx, line) in foundAttributes.enumerated() {
|
||||
if idx > 0 {
|
||||
attributedString.append(NSAttributedString(string: "\n"))
|
||||
}
|
||||
let finalTokens = self.tokeniser.process(line.line)
|
||||
attributedString.append(attributedStringFor(tokens: finalTokens, in: line))
|
||||
|
||||
}
|
||||
return attributedString
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension SwiftyMarkdown {
|
||||
|
||||
func attributedStringFor( tokens : [Token], in line : SwiftyLine ) -> NSAttributedString {
|
||||
|
||||
var finalTokens = tokens
|
||||
let finalAttributedString = NSMutableAttributedString()
|
||||
var attributes : [NSAttributedString.Key : AnyObject] = [:]
|
||||
|
||||
guard let markdownLineStyle = line.lineStyle as? MarkdownLineStyle else {
|
||||
preconditionFailure("The passed line style is not a valid Markdown Line Style")
|
||||
}
|
||||
|
||||
var listItem = self.bullet
|
||||
switch markdownLineStyle {
|
||||
case .orderedList:
|
||||
self.orderedListCount += 1
|
||||
self.orderedListIndentFirstOrderCount = 0
|
||||
self.orderedListIndentSecondOrderCount = 0
|
||||
listItem = "\(self.orderedListCount)."
|
||||
case .orderedListIndentFirstOrder, .unorderedListIndentFirstOrder:
|
||||
self.orderedListIndentFirstOrderCount += 1
|
||||
self.orderedListIndentSecondOrderCount = 0
|
||||
if markdownLineStyle == .orderedListIndentFirstOrder {
|
||||
listItem = "\(self.orderedListIndentFirstOrderCount)."
|
||||
}
|
||||
|
||||
case .orderedListIndentSecondOrder, .unorderedListIndentSecondOrder:
|
||||
self.orderedListIndentSecondOrderCount += 1
|
||||
if markdownLineStyle == .orderedListIndentSecondOrder {
|
||||
listItem = "\(self.orderedListIndentSecondOrderCount)."
|
||||
}
|
||||
|
||||
default:
|
||||
self.orderedListCount = 0
|
||||
self.orderedListIndentFirstOrderCount = 0
|
||||
self.orderedListIndentSecondOrderCount = 0
|
||||
}
|
||||
|
||||
let lineProperties : LineProperties
|
||||
switch markdownLineStyle {
|
||||
case .h1:
|
||||
lineProperties = self.h1
|
||||
case .h2:
|
||||
lineProperties = self.h2
|
||||
case .h3:
|
||||
lineProperties = self.h3
|
||||
case .h4:
|
||||
lineProperties = self.h4
|
||||
case .h5:
|
||||
lineProperties = self.h5
|
||||
case .h6:
|
||||
lineProperties = self.h6
|
||||
case .codeblock:
|
||||
lineProperties = body
|
||||
let paragraphStyle = NSMutableParagraphStyle()
|
||||
paragraphStyle.firstLineHeadIndent = 20.0
|
||||
attributes[.paragraphStyle] = paragraphStyle
|
||||
case .blockquote:
|
||||
lineProperties = self.blockquotes
|
||||
let paragraphStyle = NSMutableParagraphStyle()
|
||||
paragraphStyle.firstLineHeadIndent = 20.0
|
||||
paragraphStyle.headIndent = 20.0
|
||||
attributes[.paragraphStyle] = paragraphStyle
|
||||
case .unorderedList, .unorderedListIndentFirstOrder, .unorderedListIndentSecondOrder, .orderedList, .orderedListIndentFirstOrder, .orderedListIndentSecondOrder:
|
||||
|
||||
let interval : CGFloat = 30
|
||||
var addition = interval
|
||||
var indent = ""
|
||||
switch line.lineStyle as! MarkdownLineStyle {
|
||||
case .unorderedListIndentFirstOrder, .orderedListIndentFirstOrder:
|
||||
addition = interval * 2
|
||||
indent = "\t"
|
||||
case .unorderedListIndentSecondOrder, .orderedListIndentSecondOrder:
|
||||
addition = interval * 3
|
||||
indent = "\t\t"
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
||||
lineProperties = body
|
||||
|
||||
let paragraphStyle = NSMutableParagraphStyle()
|
||||
paragraphStyle.tabStops = [NSTextTab(textAlignment: .left, location: interval, options: [:]), NSTextTab(textAlignment: .left, location: interval, options: [:])]
|
||||
paragraphStyle.defaultTabInterval = interval
|
||||
paragraphStyle.headIndent = addition
|
||||
|
||||
attributes[.paragraphStyle] = paragraphStyle
|
||||
finalTokens.insert(Token(type: .string, inputString: "\(indent)\(listItem)\t"), at: 0)
|
||||
|
||||
case .yaml:
|
||||
lineProperties = body
|
||||
case .previousH1:
|
||||
lineProperties = body
|
||||
case .previousH2:
|
||||
lineProperties = body
|
||||
case .body:
|
||||
lineProperties = body
|
||||
}
|
||||
|
||||
if lineProperties.alignment != .left {
|
||||
let paragraphStyle = NSMutableParagraphStyle()
|
||||
paragraphStyle.alignment = lineProperties.alignment
|
||||
attributes[.paragraphStyle] = paragraphStyle
|
||||
}
|
||||
|
||||
|
||||
for token in finalTokens {
|
||||
attributes[.font] = self.font(for: line)
|
||||
attributes[.link] = nil
|
||||
attributes[.strikethroughStyle] = nil
|
||||
attributes[.foregroundColor] = self.color(for: line)
|
||||
guard let styles = token.characterStyles as? [CharacterStyle] else {
|
||||
continue
|
||||
}
|
||||
if styles.contains(.italic) {
|
||||
attributes[.font] = self.font(for: line, characterOverride: .italic)
|
||||
attributes[.foregroundColor] = self.italic.color
|
||||
}
|
||||
if styles.contains(.bold) {
|
||||
attributes[.font] = self.font(for: line, characterOverride: .bold)
|
||||
attributes[.foregroundColor] = self.bold.color
|
||||
}
|
||||
|
||||
if styles.contains(.link), let url = token.metadataString {
|
||||
attributes[.foregroundColor] = self.link.color
|
||||
attributes[.font] = self.font(for: line, characterOverride: .link)
|
||||
attributes[.link] = url as AnyObject
|
||||
|
||||
if underlineLinks {
|
||||
attributes[.underlineStyle] = NSUnderlineStyle.single.rawValue as AnyObject
|
||||
}
|
||||
}
|
||||
|
||||
if styles.contains(.strikethrough) {
|
||||
attributes[.font] = self.font(for: line, characterOverride: .strikethrough)
|
||||
attributes[.strikethroughStyle] = NSUnderlineStyle.single.rawValue as AnyObject
|
||||
attributes[.foregroundColor] = self.strikethrough.color
|
||||
}
|
||||
|
||||
#if !os(watchOS)
|
||||
if styles.contains(.image), let imageName = token.metadataString {
|
||||
#if !os(macOS)
|
||||
let image1Attachment = NSTextAttachment()
|
||||
image1Attachment.image = UIImage(named: imageName)
|
||||
let str = NSAttributedString(attachment: image1Attachment)
|
||||
finalAttributedString.append(str)
|
||||
#elseif !os(watchOS)
|
||||
let image1Attachment = NSTextAttachment()
|
||||
image1Attachment.image = NSImage(named: imageName)
|
||||
let str = NSAttributedString(attachment: image1Attachment)
|
||||
finalAttributedString.append(str)
|
||||
#endif
|
||||
continue
|
||||
}
|
||||
#endif
|
||||
|
||||
if styles.contains(.code) {
|
||||
attributes[.foregroundColor] = self.code.color
|
||||
attributes[.font] = self.font(for: line, characterOverride: .code)
|
||||
} else {
|
||||
// Switch back to previous font
|
||||
}
|
||||
let str = NSAttributedString(string: token.outputString, attributes: attributes)
|
||||
finalAttributedString.append(str)
|
||||
}
|
||||
|
||||
return finalAttributedString
|
||||
}
|
||||
}
|
||||
@@ -1,821 +0,0 @@
|
||||
//
|
||||
// SwiftyTokeniser.swift
|
||||
// SwiftyMarkdown
|
||||
//
|
||||
// Created by Simon Fairbairn on 16/12/2019.
|
||||
// Copyright © 2019 Voyage Travel Apps. All rights reserved.
|
||||
//
|
||||
import Foundation
|
||||
import os.log
|
||||
|
||||
extension OSLog {
|
||||
private static var subsystem = "SwiftyTokeniser"
|
||||
static let tokenising = OSLog(subsystem: subsystem, category: "Tokenising")
|
||||
static let styling = OSLog(subsystem: subsystem, category: "Styling")
|
||||
}
|
||||
|
||||
// Tag definition
|
||||
public protocol CharacterStyling {
|
||||
func isEqualTo( _ other : CharacterStyling ) -> Bool
|
||||
}
|
||||
|
||||
public enum SpaceAllowed {
|
||||
case no
|
||||
case bothSides
|
||||
case oneSide
|
||||
case leadingSide
|
||||
case trailingSide
|
||||
}
|
||||
|
||||
public enum Cancel {
|
||||
case none
|
||||
case allRemaining
|
||||
case currentSet
|
||||
}
|
||||
|
||||
public struct CharacterRule : CustomStringConvertible {
|
||||
public let openTag : String
|
||||
public let intermediateTag : String?
|
||||
public let closingTag : String?
|
||||
public let escapeCharacter : Character?
|
||||
public let styles : [Int : [CharacterStyling]]
|
||||
public var minTags : Int = 1
|
||||
public var maxTags : Int = 1
|
||||
public var spacesAllowed : SpaceAllowed = .oneSide
|
||||
public var cancels : Cancel = .none
|
||||
|
||||
public var description: String {
|
||||
return "Character Rule with Open tag: \(self.openTag) and current styles : \(self.styles) "
|
||||
}
|
||||
|
||||
public init(openTag: String, intermediateTag: String? = nil, closingTag: String? = nil, escapeCharacter: Character? = nil, styles: [Int : [CharacterStyling]] = [:], minTags : Int = 1, maxTags : Int = 1, cancels : Cancel = .none) {
|
||||
self.openTag = openTag
|
||||
self.intermediateTag = intermediateTag
|
||||
self.closingTag = closingTag
|
||||
self.escapeCharacter = escapeCharacter
|
||||
self.styles = styles
|
||||
self.minTags = minTags
|
||||
self.maxTags = maxTags
|
||||
self.cancels = cancels
|
||||
}
|
||||
}
|
||||
|
||||
// Token definition
|
||||
public enum TokenType {
|
||||
case repeatingTag
|
||||
case openTag
|
||||
case intermediateTag
|
||||
case closeTag
|
||||
case string
|
||||
case escape
|
||||
case replacement
|
||||
}
|
||||
|
||||
|
||||
|
||||
public struct Token {
|
||||
public let id = UUID().uuidString
|
||||
public let type : TokenType
|
||||
public let inputString : String
|
||||
public fileprivate(set) var metadataString : String? = nil
|
||||
public fileprivate(set) var characterStyles : [CharacterStyling] = []
|
||||
public fileprivate(set) var count : Int = 0
|
||||
public fileprivate(set) var shouldSkip : Bool = false
|
||||
public fileprivate(set) var tokenIndex : Int = -1
|
||||
public fileprivate(set) var isProcessed : Bool = false
|
||||
public fileprivate(set) var isMetadata : Bool = false
|
||||
public var outputString : String {
|
||||
get {
|
||||
switch self.type {
|
||||
case .repeatingTag:
|
||||
if count <= 0 {
|
||||
return ""
|
||||
} else {
|
||||
let range = inputString.startIndex..<inputString.index(inputString.startIndex, offsetBy: self.count)
|
||||
return String(inputString[range])
|
||||
}
|
||||
case .openTag, .closeTag, .intermediateTag:
|
||||
return (self.isProcessed || self.isMetadata) ? "" : inputString
|
||||
case .escape, .string:
|
||||
return (self.isProcessed || self.isMetadata) ? "" : inputString
|
||||
case .replacement:
|
||||
return self.inputString
|
||||
}
|
||||
}
|
||||
}
|
||||
public init( type : TokenType, inputString : String, characterStyles : [CharacterStyling] = []) {
|
||||
self.type = type
|
||||
self.inputString = inputString
|
||||
self.characterStyles = characterStyles
|
||||
}
|
||||
|
||||
func newToken( fromSubstring string: String, isReplacement : Bool) -> Token {
|
||||
var newToken = Token(type: (isReplacement) ? .replacement : .string , inputString: string, characterStyles: self.characterStyles)
|
||||
newToken.metadataString = self.metadataString
|
||||
newToken.isMetadata = self.isMetadata
|
||||
newToken.isProcessed = self.isProcessed
|
||||
return newToken
|
||||
}
|
||||
}
|
||||
|
||||
extension Sequence where Iterator.Element == Token {
|
||||
var oslogDisplay: String {
|
||||
return "[\"\(self.map( { ($0.outputString.isEmpty) ? "\($0.type): \($0.inputString)" : $0.outputString }).joined(separator: "\", \""))\"]"
|
||||
}
|
||||
}
|
||||
|
||||
public class SwiftyTokeniser {
|
||||
let rules : [CharacterRule]
|
||||
var replacements : [String : [Token]] = [:]
|
||||
|
||||
var enableLog = (ProcessInfo.processInfo.environment["SwiftyTokeniserLogging"] != nil)
|
||||
|
||||
public init( with rules : [CharacterRule] ) {
|
||||
self.rules = rules
|
||||
}
|
||||
|
||||
|
||||
/// This goes through every CharacterRule in order and applies it to the input string, tokenising the string
|
||||
/// if there are any matches.
|
||||
///
|
||||
/// The for loop in the while loop (yeah, I know) is there to separate strings from within tags to
|
||||
/// those outside them.
|
||||
///
|
||||
/// e.g. "A string with a \[link\]\(url\) tag" would have the "link" text tokenised separately.
|
||||
///
|
||||
/// This is to prevent situations like **\[link**\](url) from returing a bold string.
|
||||
///
|
||||
/// - Parameter inputString: A string to have the CharacterRules in `self.rules` applied to
|
||||
public func process( _ inputString : String ) -> [Token] {
|
||||
guard rules.count > 0 else {
|
||||
return [Token(type: .string, inputString: inputString)]
|
||||
}
|
||||
|
||||
var currentTokens : [Token] = []
|
||||
var mutableRules = self.rules
|
||||
|
||||
|
||||
|
||||
while !mutableRules.isEmpty {
|
||||
let nextRule = mutableRules.removeFirst()
|
||||
|
||||
if enableLog {
|
||||
os_log("------------------------------", log: .tokenising, type: .info)
|
||||
os_log("RULE: %@", log: OSLog.tokenising, type:.info , nextRule.description)
|
||||
}
|
||||
|
||||
if currentTokens.isEmpty {
|
||||
// This means it's the first time through
|
||||
currentTokens = self.applyStyles(to: self.scan(inputString, with: nextRule), usingRule: nextRule)
|
||||
continue
|
||||
}
|
||||
|
||||
var outerStringTokens : [Token] = []
|
||||
var innerStringTokens : [Token] = []
|
||||
var isOuter = true
|
||||
for idx in 0..<currentTokens.count {
|
||||
let nextToken = currentTokens[idx]
|
||||
if nextToken.type == .openTag && nextToken.isProcessed {
|
||||
isOuter = false
|
||||
}
|
||||
if nextToken.type == .closeTag {
|
||||
let ref = UUID().uuidString
|
||||
outerStringTokens.append(Token(type: .replacement, inputString: ref))
|
||||
innerStringTokens.append(nextToken)
|
||||
self.replacements[ref] = self.handleReplacementTokens(innerStringTokens, with: nextRule)
|
||||
innerStringTokens.removeAll()
|
||||
isOuter = true
|
||||
continue
|
||||
}
|
||||
(isOuter) ? outerStringTokens.append(nextToken) : innerStringTokens.append(nextToken)
|
||||
}
|
||||
|
||||
currentTokens = self.handleReplacementTokens(outerStringTokens, with: nextRule)
|
||||
|
||||
var finalTokens : [Token] = []
|
||||
for token in currentTokens {
|
||||
guard token.type == .replacement else {
|
||||
finalTokens.append(token)
|
||||
continue
|
||||
}
|
||||
if let hasReplacement = self.replacements[token.inputString] {
|
||||
if enableLog {
|
||||
os_log("Found replacement for %@", log: .tokenising, type: .info, token.inputString)
|
||||
}
|
||||
|
||||
for var repToken in hasReplacement {
|
||||
guard repToken.type == .string else {
|
||||
finalTokens.append(repToken)
|
||||
continue
|
||||
}
|
||||
for style in token.characterStyles {
|
||||
if !repToken.characterStyles.contains(where: { $0.isEqualTo(style)}) {
|
||||
repToken.characterStyles.append(contentsOf: token.characterStyles)
|
||||
}
|
||||
}
|
||||
|
||||
finalTokens.append(repToken)
|
||||
}
|
||||
}
|
||||
}
|
||||
currentTokens = finalTokens
|
||||
|
||||
|
||||
// Each string could have additional tokens within it, so they have to be scanned as well with the current rule.
|
||||
// The one string token might then be exploded into multiple more tokens
|
||||
}
|
||||
|
||||
if enableLog {
|
||||
os_log("=====RULE PROCESSING COMPLETE=====", log: .tokenising, type: .info)
|
||||
os_log("==================================", log: .tokenising, type: .info)
|
||||
}
|
||||
|
||||
return currentTokens
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// In order to reinsert the original replacements into the new string token, the replacements
|
||||
/// need to be searched for in the incoming string one by one.
|
||||
///
|
||||
/// Using the `newToken(fromSubstring:isReplacement:)` function ensures that any metadata and character styles
|
||||
/// are passed over into the newly created tokens.
|
||||
///
|
||||
/// E.g. A string token that has an `outputString` of "This string AAAAA-BBBBB-CCCCC replacements", with
|
||||
/// a characterStyle of `bold` for the entire string, needs to be separated into the following tokens:
|
||||
///
|
||||
/// - `string`: "This string "
|
||||
/// - `replacement`: "AAAAA-BBBBB-CCCCC"
|
||||
/// - `string`: " replacements"
|
||||
///
|
||||
/// Each of these need to have a character style of `bold`.
|
||||
///
|
||||
/// - Parameters:
|
||||
/// - replacements: An array of `replacement` tokens
|
||||
/// - token: The new `string` token that may contain replacement IDs contained in the `replacements` array
|
||||
func reinsertReplacements(_ replacements : [Token], from stringToken : Token ) -> [Token] {
|
||||
guard !stringToken.outputString.isEmpty && !replacements.isEmpty else {
|
||||
return [stringToken]
|
||||
}
|
||||
var outputTokens : [Token] = []
|
||||
let scanner = Scanner(string: stringToken.outputString)
|
||||
scanner.charactersToBeSkipped = nil
|
||||
|
||||
// Remove any replacements that don't appear in the incoming string
|
||||
var repTokens = replacements.filter({ stringToken.outputString.contains($0.inputString) })
|
||||
|
||||
var testString = "\n"
|
||||
while !scanner.isAtEnd {
|
||||
var outputString : String = ""
|
||||
if repTokens.count > 0 {
|
||||
testString = repTokens.removeFirst().inputString
|
||||
}
|
||||
|
||||
if #available(iOS 13.0, OSX 10.15, watchOS 6.0, tvOS 13.0, *) {
|
||||
if let nextString = scanner.scanUpToString(testString) {
|
||||
outputString = nextString
|
||||
outputTokens.append(stringToken.newToken(fromSubstring: outputString, isReplacement: false))
|
||||
if let outputToken = scanner.scanString(testString) {
|
||||
outputTokens.append(stringToken.newToken(fromSubstring: outputToken, isReplacement: true))
|
||||
}
|
||||
} else if let outputToken = scanner.scanString(testString) {
|
||||
outputTokens.append(stringToken.newToken(fromSubstring: outputToken, isReplacement: true))
|
||||
}
|
||||
} else {
|
||||
var oldString : NSString? = nil
|
||||
var tokenString : NSString? = nil
|
||||
scanner.scanUpTo(testString, into: &oldString)
|
||||
if let nextString = oldString {
|
||||
outputString = nextString as String
|
||||
outputTokens.append(stringToken.newToken(fromSubstring: outputString, isReplacement: false))
|
||||
scanner.scanString(testString, into: &tokenString)
|
||||
if let outputToken = tokenString as String? {
|
||||
outputTokens.append(stringToken.newToken(fromSubstring: outputToken, isReplacement: true))
|
||||
}
|
||||
} else {
|
||||
scanner.scanString(testString, into: &tokenString)
|
||||
if let outputToken = tokenString as String? {
|
||||
outputTokens.append(stringToken.newToken(fromSubstring: outputToken, isReplacement: true))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return outputTokens
|
||||
}
|
||||
|
||||
|
||||
/// This function is necessary because a previously tokenised string might have
|
||||
///
|
||||
/// Consider a previously tokenised string, where AAAAA-BBBBB-CCCCC represents a replaced \[link\](url) instance.
|
||||
///
|
||||
/// The incoming tokens will look like this:
|
||||
///
|
||||
/// - `string`: "A \*\*Bold"
|
||||
/// - `replacement` : "AAAAA-BBBBB-CCCCC"
|
||||
/// - `string`: " with a trailing string**"
|
||||
///
|
||||
/// However, because the scanner can only tokenise individual strings, passing in the string values
|
||||
/// of these tokens individually and applying the styles will not correctly detect the starting and
|
||||
/// ending `repeatingTag` instances. (e.g. the scanner will see "A \*\*Bold", and then "AAAAA-BBBBB-CCCCC",
|
||||
/// and finally " with a trailing string\*\*")
|
||||
///
|
||||
/// The strings need to be combined, so that they form a single string:
|
||||
/// A \*\*Bold AAAAA-BBBBB-CCCCC with a trailing string\*\*.
|
||||
/// This string is then parsed and tokenised so that it looks like this:
|
||||
///
|
||||
/// - `string`: "A "
|
||||
/// - `repeatingTag`: "\*\*"
|
||||
/// - `string`: "Bold AAAAA-BBBBB-CCCCC with a trailing string"
|
||||
/// - `repeatingTag`: "\*\*"
|
||||
///
|
||||
/// Finally, the replacements from the original incoming token array are searched for and pulled out
|
||||
/// of this new string, so the final result looks like this:
|
||||
///
|
||||
/// - `string`: "A "
|
||||
/// - `repeatingTag`: "\*\*"
|
||||
/// - `string`: "Bold "
|
||||
/// - `replacement`: "AAAAA-BBBBB-CCCCC"
|
||||
/// - `string`: " with a trailing string"
|
||||
/// - `repeatingTag`: "\*\*"
|
||||
///
|
||||
/// - Parameters:
|
||||
/// - tokens: The tokens to be combined, scanned, re-tokenised, and merged
|
||||
/// - rule: The character rule currently being applied
|
||||
func scanReplacementTokens( _ tokens : [Token], with rule : CharacterRule ) -> [Token] {
|
||||
guard tokens.count > 0 else {
|
||||
return []
|
||||
}
|
||||
|
||||
let combinedString = tokens.map({ $0.outputString }).joined()
|
||||
|
||||
let nextTokens = self.scan(combinedString, with: rule)
|
||||
var replacedTokens = self.applyStyles(to: nextTokens, usingRule: rule)
|
||||
|
||||
/// It's necessary here to check to see if the first token (which will always represent the styles
|
||||
/// to be applied from previous scans) has any existing metadata or character styles and apply them
|
||||
/// to *all* the string and replacement tokens found by the new scan.
|
||||
for idx in 0..<replacedTokens.count {
|
||||
guard replacedTokens[idx].type == .string || replacedTokens[idx].type == .replacement else {
|
||||
continue
|
||||
}
|
||||
if tokens.first!.metadataString != nil && replacedTokens[idx].metadataString == nil {
|
||||
replacedTokens[idx].metadataString = tokens.first!.metadataString
|
||||
}
|
||||
replacedTokens[idx].characterStyles.append(contentsOf: tokens.first!.characterStyles)
|
||||
}
|
||||
|
||||
// Swap the original replacement tokens back in
|
||||
let replacements = tokens.filter({ $0.type == .replacement })
|
||||
var outputTokens : [Token] = []
|
||||
for token in replacedTokens {
|
||||
guard token.type == .string else {
|
||||
outputTokens.append(token)
|
||||
continue
|
||||
}
|
||||
outputTokens.append(contentsOf: self.reinsertReplacements(replacements, from: token))
|
||||
}
|
||||
|
||||
return outputTokens
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// This function ensures that only concurrent `string` and `replacement` tokens are processed together.
|
||||
///
|
||||
/// i.e. If there is an existing `repeatingTag` token between two strings, then those strings will be
|
||||
/// processed individually. This prevents incorrect parsing of strings like "\*\*\_Should only be bold\*\*\_"
|
||||
///
|
||||
/// - Parameters:
|
||||
/// - incomingTokens: A group of tokens whose string tokens and replacement tokens should be combined and re-tokenised
|
||||
/// - rule: The current rule being processed
|
||||
func handleReplacementTokens( _ incomingTokens : [Token], with rule : CharacterRule) -> [Token] {
|
||||
|
||||
// Only combine string and replacements that are next to each other.
|
||||
var newTokenSet : [Token] = []
|
||||
var currentTokenSet : [Token] = []
|
||||
for i in 0..<incomingTokens.count {
|
||||
guard incomingTokens[i].type == .string || incomingTokens[i].type == .replacement else {
|
||||
newTokenSet.append(contentsOf: self.scanReplacementTokens(currentTokenSet, with: rule))
|
||||
newTokenSet.append(incomingTokens[i])
|
||||
currentTokenSet.removeAll()
|
||||
continue
|
||||
}
|
||||
guard !incomingTokens[i].isProcessed && !incomingTokens[i].isMetadata && !incomingTokens[i].shouldSkip else {
|
||||
newTokenSet.append(contentsOf: self.scanReplacementTokens(currentTokenSet, with: rule))
|
||||
newTokenSet.append(incomingTokens[i])
|
||||
currentTokenSet.removeAll()
|
||||
continue
|
||||
}
|
||||
currentTokenSet.append(incomingTokens[i])
|
||||
}
|
||||
newTokenSet.append(contentsOf: self.scanReplacementTokens(currentTokenSet, with: rule))
|
||||
|
||||
return newTokenSet
|
||||
}
|
||||
|
||||
|
||||
func handleClosingTagFromOpenTag(withIndex index : Int, in tokens: inout [Token], following rule : CharacterRule ) {
|
||||
|
||||
guard rule.closingTag != nil else {
|
||||
return
|
||||
}
|
||||
guard let closeTokenIdx = tokens.firstIndex(where: { $0.type == .closeTag && !$0.isProcessed }) else {
|
||||
return
|
||||
}
|
||||
|
||||
var metadataIndex = index
|
||||
// If there's an intermediate tag, get the index of that
|
||||
if rule.intermediateTag != nil {
|
||||
guard let nextTokenIdx = tokens.firstIndex(where: { $0.type == .intermediateTag && !$0.isProcessed }) else {
|
||||
return
|
||||
}
|
||||
metadataIndex = nextTokenIdx
|
||||
let styles : [CharacterStyling] = rule.styles[1] ?? []
|
||||
for i in index..<nextTokenIdx {
|
||||
for style in styles {
|
||||
if !tokens[i].characterStyles.contains(where: { $0.isEqualTo(style )}) {
|
||||
tokens[i].characterStyles.append(style)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var metadataString : String = ""
|
||||
for i in metadataIndex..<closeTokenIdx {
|
||||
if tokens[i].type == .string {
|
||||
metadataString.append(tokens[i].outputString)
|
||||
tokens[i].isMetadata = true
|
||||
}
|
||||
}
|
||||
|
||||
for i in index..<metadataIndex {
|
||||
if tokens[i].type == .string {
|
||||
tokens[i].metadataString = metadataString
|
||||
}
|
||||
}
|
||||
|
||||
tokens[closeTokenIdx].isProcessed = true
|
||||
tokens[metadataIndex].isProcessed = true
|
||||
tokens[index].isProcessed = true
|
||||
}
|
||||
|
||||
|
||||
/// This is here to manage how opening tags are matched with closing tags when they're all the same
|
||||
/// character.
|
||||
///
|
||||
/// Of course, because Markdown is about as loose as a spec can be while still being considered any
|
||||
/// kind of spec, the number of times this character repeats causes different effects. Then there
|
||||
/// is the ill-defined way it should work if the number of opening and closing tags are different.
|
||||
///
|
||||
/// - Parameters:
|
||||
/// - index: The index of the current token in the loop
|
||||
/// - tokens: An inout variable of the loop tokens of interest
|
||||
/// - rule: The character rule being applied
|
||||
func handleClosingTagFromRepeatingTag(withIndex index : Int, in tokens: inout [Token], following rule : CharacterRule) {
|
||||
let theToken = tokens[index]
|
||||
|
||||
if enableLog {
|
||||
os_log("Found repeating tag with tag count: %i, tags: %@, current rule open tag: %@", log: .tokenising, type: .info, theToken.count, theToken.inputString, rule.openTag )
|
||||
}
|
||||
|
||||
guard theToken.count > 0 else {
|
||||
return
|
||||
}
|
||||
|
||||
let startIdx = index
|
||||
var endIdx : Int? = nil
|
||||
|
||||
let maxCount = (theToken.count > rule.maxTags) ? rule.maxTags : theToken.count
|
||||
// Try to find exact match first
|
||||
if let nextTokenIdx = tokens.firstIndex(where: { $0.inputString.first == theToken.inputString.first && $0.type == theToken.type && $0.count == theToken.count && $0.id != theToken.id && !$0.isProcessed }) {
|
||||
endIdx = nextTokenIdx
|
||||
}
|
||||
|
||||
if endIdx == nil, let nextTokenIdx = tokens.firstIndex(where: { $0.inputString.first == theToken.inputString.first && $0.type == theToken.type && $0.count >= 1 && $0.id != theToken.id && !$0.isProcessed }) {
|
||||
endIdx = nextTokenIdx
|
||||
}
|
||||
guard let existentEnd = endIdx else {
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
let styles : [CharacterStyling] = rule.styles[maxCount] ?? []
|
||||
for i in startIdx..<existentEnd {
|
||||
for style in styles {
|
||||
if !tokens[i].characterStyles.contains(where: { $0.isEqualTo(style )}) {
|
||||
tokens[i].characterStyles.append(style)
|
||||
}
|
||||
}
|
||||
if rule.cancels == .allRemaining {
|
||||
tokens[i].shouldSkip = true
|
||||
}
|
||||
}
|
||||
|
||||
let maxEnd = (tokens[existentEnd].count > rule.maxTags) ? rule.maxTags : tokens[existentEnd].count
|
||||
tokens[index].count = theToken.count - maxEnd
|
||||
tokens[existentEnd].count = tokens[existentEnd].count - maxEnd
|
||||
if maxEnd < rule.maxTags {
|
||||
self.handleClosingTagFromRepeatingTag(withIndex: index, in: &tokens, following: rule)
|
||||
} else {
|
||||
tokens[existentEnd].isProcessed = true
|
||||
tokens[index].isProcessed = true
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
func applyStyles( to tokens : [Token], usingRule rule : CharacterRule ) -> [Token] {
|
||||
var mutableTokens : [Token] = tokens
|
||||
|
||||
if enableLog {
|
||||
os_log("Applying styles to tokens: %@", log: .tokenising, type: .info, tokens.oslogDisplay )
|
||||
}
|
||||
for idx in 0..<mutableTokens.count {
|
||||
let token = mutableTokens[idx]
|
||||
switch token.type {
|
||||
case .escape:
|
||||
if enableLog {
|
||||
os_log("Found escape: %@", log: .tokenising, type: .info, token.inputString )
|
||||
}
|
||||
case .repeatingTag:
|
||||
self.handleClosingTagFromRepeatingTag(withIndex: idx, in: &mutableTokens, following: rule)
|
||||
case .openTag:
|
||||
let theToken = mutableTokens[idx]
|
||||
if enableLog {
|
||||
os_log("Found repeating tag with tags: %@, current rule open tag: %@", log: .tokenising, type: .info, theToken.inputString, rule.openTag )
|
||||
}
|
||||
|
||||
guard rule.closingTag != nil else {
|
||||
|
||||
// If there's an intermediate tag, get the index of that
|
||||
|
||||
// Get the index of the closing tag
|
||||
|
||||
continue
|
||||
}
|
||||
self.handleClosingTagFromOpenTag(withIndex: idx, in: &mutableTokens, following: rule)
|
||||
|
||||
|
||||
case .intermediateTag:
|
||||
let theToken = mutableTokens[idx]
|
||||
if enableLog {
|
||||
os_log("Found intermediate tag with tag count: %i, tags: %@", log: .tokenising, type: .info, theToken.count, theToken.inputString )
|
||||
}
|
||||
|
||||
case .closeTag:
|
||||
let theToken = mutableTokens[idx]
|
||||
if enableLog {
|
||||
os_log("Found close tag with tag count: %i, tags: %@", log: .tokenising, type: .info, theToken.count, theToken.inputString )
|
||||
}
|
||||
|
||||
case .string:
|
||||
let theToken = mutableTokens[idx]
|
||||
if enableLog {
|
||||
if theToken.isMetadata {
|
||||
os_log("Found Metadata: %@", log: .tokenising, type: .info, theToken.inputString )
|
||||
} else {
|
||||
os_log("Found String: %@", log: .tokenising, type: .info, theToken.inputString )
|
||||
}
|
||||
if let hasMetadata = theToken.metadataString {
|
||||
os_log("...with metadata: %@", log: .tokenising, type: .info, hasMetadata )
|
||||
}
|
||||
}
|
||||
|
||||
case .replacement:
|
||||
if enableLog {
|
||||
os_log("Found replacement with ID: %@", log: .tokenising, type: .info, mutableTokens[idx].inputString )
|
||||
}
|
||||
}
|
||||
}
|
||||
return mutableTokens
|
||||
}
|
||||
|
||||
|
||||
func scan( _ string : String, with rule : CharacterRule) -> [Token] {
|
||||
let scanner = Scanner(string: string)
|
||||
scanner.charactersToBeSkipped = nil
|
||||
var tokens : [Token] = []
|
||||
var set = CharacterSet(charactersIn: "\(rule.openTag)\(rule.intermediateTag ?? "")\(rule.closingTag ?? "")")
|
||||
if let existentEscape = rule.escapeCharacter {
|
||||
set.insert(charactersIn: String(existentEscape))
|
||||
}
|
||||
|
||||
var openTagFound = false
|
||||
var openingString = ""
|
||||
while !scanner.isAtEnd {
|
||||
|
||||
if #available(iOS 13.0, OSX 10.15, watchOS 6.0, tvOS 13.0, *) {
|
||||
if let start = scanner.scanUpToCharacters(from: set) {
|
||||
openingString.append(start)
|
||||
}
|
||||
} else {
|
||||
var string : NSString?
|
||||
scanner.scanUpToCharacters(from: set, into: &string)
|
||||
if let existentString = string as String? {
|
||||
openingString.append(existentString)
|
||||
}
|
||||
// Fallback on earlier versions
|
||||
}
|
||||
|
||||
let lastChar : String?
|
||||
if #available(iOS 13.0, OSX 10.15, watchOS 6.0, tvOS 13.0, *) {
|
||||
lastChar = ( scanner.currentIndex > string.startIndex ) ? String(string[string.index(before: scanner.currentIndex)..<scanner.currentIndex]) : nil
|
||||
} else {
|
||||
if let scanLocation = string.index(string.startIndex, offsetBy: scanner.scanLocation, limitedBy: string.endIndex) {
|
||||
lastChar = ( scanLocation > string.startIndex ) ? String(string[string.index(before: scanLocation)..<scanLocation]) : nil
|
||||
} else {
|
||||
lastChar = nil
|
||||
}
|
||||
|
||||
}
|
||||
let maybeFoundChars : String?
|
||||
if #available(iOS 13.0, OSX 10.15, watchOS 6.0, tvOS 13.0, *) {
|
||||
maybeFoundChars = scanner.scanCharacters(from: set )
|
||||
} else {
|
||||
var string : NSString?
|
||||
scanner.scanCharacters(from: set, into: &string)
|
||||
maybeFoundChars = string as String?
|
||||
}
|
||||
|
||||
let nextChar : String?
|
||||
if #available(iOS 13.0, OSX 10.15, watchOS 6.0,tvOS 13.0, *) {
|
||||
nextChar = (scanner.currentIndex != string.endIndex) ? String(string[scanner.currentIndex]) : nil
|
||||
} else {
|
||||
if let scanLocation = string.index(string.startIndex, offsetBy: scanner.scanLocation, limitedBy: string.endIndex) {
|
||||
nextChar = (scanLocation != string.endIndex) ? String(string[scanLocation]) : nil
|
||||
} else {
|
||||
nextChar = nil
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
guard let foundChars = maybeFoundChars else {
|
||||
tokens.append(Token(type: .string, inputString: "\(openingString)"))
|
||||
openingString = ""
|
||||
continue
|
||||
}
|
||||
|
||||
if foundChars == rule.openTag && foundChars.count < rule.minTags {
|
||||
openingString.append(foundChars)
|
||||
continue
|
||||
}
|
||||
|
||||
if !validateSpacing(nextCharacter: nextChar, previousCharacter: lastChar, with: rule) {
|
||||
let escapeString = String("\(rule.escapeCharacter ?? Character(""))")
|
||||
var escaped = foundChars.replacingOccurrences(of: "\(escapeString)\(rule.openTag)", with: rule.openTag)
|
||||
if let hasIntermediateTag = rule.intermediateTag {
|
||||
escaped = foundChars.replacingOccurrences(of: "\(escapeString)\(hasIntermediateTag)", with: hasIntermediateTag)
|
||||
}
|
||||
if let existentClosingTag = rule.closingTag {
|
||||
escaped = foundChars.replacingOccurrences(of: "\(escapeString)\(existentClosingTag)", with: existentClosingTag)
|
||||
}
|
||||
|
||||
openingString.append(escaped)
|
||||
continue
|
||||
}
|
||||
|
||||
var cumulativeString = ""
|
||||
var openString = ""
|
||||
var intermediateString = ""
|
||||
var closedString = ""
|
||||
var maybeEscapeNext = false
|
||||
|
||||
|
||||
func addToken( for type : TokenType ) {
|
||||
var inputString : String
|
||||
switch type {
|
||||
case .openTag:
|
||||
inputString = openString
|
||||
case .intermediateTag:
|
||||
inputString = intermediateString
|
||||
case .closeTag:
|
||||
inputString = closedString
|
||||
default:
|
||||
inputString = ""
|
||||
}
|
||||
guard !inputString.isEmpty else {
|
||||
return
|
||||
}
|
||||
guard inputString.count >= rule.minTags else {
|
||||
return
|
||||
}
|
||||
|
||||
if !openingString.isEmpty {
|
||||
tokens.append(Token(type: .string, inputString: "\(openingString)"))
|
||||
openingString = ""
|
||||
}
|
||||
let actualType : TokenType = ( rule.intermediateTag == nil && rule.closingTag == nil ) ? .repeatingTag : type
|
||||
|
||||
var token = Token(type: actualType, inputString: inputString)
|
||||
if rule.closingTag == nil {
|
||||
token.count = inputString.count
|
||||
}
|
||||
|
||||
tokens.append(token)
|
||||
|
||||
switch type {
|
||||
case .openTag:
|
||||
openString = ""
|
||||
case .intermediateTag:
|
||||
intermediateString = ""
|
||||
case .closeTag:
|
||||
closedString = ""
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// Here I am going through and adding the characters in the found set to a cumulative string.
|
||||
// If there is an escape character, then the loop stops and any open tags are tokenised.
|
||||
for char in foundChars {
|
||||
cumulativeString.append(char)
|
||||
if maybeEscapeNext {
|
||||
|
||||
var escaped = cumulativeString
|
||||
if String(char) == rule.openTag || String(char) == rule.intermediateTag || String(char) == rule.closingTag {
|
||||
escaped = String(cumulativeString.replacingOccurrences(of: String(rule.escapeCharacter ?? Character("")), with: ""))
|
||||
}
|
||||
|
||||
openingString.append(escaped)
|
||||
cumulativeString = ""
|
||||
maybeEscapeNext = false
|
||||
}
|
||||
if let existentEscape = rule.escapeCharacter {
|
||||
if cumulativeString == String(existentEscape) {
|
||||
maybeEscapeNext = true
|
||||
addToken(for: .openTag)
|
||||
addToken(for: .intermediateTag)
|
||||
addToken(for: .closeTag)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if cumulativeString == rule.openTag {
|
||||
openString.append(char)
|
||||
cumulativeString = ""
|
||||
openTagFound = true
|
||||
} else if cumulativeString == rule.intermediateTag, openTagFound {
|
||||
intermediateString.append(cumulativeString)
|
||||
cumulativeString = ""
|
||||
} else if cumulativeString == rule.closingTag, openTagFound {
|
||||
closedString.append(char)
|
||||
cumulativeString = ""
|
||||
openTagFound = false
|
||||
}
|
||||
}
|
||||
// If we're here, it means that an escape character was found but without a corresponding
|
||||
// tag, which means it might belong to a different rule.
|
||||
// It should be added to the next group of regular characters
|
||||
|
||||
addToken(for: .openTag)
|
||||
addToken(for: .intermediateTag)
|
||||
addToken(for: .closeTag)
|
||||
openingString.append( cumulativeString )
|
||||
}
|
||||
|
||||
if !openingString.isEmpty {
|
||||
tokens.append(Token(type: .string, inputString: "\(openingString)"))
|
||||
}
|
||||
|
||||
return tokens
|
||||
}
|
||||
|
||||
func validateSpacing( nextCharacter : String?, previousCharacter : String?, with rule : CharacterRule ) -> Bool {
|
||||
switch rule.spacesAllowed {
|
||||
case .leadingSide:
|
||||
guard nextCharacter != nil else {
|
||||
return true
|
||||
}
|
||||
if nextCharacter == " " {
|
||||
return false
|
||||
}
|
||||
case .trailingSide:
|
||||
guard previousCharacter != nil else {
|
||||
return true
|
||||
}
|
||||
if previousCharacter == " " {
|
||||
return false
|
||||
}
|
||||
case .no:
|
||||
switch (previousCharacter, nextCharacter) {
|
||||
case (nil, nil), ( " ", _ ), ( _, " " ):
|
||||
return false
|
||||
default:
|
||||
return true
|
||||
}
|
||||
|
||||
case .oneSide:
|
||||
switch (previousCharacter, nextCharacter) {
|
||||
case (nil, " " ), (" ", nil), (" ", " " ):
|
||||
return false
|
||||
default:
|
||||
return true
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
}
|
||||
@@ -459,29 +459,4 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
|
||||
## SwiftyMarkdown
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 Simon Fairbairn
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
Generated by CocoaPods - https://cocoapods.org
|
||||
@@ -495,37 +495,6 @@ SOFTWARE.
|
||||
<key>Type</key>
|
||||
<string>PSGroupSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>FooterText</key>
|
||||
<string>The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 Simon Fairbairn
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
</string>
|
||||
<key>License</key>
|
||||
<string>MIT</string>
|
||||
<key>Title</key>
|
||||
<string>SwiftyMarkdown</string>
|
||||
<key>Type</key>
|
||||
<string>PSGroupSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>FooterText</key>
|
||||
<string>Generated by CocoaPods - https://cocoapods.org</string>
|
||||
|
||||
@@ -180,14 +180,12 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/ShortcutRecorder/ShortcutRecorder.framework"
|
||||
install_framework "${PODS_ROOT}/Sparkle/Sparkle.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/SwiftyBeaver/SwiftyBeaver.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/SwiftyMarkdown/SwiftyMarkdown.framework"
|
||||
fi
|
||||
if [[ "$CONFIGURATION" == "Release" ]]; then
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/LetsMove/LetsMove.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/ShortcutRecorder/ShortcutRecorder.framework"
|
||||
install_framework "${PODS_ROOT}/Sparkle/Sparkle.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/SwiftyBeaver/SwiftyBeaver.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/SwiftyMarkdown/SwiftyMarkdown.framework"
|
||||
fi
|
||||
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
|
||||
wait
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LetsMove" "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyMarkdown" "${PODS_ROOT}/AppCenter/AppCenter-SDK-Apple" "${PODS_ROOT}/Sparkle" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppCenter/Core" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppCenter/Crashes"
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LetsMove" "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_ROOT}/AppCenter/AppCenter-SDK-Apple" "${PODS_ROOT}/Sparkle" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppCenter/Core" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppCenter/Crashes"
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LetsMove/LetsMove.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder/ShortcutRecorder.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyMarkdown/SwiftyMarkdown.framework/Headers"
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LetsMove/LetsMove.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder/ShortcutRecorder.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers"
|
||||
LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/../Frameworks' '@loader_path/Frameworks' "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" @loader_path/../Frameworks
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
|
||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "AppCenter" -framework "AppCenterCrashes" -framework "AppKit" -framework "Carbon" -framework "Cocoa" -framework "Foundation" -framework "LetsMove" -framework "ShortcutRecorder" -framework "Sparkle" -framework "SwiftyBeaver" -framework "SwiftyMarkdown" -framework "SystemConfiguration"
|
||||
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AppCenter" "-F${PODS_CONFIGURATION_BUILD_DIR}/LetsMove" "-F${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder" "-F${PODS_CONFIGURATION_BUILD_DIR}/Sparkle" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyMarkdown"
|
||||
OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/LetsMove/LetsMove.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder/ShortcutRecorder.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" -iframework "${PODS_ROOT}/AppCenter/AppCenter-SDK-Apple" -iframework "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppCenter/Core" -iframework "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppCenter/Crashes" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/LetsMove" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder" -iframework "${PODS_ROOT}/Sparkle" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver"
|
||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "AppCenter" -framework "AppCenterCrashes" -framework "AppKit" -framework "Carbon" -framework "Cocoa" -framework "Foundation" -framework "LetsMove" -framework "ShortcutRecorder" -framework "Sparkle" -framework "SwiftyBeaver" -framework "SystemConfiguration"
|
||||
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AppCenter" "-F${PODS_CONFIGURATION_BUILD_DIR}/LetsMove" "-F${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder" "-F${PODS_CONFIGURATION_BUILD_DIR}/Sparkle" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver"
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LetsMove" "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyMarkdown" "${PODS_ROOT}/AppCenter/AppCenter-SDK-Apple" "${PODS_ROOT}/Sparkle" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppCenter/Core" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppCenter/Crashes"
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LetsMove" "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_ROOT}/AppCenter/AppCenter-SDK-Apple" "${PODS_ROOT}/Sparkle" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppCenter/Core" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppCenter/Crashes"
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LetsMove/LetsMove.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder/ShortcutRecorder.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyMarkdown/SwiftyMarkdown.framework/Headers"
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LetsMove/LetsMove.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder/ShortcutRecorder.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers"
|
||||
LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/../Frameworks' '@loader_path/Frameworks' "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" @loader_path/../Frameworks
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
|
||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "AppCenter" -framework "AppCenterCrashes" -framework "AppKit" -framework "Carbon" -framework "Cocoa" -framework "Foundation" -framework "LetsMove" -framework "ShortcutRecorder" -framework "Sparkle" -framework "SwiftyBeaver" -framework "SwiftyMarkdown" -framework "SystemConfiguration"
|
||||
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AppCenter" "-F${PODS_CONFIGURATION_BUILD_DIR}/LetsMove" "-F${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder" "-F${PODS_CONFIGURATION_BUILD_DIR}/Sparkle" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyMarkdown"
|
||||
OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/LetsMove/LetsMove.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder/ShortcutRecorder.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" -iframework "${PODS_ROOT}/AppCenter/AppCenter-SDK-Apple" -iframework "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppCenter/Core" -iframework "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppCenter/Crashes" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/LetsMove" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder" -iframework "${PODS_ROOT}/Sparkle" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver"
|
||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "AppCenter" -framework "AppCenterCrashes" -framework "AppKit" -framework "Carbon" -framework "Cocoa" -framework "Foundation" -framework "LetsMove" -framework "ShortcutRecorder" -framework "Sparkle" -framework "SwiftyBeaver" -framework "SystemConfiguration"
|
||||
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AppCenter" "-F${PODS_CONFIGURATION_BUILD_DIR}/LetsMove" "-F${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder" "-F${PODS_CONFIGURATION_BUILD_DIR}/Sparkle" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver"
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
|
||||
@@ -3,6 +3,7 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutR
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder/ShortcutRecorder.framework/Headers"
|
||||
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/../Frameworks'
|
||||
OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder/ShortcutRecorder.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder"
|
||||
OTHER_LDFLAGS = $(inherited) -framework "Carbon" -framework "Cocoa" -framework "ShortcutRecorder"
|
||||
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder"
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
|
||||
@@ -3,6 +3,7 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutR
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder/ShortcutRecorder.framework/Headers"
|
||||
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/../Frameworks'
|
||||
OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder/ShortcutRecorder.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder"
|
||||
OTHER_LDFLAGS = $(inherited) -framework "Carbon" -framework "Cocoa" -framework "ShortcutRecorder"
|
||||
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder"
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
|
||||
@@ -3,7 +3,7 @@ CODE_SIGN_IDENTITY =
|
||||
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
|
||||
|
||||
@@ -3,7 +3,7 @@ CODE_SIGN_IDENTITY =
|
||||
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>${PODS_DEVELOPMENT_LANGUAGE}</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${EXECUTABLE_NAME}</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>${PRODUCT_NAME}</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>${CURRENT_PROJECT_VERSION}</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,5 +0,0 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
@interface PodsDummy_SwiftyMarkdown : NSObject
|
||||
@end
|
||||
@implementation PodsDummy_SwiftyMarkdown
|
||||
@end
|
||||
@@ -1,12 +0,0 @@
|
||||
#ifdef __OBJC__
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#else
|
||||
#ifndef FOUNDATION_EXPORT
|
||||
#if defined(__cplusplus)
|
||||
#define FOUNDATION_EXPORT extern "C"
|
||||
#else
|
||||
#define FOUNDATION_EXPORT extern
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
#ifdef __OBJC__
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#else
|
||||
#ifndef FOUNDATION_EXPORT
|
||||
#if defined(__cplusplus)
|
||||
#define FOUNDATION_EXPORT extern "C"
|
||||
#else
|
||||
#define FOUNDATION_EXPORT extern
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
FOUNDATION_EXPORT double SwiftyMarkdownVersionNumber;
|
||||
FOUNDATION_EXPORT const unsigned char SwiftyMarkdownVersionString[];
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
CODE_SIGN_IDENTITY =
|
||||
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyMarkdown
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
|
||||
PODS_ROOT = ${SRCROOT}
|
||||
PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftyMarkdown
|
||||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||
SKIP_INSTALL = YES
|
||||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
||||
@@ -1,6 +0,0 @@
|
||||
framework module SwiftyMarkdown {
|
||||
umbrella header "SwiftyMarkdown-umbrella.h"
|
||||
|
||||
export *
|
||||
module * { export * }
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
CODE_SIGN_IDENTITY =
|
||||
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyMarkdown
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
|
||||
PODS_ROOT = ${SRCROOT}
|
||||
PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftyMarkdown
|
||||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||
SKIP_INSTALL = YES
|
||||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
||||
@@ -1,7 +1,19 @@
|
||||
<div align = center>
|
||||
|
||||
# AltTab
|
||||
|
||||
[](docs/public/demo/frontpage.jpg)
|
||||
|
||||
**AltTab** brings the power of Windows alt-tab to macOS
|
||||
|
||||
[Find out more on the official website](https://alt-tab-macos.netlify.app/)
|
||||
[Official website](https://alt-tab.app/)<br/><sub>15K stars</sub> | [Download](https://github.com/lwouis/alt-tab-macos/releases/download/v10.9.0/AltTab-10.9.0.zip)<br/><sub>7.2M downloads</sub>
|
||||
-|-
|
||||
|
||||
<div align="right">
|
||||
<p>Project supported by</p>
|
||||
<a href="https://jb.gg/OpenSource">
|
||||
<img src="docs/public/demo/jetbrains.svg" alt="Jetbrains" width="149" height="32">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
xcodebuild \
|
||||
-workspace alt-tab-macos.xcworkspace \
|
||||
-scheme Debug \
|
||||
-configuration Debug \
|
||||
-derivedDataPath ~/git/alt-tab-macos/DerivedData
|
||||
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
|
||||
profileFile="/tmp/profile_$(date +%Y%m%d_%H%M%S)"
|
||||
|
||||
xcrun xctrace record \
|
||||
--instrument 'Time Profiler' \
|
||||
--time-limit 20s \
|
||||
--no-prompt --quiet \
|
||||
--output "$profileFile".trace \
|
||||
--launch -- \
|
||||
~/git/alt-tab-macos/DerivedData/Build/Products/Debug/AltTab.app --benchmark showUi 3
|
||||
|
||||
xcrun xctrace export \
|
||||
--input "$profileFile".trace \
|
||||
--xpath '/trace-toc/run[@number="1"]/data/table[@schema="time-profile"]' \
|
||||
--output "$profileFile".xml
|
||||
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
/Users/lwouis/git/alt-tab-macos/DerivedData/Build/Products/Debug/AltTab.app/Contents/MacOS/AltTab --logs=debug --benchmark showUi 3
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1130"
|
||||
LastUpgradeVersion = "1620"
|
||||
version = "1.7">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
@@ -37,7 +37,7 @@
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugDocumentVersioning = "NO"
|
||||
debugServiceExtension = "internal"
|
||||
enableGPUValidationMode = "1"
|
||||
allowLocationSimulation = "YES">
|
||||
@@ -68,6 +68,16 @@
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "D04BA5E73DAF232ADE11C97A"
|
||||
BuildableName = "AltTab.app"
|
||||
BlueprintName = "alt-tab-macos"
|
||||
ReferencedContainer = "container:alt-tab-macos.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1620"
|
||||
version = "1.7">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
@@ -22,7 +23,7 @@
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Release"
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "NO">
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
PRODUCT_NAME = AltTab
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lwouis.alt-tab-macos
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.12
|
||||
SWIFT_VERSION = 5.8
|
||||
SWIFT_VERSION = 5.8 // xcode 14.2 translates this to 5.0; xcode 16.2 as 5.8
|
||||
SWIFT_TREAT_WARNINGS_AS_ERRORS = YES
|
||||
INFOPLIST_FILE = Info.plist
|
||||
CODE_SIGN_ENTITLEMENTS = alt_tab_macos.entitlements
|
||||
@@ -15,3 +15,5 @@ PLIST_FILE_OUTPUT_FORMAT = binary
|
||||
COCOAPODS_PARALLEL_CODE_SIGN = YES // codesign pods faster
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES
|
||||
SWIFT_OBJC_BRIDGING_HEADER = alt-tab-macos-Bridging-Header.h
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES
|
||||
DEAD_CODE_STRIPPING = YES
|
||||
@@ -6,4 +6,10 @@
|
||||
CODE_SIGN_IDENTITY = Developer ID Application: Louis Pontoise (QXD7GW8FHY)
|
||||
CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO // for notarization
|
||||
OTHER_CODE_SIGN_FLAGS = --timestamp --deep --options runtime // for notarization
|
||||
SWIFT_COMPILATION_MODE = wholemodule
|
||||
SWIFT_COMPILATION_MODE = wholemodule
|
||||
SWIFT_OPTIMIZATION_LEVEL = -O
|
||||
DEBUG_INFORMATION_FORMAT = dwarf-with-dsym
|
||||
DEPLOYMENT_POSTPROCESSING = YES
|
||||
COPY_PHASE_STRIP = YES
|
||||
STRIP_INSTALLED_PRODUCT = YES
|
||||
STRIP_STYLE = all
|
||||
@@ -9,3 +9,4 @@ ENABLE_BITCODE = NO
|
||||
GCC_GENERATE_TEST_COVERAGE_FILES = NO
|
||||
GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO
|
||||
TEST_ATTACHMENT_LOGGING = NO
|
||||
DEAD_CODE_STRIPPING = YES
|
||||
@@ -2,3 +2,7 @@
|
||||
|
||||
#include "Pods/Target Support Files/Pods-unit-tests/Pods-unit-tests.debug.xcconfig"
|
||||
#include "test-base.xcconfig"
|
||||
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG // for macro `#if DEBUG`
|
||||
OTHER_SWIFT_FLAGS = -driver-time-compilation -Xfrontend -warn-long-function-bodies=250 -Xfrontend -warn-long-expression-type-checking=250 // find slow compilation areas
|
||||
SWIFT_COMPILATION_MODE = incremental
|
||||
@@ -0,0 +1 @@
|
||||
3.4.4
|
||||
@@ -1,42 +0,0 @@
|
||||
---
|
||||
layout: bare
|
||||
---
|
||||
|
||||
{% include_relative Changelog.md %}
|
||||
|
||||
<style>#google_translate_element,.skiptranslate{display:none;}body{top:0!important;}</style>
|
||||
<div id="google_translate_element"></div>
|
||||
<script>
|
||||
function getUserLanguage() {
|
||||
if (navigator.languages && navigator.languages.length > 0) {
|
||||
// Chinese is the only exception where google translate needs the full code
|
||||
// see https://sites.google.com/site/opti365/translate_codes
|
||||
const l = navigator.languages[0]
|
||||
if (l.length > 2 && l !== "zh-CN" && l !== "zh-TW") {
|
||||
return l.slice(0, 2)
|
||||
}
|
||||
return l
|
||||
}
|
||||
return "en"
|
||||
}
|
||||
|
||||
function googleTranslateElementInit() {
|
||||
new google.translate.TranslateElement({
|
||||
pageLanguage: 'en',
|
||||
includedLanguages: getUserLanguage(),
|
||||
autoDisplay: false
|
||||
}, 'google_translate_element')
|
||||
setTimeout(() => {
|
||||
var a = document.querySelector("#google_translate_element select")
|
||||
a.selectedIndex = 1
|
||||
a.dispatchEvent(new Event('change'))
|
||||
}, 1000)
|
||||
}
|
||||
|
||||
const userLanguage = getUserLanguage()
|
||||
if (userLanguage !== "en") {
|
||||
let script = document.createElement("script")
|
||||
script.src = "https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"
|
||||
document.head.appendChild(script)
|
||||
}
|
||||
</script>
|
||||
@@ -1,248 +0,0 @@
|
||||
# Contributors
|
||||
|
||||
They helped [develop the app](https://github.com/lwouis/alt-tab-macos/graphs/contributors):
|
||||
|
||||
* [adamnemecek](https://github.com/adamnemecek)
|
||||
* [AfzalivE](https://github.com/AfzalivE)
|
||||
* [akx](https://github.com/akx)
|
||||
* [Allsochen](https://github.com/Allsochen)
|
||||
* [ayroblu](https://github.com/ayroblu)
|
||||
* [Calinou](https://github.com/Calinou)
|
||||
* [damonpam](https://github.com/damonpam)
|
||||
* [decodism](https://github.com/decodism)
|
||||
* [gcbw](https://github.com/gcbw)
|
||||
* [gingerr](https://github.com/gingerr)
|
||||
* [GrzegorzKazana](https://github.com/GrzegorzKazana)
|
||||
* [hughlilly](https://github.com/hughlilly)
|
||||
* [karbassi](https://github.com/karbassi)
|
||||
* [L1cardo](https://github.com/L1cardo)
|
||||
* [lwouis](https://github.com/lwouis)
|
||||
* [metacodes](https://github.com/metacodes)
|
||||
* [mnin](https://github.com/mnin)
|
||||
* [MrPaschenko](https://github.com/MrPaschenko)
|
||||
* [nella17](https://github.com/nella17)
|
||||
* [notlmn](https://github.com/notlmn)
|
||||
* [phungtuanhoang1996](https://github.com/phungtuanhoang1996)
|
||||
* [rbnis](https://github.com/rbnis)
|
||||
* [Rjevski](https://github.com/Rjevski)
|
||||
* [samdenty](https://github.com/samdenty)
|
||||
* [ShlomoCode](https://github.com/ShlomoCode)
|
||||
* [skolj](https://github.com/skolj)
|
||||
* [xanathar](https://github.com/xanathar)
|
||||
* [xconverge](https://github.com/xconverge)
|
||||
* [zacharee](https://github.com/zacharee)
|
||||
|
||||
They helped [localize the app](https://poeditor.com/join/project/8AOEZ0eAZE):
|
||||
|
||||
* 73
|
||||
* Aamirsuleman
|
||||
* Aarni Koskela
|
||||
* Abdulelah
|
||||
* Abdur-Rahman Bilal
|
||||
* Aden Aziz
|
||||
* Admin
|
||||
* Aindriú Mac Giolla Eoin
|
||||
* Ajaykumarmkaju
|
||||
* Aku
|
||||
* Albert Abdilim
|
||||
* Alex
|
||||
* Alexander Kilian
|
||||
* Alexey Eremeev
|
||||
* Ali
|
||||
* Ali Gokmen
|
||||
* Ali. tas103
|
||||
* Allen Guan
|
||||
* Alonso Chen
|
||||
* Ameng
|
||||
* Anders
|
||||
* Andreas Wagner
|
||||
* Andrew Vader
|
||||
* antoon334
|
||||
* Anurag Roy
|
||||
* anushree b
|
||||
* Arman
|
||||
* Artem Stankov
|
||||
* Arthur
|
||||
* Ash
|
||||
* blanorama
|
||||
* bluefirex
|
||||
* bovirus
|
||||
* BV Joshi
|
||||
* caduellery
|
||||
* Caner İlhan
|
||||
* catcore
|
||||
* Christian Keilmann
|
||||
* Chun Fei Lung
|
||||
* codecantata
|
||||
* Cong Tri
|
||||
* Dan
|
||||
* Dan84
|
||||
* Darius Rosendahl
|
||||
* Darko
|
||||
* David R
|
||||
* Dékány Martin
|
||||
* Didier Deschrijver
|
||||
* Dzhuneyt
|
||||
* EDUARDO
|
||||
* edu_sombra
|
||||
* Eliezer Shpigelman
|
||||
* Eric WANTZ
|
||||
* Ersagun Kuruca
|
||||
* EUKA
|
||||
* Eukarya
|
||||
* Eyelly wu
|
||||
* fil
|
||||
* Filipe
|
||||
* Frangarciasalomon
|
||||
* Frank
|
||||
* Friendship1
|
||||
* Fukuda
|
||||
* Gezimos
|
||||
* Giacomo Volpi
|
||||
* Giang
|
||||
* Github
|
||||
* Gkostov
|
||||
* Grzegorz Kazana
|
||||
* Guillaume
|
||||
* Gumpanath Puttarassu
|
||||
* hann-solo
|
||||
* Haoshuai Xu
|
||||
* Hjörtur Hjartarson
|
||||
* Hokuto Kato
|
||||
* Huandngoc
|
||||
* Huynh Sang
|
||||
* Ialiendeg
|
||||
* Ida Bomholt Dyrholm Jacobsen
|
||||
* Igor Aradski
|
||||
* Indexerrowaty
|
||||
* isametry
|
||||
* Ismatulla
|
||||
* Isthereanybody
|
||||
* Jaeyong Sung
|
||||
* Jakob
|
||||
* Jakob Licina
|
||||
* Jakub Bartušek
|
||||
* jiho4
|
||||
* Jisan
|
||||
* Joao Vitor Casarin
|
||||
* Jord Nijhuis
|
||||
* Jui Yuan Liu
|
||||
* Jules Beckers
|
||||
* Julian Nowaczyk
|
||||
* Julio
|
||||
* justcontributor
|
||||
* Kagurazaka Tsuki
|
||||
* kal
|
||||
* kant
|
||||
* Kawarimidoll+git
|
||||
* kazuki sakamoto
|
||||
* Kevinsevinche
|
||||
* Kinyagulovrr
|
||||
* Klara
|
||||
* Kristófer Fannar Björnsson
|
||||
* Kushnee5
|
||||
* Kuuchi
|
||||
* L
|
||||
* Lakshman Kolappan
|
||||
* Lasse Mattila
|
||||
* Lcwhhh
|
||||
* Lester
|
||||
* Loïc
|
||||
* Loic. peron
|
||||
* LostInCompilation
|
||||
* Lumaxis
|
||||
* lwouis
|
||||
* Malo
|
||||
* Maplevantablack
|
||||
* Marc Pla
|
||||
* Marcus Billman
|
||||
* Marekscholle
|
||||
* Marko McLion
|
||||
* Martin Mitka
|
||||
* Martin. mitka
|
||||
* Masayoshi Motojima
|
||||
* Masih
|
||||
* Matheus
|
||||
* Max
|
||||
* Maximilian Falk
|
||||
* MaximilianFreitag
|
||||
* Mehmet Ali Ertorer
|
||||
* Meriç Bağlayan
|
||||
* Michael
|
||||
* Milos M
|
||||
* Mohammad Al Zouabi
|
||||
* Mr. axel. bock
|
||||
* MuDraconis
|
||||
* Muzhenstudent
|
||||
* Mwolfinspace
|
||||
* Naseeb Naushad
|
||||
* Nathancodes
|
||||
* Nikola Rajić
|
||||
* Nils Fahldieck
|
||||
* Nilton Souza
|
||||
* Nmolham
|
||||
* Nuriddin Islamov
|
||||
* Ori
|
||||
* Paulius
|
||||
* Pehovorka
|
||||
* Peterkim0620
|
||||
* Petr Kolář
|
||||
* Piotr Budny
|
||||
* Quentin. douarre
|
||||
* Raphaël
|
||||
* Rasmus
|
||||
* Raymonf
|
||||
* raz
|
||||
* Razvan
|
||||
* rbnis
|
||||
* rei fujise
|
||||
* Roccobot
|
||||
* Roccobot
|
||||
* Rodrigo Schneider
|
||||
* Ron Nuss
|
||||
* sa-ha
|
||||
* Sami Suleiman
|
||||
* sawtooth
|
||||
* Sebastian
|
||||
* Selcuk Dursun
|
||||
* Sergey
|
||||
* Seyedparsa Mirtaheri
|
||||
* Shameem Reza
|
||||
* SheNeVmerla
|
||||
* Shivam Bansal
|
||||
* shlomo
|
||||
* Sippawit Thammawiset
|
||||
* Sjur Moshagen
|
||||
* Sjur.n. moshagen
|
||||
* Stan Smits
|
||||
* Stefan
|
||||
* Stefan Lange
|
||||
* Svetoslav Stefanov
|
||||
* Thomas Wölk
|
||||
* Thorsten
|
||||
* Thorsten
|
||||
* Tomoa Nozawa
|
||||
* Tsilimpotis Dimitrios
|
||||
* Umutakkaya1996
|
||||
* Vadym
|
||||
* Vijayant Saini
|
||||
* Vincent Orback
|
||||
* Vlad
|
||||
* Webmaster
|
||||
* Wesley Matos
|
||||
* Whatsmine-HaoshuaiXu
|
||||
* Wilhelm Wolfgang Gärtner
|
||||
* Wowpapa3232
|
||||
* wtwt0119!!
|
||||
* Yongsung Yoon
|
||||
* Yorben
|
||||
* Yossi Zahn
|
||||
* ysaito
|
||||
* Yukai
|
||||
* yumechan
|
||||
* Yusuf Caliskan
|
||||
* Zuhaib Syed
|
||||
* 橙梓
|
||||
* Ивайло
|
||||
* Андрій Кирбаба
|
||||
* Τσιλιμπότης Δημ.
|
||||
@@ -1,126 +1,157 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (6.0.2.2)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 0.7, < 2)
|
||||
minitest (~> 5.1)
|
||||
tzinfo (~> 1.1)
|
||||
zeitwerk (~> 2.2)
|
||||
addressable (2.7.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
activesupport (8.1.2)
|
||||
base64
|
||||
bigdecimal
|
||||
concurrent-ruby (~> 1.0, >= 1.3.1)
|
||||
connection_pool (>= 2.2.5)
|
||||
drb
|
||||
i18n (>= 1.6, < 2)
|
||||
json
|
||||
logger (>= 1.4.2)
|
||||
minitest (>= 5.1)
|
||||
securerandom (>= 0.3)
|
||||
tzinfo (~> 2.0, >= 2.0.5)
|
||||
uri (>= 0.13.1)
|
||||
addressable (2.8.8)
|
||||
public_suffix (>= 2.0.2, < 8.0)
|
||||
base64 (0.3.0)
|
||||
bigdecimal (4.0.1)
|
||||
coffee-script (2.4.1)
|
||||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.11.1)
|
||||
coffee-script-source (1.12.2)
|
||||
colorator (1.1.0)
|
||||
commonmarker (0.17.13)
|
||||
ruby-enum (~> 0.5)
|
||||
concurrent-ruby (1.1.6)
|
||||
dnsruby (1.61.3)
|
||||
addressable (~> 2.5)
|
||||
em-websocket (0.5.1)
|
||||
commonmarker (0.23.12)
|
||||
concurrent-ruby (1.3.6)
|
||||
connection_pool (3.0.2)
|
||||
csv (3.3.5)
|
||||
dnsruby (1.73.1)
|
||||
base64 (>= 0.2)
|
||||
logger (~> 1.6)
|
||||
simpleidn (~> 0.2.1)
|
||||
drb (2.2.3)
|
||||
em-websocket (0.5.3)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0.6.0)
|
||||
ethon (0.12.0)
|
||||
ffi (>= 1.3.0)
|
||||
http_parser.rb (~> 0)
|
||||
ethon (0.15.0)
|
||||
ffi (>= 1.15.0)
|
||||
eventmachine (1.2.7)
|
||||
execjs (2.7.0)
|
||||
faraday (1.0.1)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
ffi (1.12.2)
|
||||
execjs (2.10.0)
|
||||
faraday (2.14.1)
|
||||
faraday-net_http (>= 2.0, < 3.5)
|
||||
json
|
||||
logger
|
||||
faraday-net_http (3.4.2)
|
||||
net-http (~> 0.5)
|
||||
ffi (1.17.3-aarch64-linux-gnu)
|
||||
ffi (1.17.3-aarch64-linux-musl)
|
||||
ffi (1.17.3-arm-linux-gnu)
|
||||
ffi (1.17.3-arm-linux-musl)
|
||||
ffi (1.17.3-arm64-darwin)
|
||||
ffi (1.17.3-x86_64-darwin)
|
||||
ffi (1.17.3-x86_64-linux-gnu)
|
||||
ffi (1.17.3-x86_64-linux-musl)
|
||||
forwardable-extended (2.6.0)
|
||||
gemoji (3.0.1)
|
||||
github-pages (204)
|
||||
github-pages-health-check (= 1.16.1)
|
||||
jekyll (= 3.8.5)
|
||||
jekyll-avatar (= 0.7.0)
|
||||
jekyll-coffeescript (= 1.1.1)
|
||||
jekyll-commonmark-ghpages (= 0.1.6)
|
||||
jekyll-default-layout (= 0.1.4)
|
||||
jekyll-feed (= 0.13.0)
|
||||
gemoji (4.1.0)
|
||||
github-pages (232)
|
||||
github-pages-health-check (= 1.18.2)
|
||||
jekyll (= 3.10.0)
|
||||
jekyll-avatar (= 0.8.0)
|
||||
jekyll-coffeescript (= 1.2.2)
|
||||
jekyll-commonmark-ghpages (= 0.5.1)
|
||||
jekyll-default-layout (= 0.1.5)
|
||||
jekyll-feed (= 0.17.0)
|
||||
jekyll-gist (= 1.5.0)
|
||||
jekyll-github-metadata (= 2.13.0)
|
||||
jekyll-mentions (= 1.5.1)
|
||||
jekyll-github-metadata (= 2.16.1)
|
||||
jekyll-include-cache (= 0.2.1)
|
||||
jekyll-mentions (= 1.6.0)
|
||||
jekyll-optional-front-matter (= 0.3.2)
|
||||
jekyll-paginate (= 1.1.0)
|
||||
jekyll-readme-index (= 0.3.0)
|
||||
jekyll-redirect-from (= 0.15.0)
|
||||
jekyll-redirect-from (= 0.16.0)
|
||||
jekyll-relative-links (= 0.6.1)
|
||||
jekyll-remote-theme (= 0.4.1)
|
||||
jekyll-remote-theme (= 0.4.3)
|
||||
jekyll-sass-converter (= 1.5.2)
|
||||
jekyll-seo-tag (= 2.6.1)
|
||||
jekyll-seo-tag (= 2.8.0)
|
||||
jekyll-sitemap (= 1.4.0)
|
||||
jekyll-swiss (= 1.0.0)
|
||||
jekyll-theme-architect (= 0.1.1)
|
||||
jekyll-theme-cayman (= 0.1.1)
|
||||
jekyll-theme-dinky (= 0.1.1)
|
||||
jekyll-theme-hacker (= 0.1.1)
|
||||
jekyll-theme-leap-day (= 0.1.1)
|
||||
jekyll-theme-merlot (= 0.1.1)
|
||||
jekyll-theme-midnight (= 0.1.1)
|
||||
jekyll-theme-minimal (= 0.1.1)
|
||||
jekyll-theme-modernist (= 0.1.1)
|
||||
jekyll-theme-primer (= 0.5.4)
|
||||
jekyll-theme-slate (= 0.1.1)
|
||||
jekyll-theme-tactile (= 0.1.1)
|
||||
jekyll-theme-time-machine (= 0.1.1)
|
||||
jekyll-theme-architect (= 0.2.0)
|
||||
jekyll-theme-cayman (= 0.2.0)
|
||||
jekyll-theme-dinky (= 0.2.0)
|
||||
jekyll-theme-hacker (= 0.2.0)
|
||||
jekyll-theme-leap-day (= 0.2.0)
|
||||
jekyll-theme-merlot (= 0.2.0)
|
||||
jekyll-theme-midnight (= 0.2.0)
|
||||
jekyll-theme-minimal (= 0.2.0)
|
||||
jekyll-theme-modernist (= 0.2.0)
|
||||
jekyll-theme-primer (= 0.6.0)
|
||||
jekyll-theme-slate (= 0.2.0)
|
||||
jekyll-theme-tactile (= 0.2.0)
|
||||
jekyll-theme-time-machine (= 0.2.0)
|
||||
jekyll-titles-from-headings (= 0.5.3)
|
||||
jemoji (= 0.11.1)
|
||||
kramdown (= 1.17.0)
|
||||
liquid (= 4.0.3)
|
||||
jemoji (= 0.13.0)
|
||||
kramdown (= 2.4.0)
|
||||
kramdown-parser-gfm (= 1.1.0)
|
||||
liquid (= 4.0.4)
|
||||
mercenary (~> 0.3)
|
||||
minima (= 2.5.1)
|
||||
nokogiri (>= 1.10.4, < 2.0)
|
||||
rouge (= 3.13.0)
|
||||
nokogiri (>= 1.16.2, < 2.0)
|
||||
rouge (= 3.30.0)
|
||||
terminal-table (~> 1.4)
|
||||
github-pages-health-check (1.16.1)
|
||||
webrick (~> 1.8)
|
||||
github-pages-health-check (1.18.2)
|
||||
addressable (~> 2.3)
|
||||
dnsruby (~> 1.60)
|
||||
octokit (~> 4.0)
|
||||
public_suffix (~> 3.0)
|
||||
octokit (>= 4, < 8)
|
||||
public_suffix (>= 3.0, < 6.0)
|
||||
typhoeus (~> 1.3)
|
||||
html-pipeline (2.12.3)
|
||||
html-pipeline (2.14.3)
|
||||
activesupport (>= 2)
|
||||
nokogiri (>= 1.4)
|
||||
http_parser.rb (0.6.0)
|
||||
i18n (0.9.5)
|
||||
http_parser.rb (0.8.1)
|
||||
i18n (1.14.8)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jekyll (3.8.5)
|
||||
jekyll (3.10.0)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
csv (~> 3.0)
|
||||
em-websocket (~> 0.5)
|
||||
i18n (~> 0.7)
|
||||
i18n (>= 0.7, < 2)
|
||||
jekyll-sass-converter (~> 1.0)
|
||||
jekyll-watch (~> 2.0)
|
||||
kramdown (~> 1.14)
|
||||
kramdown (>= 1.17, < 3)
|
||||
liquid (~> 4.0)
|
||||
mercenary (~> 0.3.3)
|
||||
pathutil (~> 0.9)
|
||||
rouge (>= 1.7, < 4)
|
||||
safe_yaml (~> 1.0)
|
||||
jekyll-avatar (0.7.0)
|
||||
webrick (>= 1.0)
|
||||
jekyll-avatar (0.8.0)
|
||||
jekyll (>= 3.0, < 5.0)
|
||||
jekyll-coffeescript (1.1.1)
|
||||
jekyll-coffeescript (1.2.2)
|
||||
coffee-script (~> 2.2)
|
||||
coffee-script-source (~> 1.11.1)
|
||||
jekyll-commonmark (1.3.1)
|
||||
commonmarker (~> 0.14)
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
jekyll-commonmark-ghpages (0.1.6)
|
||||
commonmarker (~> 0.17.6)
|
||||
jekyll-commonmark (~> 1.2)
|
||||
rouge (>= 2.0, < 4.0)
|
||||
jekyll-default-layout (0.1.4)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-feed (0.13.0)
|
||||
coffee-script-source (~> 1.12)
|
||||
jekyll-commonmark (1.4.0)
|
||||
commonmarker (~> 0.22)
|
||||
jekyll-commonmark-ghpages (0.5.1)
|
||||
commonmarker (>= 0.23.7, < 1.1.0)
|
||||
jekyll (>= 3.9, < 4.0)
|
||||
jekyll-commonmark (~> 1.4.0)
|
||||
rouge (>= 2.0, < 5.0)
|
||||
jekyll-default-layout (0.1.5)
|
||||
jekyll (>= 3.0, < 5.0)
|
||||
jekyll-feed (0.17.0)
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
jekyll-gist (1.5.0)
|
||||
octokit (~> 4.2)
|
||||
jekyll-github-metadata (2.13.0)
|
||||
jekyll-github-metadata (2.16.1)
|
||||
jekyll (>= 3.4, < 5.0)
|
||||
octokit (~> 4.0, != 4.4.0)
|
||||
jekyll-mentions (1.5.1)
|
||||
octokit (>= 4, < 7, != 4.4.0)
|
||||
jekyll-include-cache (0.2.1)
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
jekyll-mentions (1.6.0)
|
||||
html-pipeline (~> 2.3)
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
jekyll-optional-front-matter (0.3.2)
|
||||
@@ -128,121 +159,154 @@ GEM
|
||||
jekyll-paginate (1.1.0)
|
||||
jekyll-readme-index (0.3.0)
|
||||
jekyll (>= 3.0, < 5.0)
|
||||
jekyll-redirect-from (0.15.0)
|
||||
jekyll-redirect-from (0.16.0)
|
||||
jekyll (>= 3.3, < 5.0)
|
||||
jekyll-relative-links (0.6.1)
|
||||
jekyll (>= 3.3, < 5.0)
|
||||
jekyll-remote-theme (0.4.1)
|
||||
jekyll-remote-theme (0.4.3)
|
||||
addressable (~> 2.0)
|
||||
jekyll (>= 3.5, < 5.0)
|
||||
rubyzip (>= 1.3.0)
|
||||
jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
|
||||
rubyzip (>= 1.3.0, < 3.0)
|
||||
jekyll-sass-converter (1.5.2)
|
||||
sass (~> 3.4)
|
||||
jekyll-seo-tag (2.6.1)
|
||||
jekyll (>= 3.3, < 5.0)
|
||||
jekyll-seo-tag (2.8.0)
|
||||
jekyll (>= 3.8, < 5.0)
|
||||
jekyll-sitemap (1.4.0)
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
jekyll-swiss (1.0.0)
|
||||
jekyll-theme-architect (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-theme-architect (0.2.0)
|
||||
jekyll (> 3.5, < 5.0)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-cayman (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-theme-cayman (0.2.0)
|
||||
jekyll (> 3.5, < 5.0)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-dinky (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-theme-dinky (0.2.0)
|
||||
jekyll (> 3.5, < 5.0)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-hacker (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-theme-hacker (0.2.0)
|
||||
jekyll (> 3.5, < 5.0)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-leap-day (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-theme-leap-day (0.2.0)
|
||||
jekyll (> 3.5, < 5.0)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-merlot (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-theme-merlot (0.2.0)
|
||||
jekyll (> 3.5, < 5.0)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-midnight (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-theme-midnight (0.2.0)
|
||||
jekyll (> 3.5, < 5.0)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-minimal (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-theme-minimal (0.2.0)
|
||||
jekyll (> 3.5, < 5.0)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-modernist (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-theme-modernist (0.2.0)
|
||||
jekyll (> 3.5, < 5.0)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-primer (0.5.4)
|
||||
jekyll-theme-primer (0.6.0)
|
||||
jekyll (> 3.5, < 5.0)
|
||||
jekyll-github-metadata (~> 2.9)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-slate (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-theme-slate (0.2.0)
|
||||
jekyll (> 3.5, < 5.0)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-tactile (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-theme-tactile (0.2.0)
|
||||
jekyll (> 3.5, < 5.0)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-time-machine (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-theme-time-machine (0.2.0)
|
||||
jekyll (> 3.5, < 5.0)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-titles-from-headings (0.5.3)
|
||||
jekyll (>= 3.3, < 5.0)
|
||||
jekyll-watch (2.2.1)
|
||||
listen (~> 3.0)
|
||||
jemoji (0.11.1)
|
||||
gemoji (~> 3.0)
|
||||
jemoji (0.13.0)
|
||||
gemoji (>= 3, < 5)
|
||||
html-pipeline (~> 2.2)
|
||||
jekyll (>= 3.0, < 5.0)
|
||||
kramdown (1.17.0)
|
||||
liquid (4.0.3)
|
||||
listen (3.2.1)
|
||||
json (2.18.1)
|
||||
kramdown (2.4.0)
|
||||
rexml
|
||||
kramdown-parser-gfm (1.1.0)
|
||||
kramdown (~> 2.0)
|
||||
liquid (4.0.4)
|
||||
listen (3.10.0)
|
||||
logger
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
logger (1.7.0)
|
||||
mercenary (0.3.6)
|
||||
mini_portile2 (2.4.0)
|
||||
minima (2.5.1)
|
||||
jekyll (>= 3.5, < 5.0)
|
||||
jekyll-feed (~> 0.9)
|
||||
jekyll-seo-tag (~> 2.1)
|
||||
minitest (5.14.0)
|
||||
multipart-post (2.1.1)
|
||||
nokogiri (1.10.9)
|
||||
mini_portile2 (~> 2.4.0)
|
||||
octokit (4.18.0)
|
||||
faraday (>= 0.9)
|
||||
sawyer (~> 0.8.0, >= 0.5.3)
|
||||
minitest (6.0.2)
|
||||
drb (~> 2.0)
|
||||
prism (~> 1.5)
|
||||
net-http (0.9.1)
|
||||
uri (>= 0.11.1)
|
||||
nokogiri (1.19.1-aarch64-linux-gnu)
|
||||
racc (~> 1.4)
|
||||
nokogiri (1.19.1-aarch64-linux-musl)
|
||||
racc (~> 1.4)
|
||||
nokogiri (1.19.1-arm-linux-gnu)
|
||||
racc (~> 1.4)
|
||||
nokogiri (1.19.1-arm-linux-musl)
|
||||
racc (~> 1.4)
|
||||
nokogiri (1.19.1-arm64-darwin)
|
||||
racc (~> 1.4)
|
||||
nokogiri (1.19.1-x86_64-darwin)
|
||||
racc (~> 1.4)
|
||||
nokogiri (1.19.1-x86_64-linux-gnu)
|
||||
racc (~> 1.4)
|
||||
nokogiri (1.19.1-x86_64-linux-musl)
|
||||
racc (~> 1.4)
|
||||
octokit (4.25.1)
|
||||
faraday (>= 1, < 3)
|
||||
sawyer (~> 0.9)
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (3.1.1)
|
||||
rb-fsevent (0.10.3)
|
||||
rb-inotify (0.10.1)
|
||||
prism (1.9.0)
|
||||
public_suffix (5.1.1)
|
||||
racc (1.8.1)
|
||||
rb-fsevent (0.11.2)
|
||||
rb-inotify (0.11.1)
|
||||
ffi (~> 1.0)
|
||||
rouge (3.13.0)
|
||||
ruby-enum (0.8.0)
|
||||
i18n
|
||||
rubyzip (2.3.0)
|
||||
rexml (3.4.4)
|
||||
rouge (3.30.0)
|
||||
rubyzip (2.4.1)
|
||||
safe_yaml (1.0.5)
|
||||
sass (3.7.4)
|
||||
sass-listen (~> 4.0.0)
|
||||
sass-listen (4.0.0)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
sawyer (0.8.2)
|
||||
sawyer (0.9.3)
|
||||
addressable (>= 2.3.5)
|
||||
faraday (> 0.8, < 2.0)
|
||||
faraday (>= 0.17.3, < 3)
|
||||
securerandom (0.4.1)
|
||||
simpleidn (0.2.3)
|
||||
terminal-table (1.8.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
thread_safe (0.3.6)
|
||||
typhoeus (1.3.1)
|
||||
ethon (>= 0.9.0)
|
||||
tzinfo (1.2.7)
|
||||
thread_safe (~> 0.1)
|
||||
unicode-display_width (1.7.0)
|
||||
zeitwerk (2.3.0)
|
||||
typhoeus (1.5.0)
|
||||
ethon (>= 0.9.0, < 0.16.0)
|
||||
tzinfo (2.0.6)
|
||||
concurrent-ruby (~> 1.0)
|
||||
unicode-display_width (1.8.0)
|
||||
uri (1.1.1)
|
||||
webrick (1.9.2)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
aarch64-linux-gnu
|
||||
aarch64-linux-musl
|
||||
arm-linux-gnu
|
||||
arm-linux-musl
|
||||
arm64-darwin
|
||||
x86_64-darwin
|
||||
x86_64-linux-gnu
|
||||
x86_64-linux-musl
|
||||
|
||||
DEPENDENCIES
|
||||
github-pages
|
||||
|
||||
BUNDLED WITH
|
||||
2.1.4
|
||||
2.5.18
|
||||
@@ -1,72 +0,0 @@
|
||||
---
|
||||
permalink: /
|
||||
---
|
||||
|
||||
# Introduction
|
||||
|
||||
[<img src="public/demo/frontpage.jpg" alt="Screenshot showing AltTab" width="1920" height="1080" style="width:100%; height:auto;" />](public/demo/frontpage.jpg)
|
||||
|
||||
Alternative Styles
|
||||
|
||||
| [<img loading="lazy" src="public/demo/app-icons-style.jpg" alt="Screenshot: App Icons Style" width="513" height="241" style="width:100%; height:auto;" />](public/demo/app-icons-style.jpg) | [<img loading="lazy" src="public/demo/titles-style.jpg" alt="Screenshot: Titles Style" width="766" height="248" style="width:100%; height:auto;" />](public/demo/titles-style.jpg) |
|
||||
|
||||
## Installation
|
||||
|
||||
* [**Download the latest release**]({{ site.github.latest_release.assets[0].browser_download_url }})
|
||||
* Alternatively, you can use [homebrew](https://brew.sh/): `brew install --cask alt-tab`
|
||||
|
||||
## Features
|
||||
|
||||
* Switch focus to any window
|
||||
* Minimize, close, fullscreen any window; Hide, quit any app
|
||||
* Customize AltTab appearance (pick one of 3 styles, then customize further)
|
||||
* Custom trigger shortcuts with almost any keys
|
||||
* Blacklist apps you don’t want to list or trigger AltTab from
|
||||
* Light and Dark Appearance
|
||||
* Drag-and-drop things on top of window thumbnails
|
||||
* Accessibility: VoiceOver, sticky keys, reduced transparency, etc
|
||||
|
||||
## Compatibility
|
||||
|
||||
* __macOS version:__ from 10.12 to latest
|
||||
* __Apple Silicon:__ yes, AltTab is [universal](https://developer.apple.com/documentation/apple-silicon/porting-your-macos-apps-to-apple-silicon)
|
||||
|
||||
## Localization
|
||||
|
||||
AltTab is available in many languages: Bahasa Indonesia, Català, Dansk, Deutsch, Eesti keel, English, Español, Français, Gaeilge, Galego, Hrvatski, Italiano, Kurdî, Limba română, Lëtzebuergesch, Magyar, Nederlands, Norsk Bokmål, Norsk Nynorsk, Oʻzbekcha, Polski, Português, Português (Brasil), Shqip, Slovenčina, Slovenščina, Suomi, Svenska, Tiếng Việt, Türkçe, Íslenska, Čeština, Ελληνικά, Български, Русский, Српски / Srpski, Українська, עִבְרִית, العربية, فارسی, हिन्दी, বাংলা, தமிழ், ಕನ್ನಡ, മലയാളം, ภาษาไทย, 日本語, 简体中文, 繁體中文, 한국어
|
||||
|
||||
[Contribute your own language easily!](https://poeditor.com/join/project/8AOEZ0eAZE)
|
||||
|
||||
## Privacy and respecting the user
|
||||
|
||||
* AltTab doesn’t upload or download any data without the user explicitly asking for it (e.g. asking to update the app, sending a crash report, etc)
|
||||
* AltTab uses as few resources as possible: CPU, memory, disk, etc. The app footprint is small (e.g. small disk size, minimal CPU use in the background, etc)
|
||||
|
||||
## Configuration
|
||||
|
||||
Change the shortcut keys, switch to a Windows theme and more, using the Preferences window:
|
||||
|
||||
| [<img loading="lazy" src="public/demo/preferences-general.jpg" alt="Screenshot: General preferences" width="672" height="354" style="width:100%; height:auto;" />](public/demo/preferences-general.jpg) | [<img loading="lazy" src="public/demo/preferences-controls.jpg" alt="Screenshot: Controls preferences" width="677" height="688" style="width:100%; height:auto;" />](public/demo/preferences-controls.jpg) |
|
||||
| [<img loading="lazy" src="public/demo/preferences-appearance.jpg" alt="Screenshot: Appearance preferences" width="672" height="735" style="width:100%; height:auto;" />](public/demo/preferences-appearance.jpg) | [<img loading="lazy" src="public/demo/preferences-appearance-details.jpg" alt="Screenshot: Appearance preferences (details)" width="672" height="934" style="width:100%; height:auto;" />](public/demo/preferences-appearance-details.jpg) |
|
||||
| [<img loading="lazy" src="public/demo/preferences-blacklist.jpg" alt="Screenshot: Blacklist preferences" width="672" height="655" style="width:100%; height:auto;" />](public/demo/preferences-blacklist.jpg) | [<img loading="lazy" src="public/demo/preferences-policies.jpg" alt="Screenshot: Policies preferences" width="672" height="353" style="width:100%; height:auto;" />](public/demo/preferences-policies.jpg) |
|
||||
|
||||
## Alternatives
|
||||
|
||||
Before building my own app, I looked around at similar apps. However, none was completely satisfactory so I rolled my own. Also, the almost-good-enough apps are not open-source.
|
||||
|
||||
| Alternative | Differences |
|
||||
|---------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------|
|
||||
| [HyperSwitch](https://bahoom.com/hyperswitch) and [HyperDock](https://bahoom.com/hyperdock) | $10. Closed-source. Thumbnails are too small. App icon is on top of the thumbnail |
|
||||
| [WindowSwitcher](https://www.noteifyapp.com/windowswitcher/) | $7. Closed-source. Thumbnails are small and blurry. App icon is on top of the thumbnail |
|
||||
| [Switch](https://github.com/numist/Switch) | Open Source. Thumbnails are small. Very little customization. Latest release is from 2016 |
|
||||
| [Witch](https://manytricks.com/witch/) and [Contexts](https://contexts.co/) | $10-15. Closed-source. Focus on text. No thumbnails |
|
||||
| [MissionControl Plus](https://www.fadel.io/missioncontrolplus) | $10. Closed-source. No chronology and order to windows. Hard to navigate windows with keyboard |
|
||||
| Built-in [MissionControl](https://en.wikipedia.org/wiki/Mission_Control_(macOS)) | No keyboard support |
|
||||
| Built-in `⌘ command` + `⇥ tab` | Only shows apps, not windows (note: can press down to see window of selected app) |
|
||||
| Built-in `⌘ command` + `` ` `` | Cycles through tabs and windows, but only of the same app. Only cycling, no direct access |
|
||||
|
||||
There are also related apps which don’t really overlap in functionality, but target similar needs: [Swish](https://highlyopinionated.co/swish/), [Hookshot](https://hookshot.app/), [Magnet](https://magnet.crowdcafe.com/), [Spectacle](https://www.spectacleapp.com/), [Rectangle](https://github.com/rxhanson/Rectangle), [yabai](https://github.com/koekeishiya/yabai), [LayAuto](https://layautoapp.com/), [OptimalLayout](http://most-advantageous.com/optimal-layout/), [BetterTouchTool](https://folivora.ai/), [BetterSnapTool](https://folivora.ai/bettersnaptool), [Moom](https://manytricks.com/moom/), [uBar](https://brawersoftware.com/products/ubar).
|
||||
|
||||
## License
|
||||
|
||||
AltTab is under the [GPL-3.0 license](https://github.com/lwouis/alt-tab-macos/blob/master/LICENCE.md).
|
||||
@@ -1,8 +0,0 @@
|
||||
# Support this project
|
||||
|
||||
There are a few ways to support this project:
|
||||
|
||||
* [Paypal](https://www.paypal.com/donate/?hosted_button_id=ACYAC3UYCM7CN)
|
||||
* [GitHub Sponsors](https://github.com/sponsors/lwouis)
|
||||
* [Patreon](https://www.patreon.com/alt_tab_macos)
|
||||
* [Stripe](https://donate.stripe.com/4gw9D7bA3g3O0ikaEF)
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
title: Thanks
|
||||
---
|
||||
|
||||
{% include_relative Contributors.md %}
|
||||
|
||||
{% include_relative Acknowledgments.md %}
|
||||
@@ -1,11 +1,20 @@
|
||||
repository: lwouis/alt-tab-macos
|
||||
theme: null # bug in github-pages generates a css file; we prevent it
|
||||
title: "AltTab"
|
||||
url: "https://alt-tab.app"
|
||||
baseurl: "/"
|
||||
plugins:
|
||||
- jekyll-sitemap
|
||||
sass:
|
||||
style: compressed
|
||||
defaults:
|
||||
- scope:
|
||||
path: ""
|
||||
values:
|
||||
sitemap: false
|
||||
exclude:
|
||||
- "study-material"
|
||||
- "Gemfile"
|
||||
include:
|
||||
- "Contributing.md" # bug in jekyll ignore this file; we force it here
|
||||
- "contributing.md" # bug in jekyll ignore this file; we force it here
|
||||
- "_redirects" # _ prefixed files are ignored by jekyll by default
|
||||
@@ -1,221 +1,575 @@
|
||||
$width: 700px;
|
||||
|
||||
html, body {
|
||||
width: 100%;
|
||||
line-height: 1.6;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
//margin: 0;
|
||||
//padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
html, body {
|
||||
margin: 0;
|
||||
height: 100%;
|
||||
line-height: 1.6;
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji;
|
||||
//background-color: #a9e7da;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
header {
|
||||
width: 100%;
|
||||
:root {
|
||||
--sidebar-bg: #f1f7ff;
|
||||
--content-bg: #ffffff;
|
||||
--item-bg: #cfe0ff;
|
||||
--subitem-bg: #b9d0ff;
|
||||
--border: #c0d3ff;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0366d6;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
code, pre, tt {
|
||||
padding: .2em .4em;
|
||||
margin: 0;
|
||||
font-size: 85%;
|
||||
background-color: rgba(27, 31, 35, .05);
|
||||
border-radius: 3px;
|
||||
font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin-top: 0.2em;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.1em;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
|
||||
thead {
|
||||
text-align: left;
|
||||
background-color: #eee;
|
||||
}
|
||||
|
||||
thead {
|
||||
border-bottom: 7px solid #fff;
|
||||
}
|
||||
|
||||
tr {
|
||||
border-bottom: 7px solid #fff;
|
||||
border-top: 7px solid #fff;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
tr:first-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
tr:last-child {
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
td, th {
|
||||
border-left: 5px solid #fff;
|
||||
border-right: 5px solid #fff;
|
||||
}
|
||||
|
||||
td:first-child, th:first-child {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
td:last-child, th:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
}
|
||||
|
||||
li + li {
|
||||
margin-top: .25em;
|
||||
}
|
||||
|
||||
/* ---------- Root ---------- */
|
||||
.layout {
|
||||
height: 100vh;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 20px 0 5px 10px;
|
||||
line-height: 1;
|
||||
/* ---------- Desktop layout ---------- */
|
||||
.app {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
background-color: #dccb921c;
|
||||
}
|
||||
|
||||
/* ---------- Sidebar ---------- */
|
||||
.sidebar {
|
||||
flex-shrink: 0;
|
||||
width: 262px;
|
||||
background: var(--sidebar-bg);
|
||||
//border-right: 2px solid var(--border);
|
||||
box-shadow: rgb(216, 231, 251) 0px 2px 4px 1px;
|
||||
overflow-y: auto;
|
||||
padding: 16px;
|
||||
|
||||
#turbolinks-header {
|
||||
|
||||
#logo {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a.button.rainbow {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
z-index: 0;
|
||||
background: linear-gradient(60deg, #f79533, #f37055, #ef4e7b, #a166ab, #5073b8, #1098ad, #07b39b, #6fba82);
|
||||
background-size: 300% 300%;
|
||||
animation: animatedgradient 5s linear infinite;
|
||||
color: #fff;
|
||||
font-size: 120%;
|
||||
padding: 0.4em 0.9em;
|
||||
border-radius: 3em;
|
||||
margin-right: 0;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
inset: -1px;
|
||||
border-radius: inherit;
|
||||
z-index: -1;
|
||||
background: linear-gradient(60deg, #f79533, #f37055, #ef4e7b, #a166ab, #5073b8, #1098ad, #07b39b, #6fba82);
|
||||
background-size: 300% 300%;
|
||||
animation: animatedgradient 5s linear infinite;
|
||||
filter: blur(8px);
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
&:hover::before {
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
&:active::before {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 0;
|
||||
padding-bottom: 5px;
|
||||
line-height: 1;
|
||||
|
||||
a {
|
||||
color: #000;
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
#title-and-subtitle {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
#download-section {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
margin-bottom: 25px;
|
||||
|
||||
div {
|
||||
font-size: 0.7em;
|
||||
margin-top: 5px;
|
||||
color: #646464;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animatedgradient {
|
||||
0% {
|
||||
background-position: 0% 0%;
|
||||
}
|
||||
25% {
|
||||
background-position: 50% 50%;
|
||||
}
|
||||
50% {
|
||||
background-position: 100% 10%;
|
||||
}
|
||||
75% {
|
||||
background-position: 50% 50%;
|
||||
}
|
||||
100% {
|
||||
background-position: 0% 0%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0 0 0 10px;
|
||||
color: #666;
|
||||
}
|
||||
/* ---------- Menu ---------- */
|
||||
.menu,
|
||||
.menu ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.menu-item {
|
||||
margin-bottom: 8px;
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
& > div {
|
||||
display: flex;
|
||||
margin-top: 5px;
|
||||
color: #468ed8;
|
||||
}
|
||||
}
|
||||
|
||||
nav {
|
||||
position: sticky;
|
||||
z-index: 1000000;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
//max-width: $width;
|
||||
//background-color: rgba(255, 255, 255, 1);
|
||||
//background-color: #dff8ff;
|
||||
background-color: #f1f7ff;
|
||||
.menu-item > input {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.menu-label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
//background-color: rgba(255, 255, 255, 0.9);
|
||||
//backdrop-filter: blur(10px);
|
||||
gap: 6px;
|
||||
//background: var(--item-bg);
|
||||
padding: 6px 0;
|
||||
cursor: pointer;
|
||||
font-size: 16px;
|
||||
|
||||
ul {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
a {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
padding: 5px 10px;
|
||||
border-radius: 15px;
|
||||
color: #468ed8;
|
||||
|
||||
span {
|
||||
padding-bottom: 1px;
|
||||
border-bottom: #468ed8 solid 1px;
|
||||
}
|
||||
|
||||
&:hover, &.active {
|
||||
text-decoration: none;
|
||||
background-color: #d5e6ff;
|
||||
//color: #222;
|
||||
//box-shadow: #222 0px 1px;
|
||||
|
||||
span {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
a.rainbow {
|
||||
background: linear-gradient(60deg, #f79533, #f37055, #ef4e7b, #a166ab, #5073b8, #1098ad, #07b39b, #6fba82);
|
||||
animation: animatedgradient 5s linear alternate infinite;
|
||||
background-size: 300% 300%;
|
||||
text-decoration: none;
|
||||
margin-right: 10px;
|
||||
color: #fff;
|
||||
//box-shadow: #222 0px 1px;
|
||||
|
||||
&:hover {
|
||||
//color: #000;
|
||||
animation-play-state: paused;
|
||||
}
|
||||
}
|
||||
&.active, &:hover {
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
//color: #0052a7;
|
||||
}
|
||||
|
||||
@keyframes animatedgradient {
|
||||
0% {
|
||||
background-position: 0% 0%;
|
||||
}
|
||||
25% {
|
||||
background-position: 50% 50%;
|
||||
}
|
||||
50% {
|
||||
background-position: 100% 10%;
|
||||
}
|
||||
75% {
|
||||
background-position: 50% 50%;
|
||||
}
|
||||
100% {
|
||||
background-position: 0% 0%;
|
||||
&.support {
|
||||
color: #c10029;
|
||||
}
|
||||
}
|
||||
|
||||
ul.submenu {
|
||||
padding-left: 28px;
|
||||
border-left: 1px solid var(--border);
|
||||
margin-left: 1px;
|
||||
font-size: 15px;
|
||||
max-height: 300px;
|
||||
overflow: auto;
|
||||
|
||||
a.active, a:hover {
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
//color: #0052a7;
|
||||
}
|
||||
}
|
||||
|
||||
/* ---------- Content ---------- */
|
||||
.content {
|
||||
max-width: 1048px;
|
||||
flex-shrink: 1;
|
||||
flex-grow: 1;
|
||||
background: var(--content-bg);
|
||||
overflow-y: auto;
|
||||
padding: 24px;
|
||||
|
||||
& > div {
|
||||
max-width: 700px;
|
||||
|
||||
.can-extend {
|
||||
width: calc(100vw - 310px) !important;
|
||||
max-width: 1000px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
max-width: $width;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
word-break: break-word;
|
||||
/* ---------- Mobile ---------- */
|
||||
#menu-toggle {
|
||||
display: none;
|
||||
}
|
||||
|
||||
img {
|
||||
.hamburger-bar {
|
||||
display: none;
|
||||
height: 60px;
|
||||
background: var(--sidebar-bg);
|
||||
//border-bottom: 2px solid var(--border);
|
||||
box-shadow: rgb(216, 231, 251) 0px 2px 4px 1px;
|
||||
padding: 8px;
|
||||
align-items: center;
|
||||
|
||||
#mobile-logo {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 10px;
|
||||
|
||||
& > div {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: black;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
& > span:last-child {
|
||||
margin-top: 4px;
|
||||
font-size: 13px;
|
||||
color: #666666;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.hamburger-label {
|
||||
background: var(--item-bg);
|
||||
padding: 10px 15px;
|
||||
border-radius: 15px;
|
||||
cursor: pointer;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
/* ---------- Mobile behavior ---------- */
|
||||
@media (max-width: 800px) {
|
||||
#turbolinks-header {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.hamburger-bar {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.app {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
position: fixed;
|
||||
top: 55px;
|
||||
//left: 0;
|
||||
right: 0;
|
||||
//bottom: 0;
|
||||
width: auto;
|
||||
transform: translateY(-100%);
|
||||
transition: transform 0.2s ease;
|
||||
z-index: 10;
|
||||
padding: 14px 24px 0 14px;
|
||||
}
|
||||
|
||||
/* FIX: checkbox now controls sidebar */
|
||||
#menu-toggle:checked ~ .app .sidebar {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
.content {
|
||||
padding-top: 24px;
|
||||
|
||||
& > div {
|
||||
max-width: unset;
|
||||
|
||||
.can-extend {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Toggle text */
|
||||
.close {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#menu-toggle:checked + .hamburger-bar .open {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#menu-toggle:checked + .hamburger-bar .close {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
pointer-events: none; /* closed = not clickable */
|
||||
}
|
||||
|
||||
#menu-toggle:checked ~ .app .sidebar {
|
||||
transform: translateY(0);
|
||||
pointer-events: auto; /* open = clickable */
|
||||
}
|
||||
|
||||
.hamburger-bar {
|
||||
position: relative;
|
||||
z-index: 20; /* always above sidebar */
|
||||
}
|
||||
}
|
||||
|
||||
/* ---------- Support Page ------------- */
|
||||
.support-buttons {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
column-gap: 40px;
|
||||
row-gap: 55px;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 70px;
|
||||
|
||||
/* Wrapper: each button keeps its mascot */
|
||||
.support-button-wrapper {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
height: 120px; /* ensures space for mascot below */
|
||||
}
|
||||
|
||||
/* Button shape + style */
|
||||
.support-button {
|
||||
width: 130px;
|
||||
height: 50px;
|
||||
border-radius: 22px;
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
|
||||
background: linear-gradient(145deg, #ffffff, #dce8ff);
|
||||
box-shadow:
|
||||
4px 4px 10px rgba(0,0,0,0.15),
|
||||
-4px -4px 10px rgba(255,255,255,0.7);
|
||||
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
||||
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Shine streak */
|
||||
.support-button::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -150%;
|
||||
width: 50%;
|
||||
height: 100%;
|
||||
background: linear-gradient(
|
||||
120deg,
|
||||
rgba(255,255,255,0) 0%,
|
||||
rgba(255,255,255,0.55) 50%,
|
||||
rgba(255,255,255,0) 100%
|
||||
);
|
||||
transform: skewX(-20deg);
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.support-button:hover::before {
|
||||
animation: shine-sweep 0.8s forwards;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
@keyframes shine-sweep {
|
||||
0% { left: -150%; }
|
||||
100% { left: 200%; }
|
||||
}
|
||||
|
||||
/* Button image */
|
||||
.support-button img {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
height: 100%;
|
||||
object-fit: contain;
|
||||
object-position: center;
|
||||
}
|
||||
|
||||
code, pre, tt {
|
||||
padding: .2em .4em;
|
||||
/* Hover lift */
|
||||
.support-button:hover {
|
||||
transform: scale(1.08);
|
||||
box-shadow:
|
||||
6px 6px 15px rgba(0,0,0,0.18),
|
||||
-6px -6px 15px rgba(255,255,255,0.8);
|
||||
}
|
||||
|
||||
/* Mascots */
|
||||
.mascot {
|
||||
position: absolute;
|
||||
width: 60px;
|
||||
bottom: -20px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%) translateY(0);
|
||||
transition: transform 0.3s;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.rabbit { width: 50px } /* long ears '^^ /*
|
||||
|
||||
/* Hover reactions */
|
||||
.support-button-wrapper:hover .cat { transform: translateX(-50%) translateY(-20px) rotate(-15deg); }
|
||||
.support-button-wrapper:hover .dog { transform: translateX(-50%) translateY(-20px) scaleX(-1); }
|
||||
.support-button-wrapper:hover .squirrel { transform: translateX(-50%) translateY(-20px) rotate(15deg); }
|
||||
.support-button-wrapper:hover .rabbit { transform: translateX(-50%) translateY(-20px) rotate(-10deg); }
|
||||
|
||||
.support-button img.paypal { width: 60%; margin-top: 6px; }
|
||||
.support-button img.github-sponsors { width: 110%; margin-top: 6px; }
|
||||
.support-button img.stripe { width: 51%; margin-top: 4px; }
|
||||
}
|
||||
|
||||
#changelog {
|
||||
margin-top: -20px;
|
||||
padding: 15px;
|
||||
|
||||
#support-link {
|
||||
margin: 0;
|
||||
font-size: 85%;
|
||||
background-color: rgba(27, 31, 35, .05);
|
||||
border-radius: 3px;
|
||||
font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
|
||||
white-space: normal;
|
||||
position: fixed;
|
||||
top: 15px;
|
||||
right: 10px;
|
||||
border-radius: 0.5em;
|
||||
padding: 0.15em 0.9em;
|
||||
font-size: 13px;
|
||||
background: #ffdbd5;
|
||||
/*background: #f91675;*/
|
||||
color: #950020;
|
||||
/*color: white;*/
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.3em;
|
||||
h1, h2 {
|
||||
margin-top: 20px;
|
||||
margin-bottom: 10px;
|
||||
font-size: 20px;
|
||||
background-color: #f1f7ff;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
h1, h2 {
|
||||
background-color: rgba(255, 255, 255, 0.14);
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.1em;
|
||||
font-weight: 500;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
|
||||
thead {
|
||||
text-align: left;
|
||||
background-color: #eee;
|
||||
}
|
||||
|
||||
thead {
|
||||
border-bottom: 7px solid #fff;
|
||||
}
|
||||
|
||||
tr {
|
||||
border-bottom: 7px solid #fff;
|
||||
border-top: 7px solid #fff;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
tr:first-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
tr:last-child {
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
td, th {
|
||||
border-left: 5px solid #fff;
|
||||
border-right: 5px solid #fff;
|
||||
}
|
||||
|
||||
td:first-child, th:first-child {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
td:last-child, th:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
}
|
||||
|
||||
li + li {
|
||||
margin-top: .25em;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0366d6;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
ul {
|
||||
margin: 0 0 5px 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
function slugify(text) {
|
||||
return text.toLowerCase().trim().replace(/[^\w\s-]/g, '').replace(/\s+/g, '-');
|
||||
}
|
||||
|
||||
function buildTOC() {
|
||||
const urlParts = window.location.pathname.split('/');
|
||||
const currentPage = urlParts[urlParts.length - 1] || ""; // fallback
|
||||
const tocContainer = currentPage === "" ? document.querySelector('.submenu') : document.querySelector(`.submenu.${currentPage}`);
|
||||
if (!tocContainer) return;
|
||||
tocContainer.innerHTML = ''; // clear old TOC
|
||||
const headings = document.querySelectorAll('.content h1, .content h2');
|
||||
if (!headings.length || headings.length === 1) {
|
||||
tocContainer.style.display = 'none';
|
||||
return;
|
||||
}
|
||||
const usedIds = new Set();
|
||||
headings.forEach((heading) => {
|
||||
let id = heading.id;
|
||||
if (!id) {
|
||||
id = slugify(heading.textContent);
|
||||
let uniqueId = id;
|
||||
let i = 1;
|
||||
while (usedIds.has(uniqueId) || document.getElementById(uniqueId)) {
|
||||
uniqueId = `${id}-${i++}`;
|
||||
}
|
||||
id = uniqueId;
|
||||
heading.id = id;
|
||||
}
|
||||
usedIds.add(id);
|
||||
const li = document.createElement('li');
|
||||
li.className = `toc-${heading.tagName.toLowerCase()}`;
|
||||
const a = document.createElement('a');
|
||||
a.href = `#${id}`;
|
||||
a.textContent = heading.textContent;
|
||||
a.setAttribute('data-turbolinks', 'false');
|
||||
li.appendChild(a);
|
||||
tocContainer.appendChild(li);
|
||||
});
|
||||
|
||||
const hash = window.location.hash;
|
||||
if (!hash) return;
|
||||
// remove existing .active, if exists
|
||||
const existingLink = document.querySelector(`.submenu a.active`);
|
||||
if (existingLink) {
|
||||
existingLink.classList.remove('active');
|
||||
}
|
||||
// add new .active, if exists
|
||||
const link = document.querySelector(`a[href="${hash}"]`);
|
||||
if (link) {
|
||||
link.classList.add('active');
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('turbolinks:load', buildTOC);
|
||||
window.addEventListener('hashchange', buildTOC);
|
||||
@@ -0,0 +1,2 @@
|
||||
(function(){var t=this;(function(){(function(){this.Turbolinks={supported:function(){return null!=window.history.pushState&&null!=window.requestAnimationFrame&&null!=window.addEventListener}(),visit:function(t,r){return e.controller.visit(t,r)},clearCache:function(){return e.controller.clearCache()},setProgressBarDelay:function(t){return e.controller.setProgressBarDelay(t)}}}).call(this)}).call(t);var e=t.Turbolinks;(function(){(function(){var t,r,n,o=[].slice;e.copyObject=function(t){var e,r,n;r={};for(e in t)n=t[e],r[e]=n;return r},e.closest=function(e,r){return t.call(e,r)},t=function(){var t,e;return t=document.documentElement,null!=(e=t.closest)?e:function(t){var e;for(e=this;e;){if(e.nodeType===Node.ELEMENT_NODE&&r.call(e,t))return e;e=e.parentNode}}}(),e.defer=function(t){return setTimeout(t,1)},e.throttle=function(t){var e;return e=null,function(){var r;return r=1<=arguments.length?o.call(arguments,0):[],null!=e?e:e=requestAnimationFrame(function(n){return function(){return e=null,t.apply(n,r)}}(this))}},e.dispatch=function(t,e){var r,o,i,s,a,u;return a=null!=e?e:{},u=a.target,r=a.cancelable,o=a.data,i=document.createEvent("Events"),i.initEvent(t,!0,r===!0),i.data=null!=o?o:{},i.cancelable&&!n&&(s=i.preventDefault,i.preventDefault=function(){return this.defaultPrevented||Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}}),s.call(this)}),(null!=u?u:document).dispatchEvent(i),i},n=function(){var t;return t=document.createEvent("Events"),t.initEvent("test",!0,!0),t.preventDefault(),t.defaultPrevented}(),e.match=function(t,e){return r.call(t,e)},r=function(){var t,e,r,n;return t=document.documentElement,null!=(e=null!=(r=null!=(n=t.matchesSelector)?n:t.webkitMatchesSelector)?r:t.msMatchesSelector)?e:t.mozMatchesSelector}(),e.uuid=function(){var t,e,r;for(r="",t=e=1;36>=e;t=++e)r+=9===t||14===t||19===t||24===t?"-":15===t?"4":20===t?(Math.floor(4*Math.random())+8).toString(16):Math.floor(15*Math.random()).toString(16);return r}}).call(this),function(){e.Location=function(){function t(t){var e,r;null==t&&(t=""),r=document.createElement("a"),r.href=t.toString(),this.absoluteURL=r.href,e=r.hash.length,2>e?this.requestURL=this.absoluteURL:(this.requestURL=this.absoluteURL.slice(0,-e),this.anchor=r.hash.slice(1))}var e,r,n,o;return t.wrap=function(t){return t instanceof this?t:new this(t)},t.prototype.getOrigin=function(){return this.absoluteURL.split("/",3).join("/")},t.prototype.getPath=function(){var t,e;return null!=(t=null!=(e=this.requestURL.match(/\/\/[^\/]*(\/[^?;]*)/))?e[1]:void 0)?t:"/"},t.prototype.getPathComponents=function(){return this.getPath().split("/").slice(1)},t.prototype.getLastPathComponent=function(){return this.getPathComponents().slice(-1)[0]},t.prototype.getExtension=function(){var t,e;return null!=(t=null!=(e=this.getLastPathComponent().match(/\.[^.]*$/))?e[0]:void 0)?t:""},t.prototype.isHTML=function(){return this.getExtension().match(/^(?:|\.(?:htm|html|xhtml))$/)},t.prototype.isPrefixedBy=function(t){var e;return e=r(t),this.isEqualTo(t)||o(this.absoluteURL,e)},t.prototype.isEqualTo=function(t){return this.absoluteURL===(null!=t?t.absoluteURL:void 0)},t.prototype.toCacheKey=function(){return this.requestURL},t.prototype.toJSON=function(){return this.absoluteURL},t.prototype.toString=function(){return this.absoluteURL},t.prototype.valueOf=function(){return this.absoluteURL},r=function(t){return e(t.getOrigin()+t.getPath())},e=function(t){return n(t,"/")?t:t+"/"},o=function(t,e){return t.slice(0,e.length)===e},n=function(t,e){return t.slice(-e.length)===e},t}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.HttpRequest=function(){function r(r,n,o){this.delegate=r,this.requestCanceled=t(this.requestCanceled,this),this.requestTimedOut=t(this.requestTimedOut,this),this.requestFailed=t(this.requestFailed,this),this.requestLoaded=t(this.requestLoaded,this),this.requestProgressed=t(this.requestProgressed,this),this.url=e.Location.wrap(n).requestURL,this.referrer=e.Location.wrap(o).absoluteURL,this.createXHR()}return r.NETWORK_FAILURE=0,r.TIMEOUT_FAILURE=-1,r.timeout=60,r.prototype.send=function(){var t;return this.xhr&&!this.sent?(this.notifyApplicationBeforeRequestStart(),this.setProgress(0),this.xhr.send(),this.sent=!0,"function"==typeof(t=this.delegate).requestStarted?t.requestStarted():void 0):void 0},r.prototype.cancel=function(){return this.xhr&&this.sent?this.xhr.abort():void 0},r.prototype.requestProgressed=function(t){return t.lengthComputable?this.setProgress(t.loaded/t.total):void 0},r.prototype.requestLoaded=function(){return this.endRequest(function(t){return function(){var e;return 200<=(e=t.xhr.status)&&300>e?t.delegate.requestCompletedWithResponse(t.xhr.responseText,t.xhr.getResponseHeader("Turbolinks-Location")):(t.failed=!0,t.delegate.requestFailedWithStatusCode(t.xhr.status,t.xhr.responseText))}}(this))},r.prototype.requestFailed=function(){return this.endRequest(function(t){return function(){return t.Line truncated
|
||||
},r.prototype.cacheSnapshot=function(){var t,r;return this.shouldCacheSnapshot()?(this.notifyApplicationBeforeCachingSnapshot(),r=this.view.getSnapshot(),t=this.lastRenderedLocation,e.defer(function(e){return function(){return e.cache.put(t,r.clone())}}(this))):void 0},r.prototype.scrollToAnchor=function(t){var e;return(e=this.view.getElementForAnchor(t))?this.scrollToElement(e):this.scrollToPosition({x:0,y:0})},r.prototype.scrollToElement=function(t){return this.scrollManager.scrollToElement(t)},r.prototype.scrollToPosition=function(t){return this.scrollManager.scrollToPosition(t)},r.prototype.scrollPositionChanged=function(t){var e;return e=this.getCurrentRestorationData(),e.scrollPosition=t},r.prototype.render=function(t,e){return this.view.render(t,e)},r.prototype.viewInvalidated=function(){return this.adapter.pageInvalidated()},r.prototype.viewWillRender=function(t){return this.notifyApplicationBeforeRender(t)},r.prototype.viewRendered=function(){return this.lastRenderedLocation=this.currentVisit.location,this.notifyApplicationAfterRender()},r.prototype.pageLoaded=function(){return this.lastRenderedLocation=this.location,this.notifyApplicationAfterPageLoad()},r.prototype.clickCaptured=function(){return removeEventListener("click",this.clickBubbled,!1),addEventListener("click",this.clickBubbled,!1)},r.prototype.clickBubbled=function(t){var e,r,n;return this.enabled&&this.clickEventIsSignificant(t)&&(r=this.getVisitableLinkForNode(t.target))&&(n=this.getVisitableLocationForLink(r))&&this.applicationAllowsFollowingLinkToLocation(r,n)?(t.preventDefault(),e=this.getActionForLink(r),this.visit(n,{action:e})):void 0},r.prototype.applicationAllowsFollowingLinkToLocation=function(t,e){var r;return r=this.notifyApplicationAfterClickingLinkToLocation(t,e),!r.defaultPrevented},r.prototype.applicationAllowsVisitingLocation=function(t){var e;return e=this.notifyApplicationBeforeVisitingLocation(t),!e.defaultPrevented},r.prototype.notifyApplicationAfterClickingLinkToLocation=function(t,r){return e.dispatch("turbolinks:click",{target:t,data:{url:r.absoluteURL},cancelable:!0})},r.prototype.notifyApplicationBeforeVisitingLocation=function(t){return e.dispatch("turbolinks:before-visit",{data:{url:t.absoluteURL},cancelable:!0})},r.prototype.notifyApplicationAfterVisitingLocation=function(t){return e.dispatch("turbolinks:visit",{data:{url:t.absoluteURL}})},r.prototype.notifyApplicationBeforeCachingSnapshot=function(){return e.dispatch("turbolinks:before-cache")},r.prototype.notifyApplicationBeforeRender=function(t){return e.dispatch("turbolinks:before-render",{data:{newBody:t}})},r.prototype.notifyApplicationAfterRender=function(){return e.dispatch("turbolinks:render")},r.prototype.notifyApplicationAfterPageLoad=function(t){return null==t&&(t={}),e.dispatch("turbolinks:load",{data:{url:this.location.absoluteURL,timing:t}})},r.prototype.startVisit=function(t,e,r){var n;return null!=(n=this.currentVisit)&&n.cancel(),this.currentVisit=this.createVisit(t,e,r),this.currentVisit.start(),this.notifyApplicationAfterVisitingLocation(t)},r.prototype.createVisit=function(t,r,n){var o,i,s,a,u;return i=null!=n?n:{},a=i.restorationIdentifier,s=i.restorationData,o=i.historyChanged,u=new e.Visit(this,t,r),u.restorationIdentifier=null!=a?a:e.uuid(),u.restorationData=e.copyObject(s),u.historyChanged=o,u.referrer=this.location,u},r.prototype.visitCompleted=function(t){return this.notifyApplicationAfterPageLoad(t.getTimingMetrics())},r.prototype.clickEventIsSignificant=function(t){return!(t.defaultPrevented||t.target.isContentEditable||t.which>1||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey)},r.prototype.getVisitableLinkForNode=function(t){return this.nodeIsVisitable(t)?e.closest(t,"a[href]:not([target]):not([download])"):void 0},r.prototype.getVisitableLocationForLink=function(t){var r;return r=new e.Location(t.getAttribute("href")),this.locationIsVisitable(r)?r:void 0},r.prototype.getActionForLink=function(t){var e;return null!=(e=t.getAttribute("data-turbolinks-action"))?e:"advance"},r.prototype.nodeIsVisitable=function(t){var r;return(r=e.closest(t,"[data-turbolinks]"))?"false"!==r.getAttribute("data-turbolinks"):!0},r.prototype.locationIsVisitable=function(t){return t.isPrefixedBy(this.view.getRootLocation())&&t.isHTML()},r.prototype.getCurrentRestorationData=function(){return this.getRestorationDataForIdentifier(this.restorationIdentifier)},r.prototype.getRestorationDataForIdentifier=function(t){var e;return null!=(e=this.restorationData)[t]?e[t]:e[t]={}},r}()}.call(this),function(){!function(){var t,e;if((t=e=document.currentScript)&&!e.hasAttribute("data-turbolinks-suppress-warning"))for(;t=t.parentNode;)if(t===document.body)return console.warn("You are loading Turbolinks from a <script> element inside the <body> element. This is probably not what you meant to do!\n\nLoad your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\nFor more information,Line truncated
|
||||
@@ -16,9 +16,10 @@
|
||||
|
||||
<body>
|
||||
|
||||
<section class="page">
|
||||
<div id="changelog">
|
||||
<a id="support-link" href="https://alt-tab.app/support">Support this project ❤️</a>
|
||||
{{ content }}
|
||||
</section>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-us">
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
@@ -7,18 +7,6 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="Windows alt-tab on macOS">
|
||||
|
||||
<title>
|
||||
{% if page.title == "Introduction" %} {{ site.title }} - {{ site.description }}
|
||||
{% else %} {{ site.title }} - {{ page.title }} {% endif %}
|
||||
</title>
|
||||
|
||||
<style type="text/css">
|
||||
{% capture main %}
|
||||
{% include main.scss %}
|
||||
{% endcapture %}
|
||||
{{ main | scssify }}
|
||||
</style>
|
||||
|
||||
<!-- Generated with https://realfavicongenerator.net/ -->
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="{{ site.baseurl }}public/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{{ site.baseurl }}public/favicon-32x32.png">
|
||||
@@ -28,38 +16,91 @@
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
|
||||
<script>
|
||||
(function(){var t=this;(function(){(function(){this.Turbolinks={supported:function(){return null!=window.history.pushState&&null!=window.requestAnimationFrame&&null!=window.addEventListener}(),visit:function(t,r){return e.controller.visit(t,r)},clearCache:function(){return e.controller.clearCache()},setProgressBarDelay:function(t){return e.controller.setProgressBarDelay(t)}}}).call(this)}).call(t);var e=t.Turbolinks;(function(){(function(){var t,r,n,o=[].slice;e.copyObject=function(t){var e,r,n;r={};for(e in t)n=t[e],r[e]=n;return r},e.closest=function(e,r){return t.call(e,r)},t=function(){var t,e;return t=document.documentElement,null!=(e=t.closest)?e:function(t){var e;for(e=this;e;){if(e.nodeType===Node.ELEMENT_NODE&&r.call(e,t))return e;e=e.parentNode}}}(),e.defer=function(t){return setTimeout(t,1)},e.throttle=function(t){var e;return e=null,function(){var r;return r=1<=arguments.length?o.call(arguments,0):[],null!=e?e:e=requestAnimationFrame(function(n){return function(){return e=null,t.apply(n,r)}}(this))}},e.dispatch=function(t,e){var r,o,i,s,a,u;return a=null!=e?e:{},u=a.target,r=a.cancelable,o=a.data,i=document.createEvent("Events"),i.initEvent(t,!0,r===!0),i.data=null!=o?o:{},i.cancelable&&!n&&(s=i.preventDefault,i.preventDefault=function(){return this.defaultPrevented||Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}}),s.call(this)}),(null!=u?u:document).dispatchEvent(i),i},n=function(){var t;return t=document.createEvent("Events"),t.initEvent("test",!0,!0),t.preventDefault(),t.defaultPrevented}(),e.match=function(t,e){return r.call(t,e)},r=function(){var t,e,r,n;return t=document.documentElement,null!=(e=null!=(r=null!=(n=t.matchesSelector)?n:t.webkitMatchesSelector)?r:t.msMatchesSelector)?e:t.mozMatchesSelector}(),e.uuid=function(){var t,e,r;for(r="",t=e=1;36>=e;t=++e)r+=9===t||14===t||19===t||24===t?"-":15===t?"4":20===t?(Math.floor(4*Math.random())+8).toString(16):Math.floor(15*Math.random()).toString(16);return r}}).call(this),function(){e.Location=function(){function t(t){var e,r;null==t&&(t=""),r=document.createElement("a"),r.href=t.toString(),this.absoluteURL=r.href,e=r.hash.length,2>e?this.requestURL=this.absoluteURL:(this.requestURL=this.absoluteURL.slice(0,-e),this.anchor=r.hash.slice(1))}var e,r,n,o;return t.wrap=function(t){return t instanceof this?t:new this(t)},t.prototype.getOrigin=function(){return this.absoluteURL.split("/",3).join("/")},t.prototype.getPath=function(){var t,e;return null!=(t=null!=(e=this.requestURL.match(/\/\/[^\/]*(\/[^?;]*)/))?e[1]:void 0)?t:"/"},t.prototype.getPathComponents=function(){return this.getPath().split("/").slice(1)},t.prototype.getLastPathComponent=function(){return this.getPathComponents().slice(-1)[0]},t.prototype.getExtension=function(){var t,e;return null!=(t=null!=(e=this.getLastPathComponent().match(/\.[^.]*$/))?e[0]:void 0)?t:""},t.prototype.isHTML=function(){return this.getExtension().match(/^(?:|\.(?:htm|html|xhtml))$/)},t.prototype.isPrefixedBy=function(t){var e;return e=r(t),this.isEqualTo(t)||o(this.absoluteURL,e)},t.prototype.isEqualTo=function(t){return this.absoluteURL===(null!=t?t.absoluteURL:void 0)},t.prototype.toCacheKey=function(){return this.requestURL},t.prototype.toJSON=function(){return this.absoluteURL},t.prototype.toString=function(){return this.absoluteURL},t.prototype.valueOf=function(){return this.absoluteURL},r=function(t){return e(t.getOrigin()+t.getPath())},e=function(t){return n(t,"/")?t:t+"/"},o=function(t,e){return t.slice(0,e.length)===e},n=function(t,e){return t.slice(-e.length)===e},t}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.HttpRequest=function(){function r(r,n,o){this.delegate=r,this.requestCanceled=t(this.requestCanceled,this),this.requestTimedOut=t(this.requestTimedOut,this),this.requestFailed=t(this.requestFailed,this),this.requestLoaded=t(this.requestLoaded,this),this.requestProgressed=t(this.requestProgressed,this),this.url=e.Location.wrap(n).requestURL,this.referrer=e.Location.wrap(o).absoluteURL,this.createXHR()}return r.NETWORK_FAILURE=0,r.TIMEOUT_FAILURE=-1,r.timeout=60,r.prototype.send=function(){var t;return this.xhr&&!this.sent?(this.notifyApplicationBeforeRequestStart(),this.setProgress(0),this.xhr.send(),this.sent=!0,"function"==typeof(t=this.delegate).requestStarted?t.requestStarted():void 0):void 0},r.prototype.cancel=function(){return this.xhr&&this.sent?this.xhr.abort():void 0},r.prototype.requestProgressed=function(t){return t.lengthComputable?this.setProgress(t.loaded/t.total):void 0},r.prototype.requestLoaded=function(){return this.endRequest(function(t){return function(){var e;return 200<=(e=t.xhr.status)&&300>e?t.delegate.requestCompletedWithResponse(t.xhr.responseText,t.xhr.getResponseHeader("Turbolinks-Location")):(t.failed=!0,t.delegate.requestFailedWithStatusCode(t.xhr.status,t.xhr.responseText))}}(this))},r.prototype.requestFailed=function(){return this.endRequest(function(t){return function(){rLine truncated
|
||||
},r.prototype.cacheSnapshot=function(){var t,r;return this.shouldCacheSnapshot()?(this.notifyApplicationBeforeCachingSnapshot(),r=this.view.getSnapshot(),t=this.lastRenderedLocation,e.defer(function(e){return function(){return e.cache.put(t,r.clone())}}(this))):void 0},r.prototype.scrollToAnchor=function(t){var e;return(e=this.view.getElementForAnchor(t))?this.scrollToElement(e):this.scrollToPosition({x:0,y:0})},r.prototype.scrollToElement=function(t){return this.scrollManager.scrollToElement(t)},r.prototype.scrollToPosition=function(t){return this.scrollManager.scrollToPosition(t)},r.prototype.scrollPositionChanged=function(t){var e;return e=this.getCurrentRestorationData(),e.scrollPosition=t},r.prototype.render=function(t,e){return this.view.render(t,e)},r.prototype.viewInvalidated=function(){return this.adapter.pageInvalidated()},r.prototype.viewWillRender=function(t){return this.notifyApplicationBeforeRender(t)},r.prototype.viewRendered=function(){return this.lastRenderedLocation=this.currentVisit.location,this.notifyApplicationAfterRender()},r.prototype.pageLoaded=function(){return this.lastRenderedLocation=this.location,this.notifyApplicationAfterPageLoad()},r.prototype.clickCaptured=function(){return removeEventListener("click",this.clickBubbled,!1),addEventListener("click",this.clickBubbled,!1)},r.prototype.clickBubbled=function(t){var e,r,n;return this.enabled&&this.clickEventIsSignificant(t)&&(r=this.getVisitableLinkForNode(t.target))&&(n=this.getVisitableLocationForLink(r))&&this.applicationAllowsFollowingLinkToLocation(r,n)?(t.preventDefault(),e=this.getActionForLink(r),this.visit(n,{action:e})):void 0},r.prototype.applicationAllowsFollowingLinkToLocation=function(t,e){var r;return r=this.notifyApplicationAfterClickingLinkToLocation(t,e),!r.defaultPrevented},r.prototype.applicationAllowsVisitingLocation=function(t){var e;return e=this.notifyApplicationBeforeVisitingLocation(t),!e.defaultPrevented},r.prototype.notifyApplicationAfterClickingLinkToLocation=function(t,r){return e.dispatch("turbolinks:click",{target:t,data:{url:r.absoluteURL},cancelable:!0})},r.prototype.notifyApplicationBeforeVisitingLocation=function(t){return e.dispatch("turbolinks:before-visit",{data:{url:t.absoluteURL},cancelable:!0})},r.prototype.notifyApplicationAfterVisitingLocation=function(t){return e.dispatch("turbolinks:visit",{data:{url:t.absoluteURL}})},r.prototype.notifyApplicationBeforeCachingSnapshot=function(){return e.dispatch("turbolinks:before-cache")},r.prototype.notifyApplicationBeforeRender=function(t){return e.dispatch("turbolinks:before-render",{data:{newBody:t}})},r.prototype.notifyApplicationAfterRender=function(){return e.dispatch("turbolinks:render")},r.prototype.notifyApplicationAfterPageLoad=function(t){return null==t&&(t={}),e.dispatch("turbolinks:load",{data:{url:this.location.absoluteURL,timing:t}})},r.prototype.startVisit=function(t,e,r){var n;return null!=(n=this.currentVisit)&&n.cancel(),this.currentVisit=this.createVisit(t,e,r),this.currentVisit.start(),this.notifyApplicationAfterVisitingLocation(t)},r.prototype.createVisit=function(t,r,n){var o,i,s,a,u;return i=null!=n?n:{},a=i.restorationIdentifier,s=i.restorationData,o=i.historyChanged,u=new e.Visit(this,t,r),u.restorationIdentifier=null!=a?a:e.uuid(),u.restorationData=e.copyObject(s),u.historyChanged=o,u.referrer=this.location,u},r.prototype.visitCompleted=function(t){return this.notifyApplicationAfterPageLoad(t.getTimingMetrics())},r.prototype.clickEventIsSignificant=function(t){return!(t.defaultPrevented||t.target.isContentEditable||t.which>1||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey)},r.prototype.getVisitableLinkForNode=function(t){return this.nodeIsVisitable(t)?e.closest(t,"a[href]:not([target]):not([download])"):void 0},r.prototype.getVisitableLocationForLink=function(t){var r;return r=new e.Location(t.getAttribute("href")),this.locationIsVisitable(r)?r:void 0},r.prototype.getActionForLink=function(t){var e;return null!=(e=t.getAttribute("data-turbolinks-action"))?e:"advance"},r.prototype.nodeIsVisitable=function(t){var r;return(r=e.closest(t,"[data-turbolinks]"))?"false"!==r.getAttribute("data-turbolinks"):!0},r.prototype.locationIsVisitable=function(t){return t.isPrefixedBy(this.view.getRootLocation())&&t.isHTML()},r.prototype.getCurrentRestorationData=function(){return this.getRestorationDataForIdentifier(this.restorationIdentifier)},r.prototype.getRestorationDataForIdentifier=function(t){var e;return null!=(e=this.restorationData)[t]?e[t]:e[t]={}},r}()}.call(this),function(){!function(){var t,e;if((t=e=document.currentScript)&&!e.hasAttribute("data-turbolinks-suppress-warning"))for(;t=t.parentNode;)if(t===document.body)return console.warn("You are loading Turbolinks from a <script> element inside the <body> element. This is probably not what you meant to do!\n\nLoad your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\nFor more infoLine truncated
|
||||
</script>
|
||||
<title>
|
||||
{% if page.name == "introduction.md" %} {{ site.title }} - {{ site.description }}
|
||||
{% else %} {{ site.title }} - {{ page.name | remove: ".md" }} {% endif %}
|
||||
</title>
|
||||
|
||||
<style type="text/css">
|
||||
{% capture main %}
|
||||
{% include main.scss %}
|
||||
{% endcapture %}
|
||||
{{ main | scssify }}
|
||||
</style>
|
||||
|
||||
<script>{% include turbolinks.js %}</script>
|
||||
<script>{% include table-of-contents.js %}</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<header>
|
||||
<div>
|
||||
<a href="{{ site.baseurl }}" aria-label="Homepage"><img src="{{ site.baseurl }}public/android-chrome-256x256.png" width="100" height="100" alt="AltTab logo"/></a>
|
||||
<div>
|
||||
<h1><a href="{{ site.baseurl }}">{{ site.title }}</a></h1>
|
||||
<p>{{ site.github.project_tagline }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a class="rainbow" href="{{ site.github.latest_release.assets[0].browser_download_url }}">Download</a></li>
|
||||
<li><a class="{% if page.name == 'Introduction.md' %}active{% endif %}" href="{{ site.baseurl }}"><span>Introduction</span></a></li>
|
||||
<li><a class="{% if page.name == 'Changelog.md' %}active{% endif %}" href="{{ site.baseurl }}changelog"><span>Release notes</span></a></li>
|
||||
<li><a class="{% if page.name == 'Contributing.md' %}active{% endif %}" href="{{ site.baseurl }}contributing"><span>Contributing</span></a></li>
|
||||
<li><a class="{% if page.name == 'Thanks.md' %}active{% endif %}" href="{{ site.baseurl }}thanks"><span>Thanks</span></a></li>
|
||||
<li><a href="{{ site.github.repository_url }}"><span>GitHub</span></a></li>
|
||||
<li><a class="{% if page.name == 'Support.md' %}active{% endif %}" href="{{ site.baseurl }}support"><span>Support this project ❤️</span></a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<div class="layout">
|
||||
<input type="checkbox" id="menu-toggle" />
|
||||
|
||||
<section class="page">
|
||||
{{ content }}
|
||||
</section>
|
||||
<div class="hamburger-bar" style="line-height: 1">
|
||||
<div id="mobile-logo">
|
||||
<a href="{{ site.baseurl }}" aria-label="Homepage"><img src="{{ site.baseurl }}public/android-chrome-256x256.png" width="42" height="42" alt="AltTab logo" /></a>
|
||||
<div>
|
||||
<span><a href="{{ site.baseurl }}">{{ site.title }}</a></span>
|
||||
<span>{{ site.github.project_tagline }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<label for="menu-toggle" class="hamburger-label">
|
||||
<span class="open">Menu</span>
|
||||
<span class="close">Close</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="app">
|
||||
<aside class="sidebar">
|
||||
<div id="turbolinks-header" data-turbolinks-permanent>
|
||||
<div id="logo">
|
||||
<a href="{{ site.baseurl }}" aria-label="Homepage"><img src="{{ site.baseurl }}public/android-chrome-256x256.png" width="100" height="100" alt="AltTab logo" style="display:block" /></a>
|
||||
<div id="title-and-subtitle">
|
||||
<h1><a href="{{ site.baseurl }}">{{ site.title }}</a></h1>
|
||||
<p>{{ site.github.project_tagline }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="download-section">
|
||||
<a class="button rainbow" href="{{ site.github.latest_release.assets[0].browser_download_url }}">Download</a>
|
||||
<div id="downloads">7.2M downloads</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ul class="menu">
|
||||
<li class="menu-item">
|
||||
<a class="menu-label button {% if page.name == 'introduction.md' %}active{% endif %}" href="{{ site.baseurl }}"><span>Introduction</span></a>
|
||||
<ul class="submenu"></ul>
|
||||
</li>
|
||||
<li class="menu-item">
|
||||
<a class="menu-label button {% if page.name == 'changelog.md' %}active{% endif %}" href="{{ site.baseurl }}changelog"><span>Release notes</span></a>
|
||||
<ul class="submenu changelog"></ul>
|
||||
</li>
|
||||
<li class="menu-item">
|
||||
<a class="menu-label button {% if page.name == 'contributing.md' %}active{% endif %}" href="{{ site.baseurl }}contributing"><span>Contributing</span></a>
|
||||
<ul class="submenu contributing"></ul>
|
||||
</li>
|
||||
<li class="menu-item">
|
||||
<a class="menu-label button {% if page.name == 'thanks.md' %}active{% endif %}" href="{{ site.baseurl }}thanks"><span>Thanks</span></a>
|
||||
<ul class="submenu thanks"></ul>
|
||||
</li>
|
||||
<li class="menu-item">
|
||||
<a class="menu-label button external" href="{{ site.github.repository_url }}"><span style="display:flex; gap:3px;">GitHub <img src="data:image/svg+xml;charset=utf-8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgdmlld0JveD0iMCAwIDEyIDEyIj4KCTx0aXRsZT4KCQlleHRlcm5hbCBsaW5rCgk8L3RpdGxlPgoJPHBhdGggZmlsbD0iIzM2YyIgZD0iTTYgMWg1djVMOC44NiAzLjg1IDQuNyA4IDQgNy4zbDQuMTUtNC4xNnpNMiAzaDJ2MUgydjZoNlY4aDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMVY0YTEgMSAwIDAgMSAxLTEiLz4KPC9zdmc+Cg==" /></span></a>
|
||||
</li>
|
||||
<li class="menu-item">
|
||||
<a class="menu-label button support {% if page.name == 'support.md' %}active{% endif %}" href="{{ site.baseurl }}support"><span>Support this project ❤️</span></a>
|
||||
<ul class="submenu support"></ul>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
|
||||
<main class="content">
|
||||
<div{% if page.name == 'changelog.md' %} id="changelog"{% endif %}>
|
||||
{{ content }}
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1 @@
|
||||
/* https://alt-tab.app/:splat 301!
|
||||
@@ -1,4 +1,4 @@
|
||||
# Acknowledgments
|
||||
## Acknowledgments
|
||||
|
||||
These third-party libraries are used:
|
||||
|
||||
@@ -8,9 +8,6 @@ These third-party libraries are used:
|
||||
**Sparkle**
|
||||
[Website](https://github.com/sparkle-project/Sparkle) - [License](https://github.com/sparkle-project/Sparkle/blob/master/LICENSE)
|
||||
|
||||
**SwiftyMarkdown**
|
||||
[Website](https://github.com/SimonFairbairn/SwiftyMarkdown) - [MIT License](https://github.com/SimonFairbairn/SwiftyMarkdown/blob/master/LICENSE)
|
||||
|
||||
**LetsMove**
|
||||
[Website](https://github.com/potionfactory/LetsMove) - [Public domain](https://github.com/potionfactory/LetsMove#license)
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
layout: changelog-bare
|
||||
---
|
||||
|
||||
{% include_relative changelog.md %}
|
||||
@@ -1,4 +1,807 @@
|
||||
# Release notes
|
||||
---
|
||||
permalink: /changelog
|
||||
sitemap: true
|
||||
---
|
||||
|
||||
# [10.9.0](https://github.com/lwouis/alt-tab-macos/compare/v10.8.0...v10.9.0) (2026-03-22)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* panel may re-center when searching ([a1f8b18](https://github.com/lwouis/alt-tab-macos/commit/a1f8b18))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* new setting to not capture windows in background (closes [#5337](https://github.com/lwouis/alt-tab-macos/issues/5337)) ([5ed6c1d](https://github.com/lwouis/alt-tab-macos/commit/5ed6c1d)), closes [#5371](https://github.com/lwouis/alt-tab-macos/issues/5371)
|
||||
* show better ui when there are no window (closes [#283](https://github.com/lwouis/alt-tab-macos/issues/283)) ([9f3e20a](https://github.com/lwouis/alt-tab-macos/commit/9f3e20a))
|
||||
* update fr/en localizations ([630527e](https://github.com/lwouis/alt-tab-macos/commit/630527e))
|
||||
|
||||
# [10.8.0](https://github.com/lwouis/alt-tab-macos/compare/v10.7.0...v10.8.0) (2026-03-20)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* allow quitting multiple apps in a row (follow-up on [#5421](https://github.com/lwouis/alt-tab-macos/issues/5421)) ([56c1927](https://github.com/lwouis/alt-tab-macos/commit/56c1927))
|
||||
* apps with no open window might not show up (closes [#5424](https://github.com/lwouis/alt-tab-macos/issues/5424)) ([8962ad1](https://github.com/lwouis/alt-tab-macos/commit/8962ad1))
|
||||
* avoid repeating shortcut that was released (closes [#5429](https://github.com/lwouis/alt-tab-macos/issues/5429)) ([3b1c7c7](https://github.com/lwouis/alt-tab-macos/commit/3b1c7c7))
|
||||
* switcher might show empty on rare occasions (closes [#5432](https://github.com/lwouis/alt-tab-macos/issues/5432)) ([6105bb3](https://github.com/lwouis/alt-tab-macos/commit/6105bb3))
|
||||
* window order in the switcher might be incorrect ([#5346](https://github.com/lwouis/alt-tab-macos/issues/5346)) ([545d81d](https://github.com/lwouis/alt-tab-macos/commit/545d81d))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* allow next-window shortcut without modifiers (closes [#5433](https://github.com/lwouis/alt-tab-macos/issues/5433)) ([15ede93](https://github.com/lwouis/alt-tab-macos/commit/15ede93))
|
||||
* stabilize ui during search (closes [#5431](https://github.com/lwouis/alt-tab-macos/issues/5431)) ([7dd11cf](https://github.com/lwouis/alt-tab-macos/commit/7dd11cf))
|
||||
|
||||
# [10.7.0](https://github.com/lwouis/alt-tab-macos/compare/v10.6.0...v10.7.0) (2026-03-15)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* allow quitting multiple apps in a row (closes [#5421](https://github.com/lwouis/alt-tab-macos/issues/5421)) ([de9aaa1](https://github.com/lwouis/alt-tab-macos/commit/de9aaa1))
|
||||
* avoid memory usage growth over time (closes [#5138](https://github.com/lwouis/alt-tab-macos/issues/5138)) ([739649a](https://github.com/lwouis/alt-tab-macos/commit/739649a))
|
||||
* edit shortcuts in settings window search bar on first launch ([2adf741](https://github.com/lwouis/alt-tab-macos/commit/2adf741))
|
||||
* prevent sheets from messing up thumbnails order ([#5346](https://github.com/lwouis/alt-tab-macos/issues/5346)) ([b008d63](https://github.com/lwouis/alt-tab-macos/commit/b008d63))
|
||||
* thumbnails might be shown too small ([57c95a6](https://github.com/lwouis/alt-tab-macos/commit/57c95a6))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* reduce memory usage by storing fewer app icons ([b21168a](https://github.com/lwouis/alt-tab-macos/commit/b21168a))
|
||||
|
||||
# [10.6.0](https://github.com/lwouis/alt-tab-macos/compare/v10.5.0...v10.6.0) (2026-03-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* allow edit shortcuts in the search bar (closes [#5308](https://github.com/lwouis/alt-tab-macos/issues/5308)) ([35ddbe7](https://github.com/lwouis/alt-tab-macos/commit/35ddbe7))
|
||||
* better handle context menu in search bar ([9aea8f6](https://github.com/lwouis/alt-tab-macos/commit/9aea8f6))
|
||||
* key repeat in search mode ([fd4e373](https://github.com/lwouis/alt-tab-macos/commit/fd4e373))
|
||||
* preview may not update its position (closes [#5396](https://github.com/lwouis/alt-tab-macos/issues/5396)) ([dbadb2b](https://github.com/lwouis/alt-tab-macos/commit/dbadb2b))
|
||||
* right-click and middle-click outside panel ([9969a07](https://github.com/lwouis/alt-tab-macos/commit/9969a07))
|
||||
* show preview window on first shortcut press (closes [#5385](https://github.com/lwouis/alt-tab-macos/issues/5385)) ([106f7c9](https://github.com/lwouis/alt-tab-macos/commit/106f7c9))
|
||||
* trackpad scrolling shouldn't also scroll on background apps ([cacb789](https://github.com/lwouis/alt-tab-macos/commit/cacb789))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* scrolling the settings update the sidebar (closes [#5400](https://github.com/lwouis/alt-tab-macos/issues/5400)) ([3b831d4](https://github.com/lwouis/alt-tab-macos/commit/3b831d4))
|
||||
|
||||
# [10.5.0](https://github.com/lwouis/alt-tab-macos/compare/v10.4.0...v10.5.0) (2026-03-08)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* input with ime better interacts with search (closes [#5377](https://github.com/lwouis/alt-tab-macos/issues/5377)) ([15caa33](https://github.com/lwouis/alt-tab-macos/commit/15caa33))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improved search results ([0f8d6f1](https://github.com/lwouis/alt-tab-macos/commit/0f8d6f1))
|
||||
* refinements on mouse hover and dragging ([#5350](https://github.com/lwouis/alt-tab-macos/issues/5350)) ([643cc80](https://github.com/lwouis/alt-tab-macos/commit/643cc80))
|
||||
|
||||
# [10.4.0](https://github.com/lwouis/alt-tab-macos/compare/v10.3.0...v10.4.0) (2026-03-04)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* clicking tiles required to release precisely (closes [#5373](https://github.com/lwouis/alt-tab-macos/issues/5373)) ([2c6c9fb](https://github.com/lwouis/alt-tab-macos/commit/2c6c9fb))
|
||||
* issues when using multiple keyboard languages (closes [#2125](https://github.com/lwouis/alt-tab-macos/issues/2125)) ([ea7284b](https://github.com/lwouis/alt-tab-macos/commit/ea7284b))
|
||||
* switcher may show windows in the wrong order (closes [#5346](https://github.com/lwouis/alt-tab-macos/issues/5346)) ([a632e42](https://github.com/lwouis/alt-tab-macos/commit/a632e42))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add kazakh and improve all localizations ([0ad389a](https://github.com/lwouis/alt-tab-macos/commit/0ad389a))
|
||||
* improve drag-and-drop over alttab (closes [#5350](https://github.com/lwouis/alt-tab-macos/issues/5350)) ([a809ffa](https://github.com/lwouis/alt-tab-macos/commit/a809ffa))
|
||||
|
||||
# [10.3.0](https://github.com/lwouis/alt-tab-macos/compare/v10.2.0...v10.3.0) (2026-02-24)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* avoid clipping long settings window buttons (closes [#5320](https://github.com/lwouis/alt-tab-macos/issues/5320)) ([402b6f6](https://github.com/lwouis/alt-tab-macos/commit/402b6f6))
|
||||
* closing a window would remove the thumbnail (closes [#5324](https://github.com/lwouis/alt-tab-macos/issues/5324)) ([451bbbe](https://github.com/lwouis/alt-tab-macos/commit/451bbbe))
|
||||
* fade-out speed could show wrong value in rare cases ([f5e81fe](https://github.com/lwouis/alt-tab-macos/commit/f5e81fe))
|
||||
* improve settings window on macos 10.13 ([5ce48c1](https://github.com/lwouis/alt-tab-macos/commit/5ce48c1))
|
||||
* mouse hover would sometimes disappear ([8c7263e](https://github.com/lwouis/alt-tab-macos/commit/8c7263e))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add ur/mr localizations + update all localizations ([dc538dc](https://github.com/lwouis/alt-tab-macos/commit/dc538dc))
|
||||
* consolidate settings (closes [#1732](https://github.com/lwouis/alt-tab-macos/issues/1732)) ([219098d](https://github.com/lwouis/alt-tab-macos/commit/219098d))
|
||||
* reduce app disk size ([3c95c6c](https://github.com/lwouis/alt-tab-macos/commit/3c95c6c))
|
||||
|
||||
# [10.2.0](https://github.com/lwouis/alt-tab-macos/compare/v10.1.0...v10.2.0) (2026-02-19)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* improve settings ui on macos 10.13 ([#5255](https://github.com/lwouis/alt-tab-macos/issues/5255)) ([75347ad](https://github.com/lwouis/alt-tab-macos/commit/75347ad))
|
||||
* rare crash when a window was opened ([28c4b12](https://github.com/lwouis/alt-tab-macos/commit/28c4b12))
|
||||
* small issues when mouse hover is set to select (closes [#5292](https://github.com/lwouis/alt-tab-macos/issues/5292)) ([b9e0344](https://github.com/lwouis/alt-tab-macos/commit/b9e0344))
|
||||
* sometimes the active app was not up-to-date (closes [#5291](https://github.com/lwouis/alt-tab-macos/issues/5291)) ([ea51d57](https://github.com/lwouis/alt-tab-macos/commit/ea51d57))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add burmese + update all localizations ([f5e1014](https://github.com/lwouis/alt-tab-macos/commit/f5e1014))
|
||||
* add new setting for auto size (closes [#3669](https://github.com/lwouis/alt-tab-macos/issues/3669)) ([c51376f](https://github.com/lwouis/alt-tab-macos/commit/c51376f))
|
||||
* add setting to blacklist window by title (closes [#5299](https://github.com/lwouis/alt-tab-macos/issues/5299)) ([35eae11](https://github.com/lwouis/alt-tab-macos/commit/35eae11))
|
||||
* can add running apps into blacklist (closes [#5268](https://github.com/lwouis/alt-tab-macos/issues/5268)) ([d5d6996](https://github.com/lwouis/alt-tab-macos/commit/d5d6996))
|
||||
* remember position/size of secondary windows (closes [#5305](https://github.com/lwouis/alt-tab-macos/issues/5305)) ([4b85fb8](https://github.com/lwouis/alt-tab-macos/commit/4b85fb8))
|
||||
|
||||
# [10.1.0](https://github.com/lwouis/alt-tab-macos/compare/v10.0.0...v10.1.0) (2026-02-17)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* better flow when last 2 windows are minimized (closes [#2159](https://github.com/lwouis/alt-tab-macos/issues/2159)) ([da6be20](https://github.com/lwouis/alt-tab-macos/commit/da6be20))
|
||||
* issue with link drag-and-drop over the switcher (closes [#5292](https://github.com/lwouis/alt-tab-macos/issues/5292)) ([4e6361f](https://github.com/lwouis/alt-tab-macos/commit/4e6361f))
|
||||
* trackpad gesture active when disabled (closes [#5301](https://github.com/lwouis/alt-tab-macos/issues/5301)) ([d074faa](https://github.com/lwouis/alt-tab-macos/commit/d074faa))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* allow settings export/import (closes [#4514](https://github.com/lwouis/alt-tab-macos/issues/4514)) ([69a9dfa](https://github.com/lwouis/alt-tab-macos/commit/69a9dfa))
|
||||
|
||||
# [10.0.0](https://github.com/lwouis/alt-tab-macos/compare/v9.0.0...v10.0.0) (2026-02-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* app could crash in rare scenarios ([3de0276](https://github.com/lwouis/alt-tab-macos/commit/3de0276))
|
||||
* launched app may not be seen as active (closes [#5291](https://github.com/lwouis/alt-tab-macos/issues/5291)) ([3e47ebe](https://github.com/lwouis/alt-tab-macos/commit/3e47ebe))
|
||||
* quick switches could sometimes do nothing (closes [#5289](https://github.com/lwouis/alt-tab-macos/issues/5289)) ([82795d8](https://github.com/lwouis/alt-tab-macos/commit/82795d8))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add debug tools ([07e4024](https://github.com/lwouis/alt-tab-macos/commit/07e4024))
|
||||
* add fuzzy search mode (closes [#590](https://github.com/lwouis/alt-tab-macos/issues/590)) ([4e986f3](https://github.com/lwouis/alt-tab-macos/commit/4e986f3))
|
||||
* allow up to 9 shortcuts ([#3882](https://github.com/lwouis/alt-tab-macos/issues/3882)) ([8cab3e1](https://github.com/lwouis/alt-tab-macos/commit/8cab3e1))
|
||||
* new settings experience (closes [#5287](https://github.com/lwouis/alt-tab-macos/issues/5287)) ([3890beb](https://github.com/lwouis/alt-tab-macos/commit/3890beb))
|
||||
* support app-icon badges with large numbers ([ceed334](https://github.com/lwouis/alt-tab-macos/commit/ceed334))
|
||||
* support showing only non-visible spaces (closes [#1274](https://github.com/lwouis/alt-tab-macos/issues/1274)) ([51db0cb](https://github.com/lwouis/alt-tab-macos/commit/51db0cb))
|
||||
* update bn localization ([3f1617c](https://github.com/lwouis/alt-tab-macos/commit/3f1617c))
|
||||
|
||||
|
||||
### BREAKING CHANGES
|
||||
|
||||
* a whole new alt-tab experience by pressing "s". You can also set search as the default style in the settings
|
||||
|
||||
# [9.0.0](https://github.com/lwouis/alt-tab-macos/compare/v8.3.4...v9.0.0) (2026-02-11)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* missing thumbnails in rare cases ([3142590](https://github.com/lwouis/alt-tab-macos/commit/3142590))
|
||||
* preserve scroll position in switcher if windows change ([fa9e4d0](https://github.com/lwouis/alt-tab-macos/commit/fa9e4d0))
|
||||
* prevent macos 10.13 crash (closes [#5255](https://github.com/lwouis/alt-tab-macos/issues/5255)) ([d525d35](https://github.com/lwouis/alt-tab-macos/commit/d525d35))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improve performance when many windows are open (closes [#5177](https://github.com/lwouis/alt-tab-macos/issues/5177)) ([5d0a92f](https://github.com/lwouis/alt-tab-macos/commit/5d0a92f))
|
||||
* new thumbnails shadows in macos 26 style ([26d46e3](https://github.com/lwouis/alt-tab-macos/commit/26d46e3))
|
||||
* update cs/el/fr/ru localizations ([2681218](https://github.com/lwouis/alt-tab-macos/commit/2681218))
|
||||
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* better caanimation batching ([016052c](https://github.com/lwouis/alt-tab-macos/commit/016052c))
|
||||
* cache expensive layout values ([904bd17](https://github.com/lwouis/alt-tab-macos/commit/904bd17))
|
||||
* cache expensive layout values 2 ([13ed78b](https://github.com/lwouis/alt-tab-macos/commit/13ed78b))
|
||||
* cache font from appearance ([305870b](https://github.com/lwouis/alt-tab-macos/commit/305870b))
|
||||
* cache screen uuids and frontmost app ([a5135c5](https://github.com/lwouis/alt-tab-macos/commit/a5135c5))
|
||||
* capture samplebuffer directly ([2bce0d2](https://github.com/lwouis/alt-tab-macos/commit/2bce0d2))
|
||||
* create overlay view to optimize view count ([ec5802a](https://github.com/lwouis/alt-tab-macos/commit/ec5802a))
|
||||
* do all mouse interactions globally instead of local tracking ([d89bc29](https://github.com/lwouis/alt-tab-macos/commit/d89bc29))
|
||||
* have views under and over the thumbnailview ([b9637e5](https://github.com/lwouis/alt-tab-macos/commit/b9637e5))
|
||||
* improve hiding the ui ([4f5e325](https://github.com/lwouis/alt-tab-macos/commit/4f5e325))
|
||||
* merge mouseevents into cursorevents ([9edf312](https://github.com/lwouis/alt-tab-macos/commit/9edf312))
|
||||
* move app icon capture to background queue ([5a35aa9](https://github.com/lwouis/alt-tab-macos/commit/5a35aa9))
|
||||
* optim hangs from DebugMenu ([4b830e6](https://github.com/lwouis/alt-tab-macos/commit/4b830e6))
|
||||
* prevent appkit work ([fefc491](https://github.com/lwouis/alt-tab-macos/commit/fefc491))
|
||||
* prevent costly window recursive views update ([41e0e7c](https://github.com/lwouis/alt-tab-macos/commit/41e0e7c))
|
||||
* prevent possible frequent permissions check ([216563b](https://github.com/lwouis/alt-tab-macos/commit/216563b))
|
||||
* remove normalize-subview to avoid appkit work ([ce2dfc1](https://github.com/lwouis/alt-tab-macos/commit/ce2dfc1))
|
||||
* simplify and combine views for better perf ([3a8c0f3](https://github.com/lwouis/alt-tab-macos/commit/3a8c0f3))
|
||||
* small optimizations from profiling ([db314c9](https://github.com/lwouis/alt-tab-macos/commit/db314c9))
|
||||
* throttle all window/app ax calls ([337e2fb](https://github.com/lwouis/alt-tab-macos/commit/337e2fb))
|
||||
* update windows manually after 250s ([52530b2](https://github.com/lwouis/alt-tab-macos/commit/52530b2))
|
||||
* use calayer instead of nsview for lightimageview ([7dec9da](https://github.com/lwouis/alt-tab-macos/commit/7dec9da))
|
||||
|
||||
|
||||
### BREAKING CHANGES
|
||||
|
||||
* major performance improvements
|
||||
|
||||
## [8.3.4](https://github.com/lwouis/alt-tab-macos/compare/v8.3.3...v8.3.4) (2026-01-31)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* app could sometimes crash in the background ([ab704dc](https://github.com/lwouis/alt-tab-macos/commit/ab704dc)), closes [#5260](https://github.com/lwouis/alt-tab-macos/issues/5260)
|
||||
* quitting apps by pressing q multiple times (closes [#5247](https://github.com/lwouis/alt-tab-macos/issues/5247)) ([21aeafd](https://github.com/lwouis/alt-tab-macos/commit/21aeafd))
|
||||
|
||||
## [8.3.3](https://github.com/lwouis/alt-tab-macos/compare/v8.3.2...v8.3.3) (2026-01-25)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* app icons could sometimes be invisible (closes [#5226](https://github.com/lwouis/alt-tab-macos/issues/5226)) ([23fbc01](https://github.com/lwouis/alt-tab-macos/commit/23fbc01))
|
||||
* improve trackpad gesture detection (closes [#5203](https://github.com/lwouis/alt-tab-macos/issues/5203)) ([9b5e43e](https://github.com/lwouis/alt-tab-macos/commit/9b5e43e))
|
||||
* switcher could sometimes show with no window pre-selected ([3e95f77](https://github.com/lwouis/alt-tab-macos/commit/3e95f77))
|
||||
* title could be off-center in app-icons appearance (closes [#5235](https://github.com/lwouis/alt-tab-macos/issues/5235)) ([7fdfe4a](https://github.com/lwouis/alt-tab-macos/commit/7fdfe4a))
|
||||
|
||||
## [8.3.2](https://github.com/lwouis/alt-tab-macos/compare/v8.3.1...v8.3.2) (2026-01-22)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* blacklisting fullscreen windows was not working (closes [#5228](https://github.com/lwouis/alt-tab-macos/issues/5228)) ([53815e0](https://github.com/lwouis/alt-tab-macos/commit/53815e0))
|
||||
|
||||
## [8.3.1](https://github.com/lwouis/alt-tab-macos/compare/v8.3.0...v8.3.1) (2026-01-22)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* chrome apps windows would not show in the switcher (closes [#5227](https://github.com/lwouis/alt-tab-macos/issues/5227)) ([bf3fa67](https://github.com/lwouis/alt-tab-macos/commit/bf3fa67))
|
||||
|
||||
# [8.3.0](https://github.com/lwouis/alt-tab-macos/compare/v8.2.0...v8.3.0) (2026-01-20)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* position of windowless indicator in thumbnails appearance ([d1fd1fd](https://github.com/lwouis/alt-tab-macos/commit/d1fd1fd))
|
||||
* small memory leak when opening the switcher (closes [#4255](https://github.com/lwouis/alt-tab-macos/issues/4255)) ([0a6485e](https://github.com/lwouis/alt-tab-macos/commit/0a6485e))
|
||||
* windows would sometimes not update their order (closes [#5207](https://github.com/lwouis/alt-tab-macos/issues/5207)) ([a3f2a54](https://github.com/lwouis/alt-tab-macos/commit/a3f2a54))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* increase apparition delay granularity (closes [#5210](https://github.com/lwouis/alt-tab-macos/issues/5210)) ([5b0df6b](https://github.com/lwouis/alt-tab-macos/commit/5b0df6b))
|
||||
|
||||
# [8.2.0](https://github.com/lwouis/alt-tab-macos/compare/v8.1.0...v8.2.0) (2026-01-15)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* thumbnails could sometimes be stretched (closes [#5204](https://github.com/lwouis/alt-tab-macos/issues/5204)) ([ac24d6d](https://github.com/lwouis/alt-tab-macos/commit/ac24d6d))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* stop checking screen-recording permission after launch ([#5202](https://github.com/lwouis/alt-tab-macos/issues/5202)) ([f481d22](https://github.com/lwouis/alt-tab-macos/commit/f481d22))
|
||||
|
||||
# [8.1.0](https://github.com/lwouis/alt-tab-macos/compare/v8.0.0...v8.1.0) (2026-01-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* allow f-keys as shortcuts-when-active (closes [#5166](https://github.com/lwouis/alt-tab-macos/issues/5166)) ([a0c9fee](https://github.com/lwouis/alt-tab-macos/commit/a0c9fee))
|
||||
* avoid unintentional trackpad trigger (closes [#4278](https://github.com/lwouis/alt-tab-macos/issues/4278)) ([0539a3a](https://github.com/lwouis/alt-tab-macos/commit/0539a3a))
|
||||
* better handle palm/fingers resting on the trackpad (closes [#5191](https://github.com/lwouis/alt-tab-macos/issues/5191)) ([9ed8a19](https://github.com/lwouis/alt-tab-macos/commit/9ed8a19))
|
||||
* mitigate macos 15 bugs with screencapture-kit (closes [#5190](https://github.com/lwouis/alt-tab-macos/issues/5190)) ([b2f5c6c](https://github.com/lwouis/alt-tab-macos/commit/b2f5c6c))
|
||||
* mouse hover detection for hidden/windowless apps ([7c64864](https://github.com/lwouis/alt-tab-macos/commit/7c64864))
|
||||
* thumbnails could sometimes be the wrong size ([9d0b947](https://github.com/lwouis/alt-tab-macos/commit/9d0b947))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add belarusian localization ([0fe722b](https://github.com/lwouis/alt-tab-macos/commit/0fe722b))
|
||||
* improve accidental cursor movement ([74b5a11](https://github.com/lwouis/alt-tab-macos/commit/74b5a11)), closes [/github.com/lwouis/alt-tab-macos/issues/4278#issuecomment-3733280737](https://github.com//github.com/lwouis/alt-tab-macos/issues/4278/issues/issuecomment-3733280737)
|
||||
* improve pl localization ([3b53ce7](https://github.com/lwouis/alt-tab-macos/commit/3b53ce7))
|
||||
* show outline of windows hidden for privacy reasons (closes [#5172](https://github.com/lwouis/alt-tab-macos/issues/5172)) ([1090acf](https://github.com/lwouis/alt-tab-macos/commit/1090acf))
|
||||
|
||||
# [8.0.0](https://github.com/lwouis/alt-tab-macos/compare/v7.39.0...v8.0.0) (2026-01-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* avoid macos bug where many permission dialogs pop (closes [#5106](https://github.com/lwouis/alt-tab-macos/issues/5106)) ([5c4199e](https://github.com/lwouis/alt-tab-macos/commit/5c4199e))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improve memory image of showing app icons (closes [#5144](https://github.com/lwouis/alt-tab-macos/issues/5144)) ([bf58335](https://github.com/lwouis/alt-tab-macos/commit/bf58335))
|
||||
* improve ta localization ([989b344](https://github.com/lwouis/alt-tab-macos/commit/989b344))
|
||||
* improve thumbnails with screen-capture kit ([7821d7c](https://github.com/lwouis/alt-tab-macos/commit/7821d7c)), closes [#4255](https://github.com/lwouis/alt-tab-macos/issues/4255) [#3652](https://github.com/lwouis/alt-tab-macos/issues/3652)
|
||||
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* debounce screen/space events to minimize work ([e2b4779](https://github.com/lwouis/alt-tab-macos/commit/e2b4779))
|
||||
|
||||
|
||||
### BREAKING CHANGES
|
||||
|
||||
* Better thumbnails with ScreenCaptureKit for users on macOS >= 14
|
||||
|
||||
# [7.39.0](https://github.com/lwouis/alt-tab-macos/compare/v7.38.1...v7.39.0) (2026-01-03)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* avoid showing closed windows (closes [#3589](https://github.com/lwouis/alt-tab-macos/issues/3589)) ([894a69d](https://github.com/lwouis/alt-tab-macos/commit/894a69d)), closes [#4924](https://github.com/lwouis/alt-tab-macos/issues/4924)
|
||||
* permission checks might freeze or restart the app (closes [#5112](https://github.com/lwouis/alt-tab-macos/issues/5112)) ([7906d63](https://github.com/lwouis/alt-tab-macos/commit/7906d63))
|
||||
* permission window could steal focus (see [#3577](https://github.com/lwouis/alt-tab-macos/issues/3577)) ([2f875b3](https://github.com/lwouis/alt-tab-macos/commit/2f875b3))
|
||||
* permissions window could look wrong in some languages like chinese ([914f91f](https://github.com/lwouis/alt-tab-macos/commit/914f91f)), closes [/github.com/lwouis/alt-tab-macos/issues/5112#issuecomment-3692769341](https://github.com//github.com/lwouis/alt-tab-macos/issues/5112/issues/issuecomment-3692769341)
|
||||
* preview could sometimes be incorrectly positioned ([edc2f00](https://github.com/lwouis/alt-tab-macos/commit/edc2f00))
|
||||
* show some hovering windows (e.g. zoom.app) (closes [#5140](https://github.com/lwouis/alt-tab-macos/issues/5140)) ([fcc6651](https://github.com/lwouis/alt-tab-macos/commit/fcc6651))
|
||||
* thumbnails could sometimes have the wrong size ([55f3f59](https://github.com/lwouis/alt-tab-macos/commit/55f3f59))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* avoid occasional delays in showing the switcher (closes [#5109](https://github.com/lwouis/alt-tab-macos/issues/5109)) ([3c04a4c](https://github.com/lwouis/alt-tab-macos/commit/3c04a4c))
|
||||
* improve nb/tr localizations ([5e842d5](https://github.com/lwouis/alt-tab-macos/commit/5e842d5))
|
||||
* remove shadow around app icon appearance ([dda612c](https://github.com/lwouis/alt-tab-macos/commit/dda612c))
|
||||
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* do login item and plist updates later to accelerate launch ([2f72c5d](https://github.com/lwouis/alt-tab-macos/commit/2f72c5d))
|
||||
* don't compute diffs of running-apps; directly get new/old ([7ded01c](https://github.com/lwouis/alt-tab-macos/commit/7ded01c))
|
||||
* improve mouse hover algo and core-animation side ([6103785](https://github.com/lwouis/alt-tab-macos/commit/6103785))
|
||||
|
||||
## [7.38.1](https://github.com/lwouis/alt-tab-macos/compare/v7.38.0...v7.38.1) (2025-12-13)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* could sometimes freeze on the permission window ([43838e1](https://github.com/lwouis/alt-tab-macos/commit/43838e1)), closes [#5112](https://github.com/lwouis/alt-tab-macos/issues/5112)
|
||||
* prevent crash when sending a debug profile ([741e790](https://github.com/lwouis/alt-tab-macos/commit/741e790))
|
||||
|
||||
# [7.38.0](https://github.com/lwouis/alt-tab-macos/compare/v7.37.0...v7.38.0) (2025-12-07)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* could sometimes freeze upon launch (closes [#5079](https://github.com/lwouis/alt-tab-macos/issues/5079)) ([ee27df7](https://github.com/lwouis/alt-tab-macos/commit/ee27df7))
|
||||
* sending feedback with a debug-profile could sometimes crash ([e0ae29d](https://github.com/lwouis/alt-tab-macos/commit/e0ae29d))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improve ca/es/ga/pt/pt-br/uk localizations ([8a98b4e](https://github.com/lwouis/alt-tab-macos/commit/8a98b4e))
|
||||
* prevent mouse-hover when using trackpad swipes (closes [#5071](https://github.com/lwouis/alt-tab-macos/issues/5071)) ([b8ecd58](https://github.com/lwouis/alt-tab-macos/commit/b8ecd58))
|
||||
|
||||
# [7.37.0](https://github.com/lwouis/alt-tab-macos/compare/v7.36.0...v7.37.0) (2025-11-28)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* better crop app icons on macos < 26 (closes [#5080](https://github.com/lwouis/alt-tab-macos/issues/5080)) ([237bb1e](https://github.com/lwouis/alt-tab-macos/commit/237bb1e))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improve portuguese localization ([3994429](https://github.com/lwouis/alt-tab-macos/commit/3994429))
|
||||
* warn tahoe users of shortcut conflict with macos game-overlay ([911aad4](https://github.com/lwouis/alt-tab-macos/commit/911aad4)), closes [#5018](https://github.com/lwouis/alt-tab-macos/issues/5018)
|
||||
|
||||
# [7.36.0](https://github.com/lwouis/alt-tab-macos/compare/v7.35.0...v7.36.0) (2025-11-25)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* switcher could become broken after changing appearance ([d377b3d](https://github.com/lwouis/alt-tab-macos/commit/d377b3d)), closes [#5061](https://github.com/lwouis/alt-tab-macos/issues/5061)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improve portuguese localization ([435a310](https://github.com/lwouis/alt-tab-macos/commit/435a310))
|
||||
|
||||
# [7.35.0](https://github.com/lwouis/alt-tab-macos/compare/v7.34.0...v7.35.0) (2025-11-24)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* app would sometimes crash on macos monterey (closes [#5051](https://github.com/lwouis/alt-tab-macos/issues/5051)) ([29e1cff](https://github.com/lwouis/alt-tab-macos/commit/29e1cff))
|
||||
* better gesture recognition (closes [#5039](https://github.com/lwouis/alt-tab-macos/issues/5039)) ([1689954](https://github.com/lwouis/alt-tab-macos/commit/1689954))
|
||||
* closing fullscreen window would glitch it (closes [#5029](https://github.com/lwouis/alt-tab-macos/issues/5029)) ([ee436cc](https://github.com/lwouis/alt-tab-macos/commit/ee436cc))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add trackpad haptic feedback for better navigation (closes [#4763](https://github.com/lwouis/alt-tab-macos/issues/4763)) ([fb5dfc4](https://github.com/lwouis/alt-tab-macos/commit/fb5dfc4))
|
||||
* better icon for feedback form (closes [#5013](https://github.com/lwouis/alt-tab-macos/issues/5013)) ([2c3373a](https://github.com/lwouis/alt-tab-macos/commit/2c3373a))
|
||||
* improve portuguese localization ([c294ad0](https://github.com/lwouis/alt-tab-macos/commit/c294ad0))
|
||||
|
||||
# [7.34.0](https://github.com/lwouis/alt-tab-macos/compare/v7.33.0...v7.34.0) (2025-11-20)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* reduce memory footprint after running for a while (closes [#4255](https://github.com/lwouis/alt-tab-macos/issues/4255)) ([938b735](https://github.com/lwouis/alt-tab-macos/commit/938b735))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improve localizations ([516329a](https://github.com/lwouis/alt-tab-macos/commit/516329a))
|
||||
* improve responsiveness in showing switcher (closes [#4959](https://github.com/lwouis/alt-tab-macos/issues/4959)) ([a80721b](https://github.com/lwouis/alt-tab-macos/commit/a80721b))
|
||||
|
||||
# [7.33.0](https://github.com/lwouis/alt-tab-macos/compare/v7.32.0...v7.33.0) (2025-11-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* app icon was too small in titles-appearance large-size ([ffd0c75](https://github.com/lwouis/alt-tab-macos/commit/ffd0c75))
|
||||
* take into account accent-color immediatly (closes [#4984](https://github.com/lwouis/alt-tab-macos/issues/4984)) ([011fdba](https://github.com/lwouis/alt-tab-macos/commit/011fdba))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improve dealing with reserved/conflicting shortcuts ([fdf3134](https://github.com/lwouis/alt-tab-macos/commit/fdf3134)), closes [#3190](https://github.com/lwouis/alt-tab-macos/issues/3190) [#3288](https://github.com/lwouis/alt-tab-macos/issues/3288) [#1835](https://github.com/lwouis/alt-tab-macos/issues/1835) [#3826](https://github.com/lwouis/alt-tab-macos/issues/3826)
|
||||
* improve nl/pl/uk localizations ([96caad4](https://github.com/lwouis/alt-tab-macos/commit/96caad4))
|
||||
* improve trackpad multi-fingers swiping (closes [#4765](https://github.com/lwouis/alt-tab-macos/issues/4765)) ([d6196ec](https://github.com/lwouis/alt-tab-macos/commit/d6196ec))
|
||||
* improve ux for titles-appearance (closes [#4975](https://github.com/lwouis/alt-tab-macos/issues/4975)) ([c352591](https://github.com/lwouis/alt-tab-macos/commit/c352591))
|
||||
* macos tahoe improvements: menubar menu, feedback form, wording ([309cae3](https://github.com/lwouis/alt-tab-macos/commit/309cae3)), closes [#4986](https://github.com/lwouis/alt-tab-macos/issues/4986)
|
||||
|
||||
# [7.32.0](https://github.com/lwouis/alt-tab-macos/compare/v7.31.0...v7.32.0) (2025-11-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* alt-tab could crash if asked to close one of its own window ([f46372b](https://github.com/lwouis/alt-tab-macos/commit/f46372b))
|
||||
* could sometimes crash when navigating up or down (closes [#4110](https://github.com/lwouis/alt-tab-macos/issues/4110)) ([d2220c6](https://github.com/lwouis/alt-tab-macos/commit/d2220c6))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improve pl/zh-hk localizations ([786e752](https://github.com/lwouis/alt-tab-macos/commit/786e752))
|
||||
* improve responsiveness of showing the switcher ([689adc0](https://github.com/lwouis/alt-tab-macos/commit/689adc0))
|
||||
* new look for tahoe and liquid glass (closes [#4658](https://github.com/lwouis/alt-tab-macos/issues/4658)) ([fab9d7c](https://github.com/lwouis/alt-tab-macos/commit/fab9d7c))
|
||||
* titles appearance now resizes for better readability ([26d40e1](https://github.com/lwouis/alt-tab-macos/commit/26d40e1)), closes [#3882](https://github.com/lwouis/alt-tab-macos/issues/3882)
|
||||
* update visuals for macos tahoe and liquid glass ([33c6615](https://github.com/lwouis/alt-tab-macos/commit/33c6615))
|
||||
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* improve rendering performance by doing less work ([ec55ae8](https://github.com/lwouis/alt-tab-macos/commit/ec55ae8))
|
||||
|
||||
# [7.31.0](https://github.com/lwouis/alt-tab-macos/compare/v7.30.0...v7.31.0) (2025-10-26)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* cmd+q would quit alt-tab instead of the selected app (closes [#4867](https://github.com/lwouis/alt-tab-macos/issues/4867)) ([247f635](https://github.com/lwouis/alt-tab-macos/commit/247f635)), closes [#4891](https://github.com/lwouis/alt-tab-macos/issues/4891)
|
||||
* title was truncated in app-icons appearance (closes [#4860](https://github.com/lwouis/alt-tab-macos/issues/4860)) ([a1cfd1d](https://github.com/lwouis/alt-tab-macos/commit/a1cfd1d))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improve ar/de/fr/kn/ru/zh-tw localizations ([173bc97](https://github.com/lwouis/alt-tab-macos/commit/173bc97))
|
||||
* improve windows detection ([cab591e](https://github.com/lwouis/alt-tab-macos/commit/cab591e))
|
||||
* new cli command to focus a window using focus order (closes [#4610](https://github.com/lwouis/alt-tab-macos/issues/4610)) ([84166ab](https://github.com/lwouis/alt-tab-macos/commit/84166ab))
|
||||
* save resources trying to detect certain windows ([33e5acf](https://github.com/lwouis/alt-tab-macos/commit/33e5acf))
|
||||
|
||||
# [7.30.0](https://github.com/lwouis/alt-tab-macos/compare/v7.29.0...v7.30.0) (2025-09-23)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* bring back pre-v7.28 performance (closes [#4805](https://github.com/lwouis/alt-tab-macos/issues/4805)) ([fb6110d](https://github.com/lwouis/alt-tab-macos/commit/fb6110d))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improve nb/nl/zh-tw localizations ([a9cb03c](https://github.com/lwouis/alt-tab-macos/commit/a9cb03c))
|
||||
|
||||
# [7.29.0](https://github.com/lwouis/alt-tab-macos/compare/v7.28.0...v7.29.0) (2025-09-20)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* windows order was not updating correctly (closes [#4754](https://github.com/lwouis/alt-tab-macos/issues/4754)) ([1316eb2](https://github.com/lwouis/alt-tab-macos/commit/1316eb2))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improve fr/ja languages ([c5286c3](https://github.com/lwouis/alt-tab-macos/commit/c5286c3))
|
||||
|
||||
# [7.28.0](https://github.com/lwouis/alt-tab-macos/compare/v7.27.0...v7.28.0) (2025-09-15)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* focusing windows could fail after focusing a frozen app ([#4520](https://github.com/lwouis/alt-tab-macos/issues/4520)) ([591ce52](https://github.com/lwouis/alt-tab-macos/commit/591ce52))
|
||||
* improve detection of windows (closes [#4405](https://github.com/lwouis/alt-tab-macos/issues/4405)) ([3c79840](https://github.com/lwouis/alt-tab-macos/commit/3c79840))
|
||||
* keyboard selection now works with dragging + mouse hover ([be077f1](https://github.com/lwouis/alt-tab-macos/commit/be077f1)), closes [#4711](https://github.com/lwouis/alt-tab-macos/issues/4711)
|
||||
* remove high-volume unactionable logs (closes [#4697](https://github.com/lwouis/alt-tab-macos/issues/4697)) ([e93e42f](https://github.com/lwouis/alt-tab-macos/commit/e93e42f))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add gujarati localization ([4ebd990](https://github.com/lwouis/alt-tab-macos/commit/4ebd990))
|
||||
* add hong-kong cantonese + improve other languages ([78c8525](https://github.com/lwouis/alt-tab-macos/commit/78c8525))
|
||||
* add preference to show only non-active apps (closes [#4691](https://github.com/lwouis/alt-tab-macos/issues/4691)) ([4567550](https://github.com/lwouis/alt-tab-macos/commit/4567550))
|
||||
* improve norwegian localization ([726e13e](https://github.com/lwouis/alt-tab-macos/commit/726e13e))
|
||||
* more fine-grained cursor-follows-focus preference (closes [#4734](https://github.com/lwouis/alt-tab-macos/issues/4734)) ([985a681](https://github.com/lwouis/alt-tab-macos/commit/985a681))
|
||||
|
||||
# [7.27.0](https://github.com/lwouis/alt-tab-macos/compare/v7.26.0...v7.27.0) (2025-08-12)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* restore default command+tab if shortcut is unbound (closes [#4642](https://github.com/lwouis/alt-tab-macos/issues/4642)) ([f66c92a](https://github.com/lwouis/alt-tab-macos/commit/f66c92a))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improve cs/th localizations ([aa46a62](https://github.com/lwouis/alt-tab-macos/commit/aa46a62))
|
||||
* windowless apps can now be shown in focus-order (closes [#4653](https://github.com/lwouis/alt-tab-macos/issues/4653)) ([5db53b5](https://github.com/lwouis/alt-tab-macos/commit/5db53b5))
|
||||
|
||||
# [7.26.0](https://github.com/lwouis/alt-tab-macos/compare/v7.25.0...v7.26.0) (2025-07-31)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* ignore autodesk fusion internal panels (closes [#4578](https://github.com/lwouis/alt-tab-macos/issues/4578)) ([f67d182](https://github.com/lwouis/alt-tab-macos/commit/f67d182))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improve da/fi/ga localizations ([f376529](https://github.com/lwouis/alt-tab-macos/commit/f376529))
|
||||
* improve preference to show-apps-with-open-window (closes [#4485](https://github.com/lwouis/alt-tab-macos/issues/4485)) ([67f5098](https://github.com/lwouis/alt-tab-macos/commit/67f5098))
|
||||
|
||||
# [7.25.0](https://github.com/lwouis/alt-tab-macos/compare/v7.24.0...v7.25.0) (2025-06-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* icons on thumbnails could sometimes be incorrect ([b4bc0b0](https://github.com/lwouis/alt-tab-macos/commit/b4bc0b0))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* new cli commands: --show, --detailed-list (closes [#4489](https://github.com/lwouis/alt-tab-macos/issues/4489)) ([b0ce899](https://github.com/lwouis/alt-tab-macos/commit/b0ce899))
|
||||
|
||||
# [7.24.0](https://github.com/lwouis/alt-tab-macos/compare/v7.23.0...v7.24.0) (2025-05-05)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* clicking to focus windows/apps is now easier (closes [#4407](https://github.com/lwouis/alt-tab-macos/issues/4407)) ([397457c](https://github.com/lwouis/alt-tab-macos/commit/397457c))
|
||||
* improve ca/pt/ro localizations ([8b7d69c](https://github.com/lwouis/alt-tab-macos/commit/8b7d69c))
|
||||
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* avoid updating preview if not necessary ([518f8b4](https://github.com/lwouis/alt-tab-macos/commit/518f8b4))
|
||||
|
||||
# [7.23.0](https://github.com/lwouis/alt-tab-macos/compare/v7.22.0...v7.23.0) (2025-04-01)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* avoid crashing on uncommon keys in shortcuts (closes [#4379](https://github.com/lwouis/alt-tab-macos/issues/4379)) ([9d852ee](https://github.com/lwouis/alt-tab-macos/commit/9d852ee))
|
||||
* window name would sometimes be empty (closes [#4350](https://github.com/lwouis/alt-tab-macos/issues/4350)) ([911c3c1](https://github.com/lwouis/alt-tab-macos/commit/911c3c1))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improve hindi localization ([dec0519](https://github.com/lwouis/alt-tab-macos/commit/dec0519))
|
||||
|
||||
# [7.22.0](https://github.com/lwouis/alt-tab-macos/compare/v7.21.1...v7.22.0) (2025-03-30)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* language switcher picked up as window ([f4f7d9a](https://github.com/lwouis/alt-tab-macos/commit/f4f7d9a))
|
||||
* prevent rare crash ([4e35f9f](https://github.com/lwouis/alt-tab-macos/commit/4e35f9f))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* update ca/de/fr/ko/ru/tw localizations ([9b3f936](https://github.com/lwouis/alt-tab-macos/commit/9b3f936))
|
||||
|
||||
## [7.21.1](https://github.com/lwouis/alt-tab-macos/compare/v7.21.0...v7.21.1) (2025-02-22)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* update how feedback messages are sent ([647f900](https://github.com/lwouis/alt-tab-macos/commit/647f900))
|
||||
|
||||
# [7.21.0](https://github.com/lwouis/alt-tab-macos/compare/v7.20.1...v7.21.0) (2025-02-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* app would sometimes crash (closes [#4244](https://github.com/lwouis/alt-tab-macos/issues/4244)) ([d543393](https://github.com/lwouis/alt-tab-macos/commit/d543393))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add lithuanian localization ([bc95b90](https://github.com/lwouis/alt-tab-macos/commit/bc95b90))
|
||||
* improve chinese localization ([330ac54](https://github.com/lwouis/alt-tab-macos/commit/330ac54))
|
||||
|
||||
## [7.20.1](https://github.com/lwouis/alt-tab-macos/compare/v7.20.0...v7.20.1) (2025-02-20)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* may crash when changing space or screen ([b62cec0](https://github.com/lwouis/alt-tab-macos/commit/b62cec0))
|
||||
|
||||
# [7.20.0](https://github.com/lwouis/alt-tab-macos/compare/v7.19.1...v7.20.0) (2025-02-19)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* better detect windows from other spaces (closes [#1324](https://github.com/lwouis/alt-tab-macos/issues/1324)) ([2cd8b96](https://github.com/lwouis/alt-tab-macos/commit/2cd8b96))
|
||||
* colored circles would go away on ui refresh (closes [#4151](https://github.com/lwouis/alt-tab-macos/issues/4151)) ([dcea005](https://github.com/lwouis/alt-tab-macos/commit/dcea005))
|
||||
* stage manager no longer skews the thumbnails (closes [#1731](https://github.com/lwouis/alt-tab-macos/issues/1731)) ([93defcd](https://github.com/lwouis/alt-tab-macos/commit/93defcd))
|
||||
* window might be noted to be on the wrong space ([5413372](https://github.com/lwouis/alt-tab-macos/commit/5413372))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add javanese localization ([8564ed2](https://github.com/lwouis/alt-tab-macos/commit/8564ed2))
|
||||
* improve performance and lower resources consumption ([9d78700](https://github.com/lwouis/alt-tab-macos/commit/9d78700))
|
||||
* improve thumbnails quality and performance (closes [#4183](https://github.com/lwouis/alt-tab-macos/issues/4183)) ([9d6fc68](https://github.com/lwouis/alt-tab-macos/commit/9d6fc68))
|
||||
* improve window focusing action ([8dd63c7](https://github.com/lwouis/alt-tab-macos/commit/8dd63c7))
|
||||
* update fr, kn, pt-br, uk localizations ([fd0411b](https://github.com/lwouis/alt-tab-macos/commit/fd0411b))
|
||||
|
||||
## [7.19.1](https://github.com/lwouis/alt-tab-macos/compare/v7.19.0...v7.19.1) (2025-01-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* a few labels were not displaying (closes [#4127](https://github.com/lwouis/alt-tab-macos/issues/4127)) ([0a22547](https://github.com/lwouis/alt-tab-macos/commit/0a22547))
|
||||
|
||||
# [7.19.0](https://github.com/lwouis/alt-tab-macos/compare/v7.18.1...v7.19.0) (2025-01-14)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add preference to toggle animation of preview (closes [#4118](https://github.com/lwouis/alt-tab-macos/issues/4118)) ([c10ca2a](https://github.com/lwouis/alt-tab-macos/commit/c10ca2a))
|
||||
* middle-click will now close windows and quit applications ([2f8c014](https://github.com/lwouis/alt-tab-macos/commit/2f8c014))
|
||||
|
||||
## [7.18.1](https://github.com/lwouis/alt-tab-macos/compare/v7.18.0...v7.18.1) (2025-01-12)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* don't check screen-recording permission if unnecessary ([f3b116e](https://github.com/lwouis/alt-tab-macos/commit/f3b116e)), closes [#4113](https://github.com/lwouis/alt-tab-macos/issues/4113)
|
||||
* show shadows around thumbnails (closes [#4068](https://github.com/lwouis/alt-tab-macos/issues/4068)) ([597b443](https://github.com/lwouis/alt-tab-macos/commit/597b443))
|
||||
|
||||
# [7.18.0](https://github.com/lwouis/alt-tab-macos/compare/v7.17.0...v7.18.0) (2025-01-07)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* various issues with the app freezing or being slowly ([121515c](https://github.com/lwouis/alt-tab-macos/commit/121515c))
|
||||
* window order on first display was wrong ([db5644e](https://github.com/lwouis/alt-tab-macos/commit/db5644e))
|
||||
* window preview was not showing in titles style ([684cc66](https://github.com/lwouis/alt-tab-macos/commit/684cc66))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improve polish localization ([c712473](https://github.com/lwouis/alt-tab-macos/commit/c712473))
|
||||
|
||||
# [7.17.0](https://github.com/lwouis/alt-tab-macos/compare/v7.16.0...v7.17.0) (2025-01-05)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* app icons could sometimes be at the wrong size ([d5d1311](https://github.com/lwouis/alt-tab-macos/commit/d5d1311))
|
||||
* more robust screen-recording permission detection ([d85ec7b](https://github.com/lwouis/alt-tab-macos/commit/d85ec7b))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* handle cli commands: --list and --focus=window_id ([0f2c0e7](https://github.com/lwouis/alt-tab-macos/commit/0f2c0e7))
|
||||
|
||||
# [7.16.0](https://github.com/lwouis/alt-tab-macos/compare/v7.15.0...v7.16.0) (2025-01-04)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* app badges could be incorrectly positioned on the very first launch ([c2ccccd](https://github.com/lwouis/alt-tab-macos/commit/c2ccccd))
|
||||
* app-icons wouldn't show when permissions were skipped ([837fa03](https://github.com/lwouis/alt-tab-macos/commit/837fa03))
|
||||
* screen recording warnings shouldn't appear with skipped permissions ([f027b47](https://github.com/lwouis/alt-tab-macos/commit/f027b47))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improve performance by caching preferences better ([d653a54](https://github.com/lwouis/alt-tab-macos/commit/d653a54))
|
||||
|
||||
# [7.15.0](https://github.com/lwouis/alt-tab-macos/compare/v7.14.1...v7.15.0) (2025-01-02)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* better position preview for fullscreen windows (closes [#4051](https://github.com/lwouis/alt-tab-macos/issues/4051)) ([3b0cba4](https://github.com/lwouis/alt-tab-macos/commit/3b0cba4))
|
||||
* layout was sometimes broken in app-icons style (closes [#4036](https://github.com/lwouis/alt-tab-macos/issues/4036)) ([be5eb26](https://github.com/lwouis/alt-tab-macos/commit/be5eb26))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* improve chinese-taiwanese localization ([dfcf9de](https://github.com/lwouis/alt-tab-macos/commit/dfcf9de))
|
||||
* improve performance and order accuracy at launch ([fc6d636](https://github.com/lwouis/alt-tab-macos/commit/fc6d636))
|
||||
* improve quality of thumbnails and performance ([a138a92](https://github.com/lwouis/alt-tab-macos/commit/a138a92))
|
||||
* reduce space between app icon and window title ([295eb2b](https://github.com/lwouis/alt-tab-macos/commit/295eb2b))
|
||||
* switcher displays faster; other performance improvements ([b51ff65](https://github.com/lwouis/alt-tab-macos/commit/b51ff65))
|
||||
|
||||
## [7.14.1](https://github.com/lwouis/alt-tab-macos/compare/v7.14.0...v7.14.1) (2024-12-28)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* improve label display in app-icons style ([7e501a4](https://github.com/lwouis/alt-tab-macos/commit/7e501a4))
|
||||
* title would sometimes not show when mouse hovering ([dd05ba2](https://github.com/lwouis/alt-tab-macos/commit/dd05ba2))
|
||||
|
||||
# [7.14.0](https://github.com/lwouis/alt-tab-macos/compare/v7.13.1...v7.14.0) (2024-12-26)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* improve acknowledgments tab (closes [#4025](https://github.com/lwouis/alt-tab-macos/issues/4025)) ([db5500f](https://github.com/lwouis/alt-tab-macos/commit/db5500f))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* clear feedback form after submission (closes [#4026](https://github.com/lwouis/alt-tab-macos/issues/4026)) ([42bbd0f](https://github.com/lwouis/alt-tab-macos/commit/42bbd0f))
|
||||
* improve chinese, irish, italian localizations ([18ef16f](https://github.com/lwouis/alt-tab-macos/commit/18ef16f))
|
||||
* swipes can now be horizontal or vertical (closes [#4020](https://github.com/lwouis/alt-tab-macos/issues/4020)) ([fda3ada](https://github.com/lwouis/alt-tab-macos/commit/fda3ada))
|
||||
|
||||
## [7.13.1](https://github.com/lwouis/alt-tab-macos/compare/v7.13.0...v7.13.1) (2024-12-24)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* acknowledgments tab was hard to read in dark mode (closes [#4019](https://github.com/lwouis/alt-tab-macos/issues/4019)) ([4481d94](https://github.com/lwouis/alt-tab-macos/commit/4481d94))
|
||||
* app crash from v7.13.0 (closes [#4016](https://github.com/lwouis/alt-tab-macos/issues/4016)) ([d3b5bef](https://github.com/lwouis/alt-tab-macos/commit/d3b5bef))
|
||||
|
||||
# [7.13.0](https://github.com/lwouis/alt-tab-macos/compare/v7.12.0...v7.13.0) (2024-12-24)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* enabling previews with multiple screens could lead to flickering ([87a2b21](https://github.com/lwouis/alt-tab-macos/commit/87a2b21))
|
||||
* prevent initial window lastFocusOrder overlaps ([d32f953](https://github.com/lwouis/alt-tab-macos/commit/d32f953))
|
||||
* previews on multiple screens could get misplaced ([2a0a858](https://github.com/lwouis/alt-tab-macos/commit/2a0a858))
|
||||
* titles could sometimes be covered when in small size ([c5e13cc](https://github.com/lwouis/alt-tab-macos/commit/c5e13cc))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add fade-in for window previews (closes [#2456](https://github.com/lwouis/alt-tab-macos/issues/2456)) ([40c9a18](https://github.com/lwouis/alt-tab-macos/commit/40c9a18))
|
||||
* allow vertical swipes as trigger (closes [#4012](https://github.com/lwouis/alt-tab-macos/issues/4012)) ([9adf64c](https://github.com/lwouis/alt-tab-macos/commit/9adf64c))
|
||||
* improve localizations ([6d9059e](https://github.com/lwouis/alt-tab-macos/commit/6d9059e))
|
||||
* reduce disk size of localizations ([9ec2762](https://github.com/lwouis/alt-tab-macos/commit/9ec2762))
|
||||
* swiping won't wrap-around to other rows (closes [#3983](https://github.com/lwouis/alt-tab-macos/issues/3983)) ([6215b65](https://github.com/lwouis/alt-tab-macos/commit/6215b65))
|
||||
|
||||
# [7.12.0](https://github.com/lwouis/alt-tab-macos/compare/v7.11.0...v7.12.0) (2024-12-11)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* switcher could appear collapsed in titles style (closes [#3744](https://github.com/lwouis/alt-tab-macos/issues/3744)) ([60534bc](https://github.com/lwouis/alt-tab-macos/commit/60534bc))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* acknowledgments tab was slow to display (closes [#3957](https://github.com/lwouis/alt-tab-macos/issues/3957)) ([41ddd7c](https://github.com/lwouis/alt-tab-macos/commit/41ddd7c))
|
||||
|
||||
# [7.11.0](https://github.com/lwouis/alt-tab-macos/compare/v7.10.0...v7.11.0) (2024-12-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* always show a window in show:apps mode (closes [#3950](https://github.com/lwouis/alt-tab-macos/issues/3950)) ([ac70fcc](https://github.com/lwouis/alt-tab-macos/commit/ac70fcc))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* decrease shortcuts from 5 to 3 ([d65f220](https://github.com/lwouis/alt-tab-macos/commit/d65f220))
|
||||
* improve chinese localization ([764e0f3](https://github.com/lwouis/alt-tab-macos/commit/764e0f3))
|
||||
* improve focus in show:apps mode (closes [#3951](https://github.com/lwouis/alt-tab-macos/issues/3951)) ([cb191d6](https://github.com/lwouis/alt-tab-macos/commit/cb191d6))
|
||||
* support 3 or 4 finger swipes to use the app (closes [#730](https://github.com/lwouis/alt-tab-macos/issues/730)) ([903e758](https://github.com/lwouis/alt-tab-macos/commit/903e758))
|
||||
* switcher will now show in "show desktop" mode (closes [#783](https://github.com/lwouis/alt-tab-macos/issues/783)) ([9b85f00](https://github.com/lwouis/alt-tab-macos/commit/9b85f00))
|
||||
|
||||
# [7.10.0](https://github.com/lwouis/alt-tab-macos/compare/v7.9.0...v7.10.0) (2024-12-08)
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
# Contributing
|
||||
---
|
||||
permalink: /contributing
|
||||
sitemap: true
|
||||
---
|
||||
|
||||
There are many ways to contribute:
|
||||
|
||||
* Come discuss with us on the [Discord server](https://discord.gg/CVEPeDufJa).
|
||||
* [Suggest an enhancement or discuss an issue on github](https://github.com/lwouis/alt-tab-macos/issues), or use the feedback form in the app.
|
||||
* [Localize the app in your language](https://poeditor.com/join/project/8AOEZ0eAZE)
|
||||
|
||||
@@ -10,18 +12,14 @@ There are many ways to contribute:
|
||||
|
||||
This document gives a technical overview of the project, for newcomers who want to contribute.
|
||||
|
||||
## Building the project locally
|
||||
## Building the project
|
||||
|
||||
This project has minimal dependency on Xcode-only features (e.g. InterfaceBuilder, Playgrounds). You can build it by doing:
|
||||
|
||||
* `scripts/codesign/setup_local.sh` to generate a local self-signed certificate, to avoid having to re-check the `System Preferences > Security & Privacy` permissions on every build
|
||||
* Either open `alt-tab-macos.xcworkspace` with XCode, or use the cli: `xcodebuild -workspace alt-tab-macos.xcworkspace -scheme Debug` to build the .app with the `Debug` build configuration
|
||||
|
||||
## Raising a pull-request
|
||||
|
||||
If you want to contribute a PR, please run `npm install` once. It will add the pre-commit hook to ensure that your commits follow the convention and will pass the PR.
|
||||
|
||||
## Mac development ecosystem
|
||||
## Mac development
|
||||
|
||||
Mac development ecosystem is pretty terrible in general. They keep piling on the tech stacks on top of each other, so you have C APIs, ObjC APIs, Swift APIs, Interface builder, Playgrounds, Swift UI, Mac Catalyst. All these are bridging with each other with a bunch of macros, SDKs glue, compiler flags, compatibility mode, XCode legacy build system, etc. For alt-tab, we are on Swift 5.0. Note that swift just recently started being stable, but overall any change of version breaks a lot of stuff. Swift itself is the mainstream language with the worst governance I’ve seen in modern times.
|
||||
|
||||
@@ -31,9 +29,9 @@ Documentation is abysmal. Very simple things are not documented at all, and good
|
||||
|
||||
Dependencies were historically never handled by Apple. The community came up with [Cocoapods](https://cocoapods.org/) which is the de-facto dependency manager for Apple ecosystem projects these days, even though Apple is now trying to push their own.
|
||||
|
||||
OS APIs are quite limited for the kind of low-level, system-wide app AltTab is. This means often we just don’t have an API to do something. For instance, there is no API to ask the OS “how many Spaces does the user have?” or “Can you focus the window on Space 2?”. There are however, retro-engineered private APIs which you can call. These are not documented at all, not guaranteed to be there in future macOS releases, and prevent us from releasing AltTab on the Mac AppStore. We have tried my best to [document](https://github.com/lwouis/alt-tab-macos/blob/master/src/api-wrappers/PrivateApis.swift) the ones we are using, as well as ones we investigated in the past.
|
||||
OS APIs are quite limited for the kind of low-level, system-wide app AltTab is. This means often we just don’t have an API to do something. For instance, there is no API to ask the OS “how many Spaces does the user have?” or “Can you focus the window on Space 2?”. There are however, retro-engineered private APIs which you can call. These are not documented at all, not guaranteed to be there in future macOS releases, and prevent us from releasing AltTab on the Mac AppStore. We have tried our best to [document the ones we are using](https://github.com/lwouis/alt-tab-macos/blob/master/src/api-wrappers/private-apis/README.md), as well as [the ones we investigated](https://github.com/lwouis/alt-tab-macos/blob/master/src/experimentations/PrivateApis.swift) in the past.
|
||||
|
||||
## This project specifically
|
||||
## Project architecture
|
||||
|
||||
To mitigate the issues listed above, we took some measures.
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
## [Developed the app](https://github.com/lwouis/alt-tab-macos/graphs/contributors)
|
||||
|
||||
[adamnemecek](https://github.com/adamnemecek), [AfzalivE](https://github.com/AfzalivE), [akx](https://github.com/akx), [Allsochen](https://github.com/Allsochen), [ayroblu](https://github.com/ayroblu), [britalmeida](https://github.com/britalmeida), [Calinou](https://github.com/Calinou), [damonpam](https://github.com/damonpam), [decodism](https://github.com/decodism), [delaneyb](https://github.com/delaneyb), [gingerr](https://github.com/gingerr), [GrzegorzKazana](https://github.com/GrzegorzKazana), [hughlilly](https://github.com/hughlilly), [karbassi](https://github.com/karbassi), [L1cardo](https://github.com/L1cardo), [lwouis](https://github.com/lwouis), [metacodes](https://github.com/metacodes), [mnin](https://github.com/mnin), [MrPaschenko](https://github.com/MrPaschenko), [nella17](https://github.com/nella17), [notlmn](https://github.com/notlmn), [phungtuanhoang1996](https://github.com/phungtuanhoang1996), [rbnis](https://github.com/rbnis), [Rjevski](https://github.com/Rjevski), [ShlomoCode](https://github.com/ShlomoCode), [skolj](https://github.com/skolj), [stopdesign](https://github.com/stopdesign), [xanathar](https://github.com/xanathar), [zacharee](https://github.com/zacharee)
|
||||
|
||||
## [Localized the app](https://poeditor.com/join/project/8AOEZ0eAZE)
|
||||
|
||||
73, A, a774 nn, Aamirsuleman, Aarni Koskela, Abdulelah, Abdur-Rahman Bilal, Aden Aziz, Admin, Aindriú Mac Giolla Eoin, Ajaykumarmkaju, Aku, Albert Abdilim, Aleksander Bang-Larsen, Alex, Alexander Kilian, Alexey Eremeev, Ali, Ali Gokmen, Ali. tas103, Allen Guan, Alonso Chen, Ameng, Anders, Andreas Wagner, Andrej Koman, Andrew Vader, antoon334, Anurag Roy, anushree b, Arman, Artem Stankov, Arthur, Ash, blanorama, bluefirex, BO the Man, bovirus, Bufo, BV Joshi, caduellery, Caner İlhan, catcore, changanmoon, Christian Keilmann, Chun Fei Lung, codecantata, codingalone, Cong Tri, Dan, Dan84, Darius Rosendahl, Darko, David R, Denis, Dékány Martin, dibas-np, Didier Deschrijver, Dzhuneyt, edu_sombra, EDUARDO, Eimantas, Eliezer Shpigelman, Emir H. KAYNAK, EP45, Eric WANTZ, Ersagun Kuruca, EUKA, Eukarya, Eyelly wu, fil, Filipe, Frangarciasalomon, Frank, Friendship1, Fukuda, Ganesh Sawant, Gezimos, Giacomo Volpi, Giang, Github, Gkostov, Grzegorz Kazana, Guillaume, Gumpanath Puttarassu, hann-solo, Haoshuai Xu, Hao豪, Heramb Lonkar, Hjörtur Hjartarson, Hokuto Kato, Huandngoc, Huynh Sang, Ialiendeg, Ida Bomholt Dyrholm Jacobsen, Igor Aradski, igorpocta, Indexerrowaty, Inês Almeida, isametry, Ismatulla, Isthereanybody, Jaeyong Sung, Jakob, Jakob Licina, Jakub Bartušek, Jesus Angel Villafuerte, jiho4, Jisan, Joao Vitor Casarin, Jord Nijhuis, Jui Yuan Liu, Jules Beckers, Julian Nowaczyk, Julio, justcontributor, Kagurazaka Tsuki, kal, kant, Kawarimidoll+git, kazuki sakamoto, Kevinsevinche, KillianG, Kinyagulovrr, Klara, Kostiantyn Ko, Kristófer Fannar Björnsson, Kushnee5, Kuuchi, Lakshman Kolappan, Lars, Lasse Mattila, Lcwhhh, Leo, Lester, Logan Boissy, Loic. peron, Loïc, LostInCompilation, Lumaxis, lwouis, M, Malo, Maplevantablack, Marc Pla, Marcus Billman, Marekscholle, Marko McLion, Martin Mitka, Martin. mitka, Masayoshi Motojima, Masih, Matheus, Max, Maximilian Falk, MaximilianFreitag, Mehmet Ali Ertorer, Meriç Bağlayan, Michael, Milos M, Mohammad Al Zouabi, mohma, Mohsin Rahman, Mr. axel. bock, mrtbts, MuDraconis, Muzhenstudent, Mwolfinspace, Nathancodes, NIKHIL S, Nikola Rajić, Nils Fahldieck, Nilton Souza, Nmolham, Nuriddin Islamov, Ori, Paul Pichaureau, Paul Przybyszewski, Paul. pichaureau, Pehovorka, Pendolino, Petar Shomov, Peterkim0620, Petr Kolář, Petter Johan Olsen, Piotr Budny, Quentin. douarre, Rajesh Kaswala, rajuneon, Rami Elsawy, Raphaël, Rasmus, Raymonf, raz, Razvan, rbnis, rei fujise, Roccobot, Roccobot, Rodrigo Schneider, Ron Nuss, rPaasch, Ryan Nardi, sa-ha, Sai Khant Zay Lynn Yaung, Sami Suleiman, Samimkel00, Saransh, sawtooth, Sebastian, Selcuk Dursun, Sergey, Serhii Alekseev, Seyedparsa Mirtaheri, Shameem Reza, SheNeVmerla, Shivam Bansal, shlomo, Sippawit Thammawiset, Sjur Moshagen, Sjur.n. moshagen, Stan Smits, star-affinity, Stefan, Stefan Lange, Svetoslav Stefanov, Tamilselvan0x0, Thebennue, Thomas Wölk, Thorsten, Thorsten, Tomoa Nozawa, Trevor, Tsilimpotis Dimitrios, Umutakkaya1996, Vadym, Vijayant Saini, Vincent Orback, Vlad, Webmaster, Wesley Matos, Whatsmine-HaoshuaiXu, White Vogel, Wilhelm Wolfgang Gärtner, Yongsung Yoon, Yorben, Yossi Zahn, ysaito, Yukai, yumechan, Yusuf Caliskan, Zamaialexander, Zuhaib Syed, Τσιλιμπότης Δημ., Андрій Кирбаба, Ивайло, Пустой, 林清, 橙梓
|
||||
@@ -0,0 +1 @@
|
||||
google-site-verification: google24a020170798641a.html
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
permalink: /
|
||||
sitemap: true
|
||||
---
|
||||
|
||||
[<img src="public/demo/frontpage.jpg" alt="Screenshot showing AltTab" width="1920" height="1080" style="width:100%; height:auto;" class="can-extend" />](public/demo/frontpage.jpg)
|
||||
|
||||
Alternative Styles
|
||||
|
||||
<div class="can-extend" style="display:flex; align-items:center; gap:10px;">
|
||||
<a href="public/demo/app-icons-style.jpg">
|
||||
<img loading="lazy" src="public/demo/app-icons-style.jpg" alt="Screenshot: App Icons Style" width="513" height="241" style="width:100%; height:auto;" />
|
||||
</a>
|
||||
<a href="public/demo/titles-style.jpg">
|
||||
<img loading="lazy" src="public/demo/titles-style.jpg" alt="Screenshot: Titles Style" width="766" height="248" style="width:100%; height:auto;" />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
## Installation
|
||||
|
||||
* [**Download the latest release**]({{ site.github.latest_release.assets[0].browser_download_url }})
|
||||
* Alternatively, you can use [homebrew](https://brew.sh/): `brew install --cask alt-tab`
|
||||
|
||||
## Features
|
||||
|
||||
* Switch focus to any window
|
||||
* Minimize, close, fullscreen any window; Hide, quit any app
|
||||
* Customize AltTab appearance (pick one of 3 styles, then customize further)
|
||||
* Custom trigger shortcuts with almost any keys
|
||||
* Blacklist apps you don’t want to list or trigger AltTab from
|
||||
* Light and Dark Appearance
|
||||
* Drag-and-drop things on top of window thumbnails
|
||||
* Accessibility: VoiceOver, sticky keys, reduced transparency, etc
|
||||
|
||||
## FAQ
|
||||
|
||||
Find [Frequently Asked Questions on GitHub](https://github.com/lwouis/alt-tab-macos/discussions/categories/frequently-asked-questions?discussions_q=category%3A%22Frequently+Asked+Questions%22+).
|
||||
|
||||
## Configuration
|
||||
|
||||
Change the shortcut keys, switch to a Windows theme and more, using the Settings window:
|
||||
|
||||
<div class="can-extend" style="display:flex; align-items:center; flex-wrap: wrap;">
|
||||
<a href="public/demo/preferences-general.jpg"><img loading="lazy" src="public/demo/preferences-general.jpg" alt="Screenshot: General preferences" width="672" height="354" style="width:100%; height:auto; max-width:330px;" /></a>
|
||||
<a href="public/demo/preferences-controls.jpg"><img loading="lazy" src="public/demo/preferences-controls.jpg" alt="Screenshot: Controls preferences" width="677" height="688" style="width:100%; height:auto; max-width:330px;" /></a>
|
||||
<a href="public/demo/preferences-appearance.jpg"><img loading="lazy" src="public/demo/preferences-appearance.jpg" alt="Screenshot: Appearance preferences" width="672" height="735" style="width:100%; height:auto; max-width:330px;" /></a>
|
||||
<a href="public/demo/preferences-appearance-details.jpg"><img loading="lazy" src="public/demo/preferences-appearance-details.jpg" alt="Screenshot: Appearance preferences (details)" width="672" height="934" style="width:100%; height:auto; max-width:330px;" /></a>
|
||||
<a href="public/demo/preferences-blacklist.jpg"><img loading="lazy" src="public/demo/preferences-blacklist.jpg" alt="Screenshot: Blacklist preferences" width="672" height="655" style="width:100%; height:auto; max-width:330px;" /></a>
|
||||
<a href="public/demo/preferences-policies.jpg"><img loading="lazy" src="public/demo/preferences-policies.jpg" alt="Screenshot: Policies preferences" width="672" height="353" style="width:100%; height:auto; max-width:330px;" /></a>
|
||||
</div>
|
||||
|
||||
## Compatibility
|
||||
|
||||
* __macOS version:__ from 10.12 to latest
|
||||
* __Apple Silicon:__ yes, AltTab is [universal](https://developer.apple.com/documentation/apple-silicon/porting-your-macos-apps-to-apple-silicon)
|
||||
|
||||
## Localization
|
||||
|
||||
AltTab is available in many languages: Bahasa Indonesia, Basa Jawa, Català, Čeština, Dansk, Deutsch, Eesti keel, English, Español, Français, Gaeilge, Galego, Hrvatski, Íslenska, Italiano, Kurdî, Lietuvių, Lëtzebuergesch, Magyar, Nederlands, Norsk Bokmål, Norsk Nynorsk, Oʻzbekcha, Polski, Português, Português (Brasil), Română, Shqip, Slovenčina, Slovenščina, Suomi, Svenska, Tiếng Việt, Türkçe, Беларуская мова, Български, Русский, Српски, Українська, Қазақ тілі, Ελληνικά, עִבְרִית ,اردو ,العربية ,فارسی, मराठी, हिन्दी, বাংলা, ગુજરાતી, தமிழ், ಕನ್ನಡ, മലയാളം, ภาษาไทย, မြန်မာဘာသာ, 日本語, 简体中文, 繁體中文, 繁體中文 (香港), 한국어
|
||||
|
||||
[Contribute your own language easily!](https://poeditor.com/join/project/8AOEZ0eAZE)
|
||||
|
||||
## Privacy
|
||||
|
||||
AltTab doesn’t communicate to any server for so-called telemetry. AltTab will only use the network if it's absolutely required (e.g. checking for updates).
|
||||
|
||||
AltTab has been designed to take as few resources as possible on the user computer. The app itself is kept as small as possible. CPU usage is kept to a minimum, especially while in the background. The goal is to respect the user and try to have no negative impact on their experience.
|
||||
|
||||
## CLI usage
|
||||
|
||||
You can run CLI commands directly on the executable inside the .app bundle (e.g. `/Applications/AltTab.app/Contents/MacOS/AltTab`)
|
||||
|
||||
* `AltTab --list` will return the list of windows (ID and title) in JSON
|
||||
* `AltTab --detailed-list` will return the list of windows (lots of info) in JSON
|
||||
* `AltTab --show=shortcut_index` will show AltTab UI, as if the corresponding shortcut was pressed
|
||||
* `AltTab --focus=window_id` will focus the window with the specified ID (get it from --list)
|
||||
* `AltTab --focusUsingLastFocusOrder=focus_order` will focus the window with the specified focus-order (get it from --detailed-list)
|
||||
|
||||
For this to work, you need AltTab.app to be running, to keep track of the state of windows, and execute the commands
|
||||
|
||||
## Alternatives
|
||||
|
||||
Before building my own app, I looked around at similar apps. However, none was completely satisfactory so I rolled my own. Also, the almost-good-enough apps are not open-source.
|
||||
|
||||
| Alternative | Differences |
|
||||
|---------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------|
|
||||
| [HyperSwitch](https://bahoom.com/hyperswitch) and [HyperDock](https://bahoom.com/hyperdock) | $10. Closed-source. Thumbnails are too small. App icon is on top of the thumbnail |
|
||||
| [WindowSwitcher](https://www.noteifyapp.com/windowswitcher/) | $7. Closed-source. Thumbnails are small and blurry. App icon is on top of the thumbnail |
|
||||
| [Switch](https://github.com/numist/Switch) | Open Source. Thumbnails are small. Very little customization. Latest release is from 2016 |
|
||||
| [Witch](https://manytricks.com/witch/) and [Contexts](https://contexts.co/) | $10-15. Closed-source. Focus on text. No thumbnails |
|
||||
| [MissionControl Plus](https://www.fadel.io/missioncontrolplus) | $10. Closed-source. No chronology and order to windows. Hard to navigate windows with keyboard |
|
||||
| Built-in [MissionControl](https://en.wikipedia.org/wiki/Mission_Control_(macOS)) | No keyboard support |
|
||||
| Built-in `⌘ command` + `⇥ tab` | Only shows apps, not windows (note: can press down to see window of selected app) |
|
||||
| Built-in `⌘ command` + `` ` `` | Cycles through tabs and windows, but only of the same app. Only cycling, no direct access |
|
||||
|
||||
There are also related apps which don’t really overlap in functionality, but target similar needs: [Swish](https://highlyopinionated.co/swish/), [Hookshot](https://hookshot.app/), [Magnet](https://magnet.crowdcafe.com/), [Spectacle](https://www.spectacleapp.com/), [Rectangle](https://github.com/rxhanson/Rectangle), [yabai](https://github.com/koekeishiya/yabai), [LayAuto](https://layautoapp.com/), [BetterTouchTool](https://folivora.ai/), [BetterSnapTool](https://folivora.ai/bettersnaptool), [Moom](https://manytricks.com/moom/), [uBar](https://brawersoftware.com/products/ubar).
|
||||
@@ -0,0 +1,13 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="298" height="64" fill="none" viewBox="0 0 298 64">
|
||||
<defs>
|
||||
<linearGradient id="a" x1=".850001" x2="62.62" y1="62.72" y2="1.81" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FF9419"/>
|
||||
<stop offset=".43" stop-color="#FF021D"/>
|
||||
<stop offset=".99" stop-color="#E600FF"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path fill="#000" d="M86.4844 40.5858c0 .8464-.1792 1.5933-.5377 2.2505-.3585.6573-.8564 1.1651-1.5137 1.5236-.6572.3585-1.3941.5378-2.2406.5378H78v6.1044h5.0787c1.912 0 3.6248-.4282 5.1484-1.2846 1.5236-.8564 2.7186-2.0415 3.585-3.5452.8663-1.5037 1.3045-3.1966 1.3045-5.0886V21.0178h-6.6322v19.568Zm17.8556-1.8224h13.891v-5.6065H104.34v-6.3633h15.355v-5.7758H97.8766v29.9743h22.2464v-5.7757H104.34v-6.453Zm17.865-11.8005h8.882v24.0193h6.633V26.9629h8.842v-5.9451h-24.367v5.9551l.01-.01Zm47.022 9.0022c-.517-.2788-1.085-.4879-1.673-.6472.449-.1295.877-.2888 1.275-.488 1.096-.5676 1.962-1.3643 2.579-2.39.618-1.0257.936-2.2007.936-3.5351 0-1.5237-.418-2.8879-1.244-4.0929-.827-1.195-1.992-2.131-3.486-2.8082-1.494-.6672-3.206-1.0058-5.118-1.0058h-13.315v29.9743h13.574c2.011 0 3.804-.3485 5.387-1.0556 1.573-.707 2.798-1.6829 3.675-2.9476.866-1.2547 1.304-2.6887 1.304-4.302 0-1.4837-.338-2.8082-1.026-3.9833-.687-1.175-1.633-2.0812-2.858-2.7285l-.01.0099Zm-13.603-9.9184h5.886c.816 0 1.533.1494 2.161.4382.627.2888 1.115.707 1.464 1.2547.348.5378.527 1.1751.527 1.9021 0 .7269-.179 1.414-.527 1.9817-.349.5676-.837.9958-1.464 1.3045-.628.3087-1.345.4581-2.161.4581h-5.886v-7.3492.0099Zm10.138 18.134c-.378.5676-.916 1.0058-1.603 1.3145-.697.3087-1.484.4581-2.39.4581h-6.145v-7.6878h6.145c.886 0 1.673.1693 2.37.4979.687.3286 1.235.7867 1.613 1.3842.378.5975.578 1.2747.578 2.0414 0 .7668-.19 1.4241-.568 1.9917Zm29.596-5.3077c1.663-.7967 2.947-1.922 3.864-3.3659.916-1.444 1.374-3.117 1.374-5.0289 0-1.912-.448-3.5253-1.344-4.9592-.897-1.434-2.171-2.5394-3.814-3.3261-1.644-.7867-3.546-1.1751-5.717-1.1751h-13.124v29.9743h6.642V40.0779h4.322l6.084 10.9142h7.578l-6.851-11.7208c.339-.1195.677-.249.996-.3983h-.01Zm-2.151-6.1244c-.369.6274-.896 1.1154-1.583 1.444-.688.3386-1.494.5079-2.42.5079h-5.975v-8.2953h5.975c.926 0 1.732.1693 2.42.4979.687.3287 1.214.8166 1.583 1.434.368.6174.558 1.3544.558 2.1908 0 .8365-.19 1.5734-.558 2.2008v.0199Zm20.594-11.7308-10.706 29.9743h6.742l2.121-6.6122h11.114l2.27 6.6122h6.612L220.99 21.0178h-7.189Zm-.339 18.3431 3.445-10.5756.409-1.922.408 1.922 3.685 10.5756h-7.947Zm20.693 11.6312h6.851V21.0178h-6.851v29.9743Zm31.02-9.6993-12.896-20.275h-6.463v29.9743h6.055V30.7172l12.826 20.2749h6.533V21.0178h-6.055v20.275Zm31.528-3.3559c-.647-1.2448-1.564-2.2904-2.729-3.1369-1.165-.8464-2.509-1.4041-4.023-1.6929l-5.098-1.0456c-.797-.1892-1.434-.5178-1.902-.9958-.469-.478-.708-1.0755-.708-1.7825 0-.6473.17-1.205.518-1.683.339-.478.827-.8464 1.444-1.1153.618-.2689 1.335-.3983 2.151-.3983.817 0 1.554.1394 2.181.4182.627.2788 1.115.6672 1.464 1.1751s.528 1.0755.528 1.7228h6.642c-.04-1.7427-.528-3.2863-1.444-4.6207-.916-1.3443-2.201-2.3899-3.834-3.1468-1.633-.7568-3.505-1.1352-5.597-1.1352-2.091 0-3.943.3884-5.566 1.1751-1.623.7867-2.898 1.8721-3.804 3.2663-.906 1.3941-1.364 2.9775-1.364 4.76 0 1.444.288 2.7485.876 3.9036.587 1.1652 1.414 2.1311 2.479 2.8979 1.076.7668 2.311 1.3045 3.725 1.6033l5.397 1.1153c.886.2091 1.584.5975 2.101 1.1551.518.5577.767 1.2448.767 2.0813 0 .6672-.189 1.2747-.567 1.8025-.379.5277-.907.936-1.584 1.2248-.677.2888-1.474.4282-2.39.4282-.916 0-1.782-.1593-2.529-.478-.747-.3186-1.325-.7767-1.733-1.3742-.418-.5875-.617-1.2747-.617-2.0414h-6.642c.029 1.8721.527 3.5152 1.513 4.9492.976 1.424 2.32 2.5394 4.033 3.336 1.713.7967 3.675 1.195 5.886 1.195 2.21 0 4.202-.4083 5.915-1.2249 1.723-.8165 3.057-1.9418 4.023-3.3758.966-1.434 1.444-3.0572 1.444-4.8696 0-1.4838-.329-2.848-.976-4.1028l.02.01Z"/>
|
||||
<path fill="url(#a)" d="M20.34 3.66 3.66 20.34C1.32 22.68 0 25.86 0 29.18V59c0 2.76 2.24 5 5 5h29.82c3.32 0 6.49-1.32 8.84-3.66l16.68-16.68c2.34-2.34 3.66-5.52 3.66-8.84V5c0-2.76-2.24-5-5-5H29.18c-3.32 0-6.49 1.32-8.84 3.66Z"/>
|
||||
<path fill="#000" d="M48 16H8v40h40V16Z"/>
|
||||
<path fill="#fff" d="M30 47H13v4h17v-4Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 749.3 227.1" xmlns="http://www.w3.org/2000/svg"><path d="m222.8 85.4c0-3.4 2.5-5.6 6.4-5.6h18.6c16.9 0 28.3 9.3 28.3 22.9s-11.3 23.3-28.3 23.3h-2.6c-6.5 0-9.8 3.4-9.8 8.8v15.2c0 4.3-2.5 7-6.3 7s-6.3-2.7-6.3-7zm12.6 19.3c0 6.8 3.5 10.1 10.1 10.1h1.6c9.3 0 16.1-3.8 16.1-12.1s-6.8-12.1-16.1-12.1h-1.6c-6.6 0-10.1 3.2-10.1 10.1v4.1zm40.7 46.4c0 3.6 2.5 5.9 6.3 5.9s4.8-1.6 6.1-5l2.3-6.1c1.8-4.9 5.1-7.1 8.6-7.1h20.5c3.6 0 6.8 2.3 8.6 7.1l2.3 6.1c1.3 3.4 3.6 5 6.1 5 3.8 0 6.3-2.4 6.3-5.9s-.2-2.2-.6-3.4l-24.5-63.8c-1.5-3.9-5-5.8-8.3-5.8s-6.8 1.9-8.3 5.8l-24.5 63.8c-.4 1.2-.6 2.4-.6 3.4zm23.9-29c0-1.2.3-2.3.9-3.9l4.6-12.9c.9-2.5 2.4-3.7 4.1-3.7s3.2 1.2 4.1 3.7l4.6 12.9c.5 1.6.9 2.7.9 3.9 0 3.2-1.8 5.5-6.7 5.5h-5.8c-4.9 0-6.7-2.3-6.7-5.5zm39-36.5c0-3.5 2.5-5.8 6.5-5.8h49.7c4 0 6.5 2.4 6.5 5.8s-2.5 5.8-6.5 5.8h-8.3c-6.6 0-10.2 3.4-10.2 11v47.4c0 4.4-2.5 7.1-6.4 7.1s-6.4-2.7-6.4-7.1v-47.4c0-7.7-3.6-11-10.2-11h-8.3c-4 0-6.5-2.4-6.5-5.8zm74.4 64.4c0 4.3 2.5 7 6.3 7s6.3-2.7 6.3-7v-17.2c0-4.9 2.8-6.9 6.3-6.9h.9c2.3 0 4.5 1.4 5.9 3.5l16.4 24.1c1.5 2.3 3.5 3.6 5.9 3.6s5.8-2.7 5.8-5.9-.4-2.7-1.4-4.1l-10.9-15.3c-1.3-1.8-1.8-3.4-1.8-4.6 0-2.7 2.4-4.6 5.2-6.7 5.1-3.8 10.6-8.8 10.6-18.3s-10.4-22.3-27.5-22.3h-21.7c-3.9 0-6.3 2.3-6.3 5.6v64.6zm12.5-46.3v-3.2c0-7 3.7-9.9 9.3-9.9h5.4c9.3 0 15.2 3.5 15.2 11.5s-6.3 11.7-15.6 11.7h-5.1c-5.6 0-9.3-2.9-9.3-9.9zm58.9 46.1v-64.4c0-3.4 2.4-5.6 6.3-5.6h40.9c3.9 0 6.3 2.3 6.3 5.6s-2.4 5.6-6.3 5.6h-25.8c-5.1 0-8.8 3-8.8 8.8v2.4c0 5.7 3.7 8.8 8.8 8.8h20c3.9 0 6.3 2.3 6.3 5.6s-2.4 5.6-6.3 5.6h-19.2c-5.1 0-9.5 3.1-9.5 9.5v3c0 6.4 4.4 9.5 9.5 9.5h25.1c3.9 0 6.3 2.3 6.3 5.6s-2.4 5.6-6.3 5.6h-40.9c-3.9 0-6.3-2.3-6.3-5.6zm60.9-32.2c0-23.3 17.5-39.4 38-39.4s38 16.1 38 39.4-17.5 39.4-38 39.4-38-16.1-38-39.4zm14.2 0c0 16.4 9.7 26.9 23.8 26.9s23.8-10.5 23.8-26.9-9.7-26.9-23.8-26.9-23.8 10.4-23.8 26.9zm76.9 32.4c0 4.3 2.5 7 6.3 7s6.3-2.7 6.3-7v-33.1c0-4 2.4-5.9 4.9-5.9s3.6 1.1 4.8 3l20.8 34.7c2.8 4.8 5.4 8.3 10.7 8.3s8.8-3.7 8.8-9.6v-62.2c0-4.3-2.5-7-6.3-7s-6.3 2.7-6.3 7v33.1c0 4-2.4 5.9-4.9 5.9s-3.6-1.1-4.8-3l-20.8-34.7c-2.8-4.8-5.4-8.3-10.7-8.3s-8.8 3.7-8.8 9.6z"/><path d="m169.2 87.5c0-16.7-13-30.3-28.2-35.2-18.9-6.1-43.8-5.2-61.9 3.3-21.9 10.3-28.7 32.9-29 55.5-.2 18.5 1.6 67.4 29.2 67.7 20.5.3 23.5-26.1 33-38.8 6.7-9 15.4-11.6 26.1-14.2 18.4-4.5 30.9-19 30.8-38.2z"/></svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
@@ -0,0 +1 @@
|
||||
<svg fill="none" height="151" viewBox="0 0 360 151" width="360" xmlns="http://www.w3.org/2000/svg"><g fill="#061b31"><g clip-rule="evenodd" fill-rule="evenodd"><path d="m360 78.2001c0-25.6-12.4-45.8-36.1-45.8-23.8 0-38.2 20.2-38.2 45.6 0 30.0999 17 45.2999 41.4 45.2999 11.9 0 20.9-2.7 27.7-6.5v-19.9999c-6.8 3.3999-14.6 5.4999-24.5 5.4999-9.7 0-18.3-3.3998-19.4-15.1998h48.9c0-1.3.2-6.5.2-8.9001zm-49.4-9.5c0-11.2999 6.9-16 13.2-16 6.1 0 12.6 4.7001 12.6 16z"/><path d="m247.1 32.4001c-9.8 0-16.1 4.6-19.6 7.8l-1.3-6.2h-22v116.5999l25-5.3.1-28.3c3.6 2.6 8.9 6.3 17.7 6.3 17.9 0 34.2-14.4 34.2-46.0999-.1-29-16.6-44.8-34.1-44.8zm-6 68.8999c-5.9 0-9.4-2.0999-11.8-4.6998l-.1-37.1001c2.6-2.9 6.2-4.8999 11.9-4.8999 9.1 0 15.4 10.1999 15.4 23.2999 0 13.4-6.2 23.3999-15.4 23.3999z"/><path d="m169.8 26.5 25.1-5.4v-20.299951l-25.1 5.300001z"/></g><path d="m194.9 34.1001h-25.1v87.4999h25.1z"/><path clip-rule="evenodd" d="m142.9 41.5001-1.6-7.4h-21.6v87.4999h25v-59.2999c5.9-7.7 15.9-6.3 19-5.2v-23c-3.2-1.2-14.9-3.4-20.8 7.4z" fill-rule="evenodd"/><path clip-rule="evenodd" d="m92.8999 12.4001-24.4 5.2-.1 80.1c0 14.7999 11.1 25.6999 25.9 25.6999 8.2001 0 14.2001-1.5 17.5001-3.3v-20.2999c-3.2 1.2999-19.0001 5.8999-19.0001-8.9v-35.5h19.0001v-21.2999h-19.0001z" fill-rule="evenodd"/><path clip-rule="evenodd" d="m25.3 59.5001c0-3.9 3.2-5.3999 8.5-5.3999 7.6 0 17.2 2.2999 24.8 6.3999v-23.5c-8.3-3.3-16.5-4.6-24.8-4.6-20.3 0-33.8 10.6-33.8 28.3 0 27.6 38 23.2 38 35.1 0 4.5999-4 6.0999-9.6 6.0999-8.3 0-18.9-3.3998-27.3-7.9998v23.7998c9.3 4 18.7 5.7 27.3 5.7 20.8 0 35.1-10.3 35.1-28.1999-.1-29.8-38.2-24.5-38.2-35.7z" fill-rule="evenodd"/></g></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,33 @@
|
||||
---
|
||||
permalink: /support
|
||||
sitemap: true
|
||||
---
|
||||
|
||||
<h1 style="text-align:center">Support this project ❤️</h1>
|
||||
|
||||
<div class="support-buttons">
|
||||
<div class="support-button-wrapper">
|
||||
<a href="https://www.paypal.com/donate/?hosted_button_id=ACYAC3UYCM7CN" target="_blank" class="support-button">
|
||||
<img src="public/support/logo-paypal.png" class="paypal" alt="PayPal">
|
||||
</a>
|
||||
<img src="public/support/mascot-cat.png" class="mascot cat" alt="">
|
||||
</div>
|
||||
<div class="support-button-wrapper">
|
||||
<a href="https://github.com/sponsors/lwouis" target="_blank" class="support-button">
|
||||
<img src="public/support/logo-github-sponsors.png" class="github-sponsors" alt="GitHub Sponsors">
|
||||
</a>
|
||||
<img src="public/support/mascot-dog.png" class="mascot dog" alt="">
|
||||
</div>
|
||||
<div class="support-button-wrapper">
|
||||
<a href="https://www.patreon.com/alt_tab_macos" target="_blank" class="support-button">
|
||||
<img src="public/support/logo-patreon.svg" class="patreon" alt="Patreon">
|
||||
</a>
|
||||
<img src="public/support/mascot-squirrel.png" class="mascot squirrel" alt="">
|
||||
</div>
|
||||
<div class="support-button-wrapper">
|
||||
<a href="https://donate.stripe.com/4gw9D7bA3g3O0ikaEF" target="_blank" class="support-button">
|
||||
<img src="public/support/logo-stripe.svg" class="stripe" alt="Stripe">
|
||||
</a>
|
||||
<img src="public/support/mascot-rabbit.png" class="mascot rabbit" alt="">
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: Thanks
|
||||
permalink: /thanks
|
||||
sitemap: true
|
||||
---
|
||||
|
||||
{% include_relative contributors.md %}
|
||||
|
||||
{% include_relative acknowledgments.md %}
|
||||
@@ -8,6 +8,11 @@
|
||||
"name": "alt-tab-macos",
|
||||
"version": "1.0.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/node": "^22.10.2",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.7.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "^8.1.0",
|
||||
"@commitlint/config-conventional": "^8.1.0",
|
||||
@@ -19,6 +24,9 @@
|
||||
"lint-staged": "^13.0.0",
|
||||
"marked": "^0.8.0",
|
||||
"semantic-release": "^15.13.24"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/code-frame": {
|
||||
@@ -220,6 +228,13 @@
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/@commitlint/resolve-extends/node_modules/@types/node": {
|
||||
"version": "12.20.55",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz",
|
||||
"integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@commitlint/rules": {
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-8.1.0.tgz",
|
||||
@@ -323,6 +338,18 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/@cspotcode/source-map-support": {
|
||||
"version": "0.8.1",
|
||||
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
|
||||
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/trace-mapping": "0.3.9"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@isaacs/cliui": {
|
||||
"version": "8.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
|
||||
@@ -426,6 +453,31 @@
|
||||
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/resolve-uri": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
||||
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/sourcemap-codec": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
|
||||
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@jridgewell/trace-mapping": {
|
||||
"version": "0.3.9",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
|
||||
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/resolve-uri": "^3.0.3",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.10"
|
||||
}
|
||||
},
|
||||
"node_modules/@marionebl/sander": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/@marionebl/sander/-/sander-0.6.1.tgz",
|
||||
@@ -1138,6 +1190,30 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/@tsconfig/node10": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
|
||||
"integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@tsconfig/node12": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
|
||||
"integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@tsconfig/node14": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
|
||||
"integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@tsconfig/node16": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
|
||||
"integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/events": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
|
||||
@@ -1162,10 +1238,13 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "12.7.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.2.tgz",
|
||||
"integrity": "sha512-dyYO+f6ihZEtNPDcWNR1fkoTDf3zAK3lAABDze3mz6POyIercH0lEUawUFXlG8xaQZmm1yEBON/4TsYv/laDYg==",
|
||||
"dev": true
|
||||
"version": "22.10.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz",
|
||||
"integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~6.20.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/normalize-package-data": {
|
||||
"version": "2.4.0",
|
||||
@@ -1197,6 +1276,30 @@
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/acorn-walk": {
|
||||
"version": "8.3.4",
|
||||
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
|
||||
"integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"acorn": "^8.11.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/acorn-walk/node_modules/acorn": {
|
||||
"version": "8.14.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
|
||||
"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/agent-base": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
|
||||
@@ -1268,6 +1371,12 @@
|
||||
"integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/arg": {
|
||||
"version": "4.1.3",
|
||||
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
|
||||
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/argparse": {
|
||||
"version": "1.0.10",
|
||||
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
|
||||
@@ -2045,6 +2154,12 @@
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/create-require": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
|
||||
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/currently-unhandled": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
|
||||
@@ -2192,6 +2307,15 @@
|
||||
"integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/diff": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
|
||||
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
|
||||
"license": "BSD-3-Clause",
|
||||
"engines": {
|
||||
"node": ">=0.3.1"
|
||||
}
|
||||
},
|
||||
"node_modules/dir-glob": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
|
||||
@@ -4263,6 +4387,12 @@
|
||||
"vlq": "^0.2.2"
|
||||
}
|
||||
},
|
||||
"node_modules/make-error": {
|
||||
"version": "1.3.6",
|
||||
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
|
||||
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/map-obj": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
|
||||
@@ -10856,6 +10986,61 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ts-node": {
|
||||
"version": "10.9.2",
|
||||
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
|
||||
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@cspotcode/source-map-support": "^0.8.0",
|
||||
"@tsconfig/node10": "^1.0.7",
|
||||
"@tsconfig/node12": "^1.0.7",
|
||||
"@tsconfig/node14": "^1.0.0",
|
||||
"@tsconfig/node16": "^1.0.2",
|
||||
"acorn": "^8.4.1",
|
||||
"acorn-walk": "^8.1.1",
|
||||
"arg": "^4.1.0",
|
||||
"create-require": "^1.1.0",
|
||||
"diff": "^4.0.1",
|
||||
"make-error": "^1.1.1",
|
||||
"v8-compile-cache-lib": "^3.0.1",
|
||||
"yn": "3.1.1"
|
||||
},
|
||||
"bin": {
|
||||
"ts-node": "dist/bin.js",
|
||||
"ts-node-cwd": "dist/bin-cwd.js",
|
||||
"ts-node-esm": "dist/bin-esm.js",
|
||||
"ts-node-script": "dist/bin-script.js",
|
||||
"ts-node-transpile-only": "dist/bin-transpile.js",
|
||||
"ts-script": "dist/bin-script-deprecated.js"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@swc/core": ">=1.2.50",
|
||||
"@swc/wasm": ">=1.2.50",
|
||||
"@types/node": "*",
|
||||
"typescript": ">=2.7"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@swc/core": {
|
||||
"optional": true
|
||||
},
|
||||
"@swc/wasm": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/ts-node/node_modules/acorn": {
|
||||
"version": "8.14.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
|
||||
"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/type-check": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
|
||||
@@ -10883,6 +11068,19 @@
|
||||
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz",
|
||||
"integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==",
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.17"
|
||||
}
|
||||
},
|
||||
"node_modules/uglify-js": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz",
|
||||
@@ -10900,6 +11098,12 @@
|
||||
"node": ">=0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "6.20.0",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
|
||||
"integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/unicode-properties": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.3.1.tgz",
|
||||
@@ -10966,6 +11170,12 @@
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/v8-compile-cache-lib": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
|
||||
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/validate-npm-package-license": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
|
||||
@@ -11344,6 +11554,15 @@
|
||||
"camelcase": "^5.0.0",
|
||||
"decamelize": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/yn": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
|
||||
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -30,5 +30,13 @@
|
||||
"lint-staged": "^13.0.0",
|
||||
"marked": "^0.8.0",
|
||||
"semantic-release": "^15.13.24"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/node": "^22.10.2",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.7.2"
|
||||
}
|
||||
}
|
||||
@@ -15,13 +15,14 @@ module.exports = {
|
||||
}],
|
||||
'@semantic-release/release-notes-generator',
|
||||
['@semantic-release/changelog', {
|
||||
'changelogTitle': '# Release notes',
|
||||
'changelogFile': 'docs/Changelog.md',
|
||||
'changelogFile': 'docs/changelog.md',
|
||||
}],
|
||||
['@semantic-release/git', {
|
||||
'assets': [
|
||||
'docs/Changelog.md',
|
||||
'appcast.xml'
|
||||
'docs/changelog.md',
|
||||
'appcast.xml',
|
||||
'README.md',
|
||||
'docs/_layouts/default.html'
|
||||
],
|
||||
}],
|
||||
],
|
||||
|
||||
@@ -1,675 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15705" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15705"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication"/>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
|
||||
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
|
||||
<items>
|
||||
<menuItem title="NewApplication" id="1Xt-HY-uBw">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="NewApplication" systemMenu="apple" id="uQy-DD-JDr">
|
||||
<items>
|
||||
<menuItem title="About NewApplication" id="5kV-Vb-QxS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
|
||||
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW"/>
|
||||
<menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/>
|
||||
<menuItem title="Services" id="NMo-om-nkz">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
|
||||
<menuItem title="Hide NewApplication" keyEquivalent="h" id="Olw-nP-bQN">
|
||||
<connections>
|
||||
<action selector="hide:" target="-1" id="PnN-Uc-m68"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="hideOtherApplications:" target="-1" id="VT4-aY-XCT"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Show All" id="Kd2-mp-pUS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="unhideAllApplications:" target="-1" id="Dhg-Le-xox"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
|
||||
<menuItem title="Quit NewApplication" keyEquivalent="q" id="4sb-4s-VLi">
|
||||
<connections>
|
||||
<action selector="terminate:" target="-1" id="Te7-pn-YzF"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="File" id="dMs-cI-mzQ">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="File" id="bib-Uj-vzu">
|
||||
<items>
|
||||
<menuItem title="New" keyEquivalent="n" id="Was-JA-tGl">
|
||||
<connections>
|
||||
<action selector="newDocument:" target="-1" id="4Si-XN-c54"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Open…" keyEquivalent="o" id="IAo-SY-fd9">
|
||||
<connections>
|
||||
<action selector="openDocument:" target="-1" id="bVn-NM-KNZ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Open Recent" id="tXI-mr-wws">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Open Recent" systemMenu="recentDocuments" id="oas-Oc-fiZ">
|
||||
<items>
|
||||
<menuItem title="Clear Menu" id="vNY-rz-j42">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="clearRecentDocuments:" target="-1" id="Daa-9d-B3U"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="m54-Is-iLE"/>
|
||||
<menuItem title="Close" keyEquivalent="w" id="DVo-aG-piG">
|
||||
<connections>
|
||||
<action selector="performClose:" target="-1" id="HmO-Ls-i7Q"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Save…" keyEquivalent="s" id="pxx-59-PXV">
|
||||
<connections>
|
||||
<action selector="saveDocument:" target="-1" id="teZ-XB-qJY"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Save As…" keyEquivalent="S" id="Bw7-FT-i3A">
|
||||
<connections>
|
||||
<action selector="saveDocumentAs:" target="-1" id="mDf-zr-I0C"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Revert to Saved" keyEquivalent="r" id="KaW-ft-85H">
|
||||
<connections>
|
||||
<action selector="revertDocumentToSaved:" target="-1" id="iJ3-Pv-kwq"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="aJh-i4-bef"/>
|
||||
<menuItem title="Page Setup…" keyEquivalent="P" id="qIS-W8-SiK">
|
||||
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="runPageLayout:" target="-1" id="Din-rz-gC5"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Print…" keyEquivalent="p" id="aTl-1u-JFS">
|
||||
<connections>
|
||||
<action selector="print:" target="-1" id="qaZ-4w-aoO"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Edit" id="5QF-Oa-p0T">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Edit" id="W48-6f-4Dl">
|
||||
<items>
|
||||
<menuItem title="Undo" keyEquivalent="z" id="dRJ-4n-Yzg">
|
||||
<connections>
|
||||
<action selector="undo:" target="-1" id="M6e-cu-g7V"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Redo" keyEquivalent="Z" id="6dh-zS-Vam">
|
||||
<connections>
|
||||
<action selector="redo:" target="-1" id="oIA-Rs-6OD"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/>
|
||||
<menuItem title="Cut" keyEquivalent="x" id="uRl-iY-unG">
|
||||
<connections>
|
||||
<action selector="cut:" target="-1" id="YJe-68-I9s"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Copy" keyEquivalent="c" id="x3v-GG-iWU">
|
||||
<connections>
|
||||
<action selector="copy:" target="-1" id="G1f-GL-Joy"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Paste" keyEquivalent="v" id="gVA-U4-sdL">
|
||||
<connections>
|
||||
<action selector="paste:" target="-1" id="UvS-8e-Qdg"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="pasteAsPlainText:" target="-1" id="cEh-KX-wJQ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Delete" id="pa3-QI-u2k">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="delete:" target="-1" id="0Mk-Ml-PaM"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m">
|
||||
<connections>
|
||||
<action selector="selectAll:" target="-1" id="VNm-Mi-diN"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/>
|
||||
<menuItem title="Find" id="4EN-yA-p0u">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Find" id="1b7-l0-nxx">
|
||||
<items>
|
||||
<menuItem title="Find…" tag="1" keyEquivalent="f" id="Xz5-n4-O0W">
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="-1" id="cD7-Qs-BN4"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="YEy-JH-Tfz">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="-1" id="WD3-Gg-5AJ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye">
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="-1" id="NDo-RZ-v9R"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV">
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="-1" id="HOh-sY-3ay"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt">
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="-1" id="U76-nv-p5D"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd">
|
||||
<connections>
|
||||
<action selector="centerSelectionInVisibleArea:" target="-1" id="IOG-6D-g5B"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Spelling and Grammar" id="Dv1-io-Yv7">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Spelling" id="3IN-sU-3Bg">
|
||||
<items>
|
||||
<menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="HFo-cy-zxI">
|
||||
<connections>
|
||||
<action selector="showGuessPanel:" target="-1" id="vFj-Ks-hy3"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Check Document Now" keyEquivalent=";" id="hz2-CU-CR7">
|
||||
<connections>
|
||||
<action selector="checkSpelling:" target="-1" id="fz7-VC-reM"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="bNw-od-mp5"/>
|
||||
<menuItem title="Check Spelling While Typing" id="rbD-Rh-wIN">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleContinuousSpellChecking:" target="-1" id="7w6-Qz-0kB"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Check Grammar With Spelling" id="mK6-2p-4JG">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleGrammarChecking:" target="-1" id="muD-Qn-j4w"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Correct Spelling Automatically" id="78Y-hA-62v">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticSpellingCorrection:" target="-1" id="2lM-Qi-WAP"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Substitutions" id="9ic-FL-obx">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Substitutions" id="FeM-D8-WVr">
|
||||
<items>
|
||||
<menuItem title="Show Substitutions" id="z6F-FW-3nz">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="orderFrontSubstitutionsPanel:" target="-1" id="oku-mr-iSq"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/>
|
||||
<menuItem title="Smart Copy/Paste" id="9yt-4B-nSM">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleSmartInsertDelete:" target="-1" id="3IJ-Se-DZD"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Smart Quotes" id="hQb-2v-fYv">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="ptq-xd-QOA"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Smart Dashes" id="rgM-f4-ycn">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticDashSubstitution:" target="-1" id="oCt-pO-9gS"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Smart Links" id="cwL-P1-jid">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticLinkDetection:" target="-1" id="Gip-E3-Fov"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Data Detectors" id="tRr-pd-1PS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticDataDetection:" target="-1" id="R1I-Nq-Kbl"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Text Replacement" id="HFQ-gK-NFA">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticTextReplacement:" target="-1" id="DvP-Fe-Py6"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Transformations" id="2oI-Rn-ZJC">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Transformations" id="c8a-y6-VQd">
|
||||
<items>
|
||||
<menuItem title="Make Upper Case" id="vmV-6d-7jI">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="uppercaseWord:" target="-1" id="sPh-Tk-edu"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Make Lower Case" id="d9M-CD-aMd">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="lowercaseWord:" target="-1" id="iUZ-b5-hil"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Capitalize" id="UEZ-Bs-lqG">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="capitalizeWord:" target="-1" id="26H-TL-nsh"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Speech" id="xrE-MZ-jX0">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Speech" id="3rS-ZA-NoH">
|
||||
<items>
|
||||
<menuItem title="Start Speaking" id="Ynk-f8-cLZ">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="startSpeaking:" target="-1" id="654-Ng-kyl"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Stop Speaking" id="Oyz-dy-DGm">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="stopSpeaking:" target="-1" id="dX8-6p-jy9"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Format" id="jxT-CU-nIS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Format" id="GEO-Iw-cKr">
|
||||
<items>
|
||||
<menuItem title="Font" id="Gi5-1S-RQB">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Font" systemMenu="font" id="aXa-aM-Jaq">
|
||||
<items>
|
||||
<menuItem title="Show Fonts" keyEquivalent="t" id="Q5e-8K-NDq">
|
||||
<connections>
|
||||
<action selector="orderFrontFontPanel:" target="YLy-65-1bz" id="WHr-nq-2xA"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Bold" tag="2" keyEquivalent="b" id="GB9-OM-e27">
|
||||
<connections>
|
||||
<action selector="addFontTrait:" target="YLy-65-1bz" id="hqk-hr-sYV"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Italic" tag="1" keyEquivalent="i" id="Vjx-xi-njq">
|
||||
<connections>
|
||||
<action selector="addFontTrait:" target="YLy-65-1bz" id="IHV-OB-c03"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Underline" keyEquivalent="u" id="WRG-CD-K1S">
|
||||
<connections>
|
||||
<action selector="underline:" target="-1" id="FYS-2b-JAY"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="5gT-KC-WSO"/>
|
||||
<menuItem title="Bigger" tag="3" keyEquivalent="+" id="Ptp-SP-VEL">
|
||||
<connections>
|
||||
<action selector="modifyFont:" target="YLy-65-1bz" id="Uc7-di-UnL"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Smaller" tag="4" keyEquivalent="-" id="i1d-Er-qST">
|
||||
<connections>
|
||||
<action selector="modifyFont:" target="YLy-65-1bz" id="HcX-Lf-eNd"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="kx3-Dk-x3B"/>
|
||||
<menuItem title="Kern" id="jBQ-r6-VK2">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Kern" id="tlD-Oa-oAM">
|
||||
<items>
|
||||
<menuItem title="Use Default" id="GUa-eO-cwY">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="useStandardKerning:" target="-1" id="6dk-9l-Ckg"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Use None" id="cDB-IK-hbR">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="turnOffKerning:" target="-1" id="U8a-gz-Maa"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Tighten" id="46P-cB-AYj">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="tightenKerning:" target="-1" id="hr7-Nz-8ro"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Loosen" id="ogc-rX-tC1">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="loosenKerning:" target="-1" id="8i4-f9-FKE"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Ligatures" id="o6e-r0-MWq">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Ligatures" id="w0m-vy-SC9">
|
||||
<items>
|
||||
<menuItem title="Use Default" id="agt-UL-0e3">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="useStandardLigatures:" target="-1" id="7uR-wd-Dx6"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Use None" id="J7y-lM-qPV">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="turnOffLigatures:" target="-1" id="iX2-gA-Ilz"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Use All" id="xQD-1f-W4t">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="useAllLigatures:" target="-1" id="KcB-kA-TuK"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Baseline" id="OaQ-X3-Vso">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Baseline" id="ijk-EB-dga">
|
||||
<items>
|
||||
<menuItem title="Use Default" id="3Om-Ey-2VK">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="unscript:" target="-1" id="0vZ-95-Ywn"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Superscript" id="Rqc-34-cIF">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="superscript:" target="-1" id="3qV-fo-wpU"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Subscript" id="I0S-gh-46l">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="subscript:" target="-1" id="Q6W-4W-IGz"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Raise" id="2h7-ER-AoG">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="raiseBaseline:" target="-1" id="4sk-31-7Q9"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Lower" id="1tx-W0-xDw">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="lowerBaseline:" target="-1" id="OF1-bc-KW4"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="Ndw-q3-faq"/>
|
||||
<menuItem title="Show Colors" keyEquivalent="C" id="bgn-CT-cEk">
|
||||
<connections>
|
||||
<action selector="orderFrontColorPanel:" target="-1" id="mSX-Xz-DV3"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="iMs-zA-UFJ"/>
|
||||
<menuItem title="Copy Style" keyEquivalent="c" id="5Vv-lz-BsD">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="copyFont:" target="-1" id="GJO-xA-L4q"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Paste Style" keyEquivalent="v" id="vKC-jM-MkH">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="pasteFont:" target="-1" id="JfD-CL-leO"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Text" id="Fal-I4-PZk">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Text" id="d9c-me-L2H">
|
||||
<items>
|
||||
<menuItem title="Align Left" keyEquivalent="{" id="ZM1-6Q-yy1">
|
||||
<connections>
|
||||
<action selector="alignLeft:" target="-1" id="zUv-R1-uAa"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Center" keyEquivalent="|" id="VIY-Ag-zcb">
|
||||
<connections>
|
||||
<action selector="alignCenter:" target="-1" id="spX-mk-kcS"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Justify" id="J5U-5w-g23">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="alignJustified:" target="-1" id="ljL-7U-jND"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Align Right" keyEquivalent="}" id="wb2-vD-lq4">
|
||||
<connections>
|
||||
<action selector="alignRight:" target="-1" id="r48-bG-YeY"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="4s2-GY-VfK"/>
|
||||
<menuItem title="Writing Direction" id="H1b-Si-o9J">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Writing Direction" id="8mr-sm-Yjd">
|
||||
<items>
|
||||
<menuItem title="Paragraph" enabled="NO" id="ZvO-Gk-QUH">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem id="YGs-j5-SAR">
|
||||
<string key="title"> Default</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeBaseWritingDirectionNatural:" target="-1" id="qtV-5e-UBP"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem id="Lbh-J2-qVU">
|
||||
<string key="title"> Left to Right</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeBaseWritingDirectionLeftToRight:" target="-1" id="S0X-9S-QSf"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem id="jFq-tB-4Kx">
|
||||
<string key="title"> Right to Left</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeBaseWritingDirectionRightToLeft:" target="-1" id="5fk-qB-AqJ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="swp-gr-a21"/>
|
||||
<menuItem title="Selection" enabled="NO" id="cqv-fj-IhA">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem id="Nop-cj-93Q">
|
||||
<string key="title"> Default</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeTextWritingDirectionNatural:" target="-1" id="lPI-Se-ZHp"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem id="BgM-ve-c93">
|
||||
<string key="title"> Left to Right</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeTextWritingDirectionLeftToRight:" target="-1" id="caW-Bv-w94"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem id="RB4-Sm-HuC">
|
||||
<string key="title"> Right to Left</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeTextWritingDirectionRightToLeft:" target="-1" id="EXD-6r-ZUu"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="fKy-g9-1gm"/>
|
||||
<menuItem title="Show Ruler" id="vLm-3I-IUL">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleRuler:" target="-1" id="FOx-HJ-KwY"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Copy Ruler" keyEquivalent="c" id="MkV-Pr-PK5">
|
||||
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="copyRuler:" target="-1" id="71i-fW-3W2"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Paste Ruler" keyEquivalent="v" id="LVM-kO-fVI">
|
||||
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="pasteRuler:" target="-1" id="cSh-wd-qM2"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="View" id="H8h-7b-M4v">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="View" id="HyV-fh-RgO">
|
||||
<items>
|
||||
<menuItem title="Show Toolbar" keyEquivalent="t" id="snW-S8-Cw5">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="toggleToolbarShown:" target="-1" id="BXY-wc-z0C"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Customize Toolbar…" id="1UK-8n-QPP">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="runToolbarCustomizationPalette:" target="-1" id="pQI-g3-MTW"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="hB3-LF-h0Y"/>
|
||||
<menuItem title="Show Sidebar" keyEquivalent="s" id="kIP-vf-haE">
|
||||
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="toggleSidebar:" target="-1" id="iwa-gc-5KM"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Enter Full Screen" keyEquivalent="f" id="4J7-dP-txa">
|
||||
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="toggleFullScreen:" target="-1" id="dU3-MA-1Rq"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Window" id="aUF-d1-5bR">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
|
||||
<items>
|
||||
<menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
|
||||
<connections>
|
||||
<action selector="performMiniaturize:" target="-1" id="VwT-WD-YPe"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Zoom" id="R4o-n2-Eq4">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="performZoom:" target="-1" id="DIl-cC-cCs"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
|
||||
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="arrangeInFront:" target="-1" id="DRN-fu-gQh"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Help" id="wpr-3q-Mcd">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Help" systemMenu="help" id="F2S-fz-NVQ">
|
||||
<items>
|
||||
<menuItem title="NewApplication Help" keyEquivalent="?" id="FKE-Sm-Kum">
|
||||
<connections>
|
||||
<action selector="showHelp:" target="-1" id="y7X-2Q-9no"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
<customObject id="ULp-HF-g0s" customClass="SUUpdater"/>
|
||||
</objects>
|
||||
</document>
|
||||
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 984 B |
|
Before Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 58 KiB |
@@ -1,5 +1,14 @@
|
||||
/* No comment provided by engineer. */
|
||||
"About" = "About";
|
||||
"3-finger Horizontal Swipe" = "3-finger Horizontal Swipe";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"3-finger Vertical Swipe" = "3-finger Vertical Swipe";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"4-finger Horizontal Swipe" = "4-finger Horizontal Swipe";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"4-finger Vertical Swipe" = "4-finger Vertical Swipe";
|
||||
|
||||
/* Menubar option. %@ is AltTab */
|
||||
"About %@" = "About %@";
|
||||
@@ -7,15 +16,18 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Accessibility" = "Accessibility";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Acknowledgments" = "Acknowledgments";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Active app" = "Active app";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Active screen" = "Active screen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Add a running app" = "Add a running app";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Add an app from disk" = "Add an app from disk";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Additional controls" = "Additional controls";
|
||||
|
||||
@@ -26,7 +38,7 @@
|
||||
"Advanced" = "Advanced";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"After release" = "After release";
|
||||
"After keys are released" = "After keys are released";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Align windows" = "Align windows";
|
||||
@@ -92,7 +104,7 @@
|
||||
"App is running but has no open window" = "App is running but has no open window";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Apparition delay" = "Apparition delay";
|
||||
"Apparition delay of Switcher" = "Apparition delay of Switcher";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Appearance" = "Appearance";
|
||||
@@ -109,20 +121,23 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Are you sure you don’t want a response?" = "Are you sure you don’t want a response?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Arrow keys" = "Arrow keys";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Ask whether to send crash reports" = "Ask whether to send crash reports";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Auto" = "Auto";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Auto-install updates periodically" = "Auto-install updates periodically";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Blacklists" = "Blacklists";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Cancel" = "Cancel";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Cancel and hide" = "Cancel and hide";
|
||||
"Capture windows in the background" = "Capture windows in the background";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Center" = "Center";
|
||||
@@ -166,11 +181,11 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Dark" = "Dark";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Disabled" = "Disabled";
|
||||
/* Menubar option */
|
||||
"Debug tools" = "Debug tools";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Do nothing" = "Do nothing";
|
||||
"Disabled" = "Disabled";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Done" = "Done";
|
||||
@@ -185,7 +200,19 @@
|
||||
"End" = "End";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fade out animation" = "Fade out animation";
|
||||
"Exceptions" = "Exceptions";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Export settings…" = "Export settings…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fade in animation of Preview" = "Fade in animation of Preview";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fade out animation of Switcher" = "Fade out animation of Switcher";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Failed to import settings" = "Failed to import settings";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Focus selected window" = "Focus selected window";
|
||||
@@ -208,9 +235,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Hide app badges" = "Hide app badges";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Hide apps with no open window" = "Hide apps with no open window";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Hide colored circles on mouse hover" = "Hide colored circles on mouse hover";
|
||||
|
||||
@@ -226,12 +250,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Hide/Show app" = "Hide/Show app";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"High" = "High";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Highest" = "Highest";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Hold" = "Hold";
|
||||
|
||||
@@ -241,6 +259,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Ignore shortcuts when active" = "Ignore shortcuts when active";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Import settings…" = "Import settings…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Keep open" = "Keep open";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Keep open and search" = "Keep open and search";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Language" = "Language";
|
||||
|
||||
@@ -262,6 +289,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Light" = "Light";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Lock search" = "Lock search";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Medium" = "Medium";
|
||||
|
||||
@@ -280,23 +310,38 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Multiple screens" = "Multiple screens";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Never" = "Never";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Never send crash reports" = "Never send crash reports";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Normal" = "Normal";
|
||||
"No Window" = "No Window";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Non-active apps" = "Non-active apps";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Non-visible Spaces" = "Non-visible Spaces";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Not allowed" = "Not allowed";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open Accessibility Preferences…" = "Open Accessibility Preferences…";
|
||||
"Only on different screen" = "Only on different screen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open Screen Recording Preferences…" = "Open Screen Recording Preferences…";
|
||||
"Open Accessibility Settings…" = "Open Accessibility Settings…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open Trackpad Preferences…" = "Open Trackpad Preferences…";
|
||||
"Open Screen Recording Settings…" = "Open Screen Recording Settings…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open System Settings to confirm, and continue" = "Open System Settings to confirm, and continue";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open Trackpad Settings…" = "Open Trackpad Settings…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Optional: email (if you want a reply)" = "Optional: email (if you want a reply)";
|
||||
@@ -305,21 +350,13 @@
|
||||
"Order windows by" = "Order windows by";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Policies" = "Policies";
|
||||
|
||||
/* Menubar option */
|
||||
"Preferences…" = "Preferences…";
|
||||
"Please fill in the form" = "Please fill in the form";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Preview selected window" = "Preview selected window";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Preview the selected window." = "Preview the selected window.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Quit" = "Quit";
|
||||
|
||||
/* Menubar option. %@ is AltTab */
|
||||
/* %@ is AltTab
|
||||
Menubar option. %@ is AltTab */
|
||||
"Quit %@" = "Quit %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -335,10 +372,10 @@
|
||||
"Remember my choice" = "Remember my choice";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Reset preferences and restart" = "Reset preferences and restart";
|
||||
"Reset settings and restart" = "Reset settings and restart";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Reset preferences and restart…" = "Reset preferences and restart…";
|
||||
"Reset settings and restart…" = "Reset settings and restart…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Restart Now" = "Restart Now";
|
||||
@@ -355,6 +392,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Screen showing AltTab" = "Screen showing AltTab";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Search" = "Search";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Select next window" = "Select next window";
|
||||
|
||||
@@ -388,23 +428,17 @@
|
||||
/* Menubar option */
|
||||
"Send feedback…" = "Send feedback…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Settings imported" = "Settings imported";
|
||||
|
||||
/* Menubar option */
|
||||
"Settings…" = "Settings…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share improvement ideas, or report bugs" = "Share improvement ideas, or report bugs";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shortcut 1" = "Shortcut 1";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shortcut 2" = "Shortcut 2";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shortcut 3" = "Shortcut 3";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shortcut 4" = "Shortcut 4";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shortcut 5" = "Shortcut 5";
|
||||
"Shortcut" = "Shortcut";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shortcut already assigned to another action: %@" = "Shortcut already assigned to another action: %@";
|
||||
@@ -424,6 +458,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Show an item in the switcher for each window, or for each application. Windows will be focused, whereas applications will be activated." = "Show an item in the switcher for each window, or for each application. Windows will be focused, whereas applications will be activated.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Show apps with no open window" = "Show apps with no open window";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Show at the end" = "Show at the end";
|
||||
|
||||
@@ -482,16 +519,7 @@
|
||||
"Start at login" = "Start at login";
|
||||
|
||||
/* Menubar option */
|
||||
"Support this project ❤️" = "Support this project ❤️";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Swipe may conflict with system shortcuts" = "Swipe may conflict with system shortcuts";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Swipe with Four Fingers" = "Swipe with Four Fingers";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Swipe with Three Fingers" = "Swipe with Three Fingers";
|
||||
"Support this project" = "Support this project";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Switch between 3 different styles. You can customize them." = "Switch between 3 different styles. You can customize them.";
|
||||
@@ -502,9 +530,18 @@
|
||||
/* No comment provided by engineer. */
|
||||
"System Default" = "System Default";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The application needs to restart to apply the imported settings." = "The application needs to restart to apply the imported settings.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The application needs to restart to apply the language change." = "The application needs to restart to apply the language change.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The ⌘⎋ (command+escape) shortcut may be used by macOS for GameOverlay.\n\nYour change would assign it to: %@.\n\nIf you want to continue, make sure that the GameOverlay shortcut is disabled.\nAlso note that macOS has reported bugs where the shortcut may still interfere while disabled." = "The ⌘⎋ (command+escape) shortcut may be used by macOS for GameOverlay.\n\nYour change would assign it to: %@.\n\nIf you want to continue, make sure that the GameOverlay shortcut is disabled.\nAlso note that macOS has reported bugs where the shortcut may still interfere while disabled.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The ⎋ (escape) key is reserved by some macOS shortcuts (e.g. ⌘⌥⎋ will show the Force Quit Applications window).\n\nYour change would assign it to: %@.\n\nIf you want to use ⎋, make sure that Hold modifiers are neither: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃" = "The ⎋ (escape) key is reserved by some macOS shortcuts (e.g. ⌘⌥⎋ will show the Force Quit Applications window).\n\nYour change would assign it to: %@.\n\nIf you want to use ⎋, make sure that Hold modifiers are neither: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Theme" = "Theme";
|
||||
|
||||
@@ -512,7 +549,7 @@
|
||||
"This permission is needed to focus windows after you release the shortcut" = "This permission is needed to focus windows after you release the shortcut";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This permission is needed to show screenshots and titles of open windows" = "This permission is needed to show screenshots and titles of open windows";
|
||||
"This permission is needed to show thumbnails and preview of open windows" = "This permission is needed to show thumbnails and preview of open windows";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Thumbnails" = "Thumbnails";
|
||||
@@ -527,7 +564,10 @@
|
||||
"Titles" = "Titles";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Trigger shortcut" = "Trigger shortcut";
|
||||
"Trackpad haptic feedback" = "Trackpad haptic feedback";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Trigger" = "Trigger";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Unassign existing shortcut and continue" = "Unassign existing shortcut and continue";
|
||||
@@ -544,14 +584,17 @@
|
||||
/* No comment provided by engineer. */
|
||||
"View existing discussions" = "View existing discussions";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Vim keys" = "Vim keys";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Vim keys already assigned to other actions:\n%@" = "Vim keys already assigned to other actions:\n%@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Visibility" = "Visibility";
|
||||
"Visible Spaces" = "Visible Spaces";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Visible Spaces" = "Visible Spaces";
|
||||
"When disabled, avoids the macOS purple screen-recording indicator, and avoids flickers when playing DRM video. Thumbnails will be less up-to-date." = "When disabled, avoids the macOS purple screen-recording indicator, and avoids flickers when playing DRM video. Thumbnails will be less up-to-date.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"When fullscreen" = "When fullscreen";
|
||||
@@ -574,6 +617,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Window Title" = "Window Title";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Window title contains" = "Window title contains";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Windows" = "Windows";
|
||||
|
||||
@@ -582,3 +628,6 @@
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You didn’t write your email, thus can’t receive any response." = "You didn’t write your email, thus can’t receive any response.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You may need to disable some conflicting system gestures" = "You may need to disable some conflicting system gestures";
|
||||
@@ -1,714 +1,296 @@
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"3-finger Horizontal Swipe" = "سحب أفقي بثلاثة أصابع";
|
||||
"3-finger Vertical Swipe" = "سحب عمودي بثلاثة أصابع";
|
||||
"4-finger Horizontal Swipe" = "سحب أفقي بأربعة أصابع";
|
||||
"4-finger Vertical Swipe" = "سحب عمودي بأربعة أصابع";
|
||||
"About" = "حول";
|
||||
|
||||
/*Menubar option. %@ is AltTab*/
|
||||
"About %@" = "حول %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Accessibility" = "إمكانية الوصول";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Acknowledgments" = "شكر وتقدير";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active app" = "البرنامج الحالي";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active screen" = "الشاشة الحالية";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active Space" = "المساحة الحالية";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Add a running app" = "إضافة تطبيق قيد التشغيل";
|
||||
"Add an app from disk" = "إضافة تطبيق من القرص";
|
||||
"Additional controls" = "ضوابط إضافية";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Additional controls…" = "ضوابط إضافية…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Advanced" = "متقدّم";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"After keys are released" = "بعد تحرير المفاتيح";
|
||||
"After release" = "بعد الإصدار";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Align windows" = "محاذاة النوافذ";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Align windows:" = "ترتيب النوافذ:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All apps" = "كل البرامج";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All data from this form will be made public, as a ticket on github.com" = "كل البيانات في هده الاستمارة سوف تصبح متاحة بشكل عام على github.com";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All screens" = "كل الشاشات";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All Spaces" = "كل المساحات";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Allowed" = "مسموح";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Alphabetical" = "أبجديّ";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Alphabetical Order" = "الترتيب الأبجدي";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Also select windows using:" = "أيضاً اختر النوافذ بـ:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab crashed last time you used it. Sending a crash report will help get the issue fixed" = "تعطل AltTab عندما استخدمته آخر مرة. ارسال بلاغ التعطل سوف يساعد في إصلاح المشكلة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab is currently set to show Applications. This setting is only available when AltTab is set to show Windows." = "تم تعيين Alttab حاليًا لعرض التطبيقات.هذا الإعداد متاح فقط عندما يتم تعيين Alttab لإظهار النوافذ.";
|
||||
|
||||
/*Menubar callout*/
|
||||
"AltTab is running without Screen Recording permissions. Thumbnails won’t show." = "AltTab is running without Screen Recording permissions. Thumbnails won’t show.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab is running without Screen Recording permissions. Thumbnails won’t show." = "آلت تاب يعمل بدون أُذونات تسجيل الشاشة. الصور المصغّرة لَن تُعرض.";
|
||||
"AltTab needs some permissions" = "AltTab يحتاج إلى بعض الأذونات";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab will show if the window is currently minimized or fullscreen with a status icon." = "سيظهر AltTab إذا كانت النافذة مقلّصة حالياً أو في وضع ملء الشاشة مع أيقونة الحالة.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Always" = "دائماً";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Always send crash reports" = "أرسل بلاغات التعطل دائماً";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"and press" = "ثمّ اضغط";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"and press:" = "واضغط:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Animations" = "الرسوم المتحركة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Animations…" = "الرسوم المتحركة…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App (BundleID starting with)" = "التطبيق (bundleid بدءا من)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App Icons" = "أيقونات التطبيق";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App is hidden" = "التطبيق مخفي";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App is running but has no open window" = "التطبيق يعمل ولكن ليس له نافذة مفتوحة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Apparition delay" = "تأخير الظهور";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Apparition delay of Switcher" = "تأخير ظهور المحوّل";
|
||||
"Apparition delay:" = "تأخر الوموض:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Appearance" = "المظهر";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Application Name" = "اسم التطبيق";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Application Name - Window Title" = "اسم التطبيق - عنوان النافذة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Applications" = "التطبيقات";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Are you sure you don’t want a response?" = "هل أنت متأكد بأنك لا تريد رداً؟";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Arrow keys" = "أزرار الأسهم";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ask whether to send crash reports" = "اسأل قبل إرسال بلاغات التعطل";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Auto" = "تلقائي";
|
||||
"Auto-install updates periodically" = "تثبيت التحديثات تلقائياً بشكل دوري";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Blacklists" = "القائمة السوداء";
|
||||
|
||||
/*Cancel button*/
|
||||
"Cancel" = "إلغاء";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Cancel and hide" = "إلغاء وإخفاء";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Capture windows in the background" = "التقاط النوافذ في الخلفية";
|
||||
"Center" = "توسيط";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates now…" = "ابحث عن تحديثات الآن…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates periodically" = "ابحث عن تحديثات بشكل دوري";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates…" = "ابحث عن تحديثات…";
|
||||
|
||||
/*Menubar option*/
|
||||
"Check permissions…" = "تحقق من الأذونات…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Close window" = "إغلاق النافذة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Conflicting shortcut" = "إختصار متعارض";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Controls" = "التحكم";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Crash reports policy" = "سياسة تقارير تحطم";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Crash reports policy:" = "سياسات بلاغات التعطل:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Cursor follows focus" = "المؤشر يتبع التركيز";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize App Icons style…" = "تخصيص نمط أيقونات التطبيق…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize Thumbnails style…" = "تخصيص نمط المصغرة…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize Titles style…" = "تخصيص نمط العناوين…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Dark" = "مظلم";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Debug tools" = "أدوات التصحيح";
|
||||
"Disabled" = "مُبطل";
|
||||
"Do nothing" = "لا تفعل شيء";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Don’t check for updates periodically" = "لا تبحث عن تحديثات بشكل دوري";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Don’t send" = "لا ترسل";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Don’t show windows from these apps" = "لا تُظهر نوافذ هذه التطبيقات";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Done" = "منتهي";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"End" = "النهاية";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Exceptions" = "استثناءات";
|
||||
"Export settings…" = "تصدير الإعدادات…";
|
||||
"Export…" = "تصدير…";
|
||||
"Fade in animation of Preview" = "رُسوم متحركة لظهور المعاينة";
|
||||
"Fade out animation" = "الرسوم المتحركة للتلاشي";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fade out animation of Switcher" = "رُسوم متحركة لإخفاء المعاينة";
|
||||
"Fade out animation:" = "تأثير الإختفاء:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Failed to import settings" = "فشل استيراد الإعدادات";
|
||||
"Focus selected window" = "ركّز النافذة المختارة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen window" = "نافذة ملء الشاشة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen windows:" = "النوافذ كاملة الشاشة:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen/Defullscreen window" = "نافذة ملء الشاشة/defullscreen";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"General" = "عام";
|
||||
|
||||
/*Menubar callout button*/
|
||||
"Grant permission" = "Grant permission";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Gesture" = "إيماءة";
|
||||
"Grant permission" = "امنح الإذن";
|
||||
"Hidden windows:" = "النوافذ المخفية";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide" = "إخفاء";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide app badges" = "اخفِ أيقونات التطبيقات";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide app badges:" = "إخفاء أيقونات التطبيقات:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide apps with no open window" = "اخفِ التطبيقات بدون نوافذ مفتوحة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide apps with no open window:" = "إخفاء التطبيقات بدون نوافذ مفتوحة:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide colored circles on mouse hover" = "اخفِ الدوائر الملونة عند تحويم الفأرة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide colored circles on mouse hover:" = "أخفاء الدوائر الملونة عند تحويم الفأرة:";
|
||||
|
||||
/*%@ is AltTab*/
|
||||
"Hide in %@" = "اِخفِ في %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide Space number labels" = "اخفِ مساحة الأرقام";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide Space number labels:" = "إخفاء مساحة الأرقام:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide status icons" = "اخفِ أيقونة الحالة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide status icons:" = "اخفِ أيقونة الحالة:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide window thumbnails:" = "إخفاء الصورة المصغرة للنافذة:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide/Show app" = "إخفاء/إظهار برنامج";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"High" = "عالي";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Highest" = "أعلى";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hold" = "ثبّت";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Horizontal Swipe with Four Fingers" = "مرر عرضياً بأربعة أصابع";
|
||||
"Horizontal Swipe with Three Fingers" = "مرر عرضياً بثلاثة أصابع";
|
||||
"I think the app could be improved with…" = "أعتقد أنه بالإمكان تطوير البرنامج بـ…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ignore shortcuts when active" = "تجاهل الاختصارات عند النشاط";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ignore shortcuts while a window from these apps is active" = "لا تفعّل الإختصارات عندما تكون نافذة من أحد هذه التطبيقات مفعّلة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Language" = "Language";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Language Change" = "Language Change";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Import settings…" = "استيراد الإعدادات…";
|
||||
"Import…" = "استيراد…";
|
||||
"Keep open" = "إبقاء مفتوحًا";
|
||||
"Keep open and search" = "إبقاء مفتوحًا والبحث";
|
||||
"Language" = "لغة";
|
||||
"Language Change" = "عدّل اللّغة";
|
||||
"Large" = "كبير";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Later" = "Later";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Later" = "لاحقاً";
|
||||
"Latest releases" = "آخر الإصدارات";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Leading" = "قيادة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Left" = "يسار";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Light" = "ضوء";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Lock search" = "قفل البحث";
|
||||
"Max height on screen:" = "أكبر طول على الشاشة:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Max width on screen:" = "أكبر عرض على الشاشة:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Medium" = "متوسط";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Menubar icon" = "أيقونة شريط القوائم";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Menubar icon:" = "أيقونة شريط القوائم:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Middle" = "المنتصف";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Minimize/Deminimize window" = "تصغير/تكبير نافذة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Minimized windows:" = "النوافذ المصغرة:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Miscellaneous" = "متنوّع";
|
||||
"Miscellaneous:" = "متنوّع:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Mouse hover" = "تمرير المؤشر";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Multiple screens" = "شاشات متعددة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Never" = "أبدًا";
|
||||
"Never send crash reports" = "لا ترسل بلاغات أبداً";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"No Window" = "لا توجد نافذة";
|
||||
"Non-active apps" = "التطبيقات غير النشطة";
|
||||
"Non-visible Spaces" = "مسافات غير مرئية";
|
||||
"Normal" = "طبيعي";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Not allowed" = "غير مسموح";
|
||||
|
||||
/*Copyright (human-readable)*/
|
||||
"NSHumanReadableCopyright" = "رخصة GPL-3.0";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Only if the window is fullscreen" = "فقط عندما تكون النافذة شاشة كاملة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
/*Fuzzy*/
|
||||
"Only on different screen" = "فقط على شاشة مختلفة";
|
||||
"Open Accessibility Preferences…" = "افتح إعدادات إمكانية الوصول ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
/*Fuzzy*/
|
||||
"Open Accessibility Settings…" = "فتح إعدادات تسهيلات الاستخدام…";
|
||||
"Open Screen Recording Preferences…" = "افتح إعدادات تسجيل الشاشة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Open Screen Recording Settings…" = "فتح إعدادات تسجيل الشاشة…";
|
||||
"Open System Settings to confirm, and continue" = "افتح إعدادات النظام للتأكيد والمتابعة";
|
||||
"Open Trackpad Preferences…" = "افتح تفضيلات لوحة التتبع…";
|
||||
"Open Trackpad Settings…" = "فتح إعدادات لوحة التعقب…";
|
||||
"Optional: email (if you want a reply)" = "اختياري: بريد (إذا كنت تريد رد)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Order windows by" = "رتّب النوافذ حسب";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Please fill in the form" = "يرجى ملء النموذج";
|
||||
"Policies" = "سياسات";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preferences…" = "التفضيلات…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview selected window" = "معاينة نافذة محددة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview selected window:" = "عاينْ النافذة المختارة:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview the selected window." = "معاينة النافذة المحددة.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Quit" = "إغلاق";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Quit %@" = "خروج %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Quit app" = "إغلاق البرنامج";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Created" = "تم إنشاؤه مؤخراً";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Created First" = "تم إنشاؤها مؤخرًا أولاً";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Focused" = "تم التركيز عليه مؤخراً";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Focused First" = "ركز مؤخرا أولا";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Remember my choice" = "تذكر خياري";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Reset preferences and restart" = "إعادة تعيين التفضيلات وإعادة التشغيل";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Reset preferences and restart…" = "إعادة تعيين التفضيلات وإعادة التشغيل ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Restart Now" = "Restart Now";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Reset settings and restart" = "إعادة تعيين الإعدادات وإعادة التشغيل";
|
||||
"Reset settings and restart…" = "إعادة تعيين الإعدادات وإعادة التشغيل…";
|
||||
"Restart Now" = "أعد التشغيل الآن";
|
||||
"Rows of thumbnails:" = "صفوف الصور المصغرة:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen including menu bar" = "شاشة شريط القوائم";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen including mouse" = "شاشة المؤشر";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
/*Fuzzy*/
|
||||
"Screen Recording" = "تسجيل الشاشة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen showing AltTab" = "شاشة الـAltTab";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Search" = "بحث";
|
||||
"Select next window" = "حدد النافذة التالية";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select previous window" = "حدد النافذة السابقة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows on mouse hover" = "حدد النوافذ عند تحويم الفأرة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows using arrow keys" = "حدد النوافذ باستخدام مفاتيح الأسهم";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows using vim keys" = "حدد Windows باستخدام مفاتيح VIM";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send" = "إرسال";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send a crash report?" = "هل تريد إرسال بلاغ تعطل؟";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send anyway" = "إرسال على أية حال";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send debug profile (CPU, memory, etc)" = "إرسال ملف الأخطاء (معالج، ذاكرة، إلخ)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send feedback" = "أرسل رأيك";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send feedback…" = "أرسل رأيك…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Settings imported" = "تم استيراد الإعدادات";
|
||||
"Settings…" = "الإعدادات";
|
||||
"Share improvement ideas, or report bugs" = "شارك أفكارك التطويرية، أو بلغ عن أخطاء";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut" = "اختصار";
|
||||
"Shortcut 1" = "الإختصار ١";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 2" = "الإختصار ٢";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 3" = "الاختصار ٣";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 4" = "الاختصار ٤";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 5" = "الاختصار ٥";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut already assigned to another action: %@" = "الإختصار محجوز لفعل آخر: %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcuts When Active" = "اختصارات عند نشطة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcuts when active…" = "اختصارات عندما تنشط ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show" = "إظهار";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show & Hide" = "اظهر المخفي";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show an item in the switcher for each window, or for each application. Windows will be focused, whereas applications will be activated." = "اعرض عنصرًا في المحول لكل نافذة ، أو لكل تطبيق.سيتم تركيز Windows ، في حين سيتم تنشيط التطبيقات.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show apps with no open window" = "أظهر التطبيقات التي لا تحتوي على نوافذ مفتوحة";
|
||||
"Show at the end" = "أظهر في النهاية";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show fullscreen windows" = "إظهار النوافذ ملء الشاشة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show hidden windows" = "إظهار النوافذ المخفية";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show in switcher" = "عرض في Switcher";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show minimized windows" = "إظهار Windows إلى أدنى حد";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show on" = "عرض على";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show on:" = "أظهر على:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show standard tabs as windows" = "إظهر التابات كشاشات";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show standard tabs as windows:" = "أظهر التبويبات كنوافذ:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show titles" = "إظهار العناوين";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from applications" = "عرض Windows من التطبيقات";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from screens" = "عرض Windows من الشاشات";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from Spaces" = "إظهار النوافذ من المساحات";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from:" = "أظهر النوافذ من:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Size" = "مقاس";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Skipped" = "Skipped";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Skipped" = "مُتخطّى";
|
||||
"Small" = "صغير";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Some apps like Finder or Preview use standard tabs which act like independent windows. Some other apps like web browsers use custom tabs which act in unique ways and are not actual windows. AltTab can't list those separately." = "تستخدم بعض التطبيقات مثل Finder أو Preview علامات تبويب قياسية تعمل مثل Windows المستقلة.تستخدم بعض التطبيقات الأخرى مثل متصفحات الويب علامات تبويب مخصصة تعمل بطرق فريدة وليست نوافذ فعلية.لا يمكن لـ Alttab سردها بشكل منفصل.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Source code repository" = "مخزن شفرة المصدر";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Space" = "مساحة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Space Order" = "ترتيب الفضاء";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Start" = "البداية";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Start at login" = "ابدأ في تسجيل الدخول";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Start at login:" = "شغّل البرنامج عند الدخول:";
|
||||
|
||||
/*Menubar option*/
|
||||
"Support this project ❤️" = "اِدعم هذا المشروع ❤";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Support this project" = "اِدعم هذا المشروع";
|
||||
"Swipe with Four Fingers" = "مرر بأربعة أصابع";
|
||||
"Swipe with Three Fingers" = "مرر بثلاثة أصابع";
|
||||
"Switch between 3 different styles. You can customize them." = "التبديل بين 3 أنماط مختلفة.يمكنك تخصيصها.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"System" = "نظام";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"System Default" = "System Default";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"The application needs to restart to apply the language change." = "The application needs to restart to apply the language change.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"System Default" = "افتراضيّ النظام";
|
||||
"The ⌘⎋ (command+escape) shortcut may be used by macOS for GameOverlay.\n\nYour change would assign it to: %@.\n\nIf you want to continue, make sure that the GameOverlay shortcut is disabled.\nAlso note that macOS has reported bugs where the shortcut may still interfere while disabled." = "قد يستخدم macOS الاختصار ⌘⎋ (command+escape) لـ GameOverlay.\n\nسيؤدي تغييرك إلى تعيينه لـ: %@.\n\nإذا كنت ترغب في المتابعة، فتأكد من تعطيل اختصار GameOverlay.\nلاحظ أيضًا أن macOS أبلغ عن أخطاء حيث قد يظل الاختصار يتعارض حتى عند تعطيله.";
|
||||
"The ⎋ (escape) key is reserved by some macOS shortcuts (e.g. ⌘⌥⎋ will show the Force Quit Applications window).\n\nIf you want to use ⎋, make sure that Hold modifiers are neither: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃" = "مفتاح ⎋ (escape) محجوز لبعض اختصارات macOS (على سبيل المثال، ⌘⌥⎋ سيُظهر نافذة \"فرض إنهاء التطبيقات\").\n\nإذا كنت ترغب في استخدام ⎋، فتأكد من أن مفاتيح التعديل التي يتم الضغط عليها ليست: ⌘⌥، ⌘⌥⇧، أو ⌘⌥⇧⌃";
|
||||
"The ⎋ (escape) key is reserved by some macOS shortcuts (e.g. ⌘⌥⎋ will show the Force Quit Applications window).\n\nYour change would assign it to: %@.\n\nIf you want to use ⎋, make sure that Hold modifiers are neither: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃" = "مفتاح ⎋ (escape) محجوز لبعض اختصارات macOS (على سبيل المثال، ⌘⌥⎋ سيُظهر نافذة \"فرض إنهاء التطبيقات\").\n\nسيؤدي تغييرك إلى تعيينه لـ: %@.\n\nإذا كنت ترغب في استخدام ⎋، فتأكد من أن مفاتيح التعديل التي يتم الضغط عليها ليست: ⌘⌥، ⌘⌥⇧، أو ⌘⌥⇧⌃";
|
||||
"The application needs to restart to apply the imported settings." = "يحتاج التطبيق إلى إعادة التشغيل لتطبيق الإعدادات المستوردة.";
|
||||
"The application needs to restart to apply the language change." = "يحتاج التطبيق إعادة التشغيل لتطبيق تعديل اللغة.";
|
||||
"Theme" = "سمة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Theme:" = "المظهر:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Then release:" = "ثمّ اترك:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"This permission is needed to focus windows after you release the shortcut" = "هذا الإذن يسمح لنا بالتركيز على النوافذ بعد تفعيلك للإختصار";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"This permission is needed to show screenshots and titles of open windows" = "هذا الإذن يسمح لنا بتصوير النوافذ والحصول على عناوينها";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"This permission is needed to show thumbnails and preview of open windows" = "هذا الإذن ضروري لعرض الصور المصغّرة والمعاينات للنوافذ المفتوحة";
|
||||
"Thumbnails" = "الصورة المصغرة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Title" = "Title";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Title" = "عنوان";
|
||||
"Title truncation" = "اقتطاع العنوان";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Titles" = "الألقاب";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Trackpad haptic feedback" = "اهتزاز لوحة التعقب اللمسي";
|
||||
"Trigger" = "محفز";
|
||||
"Trigger shortcut" = "اختصار الزناد";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Unassign existing shortcut and continue" = "ألغ الفعل المحجوز واستمر";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Updates policy" = "سياسة التحديثات";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Updates policy:" = "سياسة التحديثات:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Use the app without this permission. Thumbnails won’t show." = "Use the app without this permission. Thumbnails won’t show.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Use the app without this permission. Thumbnails won’t show." = "استعمل التطبيق بدون هذا الإذن. الصور المصغّرة لن تُعرض.";
|
||||
"Version" = "الإصدار";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vertical Swipe with Four Fingers" = "مرر أفقياً بأربعة أصابع";
|
||||
"Vertical Swipe with Three Fingers" = "مرر أفقياً بثلاثة أصابع";
|
||||
"View existing discussions" = "أنظر للنقاشات الحالية";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vim keys" = "مفاتيح Vim";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vim keys already assigned to other actions:\n%@" = "مفاتيح Vim المعينة بالفعل لإجراءات أخرى: \\\n%@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Visibility" = "الرؤية";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Visible Spaces" = "المساحات الظاهرة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"When disabled, avoids the macOS purple screen-recording indicator, and avoids flickers when playing DRM video. Thumbnails will be less up-to-date." = "عند تعطيله، يتجنب مؤشر تسجيل الشاشة الأرجواني لنظام macOS، ويتجنب الوميض عند تشغيل فيديو محمي بحقوق الطبع والنشر (DRM). ستكون الصور المصغرة أقل حداثة.";
|
||||
"When fullscreen" = "عند ملء الشاشة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"When no open window" = "عندما لا توجد نافذة مفتوحة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"While open, press:" = "عندما تكون مفتوحة، إضغط:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window app icon size:" = "حجم أيقونة النافذة:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is fullscreen" = "النافذة ملء الشاشة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is minimized" = "تمَّ تقليص النافذة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is on every Space" = "النافذة موجودة في كل المساحات";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is on Space %d" = "النافذة موجودة في المساحة %d";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window max width in row:" = "أكبر عرض للنافذة بالأعمدة:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window min width in row:" = "أصغر عرض للنافذة بالأعمدة:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window order:" = "ترتيب النوافذ:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window Title" = "عنوان النافذة";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window title contains" = "عنوان النافذة يحتوي على";
|
||||
"Window title font size:" = "حجم خط عنوان النافذة:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window title truncation:" = "اقتطاع عنوان النافذة:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Windows" = "نوافذ";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"You can’t undo this action." = "لا يمكنك التراجع عن هذا الإجراء.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"You didn’t write your email, thus can’t receive any response." = "لم تكتب بريدك؛ فلذلك لن تحصل على رد.";
|
||||
"You may need to disable some conflicting system gestures" = "قد تضطرّ لإبطال بعض إيماءات النظام المتضاربة";
|
||||
@@ -0,0 +1,2 @@
|
||||
/*Copyright (human-readable)*/
|
||||
"NSHumanReadableCopyright" = "Ліцэнзія GPL-3.0";
|
||||
@@ -0,0 +1,296 @@
|
||||
"3-finger Horizontal Swipe" = "Гарызантальны рух 3 пальцамі";
|
||||
"3-finger Vertical Swipe" = "Вертыкальны рух 3 пальцамі";
|
||||
"4-finger Horizontal Swipe" = "Гарызантальны рух 4 пальцамі";
|
||||
"4-finger Vertical Swipe" = "Вертыкальны рух 4 пальцамі";
|
||||
"About" = "Аб праграме";
|
||||
"About %@" = "Пра %@";
|
||||
"Accessibility" = "Даступнасць";
|
||||
"Acknowledgments" = "Падзякі";
|
||||
"Active app" = "Актыўнае прыкладанне";
|
||||
"Active screen" = "Актыўны экран";
|
||||
"Active Space" = "Актыўная прастора";
|
||||
"Add a running app" = "Дадаць запушчаную праграму";
|
||||
"Add an app from disk" = "Дадаць праграму з дыска";
|
||||
"Additional controls" = "Дадатковыя элементы кіравання";
|
||||
"Additional controls…" = "Дадатковыя элементы кіравання…";
|
||||
"Advanced" = "Дадаткова";
|
||||
"After keys are released" = "Пасля адпускання клавіш";
|
||||
"After release" = "Пасля адпускання";
|
||||
"Align windows" = "Выраўнаваць вокны";
|
||||
"Align windows:" = "Выраўнаваць вокны:";
|
||||
"All apps" = "Усе праграмы";
|
||||
"All data from this form will be made public, as a ticket on github.com" = "Усе дадзеныя з гэтай формы будуць апублікаваны як цікет на github.com";
|
||||
"All screens" = "Усе экраны";
|
||||
"All Spaces" = "Усе прасторы";
|
||||
"Allowed" = "Дазволена";
|
||||
"Alphabetical" = "Па алфавіце";
|
||||
"Alphabetical Order" = "Алфавітны парадак";
|
||||
"Also select windows using:" = "Таксама выбіраць вокны з дапамогай:";
|
||||
"AltTab crashed last time you used it. Sending a crash report will help get the issue fixed" = "AltTab выляцеў у мінулы раз, калі вы яго выкарыстоўвалі. Адпраўка справаздачы аб збоі дапаможа вырашыць праблему";
|
||||
"AltTab is currently set to show Applications. This setting is only available when AltTab is set to show Windows." = "AltTab зараз настроены на паказ праграм. Гэтая налада даступная толькі, калі AltTab настроены на паказ вокнаў.";
|
||||
"AltTab is running without Screen Recording permissions. Thumbnails won’t show." = "AltTab працуе без дазволаў на запіс экрана. Мініяцюры не будуць паказвацца.";
|
||||
"AltTab needs some permissions" = "AltTab патрэбны некаторыя дазволы";
|
||||
"AltTab will show if the window is currently minimized or fullscreen with a status icon." = "AltTab пакажа, калі акно ў дадзены момант згорнута або знаходзіцца ў поўнаэкранным рэжыме з дапамогай значка стану.";
|
||||
"Always" = "Заўсёды";
|
||||
"Always send crash reports" = "Заўсёды адпраўляць справаздачы аб збоях";
|
||||
"and press" = "і націсніце";
|
||||
"and press:" = "і націсніце:";
|
||||
"Animations" = "Анімацыі";
|
||||
"Animations…" = "Анімацыі…";
|
||||
"App (BundleID starting with)" = "Праграма (ідэнтыфікатар пакета пачынаецца з)";
|
||||
"App Icons" = "Значкі праграм";
|
||||
"App is hidden" = "Праграма схавана";
|
||||
"App is running but has no open window" = "Праграма працуе, але не мае адкрытых вокнаў";
|
||||
"Apparition delay" = "Затрымка з'яўлення";
|
||||
"Apparition delay of Switcher" = "Затрымка з'яўлення пераключальніка";
|
||||
"Apparition delay:" = "Затрымка з’яўлення:";
|
||||
"Appearance" = "Выгляд";
|
||||
"Application Name" = "Назва праграмы";
|
||||
"Application Name - Window Title" = "Назва праграмы — Загаловак акна";
|
||||
"Applications" = "Праграмы";
|
||||
"Are you sure you don’t want a response?" = "Вы ўпэўнены, што не жадаеце атрымліваць адказ?";
|
||||
"Arrow keys" = "Стрэлкі";
|
||||
"Ask whether to send crash reports" = "Пытацца, ці адпраўляць справаздачы аб збоях";
|
||||
"Auto" = "Аўта";
|
||||
"Auto-install updates periodically" = "Аўтаматычна ўсталёўваць абнаўленні";
|
||||
"Blacklists" = "Чорныя спісы";
|
||||
"Cancel" = "Адмяніць";
|
||||
"Cancel and hide" = "Адмяніць і схаваць";
|
||||
"Capture windows in the background" = "Захоп вокнаў у фонавым рэжыме";
|
||||
"Center" = "Па цэнтры";
|
||||
"Check for updates now…" = "Праверыць абнаўленні цяпер…";
|
||||
"Check for updates periodically" = "Перыядычна правяраць абнаўленні";
|
||||
"Check for updates…" = "Праверыць абнаўленні…";
|
||||
"Check permissions…" = "Праверыць дазволы…";
|
||||
"Close window" = "Зачыніць акно";
|
||||
"Conflicting shortcut" = "Канфлікт спалучэння клавіш";
|
||||
"Controls" = "Кіраванне";
|
||||
"Crash reports policy" = "Палітыка паведамленняў аб збоях";
|
||||
"Crash reports policy:" = "Палітыка справаздач аб збоях:";
|
||||
"Cursor follows focus" = "Курсор ідзе за фокусам";
|
||||
"Customize App Icons style…" = "Наладзіць стыль значкоў праграм…";
|
||||
"Customize Thumbnails style…" = "Наладзіць стыль эскізаў…";
|
||||
"Customize Titles style…" = "Наладзіць стыль загалоўкаў…";
|
||||
"Dark" = "Цёмны";
|
||||
"Debug tools" = "Інструменты для адладкі";
|
||||
"Disabled" = "Адключана";
|
||||
"Do nothing" = "Нічога не рабіць";
|
||||
"Don’t check for updates periodically" = "Не правяраць абнаўленні";
|
||||
"Don’t send" = "Не адпраўляць";
|
||||
"Don’t show windows from these apps" = "Не паказваць вокны гэтых праграм";
|
||||
"Done" = "Гатова";
|
||||
"End" = "Канец";
|
||||
"Exceptions" = "Выключэнні";
|
||||
"Export settings…" = "Экспартаваць налады…";
|
||||
"Export…" = "Экспартаваць…";
|
||||
"Fade in animation of Preview" = "Анімацыя паступовага з'яўлення папярэдняга прагляду";
|
||||
"Fade out animation" = "Анімацыя згасання";
|
||||
"Fade out animation of Switcher" = "Анімацыя паступовага знікнення пераключальніка";
|
||||
"Fade out animation:" = "Анімацыя згасання:";
|
||||
"Failed to import settings" = "Не атрымалася імпартаваць налады";
|
||||
"Focus selected window" = "Сфакусаваць выбранае акно";
|
||||
"Fullscreen window" = "Поўнаэкраннае акно";
|
||||
"Fullscreen windows:" = "Вокны на ўвесь экран:";
|
||||
"Fullscreen/Defullscreen window" = "Поўнаэкранны / Зняць поўнаэкранны рэжым акна";
|
||||
"General" = "Агульныя";
|
||||
"Gesture" = "Жэст";
|
||||
"Grant permission" = "Даць дазвол";
|
||||
"Hidden windows:" = "Схаваныя вокны:";
|
||||
"Hide" = "Схаваць";
|
||||
"Hide app badges" = "Схаваць бэджы праграм";
|
||||
"Hide app badges:" = "Схаваць значкі праграм:";
|
||||
"Hide apps with no open window" = "Схаваць праграмы без адкрытых вокнаў";
|
||||
"Hide apps with no open window:" = "Схаваць праграмы без адкрытых вокнаў:";
|
||||
"Hide colored circles on mouse hover" = "Схаваць каляровыя кругі пры навядзенні мышкай";
|
||||
"Hide colored circles on mouse hover:" = "Схаваць каляровыя кругі пры навядзенні курсора:";
|
||||
"Hide in %@" = "Схаваць у %@";
|
||||
"Hide Space number labels" = "Схаваць нумары прастораў";
|
||||
"Hide Space number labels:" = "Схаваць нумары прастораў:";
|
||||
"Hide status icons" = "Схаваць значкі стану";
|
||||
"Hide status icons:" = "Схаваць значкі стану:";
|
||||
"Hide window thumbnails:" = "Схаваць мініяцюры вокнаў:";
|
||||
"Hide/Show app" = "Схаваць/Паказаць праграму";
|
||||
"High" = "Высокі";
|
||||
"Highest" = "Самы высокі";
|
||||
"Hold" = "Утрымліваць";
|
||||
"Horizontal Swipe with Four Fingers" = "Гарызантальнае правядзенне чатырма пальцамі";
|
||||
"Horizontal Swipe with Three Fingers" = "Гарызантальнае правядзенне трыма пальцамі";
|
||||
"I think the app could be improved with…" = "Я лічу, што праграму можна ўдасканаліць…";
|
||||
"Ignore shortcuts when active" = "Ігнараваць спалучэнні клавіш, калі актыўны";
|
||||
"Ignore shortcuts while a window from these apps is active" = "Ігнараваць спалучэнні клавіш, калі акно гэтых праграм актыўнае";
|
||||
"Import settings…" = "Імпартаваць налады…";
|
||||
"Import…" = "Імпартаваць…";
|
||||
"Keep open" = "Захоўваць адкрытым";
|
||||
"Keep open and search" = "Захоўваць адкрытым і шукаць";
|
||||
"Language" = "Мова";
|
||||
"Language Change" = "Змена мовы";
|
||||
"Large" = "Вялікі";
|
||||
"Later" = "Пазней";
|
||||
"Latest releases" = "Апошнія рэлізы";
|
||||
"Leading" = "Вядучы";
|
||||
"Left" = "Злева";
|
||||
"Light" = "Светлы";
|
||||
"Lock search" = "Блакаваць пошук";
|
||||
"Max height on screen:" = "Макс. вышыня на экране:";
|
||||
"Max width on screen:" = "Макс. шырыня на экране:";
|
||||
"Medium" = "Сярэдні";
|
||||
"Menubar icon" = "Значок у радку меню";
|
||||
"Menubar icon:" = "Значок у радку меню:";
|
||||
"Middle" = "Пасярэдзіне";
|
||||
"Minimize/Deminimize window" = "Згарнуць/Разгарнуць акно";
|
||||
"Minimized windows:" = "Згорнутыя вокны:";
|
||||
"Miscellaneous" = "Рознае";
|
||||
"Miscellaneous:" = "Рознае:";
|
||||
"Mouse hover" = "Пры навядзенні курсора";
|
||||
"Multiple screens" = "Некалькі экранаў";
|
||||
"Never" = "Ніколі";
|
||||
"Never send crash reports" = "Ніколі не адпраўляць справаздачы аб збоях";
|
||||
"No Window" = "Няма акна";
|
||||
"Non-active apps" = "Неактыўныя праграмы";
|
||||
"Non-visible Spaces" = "Нябачныя прасторы";
|
||||
"Normal" = "Нармальны";
|
||||
"Not allowed" = "Не дазволена";
|
||||
"NSHumanReadableCopyright" = "Ліцэнзія GPL-3.0";
|
||||
"Only if the window is fullscreen" = "Толькі калі акно разгорнута на ўвесь экран";
|
||||
"Only on different screen" = "Толькі на іншым экране";
|
||||
"Open Accessibility Preferences…" = "Адкрыць налады даступнасці…";
|
||||
"Open Accessibility Settings…" = "Адкрыць налады даступнасці…";
|
||||
"Open Screen Recording Preferences…" = "Адкрыць налады запісу экрана…";
|
||||
"Open Screen Recording Settings…" = "Адкрыць налады запісу экрана…";
|
||||
"Open System Settings to confirm, and continue" = "Адкрыйце Сістэмныя налады для пацверджання і працягу";
|
||||
"Open Trackpad Preferences…" = "Адкрыць Налады Трэкпада…";
|
||||
"Open Trackpad Settings…" = "Адкрыць налады трэкпада…";
|
||||
"Optional: email (if you want a reply)" = "Неабавязкова: эл. пошта (калі вы хочаце адказ)";
|
||||
"Order windows by" = "Парадак вокнаў па";
|
||||
"Please fill in the form" = "Калі ласка, запоўніце форму";
|
||||
"Policies" = "Палітыкі";
|
||||
"Preferences…" = "Налады…";
|
||||
"Preview selected window" = "Папярэдні прагляд выбранага акна";
|
||||
"Preview selected window:" = "Папярэдні прагляд выбранага акна:";
|
||||
"Preview the selected window." = "Папярэдні прагляд выбранага акна.";
|
||||
"Quit" = "Выйсці";
|
||||
"Quit %@" = "Выйсці з %@";
|
||||
"Quit app" = "Выйсці з праграмы";
|
||||
"Recently Created" = "Нядаўна створаныя";
|
||||
"Recently Created First" = "Спачатку нядаўна створаныя";
|
||||
"Recently Focused" = "Нядаўна сфакусаваныя";
|
||||
"Recently Focused First" = "Спачатку нядаўна сфакусаваныя";
|
||||
"Remember my choice" = "Запомніць мой выбар";
|
||||
"Reset preferences and restart" = "Скінуць налады і перазапусціць";
|
||||
"Reset preferences and restart…" = "Скінуць налады і перазапусціць…";
|
||||
"Reset settings and restart" = "Скінуць налады і перазапусціць";
|
||||
"Reset settings and restart…" = "Скінуць налады і перазапусціць…";
|
||||
"Restart Now" = "Перазапусціць зараз";
|
||||
"Rows of thumbnails:" = "Радкоў эскізаў:";
|
||||
"Screen including menu bar" = "Экран, які ўключае радок меню";
|
||||
"Screen including mouse" = "Экран, які ўключае курсор";
|
||||
"Screen Recording" = "Запіс экрана";
|
||||
"Screen showing AltTab" = "Экран, які адлюстроўвае AltTab";
|
||||
"Search" = "Пошук";
|
||||
"Select next window" = "Выбраць наступнае акно";
|
||||
"Select previous window" = "Выбраць папярэдняе акно";
|
||||
"Select windows on mouse hover" = "Выбіраць вокны пры навядзенні мышкі";
|
||||
"Select windows using arrow keys" = "Выбіраць вокны стрэлкамі";
|
||||
"Select windows using vim keys" = "Выбіраць вокны клавішамі Vim";
|
||||
"Send" = "Адправіць";
|
||||
"Send a crash report?" = "Адправіць справаздачу аб збоі?";
|
||||
"Send anyway" = "Усё роўна адправіць";
|
||||
"Send debug profile (CPU, memory, etc)" = "Адправіць профіль адладкі (ЦП, памяць і г.д.)";
|
||||
"Send feedback" = "Адправіць водгук";
|
||||
"Send feedback…" = "Адправіць водгук";
|
||||
"Settings imported" = "Налады імпартаваны";
|
||||
"Settings…" = "Налады";
|
||||
"Share improvement ideas, or report bugs" = "Падзяліцеся ідэямі па паляпшэньні або паведаміце пра памылкі";
|
||||
"Shortcut" = "Спалучэнне клавіш";
|
||||
"Shortcut 1" = "Спалучэнне 1";
|
||||
"Shortcut 2" = "Спалучэнне 2";
|
||||
"Shortcut 3" = "Спалучэнне клавіш 3";
|
||||
"Shortcut 4" = "Спалучэнне клавіш 4";
|
||||
"Shortcut 5" = "Спалучэнне клавіш 5";
|
||||
"Shortcut already assigned to another action: %@" = "Спалучэнне клавіш ужо прызначана іншаму дзеянню: %@";
|
||||
"Shortcuts When Active" = "Спалучэнні, калі актыўна";
|
||||
"Shortcuts when active…" = "Спалучэнні, калі актыўна…";
|
||||
"Show" = "Паказаць";
|
||||
"Show & Hide" = "Паказаць і схаваць";
|
||||
"Show an item in the switcher for each window, or for each application. Windows will be focused, whereas applications will be activated." = "Паказваць элемент у пераключальніку для кожнага акна або для кожнай праграмы. Вокны будуць факусавацца, а праграмы — актывавацца.";
|
||||
"Show apps with no open window" = "Паказваць праграмы без адкрытых вокнаў";
|
||||
"Show at the end" = "Паказаць у канцы";
|
||||
"Show fullscreen windows" = "Паказваць поўнаэкранныя вокны";
|
||||
"Show hidden windows" = "Паказваць схаваныя вокны";
|
||||
"Show in switcher" = "Паказаць у пераключальніку";
|
||||
"Show minimized windows" = "Паказваць мінімізаваныя вокны";
|
||||
"Show on" = "Паказаць на";
|
||||
"Show on:" = "Паказваць на:";
|
||||
"Show standard tabs as windows" = "Паказваць стандартныя ўкладкі як вокны";
|
||||
"Show standard tabs as windows:" = "Паказваць стандартныя ўкладкі як вокны:";
|
||||
"Show titles" = "Паказваць загалоўкі";
|
||||
"Show windows from applications" = "Паказваць вокны з праграм";
|
||||
"Show windows from screens" = "Паказваць вокны з экранаў";
|
||||
"Show windows from Spaces" = "Паказваць вокны з Spaces";
|
||||
"Show windows from:" = "Паказваць вокны з:";
|
||||
"Size" = "Памер";
|
||||
"Skipped" = "Прапушчана";
|
||||
"Small" = "Маленькі";
|
||||
"Some apps like Finder or Preview use standard tabs which act like independent windows. Some other apps like web browsers use custom tabs which act in unique ways and are not actual windows. AltTab can't list those separately." = "Некаторыя праграмы, такія як Finder ці Preview, выкарыстоўваюць стандартныя ўкладкі, якія дзейнічаюць як незалежныя вокны. Іншыя праграмы, такія як вэб-браўзеры, выкарыстоўваюць карыстальніцкія ўкладкі, якія дзейнічаюць унікальнымі спосабамі і не з'яўляюцца фактычнымі вокнамі. AltTab не можа пералічыць іх асобна.";
|
||||
"Source code repository" = "Рэпазытар зыходнага коду";
|
||||
"Space" = "Прастора";
|
||||
"Space Order" = "Парадак Spaces";
|
||||
"Start" = "Пачатак";
|
||||
"Start at login" = "Запускаць пры ўваходзе";
|
||||
"Start at login:" = "Запускаць пры ўваходзе:";
|
||||
"Support this project" = "Падтрымаць гэты праект";
|
||||
"Swipe with Four Fingers" = "Правядзенне чатырма пальцамі";
|
||||
"Swipe with Three Fingers" = "Правядзенне трыма пальцамі";
|
||||
"Switch between 3 different styles. You can customize them." = "Пераключайцеся паміж 3 рознымі стылямі. Вы можаце іх наладзіць.";
|
||||
"System" = "Сістэма";
|
||||
"System Default" = "Сістэмнае значэнне па змаўчанні";
|
||||
"The ⌘⎋ (command+escape) shortcut may be used by macOS for GameOverlay.\n\nYour change would assign it to: %@.\n\nIf you want to continue, make sure that the GameOverlay shortcut is disabled.\nAlso note that macOS has reported bugs where the shortcut may still interfere while disabled." = "Спалучэнне клавіш ⌘⎋ (command+escape) можа выкарыстоўвацца macOS для GameOverlay. \n\nВаша змена прызначыць яго для: %@. \n\nКалі вы хочаце працягнуць, пераканайцеся, што спалучэнне клавіш GameOverlay адключана. \nТаксама звярніце ўвагу, што macOS паведамляла пра памылкі, калі спалучэнне клавіш усё яшчэ можа перашкаджаць, нават калі яно адключана.";
|
||||
"The ⎋ (escape) key is reserved by some macOS shortcuts (e.g. ⌘⌥⎋ will show the Force Quit Applications window).\n\nIf you want to use ⎋, make sure that Hold modifiers are neither: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃" = "Клавіша ⎋ (escape) зарэзервавана некаторымі спалучэннямі клавіш macOS (напрыклад, ⌘⌥⎋ пакажа акно «Прымусовае завяршэнне праграм»). \n\nКалі вы хочаце выкарыстоўваць ⎋, пераканайцеся, што ўтрымліваемыя мадыфікатары не: ⌘⌥, ⌘⌥⇧ або ⌘⌥⇧⌃";
|
||||
"The ⎋ (escape) key is reserved by some macOS shortcuts (e.g. ⌘⌥⎋ will show the Force Quit Applications window).\n\nYour change would assign it to: %@.\n\nIf you want to use ⎋, make sure that Hold modifiers are neither: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃" = "Клавіша ⎋ (escape) зарэзервавана некаторымі спалучэннямі клавіш macOS (напрыклад, ⌘⌥⎋ пакажа акно «Прымусовае завяршэнне праграм»). \n\nВаша змена прызначыць яго для: %@. \n\nКалі вы хочаце выкарыстоўваць ⎋, пераканайцеся, што ўтрымліваемыя мадыфікатары не: ⌘⌥, ⌘⌥⇧ або ⌘⌥⇧⌃";
|
||||
"The application needs to restart to apply the imported settings." = "Прыкладанне патрабуе перазапуску для прымянення імпартаваных налад.";
|
||||
"The application needs to restart to apply the language change." = "Праграме неабходна перазапусціцца, каб прымяніць змену мовы.";
|
||||
"Theme" = "Тэма";
|
||||
"Theme:" = "Тэма:";
|
||||
"Then release:" = "Затым адпусціце:";
|
||||
"This permission is needed to focus windows after you release the shortcut" = "Гэты дазвол патрэбны для фокусу на вокнах пасля таго, як вы адпусціце спалучэнне клавіш";
|
||||
"This permission is needed to show screenshots and titles of open windows" = "Гэты дазвол патрэбны для паказу скрыншотаў і назваў адкрытых вокнаў";
|
||||
"This permission is needed to show thumbnails and preview of open windows" = "Гэты дазвол неабходны для паказу мініяцюр і папярэдняга прагляду адкрытых вокнаў";
|
||||
"Thumbnails" = "Мініяцюры";
|
||||
"Title" = "Загаловак";
|
||||
"Title truncation" = "Абрэзка загалоўка";
|
||||
"Titles" = "Загалоўкі";
|
||||
"Trackpad haptic feedback" = "Тактыльная зваротная сувязь трэкпада";
|
||||
"Trigger" = "Трыгер";
|
||||
"Trigger shortcut" = "Цэтлік запуску";
|
||||
"Unassign existing shortcut and continue" = "Адвязаць існуючае спалучэнне клавіш і працягнуць";
|
||||
"Updates policy" = "Палітыка абнаўленняў";
|
||||
"Updates policy:" = "Правіла абнаўленняў:";
|
||||
"Use the app without this permission. Thumbnails won’t show." = "Выкарыстоўваць праграму без гэтага дазволу. Мініяцюры не будуць паказвацца.";
|
||||
"Version" = "Версія";
|
||||
"Vertical Swipe with Four Fingers" = "Вертыкальнае правядзенне чатырма пальцамі";
|
||||
"Vertical Swipe with Three Fingers" = "Вертыкальнае правядзенне трыма пальцамі";
|
||||
"View existing discussions" = "Паглядзець існуючыя абмеркаванні";
|
||||
"Vim keys" = "Клавішы Vim";
|
||||
"Vim keys already assigned to other actions:\n%@" = "Клавішы Vim ужо прызначаны іншым дзеянням:\n%@";
|
||||
"Visibility" = "Бачнасць";
|
||||
"Visible Spaces" = "Бачныя прасторы";
|
||||
"When disabled, avoids the macOS purple screen-recording indicator, and avoids flickers when playing DRM video. Thumbnails will be less up-to-date." = "Калі адключана, дазваляе пазбегнуць фіялетавага індыкатара запісу экрана macOS і мігацення пры прайграванні відэа з DRM. Эскізы будуць менш актуальнымі.";
|
||||
"When fullscreen" = "Пры поўнаэкранным рэжыме";
|
||||
"When no open window" = "Пры адсутнасці адкрытых вокнаў";
|
||||
"While open, press:" = "Падчас адкрыцця, націсніце:";
|
||||
"Window app icon size:" = "Памер значка вакна:";
|
||||
"Window is fullscreen" = "Акно поўнаэкраннае";
|
||||
"Window is minimized" = "Акно згорнутае";
|
||||
"Window is on every Space" = "Акно знаходзіцца на кожнай прасторы";
|
||||
"Window is on Space %d" = "Акно знаходзіцца на прасторы %d";
|
||||
"Window max width in row:" = "Макс. шырыня акна ў радку:";
|
||||
"Window min width in row:" = "Мін. шырыня акна ў радку:";
|
||||
"Window order:" = "Парадак вокнаў:";
|
||||
"Window Title" = "Загаловак акна";
|
||||
"Window title contains" = "Загаловак акна ўтрымлівае";
|
||||
"Window title font size:" = "Памер шрыфту загалоўка вокна:";
|
||||
"Window title truncation:" = "Абрэзка загалоўка акна:";
|
||||
"Windows" = "Вокны";
|
||||
"You can’t undo this action." = "Вы не можаце адмяніць гэтае дзеянне.";
|
||||
"You didn’t write your email, thus can’t receive any response." = "Вы не пазначылі свой адрас электроннай пошты, таму не зможаце атрымаць адказ.";
|
||||
"You may need to disable some conflicting system gestures" = "Магчыма, вам спатрэбіцца адключыць некаторыя канфліктуючыя сістэмныя жэсты";
|
||||
@@ -1,711 +1,296 @@
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"3-finger Horizontal Swipe" = "Хоризонтално плъзгане с 3 пръста";
|
||||
"3-finger Vertical Swipe" = "Вертикално плъзгане с 3 пръста";
|
||||
"4-finger Horizontal Swipe" = "Хоризонтално плъзгане с 4 пръста";
|
||||
"4-finger Vertical Swipe" = "Вертикално плъзгане с 4 пръста";
|
||||
"About" = "Относно";
|
||||
|
||||
/*Menubar option. %@ is AltTab*/
|
||||
"About %@" = "Относно %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Accessibility" = "Достъпност";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Acknowledgments" = "Кредити";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active app" = "Активно приложение";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active screen" = "Активен екран";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active Space" = "Активно пространство";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Add a running app" = "Добавяне на работещо приложение";
|
||||
"Add an app from disk" = "Добавяне на приложение от диск";
|
||||
"Additional controls" = "Допълнителни контроли";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Additional controls…" = "Допълнителни контроли ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Advanced" = "Напреднал";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"After keys are released" = "След отпускане на клавишите";
|
||||
"After release" = "След освобождаване";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Align windows" = "Подравнете прозорците";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Align windows:" = "Подравни прозорците:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All apps" = "Всички приложения";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All data from this form will be made public, as a ticket on github.com" = "Всички данни в тази форма ще бъдат публикуване на github.com";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All screens" = "Вички екрани";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All Spaces" = "Всички пространства";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Allowed" = "Разрешен";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Alphabetical" = "Азбучен ред";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Alphabetical Order" = "Азбучен ред";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Also select windows using:" = "Избирай прозорец";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab crashed last time you used it. Sending a crash report will help get the issue fixed" = "AltTab заби последния път. Изпращането на отчет ще помогне за отстраняване на проблема";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab is currently set to show Applications. This setting is only available when AltTab is set to show Windows." = "В момента Alttab е настроен да показва приложения.Тази настройка е достъпна само когато Alttab е настроен да показва Windows.";
|
||||
|
||||
/*Menubar callout*/
|
||||
"AltTab is running without Screen Recording permissions. Thumbnails won’t show." = "AltTab is running without Screen Recording permissions. Thumbnails won’t show.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab is running without Screen Recording permissions. Thumbnails won’t show." = "AltTab работи без разрешения за запис на екрана. Миниатюрите няма да се показват.";
|
||||
"AltTab needs some permissions" = "AltTab има нужда от разрешения";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab will show if the window is currently minimized or fullscreen with a status icon." = "Alttab ще покаже дали прозорецът в момента е сведен до минимум или пълен екран с икона на състоянието.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Always" = "Винаги";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Always send crash reports" = "Винаги пращай отчет";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"and press" = "и натиснете";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"and press:" = "и натискане на";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Animations" = "Анимации";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Animations…" = "Анимации ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App (BundleID starting with)" = "Приложение (BundleID стартиращ с)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App Icons" = "Икони на приложението";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App is hidden" = "Приложението е скрито";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App is running but has no open window" = "Приложението работи, но няма отворени прозорци";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Apparition delay" = "Забавяне на привидения";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Apparition delay of Switcher" = "Забавяне на появата на превключвателя";
|
||||
"Apparition delay:" = "Изчакване преди появяване:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Appearance" = "Изглед";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Application Name" = "Име на приложението";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Application Name - Window Title" = "Име на приложението - заглавие на прозореца";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Applications" = "Приложения";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Are you sure you don’t want a response?" = "Сигурен ли си, че не искаш отговор?";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Arrow keys" = "със стрелките";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ask whether to send crash reports" = "Питай преди да пратиш отчет";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Auto" = "Авто";
|
||||
"Auto-install updates periodically" = "Автоматично инсталирай нови обновявания";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Blacklists" = "Забрани";
|
||||
|
||||
/*Cancel button*/
|
||||
"Cancel" = "Отказ";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Cancel and hide" = "за да прекратиш";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Capture windows in the background" = "Заснемане на прозорци на заден план";
|
||||
"Center" = "центрирано";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates now…" = "Провери за нови онбонвявания...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates periodically" = "Проверявай за нови обновявания";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates…" = "Провери за нови онбонвявания...";
|
||||
|
||||
/*Menubar option*/
|
||||
"Check permissions…" = "Проверете разрешенията ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Close window" = "Затвори прозореца";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Conflicting shortcut" = "в конфликт с шорткът";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Controls" = "Конторли";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Crash reports policy" = "Политика за сривове от доклади";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Crash reports policy:" = "Пращане на отчет при забиване";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Cursor follows focus" = "Курсора следва фокус";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize App Icons style…" = "Персонализирайте иконите на приложението ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize Thumbnails style…" = "Персонализирайте стила на миниатюри ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize Titles style…" = "Персонализирайте стила на заглавия ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Dark" = "Тъмно";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Debug tools" = "Инструменти за отстраняване на грешки";
|
||||
"Disabled" = "Изключено";
|
||||
"Do nothing" = "не прави нищо";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Don’t check for updates periodically" = "Не проверявай за нови обновявания";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Don’t send" = "Не изпращай";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Don’t show windows from these apps" = "Не показвай прозорците на следните приложения:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Done" = "Свършен";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"End" = "в края";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Exceptions" = "Изключения";
|
||||
"Export settings…" = "Експортиране на настройки…";
|
||||
"Export…" = "Експорт…";
|
||||
"Fade in animation of Preview" = "Анимация за плавно появяване на преглед";
|
||||
"Fade out animation" = "Избледнява анимация";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fade out animation of Switcher" = "Анимация за плавно изчезване на превключвателя";
|
||||
"Fade out animation:" = "Избледняваща анимация";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Failed to import settings" = "Неуспешен импорт на настройки";
|
||||
"Focus selected window" = "Покажи избрания прозорец";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen window" = "Прозорец на цял екран";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen windows:" = "Приложения на цял екран:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen/Defullscreen window" = "Цял екран/възстанови прозореца";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"General" = "Общи";
|
||||
|
||||
/*Menubar callout button*/
|
||||
"Grant permission" = "Grant permission";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Gesture" = "Жест";
|
||||
"Grant permission" = "Даване на разрешение";
|
||||
"Hidden windows:" = "Скрити позорци:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide" = "скрий";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide app badges" = "Скрий баджовете на приложенията";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide app badges:" = "Скрий баджовете на приложенията:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide apps with no open window" = "Скрой проложение без прозорци";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide apps with no open window:" = "Скрой проложение без прозорци:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide colored circles on mouse hover" = "Не показвай контроли на прозореца при преминаване с мишка";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide colored circles on mouse hover:" = "Не показвай контроли на прозореца при преминаване с мишка";
|
||||
|
||||
/*%@ is AltTab*/
|
||||
"Hide in %@" = "Скрий в %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide Space number labels" = "Скрий номера на пространството";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide Space number labels:" = "Скрий номера на пространството:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide status icons" = "Скрой иконите за статус";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide status icons:" = "Скрой иконите за статус";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide window thumbnails:" = "Не показвай съдържанието на прозорците:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide/Show app" = "Скрой/покажи проложението";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"High" = "Високо";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Highest" = "Най -високо";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hold" = "Със задръжане на";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Horizontal Swipe with Four Fingers" = "Хоризонтално плъзгане с четири пръста";
|
||||
"Horizontal Swipe with Three Fingers" = "Хоризонтално плъзгане с три пръста";
|
||||
"I think the app could be improved with…" = "Предлагам подобрение на приложението...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ignore shortcuts when active" = "Игнорирай клавишни комбинации, когато е активно";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ignore shortcuts while a window from these apps is active" = "Игнорирай шорткъта в следните приложения:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Language" = "Language";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Language Change" = "Language Change";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Import settings…" = "Импортиране на настройки…";
|
||||
"Import…" = "Импорт…";
|
||||
"Keep open" = "Дръж отворено";
|
||||
"Keep open and search" = "Дръж отворено и търси";
|
||||
"Language" = "Език";
|
||||
"Language Change" = "Промяна на езика";
|
||||
"Large" = "Голям";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Later" = "Later";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Later" = "По-късно";
|
||||
"Latest releases" = "Последни версии";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Leading" = "Водещ";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Left" = "вляво";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Light" = "Светлина";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Lock search" = "Заключи търсенето";
|
||||
"Max height on screen:" = "Максимална височина от екрана:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Max width on screen:" = "Максимална ширина от екрана:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Medium" = "Среден";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Menubar icon" = "Икона на Menubar";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Menubar icon:" = "Икона:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Middle" = "в средата";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Minimize/Deminimize window" = "Минимизирай/възстанови прозореца";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Minimized windows:" = "Минимизирани прозорци:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Miscellaneous" = "Разни";
|
||||
"Miscellaneous:" = "Разни:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Mouse hover" = "с мишката";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Multiple screens" = "Множество екрани";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Never" = "Никога";
|
||||
"Never send crash reports" = "Никога";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"No Window" = "Няма прозорец";
|
||||
"Non-active apps" = "Неактивни приложения";
|
||||
"Non-visible Spaces" = "Невидими пространства";
|
||||
"Normal" = "Нормално";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Not allowed" = "Не е разрешено";
|
||||
|
||||
/*Copyright (human-readable)*/
|
||||
"NSHumanReadableCopyright" = "GPL-3.0 лиценз";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Only if the window is fullscreen" = "ако приложението е на цял екран";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Only on different screen" = "Само на друг екран";
|
||||
"Open Accessibility Preferences…" = "Отвори настройките за достъпност...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Open Accessibility Settings…" = "Отвори настройките за достъпност…";
|
||||
"Open Screen Recording Preferences…" = "Отвори настройките за запис на екрана...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Open Screen Recording Settings…" = "Отвори настройките за запис на екрана…";
|
||||
"Open System Settings to confirm, and continue" = "Отворете системните настройки, за да потвърдите и продължите";
|
||||
"Open Trackpad Preferences…" = "Отвори предпочитанията на тракпада…";
|
||||
"Open Trackpad Settings…" = "Отвори настройките на тракпада…";
|
||||
"Optional: email (if you want a reply)" = "Емейл на който да отговорим (опция)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Order windows by" = "Поръчайте Windows от";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Please fill in the form" = "Моля, попълнете формуляра";
|
||||
"Policies" = "Политики";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preferences…" = "Настройки...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview selected window" = "Преглед на избрания прозорец";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview selected window:" = "Преглед на избрания прозорец:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview the selected window." = "Преглед на избрания прозорец.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Quit" = "Излез";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Quit %@" = "Излез %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Quit app" = "Излез от приложението";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Created" = "Наскоро Създадени";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Created First" = "Наскоро създаден първо";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Focused" = "Наскоро Фокусирани";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Focused First" = "Наскоро се съсредоточи първо";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Remember my choice" = "Запомни избора ми";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Reset preferences and restart" = "Възстанови фабрични настройки и рестартирай";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Reset preferences and restart…" = "Възстанови фабрични настройки и рестартирай...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Restart Now" = "Restart Now";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Reset settings and restart" = "Нулирай настройките и рестартирай";
|
||||
"Reset settings and restart…" = "Нулирай настройките и рестартирай…";
|
||||
"Restart Now" = "Рестартирай сега";
|
||||
"Rows of thumbnails:" = "Брой редове:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen including menu bar" = "Екрана с менщто";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen including mouse" = "Екрана с мишката";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen Recording" = "Запис на екрана";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen showing AltTab" = "Екрана с AltTab";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Search" = "Търсене";
|
||||
"Select next window" = "Избери следващ прозорец";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select previous window" = "Избери предишен прозорец";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows on mouse hover" = "Изберете Windows on Hover на мишката";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows using arrow keys" = "Изберете Windows с помощта на клавиши със стрелки";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows using vim keys" = "Изберете Windows с помощта на VIM клавиши";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send" = "Изпрати";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send a crash report?" = "Да изпратя ли отчет при забиване?";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send anyway" = "Изпрати";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send debug profile (CPU, memory, etc)" = "Изпрати дебуг данни (процесор, памет и т.н.)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send feedback" = "Изпрати обратна връзка";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send feedback…" = "Изпрати обратна връзка...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Settings imported" = "Настройките са импортирани";
|
||||
"Settings…" = "Настройки";
|
||||
"Share improvement ideas, or report bugs" = "Сподели идеи за подобрение или бъгове";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut" = "Пряк път";
|
||||
"Shortcut 1" = "Шорткът 1";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 2" = "Шорткът 2";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 3" = "Клавишна комбинация 3";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 4" = "Клавишна комбинация 4";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 5" = "Клавишна комбинация 5";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut already assigned to another action: %@" = "Този шорткът вече се използва за %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcuts When Active" = "Преки пътища, когато са активни";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcuts when active…" = "Преки пътища, когато са активни ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show" = "покажи";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show & Hide" = "Покажи скрий";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show an item in the switcher for each window, or for each application. Windows will be focused, whereas applications will be activated." = "Покажете елемент в превключвателя за всеки прозорец или за всяко приложение.Windows ще бъде фокусиран, докато приложенията ще бъдат активирани.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show apps with no open window" = "Показване на приложения без отворен прозорец";
|
||||
"Show at the end" = "покажи накрая";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show fullscreen windows" = "Покажете Windows на цял екран";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show hidden windows" = "Показване на скрити прозорци";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show in switcher" = "Показване в превключвател";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show minimized windows" = "Покажете минимизирани прозорци";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show on" = "Показване на";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show on:" = "Покажи на";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show standard tabs as windows" = "Покажи табовете като прозорци";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show standard tabs as windows:" = "Покажи табовете като прозорци";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show titles" = "Покажи заглавия";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from applications" = "Показване на прозорци от приложения";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from screens" = "Показване на прозорци от екрани";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from Spaces" = "Показване на прозорци от пространства";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from:" = "Покажи прозорците на:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Size" = "Размер";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Skipped" = "Skipped";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Skipped" = "Пропуснато";
|
||||
"Small" = "Малък";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Some apps like Finder or Preview use standard tabs which act like independent windows. Some other apps like web browsers use custom tabs which act in unique ways and are not actual windows. AltTab can't list those separately." = "Някои приложения като Finder или Preview използват стандартни раздели, които действат като независими прозорци.Някои други приложения като уеб браузъри използват персонализирани раздели, които действат по уникални начини и не са действителни прозорци.Alttab не може да ги изброи отделно.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Source code repository" = "Сорс код";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Space" = "Пространство";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Space Order" = "Космическа поръчка";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Start" = "в началото";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Start at login" = "Започнете от вход";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Start at login:" = "Пусни при стартиране";
|
||||
|
||||
/*Menubar option*/
|
||||
"Support this project ❤️" = "Подкрепете този проект ❤";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Support this project" = "Подкрепете този проект";
|
||||
"Swipe with Four Fingers" = "Плъзгане с четири пръста";
|
||||
"Swipe with Three Fingers" = "Плъзгане с три пръста";
|
||||
"Switch between 3 different styles. You can customize them." = "Превключете между 3 различни стила.Можете да ги персонализирате.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"System" = "Система";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"System Default" = "System Default";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"The application needs to restart to apply the language change." = "The application needs to restart to apply the language change.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"System Default" = "По подразбиране на системата";
|
||||
"The ⌘⎋ (command+escape) shortcut may be used by macOS for GameOverlay.\n\nYour change would assign it to: %@.\n\nIf you want to continue, make sure that the GameOverlay shortcut is disabled.\nAlso note that macOS has reported bugs where the shortcut may still interfere while disabled." = "Прекият път ⌘⎋ (command+escape) може да се използва от macOS за GameOverlay.\n\nВашата промяна ще го присвои на: %@.\n\nАко искате да продължите, уверете се, че прекият път на GameOverlay е деактивиран.\nИмайте предвид също, че macOS е докладвал грешки, при които прекият път може да пречи, дори когато е деактивиран.";
|
||||
"The ⎋ (escape) key is reserved by some macOS shortcuts (e.g. ⌘⌥⎋ will show the Force Quit Applications window).\n\nIf you want to use ⎋, make sure that Hold modifiers are neither: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃" = "Клавишът ⎋ (escape) е запазен от някои преки пътища на macOS (напр. ⌘⌥⎋ ще покаже прозореца за принудително затваряне на приложения).\n\nАко искате да използвате ⎋, уверете се, че задържаните модификатори не са: ⌘⌥, ⌘⌥⇧ или ⌘⌥⇧⌃";
|
||||
"The ⎋ (escape) key is reserved by some macOS shortcuts (e.g. ⌘⌥⎋ will show the Force Quit Applications window).\n\nYour change would assign it to: %@.\n\nIf you want to use ⎋, make sure that Hold modifiers are neither: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃" = "Клавишът ⎋ (escape) е запазен от някои преки пътища на macOS (напр. ⌘⌥⎋ ще покаже прозореца за принудително затваряне на приложения).\n\nВашата промяна ще го присвои на: %@.\n\nАко искате да използвате ⎋, уверете се, че задържаните модификатори не са: ⌘⌥, ⌘⌥⇧ или ⌘⌥⇧⌃";
|
||||
"The application needs to restart to apply the imported settings." = "Приложението трябва да се рестартира, за да приложи импортираните настройки.";
|
||||
"The application needs to restart to apply the language change." = "Приложението трябва да се рестартира, за да приложи промяната на езика.";
|
||||
"Theme" = "Тема";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Theme:" = "Тема:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Then release:" = "При пускане";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"This permission is needed to focus windows after you release the shortcut" = "Това разрешение е необходимо, за да се отвори прозореца";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"This permission is needed to show screenshots and titles of open windows" = "Това разрешение е необходимо, за да се покаже съдържанието на отворените прозорци";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"This permission is needed to show thumbnails and preview of open windows" = "Това разрешение е необходимо за показване на миниатюри и предварителен преглед на отворени прозорци";
|
||||
"Thumbnails" = "Миниатюри";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Title" = "Title";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Title" = "Заглавие";
|
||||
"Title truncation" = "Отрязване на заглавието";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Titles" = "Заглавия";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Trackpad haptic feedback" = "Тактилна обратна връзка на тракпада";
|
||||
"Trigger" = "Задействане";
|
||||
"Trigger shortcut" = "Задействайте пряк път";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Unassign existing shortcut and continue" = "Премахни шорткът и продължи";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Updates policy" = "Актуализира политиката";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Updates policy:" = "Политика за обновяване:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Use the app without this permission. Thumbnails won’t show." = "Use the app without this permission. Thumbnails won’t show.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Use the app without this permission. Thumbnails won’t show." = "Използвайте приложението без това разрешение. Миниатюрите няма да се показват.";
|
||||
"Version" = "Версия";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vertical Swipe with Four Fingers" = "Вертикално плъзгане с четири пръста";
|
||||
"Vertical Swipe with Three Fingers" = "Вертикално плъзгане с три пръста";
|
||||
"View existing discussions" = "Виж дискусиите";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vim keys" = "Vim keys";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vim keys" = "Vim клавиши";
|
||||
"Vim keys already assigned to other actions:\n%@" = "VIM клавиши, които вече са присвоени на други действия: \\ n%@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Visibility" = "Видимост";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Visible Spaces" = "видимите пространства";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"When disabled, avoids the macOS purple screen-recording indicator, and avoids flickers when playing DRM video. Thumbnails will be less up-to-date." = "Когато е изключено, избягва лилавия индикатор за запис на екран на macOS и избягва примигванията при възпроизвеждане на DRM видео. Миниатюрите ще бъдат по-малко актуални.";
|
||||
"When fullscreen" = "Когато е на цял екран";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"When no open window" = "Когато няма отворени прозорци";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"While open, press:" = "С бутон";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window app icon size:" = "Размер на иконата:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is fullscreen" = "Прозорецът е на цял екран";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is minimized" = "Прозорецът е минимизиран";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is on every Space" = "Прозорецът е на всяко работно пространство";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is on Space %d" = "Прозорецът е на работно пространство %d";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window max width in row:" = "Максимална част от реда за един прозорец:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window min width in row:" = "Минимална част от реда за един прозорец:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window order:" = "Подредба на прозорци:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window Title" = "Заглавие на прозореца";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window title contains" = "Заглавието на прозореца съдържа";
|
||||
"Window title font size:" = "Размер на шрифта на заглавието:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window title truncation:" = "Съкрати заглавието на прозореца";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Windows" = "Windows";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"You can’t undo this action." = "Връщането на това действие не е възможно";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"You didn’t write your email, thus can’t receive any response." = "Няма да получиш отговор, защото не си написал събщение.";
|
||||
"You may need to disable some conflicting system gestures" = "Може да се наложи да изключите някои конфликтни системни жестове";
|
||||
@@ -1,711 +1,296 @@
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"3-finger Horizontal Swipe" = "৩-আঙ্গুলে অনুভূমিক সোয়াইপ";
|
||||
"3-finger Vertical Swipe" = "৩-আঙ্গুলে উল্লম্ব সোয়াইপ";
|
||||
"4-finger Horizontal Swipe" = "৪-আঙ্গুলে অনুভূমিক সোয়াইপ";
|
||||
"4-finger Vertical Swipe" = "৪-আঙ্গুলে উল্লম্ব সোয়াইপ";
|
||||
"About" = "পরিচিতি";
|
||||
|
||||
/*Menubar option. %@ is AltTab*/
|
||||
"About %@" = "পরিচিতি %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Accessibility" = "অ্যাক্সেসিবিলিটি";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Acknowledgments" = "স্বীকৃতি";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active app" = "সক্রিয় অ্যাপ";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active screen" = "সক্রিয় স্ক্রীন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active Space" = "সক্রিয় স্পেস";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Add a running app" = "একটি চলমান অ্যাপ যোগ করুন";
|
||||
"Add an app from disk" = "ডিস্ক থেকে একটি অ্যাপ যোগ করুন";
|
||||
"Additional controls" = "অতিরিক্ত নিয়ন্ত্রণ";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Additional controls…" = "অতিরিক্ত নিয়ন্ত্রণ ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Advanced" = "উন্নত";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"After keys are released" = "কীগুলি ছেড়ে দেওয়ার পর";
|
||||
"After release" = "মুক্তির পরে";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Align windows" = "উইন্ডোজ সারিবদ্ধ করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Align windows:" = "উইন্ডো সারিবদ্ধ করুন:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All apps" = "সব অ্যাপ্লিকেশান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All data from this form will be made public, as a ticket on github.com" = "এই ফর্ম থেকে সমস্ত তথ্য github.com-এ একটি টিকিট হিসাবে সর্বজনীন করা হবে";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All screens" = "সব স্ক্রীন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All Spaces" = "সমস্ত স্পেস";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Allowed" = "অনুমোদিত";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Alphabetical" = "Alphabetical";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Alphabetical" = "বর্ণানুক্রমিক";
|
||||
"Alphabetical Order" = "বর্ণানুক্রমিক ক্রম";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Also select windows using:" = "এটা ব্যবহার করেও উইন্ডো নির্বাচন করুন:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab crashed last time you used it. Sending a crash report will help get the issue fixed" = "আপনি শেষবার ব্যবহার করার সময় AltTab ক্র্যাশ হয়েছে। একটি ক্র্যাশ রিপোর্ট পাঠালে সেই সমস্যার সমাধান পেতে সাহায্য করবে";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab is currently set to show Applications. This setting is only available when AltTab is set to show Windows." = "আল্টব বর্তমানে অ্যাপ্লিকেশনগুলি দেখানোর জন্য প্রস্তুত রয়েছে।এই সেটিংটি কেবল তখনই পাওয়া যায় যখন আল্টব উইন্ডো দেখানোর জন্য সেট করা থাকে।";
|
||||
|
||||
/*Menubar callout*/
|
||||
"AltTab is running without Screen Recording permissions. Thumbnails won’t show." = "AltTab is running without Screen Recording permissions. Thumbnails won’t show.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab is running without Screen Recording permissions. Thumbnails won’t show." = "AltTab “স্ক্রিন রেকর্ডিং” অনুমতি ছাড়া চলতেছে, থাম্বনেল দেখাবে না";
|
||||
"AltTab needs some permissions" = "AltTab-এর কিছু অনুমতি প্রয়োজন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab will show if the window is currently minimized or fullscreen with a status icon." = "উইন্ডোটি বর্তমানে ন্যূনতম করা হয়েছে বা স্ট্যাটাস আইকন সহ ফুলস্ক্রিন রয়েছে কিনা তা দেখাবে।";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Always" = "সর্বদা";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Always send crash reports" = "সর্বদা ক্র্যাশ রিপোর্ট পাঠান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"and press" = "এবং টিপুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"and press:" = "এবং চাপুন:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Animations" = "অ্যানিমেশন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Animations…" = "অ্যানিমেশন ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App (BundleID starting with)" = "অ্যাপ (বান্ডেল আইডি দিয়ে শুরু)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App Icons" = "অ্যাপ্লিকেশন আইকন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App is hidden" = "অ্যাপটি লুকানো আছে";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App is running but has no open window" = "অ্যাপ চলছে কিন্তু কোন খোলা উইন্ডো নেই";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Apparition delay" = "প্রয়োগ বিলম্ব";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Apparition delay of Switcher" = "সুইচারের আবির্ভাব বিলম্ব";
|
||||
"Apparition delay:" = "আবির্ভাব বিলম্ব:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Appearance" = "অলংকরণ";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Application Name" = "অ্যাপ্লিকেশন নাম";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Application Name - Window Title" = "আবেদনের নাম - উইন্ডো শিরোনাম";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Applications" = "অ্যাপ্লিকেশন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Are you sure you don’t want a response?" = "আপনি কি নিশ্চিত যে আপনি কোন রিপ্লে চান না?";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Arrow keys" = "তীর চিহ্ন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ask whether to send crash reports" = "ক্র্যাশ রিপোর্ট পাঠাবে কিনা জিজ্ঞাসা করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Auto" = "স্বয়ংক্রিয়";
|
||||
"Auto-install updates periodically" = "পর্যায়ক্রমে আপডেটগুলি স্বয়ংক্রিয়ভাবে ইনস্টল করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Blacklists" = "কালো তালিকা";
|
||||
|
||||
/*Cancel button*/
|
||||
"Cancel" = "বাতিল";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Cancel and hide" = "বাতিল এবং লুকান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Capture windows in the background" = "পটভূমিতে উইন্ডো ক্যাপচার করুন";
|
||||
"Center" = "কেন্দ্র";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates now…" = "এখনি হালনাগাদ যাচাই করুন...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates periodically" = "প্রতিনিয়ত হালনাগাদ যাচাই করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates…" = "হালনাগাদ অনুসন্ধান করুন…";
|
||||
|
||||
/*Menubar option*/
|
||||
"Check permissions…" = "অনুমতি পরীক্ষা করুন ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Close window" = "উইন্ডো বন্ধ করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Conflicting shortcut" = "পরস্পরবিরোধী শর্টকাট";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Controls" = "কন্ট্রোল";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Crash reports policy" = "ক্র্যাশ রিপোর্ট নীতি";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Crash reports policy:" = "ক্র্যাশ রিপোর্ট নীতি:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Cursor follows focus" = "কার্সার ফোকাস অনুসরণ করে";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize App Icons style…" = "অ্যাপ্লিকেশন আইকন স্টাইল কাস্টমাইজ করুন ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize Thumbnails style…" = "থাম্বনেইলস স্টাইল কাস্টমাইজ করুন ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize Titles style…" = "শিরোনাম শৈলী কাস্টমাইজ করুন ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Dark" = "অন্ধকার";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Debug tools" = "ডিবাগ টুলস";
|
||||
"Disabled" = "নিষ্ক্রিয়";
|
||||
"Do nothing" = "কিছু করনা";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Don’t check for updates periodically" = "প্রতিনিয়ত হালনাগাদ অনুসন্ধান করবেন না";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Don’t send" = "পাঠাবেন না";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Don’t show windows from these apps" = "এই অ্যাপস থেকে উইন্ডো দেখাবেন না";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Done" = "সম্পন্ন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"End" = "শেষ";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Exceptions" = "ব্যতিক্রম";
|
||||
"Export settings…" = "সেটিংস রপ্তানি করুন…";
|
||||
"Export…" = "এক্সপোর্ট করুন…";
|
||||
"Fade in animation of Preview" = "প্রিভিউয়ের ফেড ইন অ্যানিমেশন";
|
||||
"Fade out animation" = "অ্যানিমেশন বিবর্ণ";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fade out animation of Switcher" = "সুইচারের ফেড আউট অ্যানিমেশন";
|
||||
"Fade out animation:" = "ফেইড আউট অ্যানিমেশন:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Failed to import settings" = "সেটিংস আমদানি করতে ব্যর্থ হয়েছে";
|
||||
"Focus selected window" = "নির্বাচিত উইন্ডোতে ফোকাস করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen window" = "ফুলস্ক্রিন উইন্ডো";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen windows:" = "ফুলস্ক্রিন উইন্ডোজ:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen/Defullscreen window" = "ফুলস্ক্রিন/ডিফুলস্ক্রিন উইন্ডো";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"General" = "সাধারন";
|
||||
|
||||
/*Menubar callout button*/
|
||||
"Grant permission" = "Grant permission";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Gesture" = "জেসচার";
|
||||
"Grant permission" = "অনুমতি দিন";
|
||||
"Hidden windows:" = "লুকানো উইন্ডোজ:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide" = "লুকান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide app badges" = "অ্যাপ ব্যাজ লুকান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide app badges:" = "অ্যাপ ব্যাজ লুকান:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide apps with no open window" = "কোন খোলা উইন্ডো ছাড়া অ্যাপ লুকান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide apps with no open window:" = "কোন খোলা উইন্ডো ছাড়া অ্যাপ লুকান:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide colored circles on mouse hover" = "মাউস হোভারে রঙিন বৃত্ত লুকান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide colored circles on mouse hover:" = "মাউস হোভারে রঙিন বৃত্ত লুকান:";
|
||||
|
||||
/*%@ is AltTab*/
|
||||
"Hide in %@" = "%@ এ লুকান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide Space number labels" = "স্পেস নম্বর লেবেল লুকান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide Space number labels:" = "স্পেস নম্বর লেবেল লুকান:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide status icons" = "স্ট্যাটাস আইকন লুকান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide status icons:" = "স্ট্যাটাস আইকন লুকান:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide window thumbnails:" = "উইন্ডো থাম্বনেল লুকান:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide/Show app" = "অ্যাপ লুকান/দেখান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"High" = "উচ্চ";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Highest" = "সর্বোচ্চ";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hold" = "ধরে রাখ";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Horizontal Swipe with Four Fingers" = "চার আঙ্গুল দিয়ে অনুভূমিক সোয়াইপ";
|
||||
"Horizontal Swipe with Three Fingers" = "তিন আঙ্গুল দিয়ে অনুভূমিক সোয়াইপ";
|
||||
"I think the app could be improved with…" = "আমি মনে করি অ্যাপটি আরো উন্নত করা যেতে পারে...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ignore shortcuts when active" = "সক্রিয় থাকাকালীন শর্টকাট উপেক্ষা করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ignore shortcuts while a window from these apps is active" = "এই অ্যাপগুলির একটি উইন্ডো সক্রিয় থাকাকালীন শর্টকাটগুলি উপেক্ষা করুন৷";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Language" = "Language";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Language Change" = "Language Change";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Import settings…" = "সেটিংস আমদানি করুন…";
|
||||
"Import…" = "আমদানি করুন…";
|
||||
"Keep open" = "খোলা রাখুন";
|
||||
"Keep open and search" = "খোলা রাখুন এবং অনুসন্ধান করুন";
|
||||
"Language" = "ভাষা";
|
||||
"Language Change" = "ভাষা পরিবর্তন";
|
||||
"Large" = "বড়";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Later" = "Later";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Later" = "পরে";
|
||||
"Latest releases" = "সর্বশেষ রিলিজ";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Leading" = "নেতৃত্ব";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Left" = "বাম";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Light" = "হালকা";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Lock search" = "অনুসন্ধান লক করুন";
|
||||
"Max height on screen:" = "স্ক্রিনে সর্বোচ্চ উচ্চতা:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Max width on screen:" = "স্ক্রিনে সর্বাধিক প্রস্থ:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Medium" = "মধ্যম";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Menubar icon" = "মেনুবার আইকন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Menubar icon:" = "মেনুবার আইকন:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Middle" = "মধ্য";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Minimize/Deminimize window" = "উইন্ডো মিনিমাইজ/ডিমিনিমাইজ করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Minimized windows:" = "মিনিমাইজ করা উইন্ডোজ:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Miscellaneous" = "অন্যান্য";
|
||||
"Miscellaneous:" = "বিবিধ:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Mouse hover" = "মাউস হভার";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Multiple screens" = "একাধিক স্ক্রিন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Never" = "কখনোই নয়";
|
||||
"Never send crash reports" = "কখনোই ক্র্যাশ রিপোর্ট পাঠাবেন না";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"No Window" = "কোনো উইন্ডো নেই";
|
||||
"Non-active apps" = "সক্রিয় নয় এমন অ্যাপস";
|
||||
"Non-visible Spaces" = "অদৃশ্য স্পেস";
|
||||
"Normal" = "সাধারণ";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Not allowed" = "অনুমতি নেই";
|
||||
|
||||
/*Copyright (human-readable)*/
|
||||
"NSHumanReadableCopyright" = "GPL-3.0 লাইসেন্স";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Only if the window is fullscreen" = "উইন্ডো ফুলস্ক্রিন হলেই";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Only on different screen" = "শুধুমাত্র ভিন্ন স্ক্রিনে";
|
||||
"Open Accessibility Preferences…" = "অ্যাক্সেসিবিলিটি সেটিং খুলুন...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Open Accessibility Settings…" = "অ্যাক্সেসিবিলিটি সেটিংস খুলুন…";
|
||||
"Open Screen Recording Preferences…" = "স্ক্রীন রেকর্ডিং সেটিং খুলুন...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Open Screen Recording Settings…" = "স্ক্রিন রেকর্ডিং সেটিংস খুলুন…";
|
||||
"Open System Settings to confirm, and continue" = "নিশ্চিত করতে এবং চালিয়ে যেতে সিস্টেম সেটিংস খুলুন";
|
||||
"Open Trackpad Preferences…" = "ট্র্যাকপ্যাড পছন্দসমূহ খুলুন…";
|
||||
"Open Trackpad Settings…" = "ট্র্যাকপ্যাড সেটিংস খুলুন…";
|
||||
"Optional: email (if you want a reply)" = "ঐচ্ছিক: ইমেল (যদি আপনি একটি উত্তর চান)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Order windows by" = "দ্বারা উইন্ডোজ অর্ডার করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Please fill in the form" = "ফর্মটি পূরণ করুন";
|
||||
"Policies" = "নীতিমালা";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preferences…" = "পছন্দ…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview selected window" = "পূর্বরূপ নির্বাচিত উইন্ডো";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview selected window:" = "Preview selected window:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview selected window:" = "নির্বাচিত উইন্ডোর প্রিভিউ:";
|
||||
"Preview the selected window." = "নির্বাচিত উইন্ডো পূর্বরূপ দেখুন।";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Quit" = "প্রস্থান করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Quit %@" = "প্রস্থান করুন %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Quit app" = "অ্যাপ বন্ধ করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Created" = "Recently Created";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Created" = "সম্প্রতি বানানো";
|
||||
"Recently Created First" = "সম্প্রতি প্রথম তৈরি";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Focused" = "Recently Focused";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Focused" = "সম্প্রতি মনোযোগ";
|
||||
"Recently Focused First" = "সম্প্রতি প্রথমে ফোকাস করা";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Remember my choice" = "আমার পছন্দ মনে রেখো";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Reset preferences and restart" = "সেটিং রিসেট করুন এবং পুনরায় চালু করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Reset preferences and restart…" = "পছন্দগুলি পুনরায় সেট করুন এবং পুনরায় চালু করুন ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Restart Now" = "Restart Now";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Reset settings and restart" = "সেটিংস রিসেট করুন এবং পুনরায় চালু করুন";
|
||||
"Reset settings and restart…" = "সেটিংস রিসেট করুন এবং পুনরায় চালু করুন…";
|
||||
"Restart Now" = "এখন রিস্টার্ট করুন";
|
||||
"Rows of thumbnails:" = "থাম্বনেইলের সারি:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen including menu bar" = "মেনু বার সহ স্ক্রীন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen including mouse" = "মাউস সহ স্ক্রীন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen Recording" = "স্ক্রিন রেকর্ডিং";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen showing AltTab" = "স্ক্রীন AltTab দেখাচ্ছে";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Search" = "অনুসন্ধান";
|
||||
"Select next window" = "পরবর্তী উইন্ডো নির্বাচন করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select previous window" = "পূর্ববর্তী উইন্ডো নির্বাচন করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows on mouse hover" = "মাউস হোভারে উইন্ডোজ নির্বাচন করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows using arrow keys" = "তীর কী ব্যবহার করে উইন্ডোজ নির্বাচন করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows using vim keys" = "ভিম কীগুলি ব্যবহার করে উইন্ডোজ নির্বাচন করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send" = "পাঠান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send a crash report?" = "একটি ক্র্যাশ রিপোর্ট পাঠান?";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send anyway" = "যেকোন ভাবেই পাঠান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send debug profile (CPU, memory, etc)" = "ডিবাগ প্রোফাইল পাঠান (CPU, মেমরি, ইত্যাদি)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send feedback" = "মতামত পাঠান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send feedback…" = "মতামত পাঠান…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Settings imported" = "সেটিংস আমদানি করা হয়েছে";
|
||||
"Settings…" = "সেটিংস";
|
||||
"Share improvement ideas, or report bugs" = "উন্নতির ধারনা শেয়ার করুন বা বাগ রিপোর্ট করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut" = "শর্টকাট";
|
||||
"Shortcut 1" = "শর্টকাট ১";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 2" = "শর্টকাট 2";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 3" = "শর্টকাট 3";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 4" = "শর্টকাট 4";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 5" = "শর্টকাট 5";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut already assigned to another action: %@" = "শর্টকাট ইতিমধ্যেই অন্য অ্যাকশনে অ্যাসাইন করা হয়েছে: %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcuts When Active" = "সক্রিয় হলে শর্টকাট";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcuts when active…" = "সক্রিয় হলে শর্টকাট…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show" = "দেখান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show & Hide" = "দেখান এবং লুকান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show an item in the switcher for each window, or for each application. Windows will be focused, whereas applications will be activated." = "প্রতিটি উইন্ডো বা প্রতিটি অ্যাপ্লিকেশন জন্য স্যুইচারে একটি আইটেম দেখান।উইন্ডোজ ফোকাস করা হবে, যেখানে অ্যাপ্লিকেশনগুলি সক্রিয় করা হবে।";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show apps with no open window" = "খোলা উইন্ডো নেই এমন অ্যাপস দেখান";
|
||||
"Show at the end" = "শেষে দেখান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show fullscreen windows" = "ফুলস্ক্রিন উইন্ডো দেখান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show hidden windows" = "লুকানো উইন্ডো দেখান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show in switcher" = "সুইচারে দেখান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show minimized windows" = "ন্যূনতম উইন্ডো দেখান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show on" = "প্রদর্শন করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show on:" = "প্রদর্শন:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show standard tabs as windows" = "উইন্ডো হিসাবে স্ট্যান্ডার্ড ট্যাব দেখান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show standard tabs as windows:" = "উইন্ডো হিসাবে স্ট্যান্ডার্ড ট্যাব দেখান:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show titles" = "শিরোনাম দেখান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from applications" = "অ্যাপ্লিকেশন থেকে উইন্ডোজ দেখান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from screens" = "পর্দা থেকে উইন্ডোজ দেখান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from Spaces" = "স্পেস থেকে উইন্ডোজ দেখান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from:" = "এর থেকে উইন্ডো দেখান:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Size" = "আকার";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Skipped" = "Skipped";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Skipped" = "এড়িয়ে যাওয়া হয়েছে";
|
||||
"Small" = "ছোট";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Some apps like Finder or Preview use standard tabs which act like independent windows. Some other apps like web browsers use custom tabs which act in unique ways and are not actual windows. AltTab can't list those separately." = "ফাইন্ডার বা পূর্বরূপের মতো কিছু অ্যাপ্লিকেশন স্ট্যান্ডার্ড ট্যাব ব্যবহার করে যা স্বাধীন উইন্ডোর মতো কাজ করে।ওয়েব ব্রাউজারগুলির মতো আরও কিছু অ্যাপ্লিকেশন কাস্টম ট্যাব ব্যবহার করে যা অনন্য উপায়ে কাজ করে এবং প্রকৃত উইন্ডো নয়।আলটাব পৃথকভাবে তালিকাভুক্ত করতে পারে না।";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Source code repository" = "সোর্স কোড সংগ্রহস্থল";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Space" = "Space";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Space" = "স্পেস";
|
||||
"Space Order" = "স্পেস অর্ডার";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Start" = "শুরু করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Start at login" = "লগইন শুরু করুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Start at login:" = "লগইন থেকে শুরু করুন:";
|
||||
|
||||
/*Menubar option*/
|
||||
"Support this project ❤️" = "এই প্রকল্প সমর্থন ❤";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Support this project" = "এই প্রকল্প সমর্থন";
|
||||
"Swipe with Four Fingers" = "চার আঙ্গুল দিয়ে সোয়াইপ করুন";
|
||||
"Swipe with Three Fingers" = "তিন আঙ্গুল দিয়ে সোয়াইপ করুন";
|
||||
"Switch between 3 different styles. You can customize them." = "3 টি বিভিন্ন শৈলীর মধ্যে স্যুইচ করুন।আপনি তাদের কাস্টমাইজ করতে পারেন।";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"System" = "সিস্টেম";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"System Default" = "System Default";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"The application needs to restart to apply the language change." = "The application needs to restart to apply the language change.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"System Default" = "সিস্টেম ডিফল্ট";
|
||||
"The ⌘⎋ (command+escape) shortcut may be used by macOS for GameOverlay.\n\nYour change would assign it to: %@.\n\nIf you want to continue, make sure that the GameOverlay shortcut is disabled.\nAlso note that macOS has reported bugs where the shortcut may still interfere while disabled." = "⌘⎋ (কমান্ড+এসকেপ) শর্টকাটটি macOS দ্বারা GameOverlay-এর জন্য ব্যবহৃত হতে পারে।\n\nআপনার পরিবর্তন এটিকে %@-তে বরাদ্দ করবে।\n\nআপনি যদি চালিয়ে যেতে চান, তাহলে নিশ্চিত করুন যে GameOverlay শর্টকাটটি নিষ্ক্রিয় আছে।\nএছাড়াও মনে রাখবেন যে macOS-এ এমন ত্রুটি রিপোর্ট করা হয়েছে যেখানে শর্টকাট নিষ্ক্রিয় থাকা সত্ত্বেও হস্তক্ষেপ করতে পারে।";
|
||||
"The ⎋ (escape) key is reserved by some macOS shortcuts (e.g. ⌘⌥⎋ will show the Force Quit Applications window).\n\nIf you want to use ⎋, make sure that Hold modifiers are neither: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃" = "⎋ (এস্কেপ) কি তা কয়েকটা macOS শর্টকাট দিয়ে সংরক্ষিত (উদাহরণ: ⌘⌥⎋ Force Quit Applications উইন্ডো তা দেখাবে)\n\n⎋ যদি ব্যবহার করতে চান, নিশ্চিত করুন যে Hold মডিফাইয়ের যেন ⌘⌥, ⌘⌥⇧, অথবা না থাকে ⌘⌥⇧⌃";
|
||||
"The ⎋ (escape) key is reserved by some macOS shortcuts (e.g. ⌘⌥⎋ will show the Force Quit Applications window).\n\nYour change would assign it to: %@.\n\nIf you want to use ⎋, make sure that Hold modifiers are neither: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃" = "⎋ (এসকেপ) কীটি কিছু macOS শর্টকাট দ্বারা সংরক্ষিত (যেমন ⌘⌥⎋ 'ফোর্স কুইট অ্যাপ্লিকেশন' উইন্ডো দেখাবে)।\n\nআপনার পরিবর্তন এটিকে %@-তে বরাদ্দ করবে।\n\nআপনি যদি ⎋ ব্যবহার করতে চান, তাহলে নিশ্চিত করুন যে মডিফায়ারগুলি ⌘⌥, ⌘⌥⇧, অথবা ⌘⌥⇧⌃ কোনটিই ধরে রাখা হচ্ছে না।";
|
||||
"The application needs to restart to apply the imported settings." = "আমদানি করা সেটিংস প্রয়োগ করতে অ্যাপ্লিকেশনটি পুনরায় চালু করতে হবে।";
|
||||
"The application needs to restart to apply the language change." = "এপ্লিকেশন রিস্টার্ট করা লাগবে ভাষা পরিবর্তন করার জন্য";
|
||||
"Theme" = "থিম";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Theme:" = "থিম:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Then release:" = "তারপর মুক্তি:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"This permission is needed to focus windows after you release the shortcut" = "আপনি শর্টকাট রিলিজ করার পর উইন্ডোজ ফোকাস করার জন্য এই অনুমতি প্রয়োজন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"This permission is needed to show screenshots and titles of open windows" = "খোলা উইন্ডোর স্ক্রিনশট এবং শিরোনাম দেখানোর জন্য এই অনুমতি প্রয়োজন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"This permission is needed to show thumbnails and preview of open windows" = "খোলা উইন্ডোগুলির থাম্বনেল এবং প্রিভিউ দেখানোর জন্য এই অনুমতির প্রয়োজন";
|
||||
"Thumbnails" = "থাম্বনেইলস";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Title" = "Title";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Title" = "শিরোনাম";
|
||||
"Title truncation" = "শিরোনাম কাটা";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Titles" = "শিরোনাম";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Trackpad haptic feedback" = "ট্র্যাকপ্যাড হ্যাপটিক ফিডব্যাক";
|
||||
"Trigger" = "ট্রিগার";
|
||||
"Trigger shortcut" = "ট্রিগার শর্টকাট";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Unassign existing shortcut and continue" = "বিদ্যমান শর্টকাট আনঅ্যাসাইন করুন এবং চালিয়ে যান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Updates policy" = "আপডেট নীতি";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Updates policy:" = "আপডেট নীতি:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Use the app without this permission. Thumbnails won’t show." = "Use the app without this permission. Thumbnails won’t show.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Use the app without this permission. Thumbnails won’t show." = "এই অনুমতি ছাড়া অ্যাপটি ব্যবহার করুন। থাম্বনেল দেখাবে না।";
|
||||
"Version" = "সংস্করণ";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vertical Swipe with Four Fingers" = "চার আঙ্গুল দিয়ে উল্লম্ব সোয়াইপ";
|
||||
"Vertical Swipe with Three Fingers" = "তিন আঙ্গুল দিয়ে উল্লম্ব সোয়াইপ";
|
||||
"View existing discussions" = "বিদ্যমান আলোচনা দেখুন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vim keys" = "Vim keys";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vim keys" = "ভীম কিস";
|
||||
"Vim keys already assigned to other actions:\n%@" = "ভিম কীগুলি ইতিমধ্যে অন্যান্য ক্রিয়াকলাপে নির্ধারিত: \\ n%@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Visibility" = "দৃশ্যমানতা";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Visible Spaces" = "দৃশ্যমান স্থান";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"When disabled, avoids the macOS purple screen-recording indicator, and avoids flickers when playing DRM video. Thumbnails will be less up-to-date." = "নিষ্ক্রিয় করা হলে, এটি macOS-এর বেগুনি স্ক্রিন-রেকর্ডিং সূচক এড়িয়ে চলে এবং DRM ভিডিও চালানোর সময় ফ্লিকারিং প্রতিরোধ করে। থাম্বনেলগুলি কম আপডেট হবে।";
|
||||
"When fullscreen" = "যখন ফুলস্ক্রিন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"When no open window" = "যখন খোলা জানালা নেই";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"While open, press:" = "খোলার সময়, চাপুন:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window app icon size:" = "উইন্ডো অ্যাপ্লিকেশন আইকন আকার:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is fullscreen" = "উইন্ডো ফুলস্ক্রিন";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is minimized" = "উইন্ডোটি ছোট করা হয়েছে";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is on every Space" = "উইন্ডো প্রতিটি স্পেসে আছে";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is on Space %d" = "উইন্ডো %d স্পেসে আছে";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window max width in row:" = "সারিতে উইন্ডো সর্বাধিক প্রস্থ:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window min width in row:" = "সারিতে উইন্ডোর মিনিমাম প্রস্থ:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window order:" = "Window order:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window order:" = "উইন্ডোর ক্রম:";
|
||||
"Window Title" = "উইন্ডো শিরোনাম";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window title contains" = "উইন্ডোর শিরোনামে রয়েছে";
|
||||
"Window title font size:" = "উইন্ডো শিরোনামের ফন্ট সাইজ:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window title truncation:" = "উইন্ডো শিরোনাম ছেদন:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Windows" = "উইন্ডোজ";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"You can’t undo this action." = "আপনি এই ক্রিয়াটি পূর্বাবস্থায় ফিরিয়ে আনতে পারবেন না।";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"You didn’t write your email, thus can’t receive any response." = "আপনি আপনার ইমেল লেখেননি, তাই কোনো রিপ্লেও পাবেন না।";
|
||||
"You may need to disable some conflicting system gestures" = "আপনাকে কিছু সাংঘর্ষিক সিস্টেম জেসচার নিষ্ক্রিয় করতে হতে পারে";
|
||||
@@ -1,711 +1,296 @@
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"3-finger Horizontal Swipe" = "Fregament horitzontal amb 3 dits";
|
||||
"3-finger Vertical Swipe" = "Fregament vertical amb 3 dits";
|
||||
"4-finger Horizontal Swipe" = "Fregament horitzontal amb 4 dits";
|
||||
"4-finger Vertical Swipe" = "Fregament vertical amb 4 dits";
|
||||
"About" = "Sobre l'AltTab";
|
||||
|
||||
/*Menubar option. %@ is AltTab*/
|
||||
"About %@" = "Sobre l'%@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Accessibility" = "Accessibilitat";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Acknowledgments" = "Agraïments";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active app" = "Aplicació activa";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active screen" = "Pantalla activa";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active Space" = "Espai actiu";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Add a running app" = "Afegir una aplicació en execució";
|
||||
"Add an app from disk" = "Afegir una aplicació des del disc";
|
||||
"Additional controls" = "Controls addicionals";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Additional controls…" = "Controls addicionals ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Advanced" = "Avançada";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"After release" = "Després del llançament";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Align windows" = "Alineeu les finestres";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Additional controls…" = "Controls addicionals…";
|
||||
"Advanced" = "Avançat";
|
||||
"After keys are released" = "Després d'alliberar les tecles";
|
||||
"After release" = "En deixar anar";
|
||||
"Align windows" = "Alinear finestres";
|
||||
"Align windows:" = "Alinear finestres:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All apps" = "Totes les aplicacions";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All data from this form will be made public, as a ticket on github.com" = "Les dades es faran públiques a github.com";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All screens" = "Totes les pantalles";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All Spaces" = "Tots els espais";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Allowed" = "Permès";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Alphabetical" = "Alfabètic";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Alphabetical Order" = "Ordre alfabètic";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Also select windows using:" = "També seleccionar:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab crashed last time you used it. Sending a crash report will help get the issue fixed" = "AltTab s'ha tancat a causa d'un problema. Enviar un informe d'error ajudarà a resoldre'l";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab is currently set to show Applications. This setting is only available when AltTab is set to show Windows." = "Actualment, ALTTAB està previst per mostrar aplicacions.Aquesta configuració només està disponible quan ALTTAB està configurat per mostrar Windows.";
|
||||
|
||||
/*Menubar callout*/
|
||||
"AltTab is running without Screen Recording permissions. Thumbnails won’t show." = "L'Alt-Tab no té permís de gravació de pantalla. No es mostraran les miniatures.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab is currently set to show Applications. This setting is only available when AltTab is set to show Windows." = "AltTab està configurat per mostrar aplicacions. Aquesta opció només està disponible quan està configurat per mostrar finestres.";
|
||||
"AltTab is running without Screen Recording permissions. Thumbnails won’t show." = "L'AltTab no té permís per gravar la pantalla. Miniatures no disponibles.";
|
||||
"AltTab needs some permissions" = "L'AltTab necessita alguns permisos";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab will show if the window is currently minimized or fullscreen with a status icon." = "AltTab mostrarà si actualment es minimitza la finestra o la pantalla completa amb una icona d'estat.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab will show if the window is currently minimized or fullscreen with a status icon." = "AltTab es mostrarà si la finestra està minimitzada o a pantalla completa amb icona d'estat.";
|
||||
"Always" = "Sempre";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Always send crash reports" = "Enviar automàticament";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"and press" = "i premsa";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"and press" = "i prem";
|
||||
"and press:" = "i prémer:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Animations" = "Animacions";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Animations…" = "Animacions ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Animations…" = "Animacions…";
|
||||
"App (BundleID starting with)" = "Aplicació (BundleID comença per)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App Icons" = "Icones de l'aplicació";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App Icons" = "Icones d'aplicació";
|
||||
"App is hidden" = "L'aplicació està oculta";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App is running but has no open window" = "L'aplicació no té finestres obertes";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Apparition delay" = "Retard de l'aparició";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Apparition delay" = "Retard en aparèixer";
|
||||
"Apparition delay of Switcher" = "Demora en l'aparició del selector";
|
||||
"Apparition delay:" = "Retard en aparèixer:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Appearance" = "Aparença";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Application Name" = "Nom de l'aplicació";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Application Name - Window Title" = "Nom de l'aplicació: títol de la finestra";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Application Name - Window Title" = "Nom de l'aplicació - Títol de la finestra";
|
||||
"Applications" = "Aplicacions";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Are you sure you don’t want a response?" = "Estás segur que no vols rebre resposta?";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Arrow keys" = "Amb les tecles de fletxa";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ask whether to send crash reports" = "Preguntar cada vegada";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Auto" = "Auto";
|
||||
"Auto-install updates periodically" = "Comprovar i instal·lar periòdicament";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Blacklists" = "Excepcions";
|
||||
|
||||
/*Cancel button*/
|
||||
"Cancel" = "Cancel·lar";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Cancel and hide" = "Cancel·lar i amagar";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Capture windows in the background" = "Capturar finestres en segon pla";
|
||||
"Center" = "Centre";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates now…" = "Cercar actualitzacions…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates periodically" = "Comprovar periòdicament";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates…" = "Buscar actualitzacions…";
|
||||
|
||||
/*Menubar option*/
|
||||
"Check permissions…" = "Comprova permisos...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates…" = "Cercar actualitzacions…";
|
||||
"Check permissions…" = "Comprovar permisos…";
|
||||
"Close window" = "Tancar finestra";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Conflicting shortcut" = "Drecera ja en ús";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Controls" = "Controls";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Crash reports policy" = "Política d’informes de xoc";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Crash reports policy" = "Política d’informes d'error";
|
||||
"Crash reports policy:" = "Política d'informes d'errors:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Cursor follows focus" = "El cursor segueix l'element actiu";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize App Icons style…" = "Personalitzar les icones de les aplicacions Estil ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize Thumbnails style…" = "Personalitzeu les miniatures estil ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize Titles style…" = "Personalitzeu l'estil de títols ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize App Icons style…" = "Estil de les icones d'aplicació…";
|
||||
"Customize Thumbnails style…" = "Estil de les miniatures…";
|
||||
"Customize Titles style…" = "Estil dels títols…";
|
||||
"Dark" = "Fosc";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Debug tools" = "Eines de depuració";
|
||||
"Disabled" = "Desactivat";
|
||||
"Do nothing" = "No fer res";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Don’t check for updates periodically" = "No comprovar";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Don’t send" = "No enviar";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Don’t show windows from these apps" = "No mostrar les finestres de les següents aplicacions";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Done" = "Fer";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Done" = "Fet";
|
||||
"End" = "Final";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fade out animation" = "Esvair l'animació";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Exceptions" = "Excepcions";
|
||||
"Export settings…" = "Exportar la configuració…";
|
||||
"Export…" = "Exporta…";
|
||||
"Fade in animation of Preview" = "Animar l'aparició de la previsualització";
|
||||
"Fade out animation" = "En ocultar";
|
||||
"Fade out animation of Switcher" = "Animar la ocultació del selector";
|
||||
"Fade out animation:" = "Animació en desaparèixer:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Failed to import settings" = "No s'han pogut importar els ajustos";
|
||||
"Focus selected window" = "Activar finestra seleccionada";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen window" = "L'aplicació es veu a pantalla completa";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen windows:" = "Finestres a pantalla completa:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen/Defullscreen window" = "Passar a/Sortir de pantalla completa";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"General" = "General";
|
||||
|
||||
/*Menubar callout button*/
|
||||
"Gesture" = "Gestos";
|
||||
"Grant permission" = "Concedir permís";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hidden windows:" = "Finestres amagades:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide" = "Amagar";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide app badges" = "Amagar indicadors de notificacions";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide app badges" = "Amagar recompte de notificacions";
|
||||
"Hide app badges:" = "Amagar indicadors de notificacions:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide apps with no open window" = "Amagar aplicacions sense finestres obertes";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide apps with no open window:" = "Amagar aplicacions sense finestres obertes:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide colored circles on mouse hover" = "Amagar controls en passar el cursor";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide colored circles on mouse hover:" = "Amagar controls en passar el cursor:";
|
||||
|
||||
/*%@ is AltTab*/
|
||||
"Hide in %@" = "Amaga a %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide Space number labels" = "No mostrar número de l'espai";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide Space number labels" = "No mostrar els números dels espais";
|
||||
"Hide Space number labels:" = "No mostrar número de l'espai:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide status icons" = "Amagar icones d'estat";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide status icons:" = "Amagar icones d'estat:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide window thumbnails:" = "Amagar miniatures de les finestres:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide/Show app" = "Amagar/Mostrar aplicació";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"High" = "Alt";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Highest" = "Més alt";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hold" = "Mantenir";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"High" = "Alta";
|
||||
"Highest" = "Molt alta";
|
||||
"Hold" = "Mantén";
|
||||
"Horizontal Swipe with Four Fingers" = "Lliscament de quatre dits horitzontal";
|
||||
"Horizontal Swipe with Three Fingers" = "Lliscament de tres dits horitzontal";
|
||||
"I think the app could be improved with…" = "Crec que l'aplicació milloraria si…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ignore shortcuts when active" = "Ignorar dreceres quan està activa";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ignore shortcuts while a window from these apps is active" = "Ignorar dreceres si una finestra d'aquestes aplicacions està activa";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Import settings…" = "Importar la configuració…";
|
||||
"Import…" = "Importa…";
|
||||
"Keep open" = "Mantén obert";
|
||||
"Keep open and search" = "Mantén obert i cerca";
|
||||
"Language" = "Idioma";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Language Change" = "Canvi d'idioma";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Large" = "Gran";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Later" = "Després";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Latest releases" = "Últimes versions";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Leading" = "Líder";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Leading" = "Inici";
|
||||
"Left" = "Esquerra";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Light" = "Llum";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Light" = "Clar";
|
||||
"Lock search" = "Bloqueja la cerca";
|
||||
"Max height on screen:" = "Alçada màxima a la pantalla:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Max width on screen:" = "Amplada màxima a la pantalla:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Medium" = "Mitjà";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Menubar icon" = "Icona Menubar";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Medium" = "Mitjana";
|
||||
"Menubar icon" = "Icona de la barra de menú";
|
||||
"Menubar icon:" = "Icona de la barra de menús:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Middle" = "Centre";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Minimize/Deminimize window" = "Minimitzar/Restaurar finestra";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Minimized windows:" = "Finestres minimitzades:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Miscellaneous:" = "Miscel·lània:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Miscellaneous" = "Altres";
|
||||
"Miscellaneous:" = "Altres:";
|
||||
"Mouse hover" = "En passar el cursor";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Multiple screens" = "Múltiples pantalles";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Never" = "Mai";
|
||||
"Never send crash reports" = "No enviar mai";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"No Window" = "Cap finestra";
|
||||
"Non-active apps" = "Aplicacions inactives";
|
||||
"Non-visible Spaces" = "Espais no visibles";
|
||||
"Normal" = "Normal";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Not allowed" = "No permès";
|
||||
|
||||
/*Copyright (human-readable)*/
|
||||
"NSHumanReadableCopyright" = "Llicència GPL-3.0";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Only if the window is fullscreen" = "Només si la finestra està a pantalla completa";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Open Accessibility Preferences…" = "Obrir preferències d'accessibilitat…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Open Screen Recording Preferences…" = "Obrir preferències de gravació de pantalla…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Only on different screen" = "Només a altres pantalles";
|
||||
"Open Accessibility Preferences…" = "Obrir les opcions d'accessibilitat…";
|
||||
"Open Accessibility Settings…" = "Obrir les opcions d'accessibilitat…";
|
||||
"Open Screen Recording Preferences…" = "Obrir les opcions de gravació de pantalla…";
|
||||
"Open Screen Recording Settings…" = "Obrir les opcions de gravació de pantalla…";
|
||||
"Open System Settings to confirm, and continue" = "Obre la configuració del sistema per confirmar, i continua";
|
||||
"Open Trackpad Preferences…" = "Obrir la configuració del trackpad…";
|
||||
"Open Trackpad Settings…" = "Obrir les opcions del trackpad…";
|
||||
"Optional: email (if you want a reply)" = "Opcional: adreça de correu (si esperes resposta)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Order windows by" = "Ordeneu les finestres per";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Order windows by" = "Ordenar finestres per";
|
||||
"Please fill in the form" = "Si us plau completa el formulari";
|
||||
"Policies" = "Polítiques";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preferences…" = "Preferències…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preferences…" = "Configuració…";
|
||||
"Preview selected window" = "Previsualitzar finestra seleccionada";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview selected window:" = "Previsualitzar finestra seleccionada:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview the selected window." = "Vista prèvia de la finestra seleccionada.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview the selected window." = "Previsualitzar la finestra seleccionada.";
|
||||
"Quit" = "Sortir";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Quit %@" = "Sortir de l'%@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Quit app" = "Sortir de l'aplicació";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Created" = "Oberta més recentment";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Created First" = "Primer creat recentment";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Created First" = "Obertes més recentment";
|
||||
"Recently Focused" = "Activa més recentment";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Focused First" = "Primer centrat recentment";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Focused First" = "Actives més recentment";
|
||||
"Remember my choice" = "Recordar la meva selecció";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Reset preferences and restart" = "Restablir preferències i reiniciar";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Reset preferences and restart…" = "Restaurar preferències i iniciar…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Restart Now" = "Reiniciar ara";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Reset preferences and restart" = "Restablir configuració i reiniciar";
|
||||
"Reset preferences and restart…" = "Restablir configuració i reiniciar…";
|
||||
"Reset settings and restart" = "Restablir la configuració i reiniciar";
|
||||
"Reset settings and restart…" = "Restablir configuració i reiniciar…";
|
||||
"Restart Now" = "Reiniciar";
|
||||
"Rows of thumbnails:" = "Files de miniatures:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen including menu bar" = "Pantalla on es mostra la barra de menús";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen including mouse" = "Pantalla on es troba el cursor";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen Recording" = "Gravació de pantalla";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen showing AltTab" = "Pantalla on es mostra l'AltTab";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Search" = "Cerca";
|
||||
"Select next window" = "Seleccionar finestra següent";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select previous window" = "Seleccionar finestra anterior";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows on mouse hover" = "Seleccioneu Windows a Mouse Hover";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows using arrow keys" = "Seleccioneu Windows mitjançant les tecles de fletxa";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows using vim keys" = "Seleccioneu Windows mitjançant les tecles VIM";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows on mouse hover" = "Seleccionar finestra en passar el cursor";
|
||||
"Select windows using arrow keys" = "Seleccionar finestres amb les tecles de fletxa";
|
||||
"Select windows using vim keys" = "Seleccionar finestres amb les tecles Vim";
|
||||
"Send" = "Enviar";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send a crash report?" = "Enviar informe d'error?";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send anyway" = "Enviar de totes maneres";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send debug profile (CPU, memory, etc)" = "Enviar perfil de diagnòstic (CPU, memòria, etc.)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send feedback" = "Enviar comentaris";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send feedback…" = "Enviar comentaris…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Share improvement ideas, or report bugs" = "Proposa millores, o informa de problemes";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Settings imported" = "Ajustos importats";
|
||||
"Settings…" = "Configuració";
|
||||
"Share improvement ideas, or report bugs" = "Proposa millores o informa de problemes";
|
||||
"Shortcut" = "Drecera";
|
||||
"Shortcut 1" = "Drecera 1";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 2" = "Drecera 2";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 3" = "Drecera 3";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 4" = "Drecera 4";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 5" = "Drecera 5";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut already assigned to another action: %@" = "Drecera assignada a una altra acció: %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcuts When Active" = "Dreceres quan estan actives";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcuts when active…" = "Dreceres quan estan actius ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcuts When Active" = "Dreceres";
|
||||
"Shortcuts when active…" = "Dreceres…";
|
||||
"Show" = "Mostrar";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show & Hide" = "Mostra i amaga";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show an item in the switcher for each window, or for each application. Windows will be focused, whereas applications will be activated." = "Mostra un element al commutador per a cada finestra o per a cada aplicació.Windows estarà centrat, mentre que les aplicacions s’activaran.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show & Hide" = "Elements mostrats";
|
||||
"Show an item in the switcher for each window, or for each application. Windows will be focused, whereas applications will be activated." = "Mostrar element al selector per a cada finestra o per a cada aplicació. Les finestres estaran seleccionades, mentre que les aplicacions estaran actives.";
|
||||
"Show apps with no open window" = "Mostrar aplicacions sense finestres obertes";
|
||||
"Show at the end" = "Mostrar al final";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show fullscreen windows" = "Mostra finestres de pantalla completa";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show hidden windows" = "Mostra les finestres amagades";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show in switcher" = "Mostra a Switcher";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show minimized windows" = "Mostra finestres minimitzades";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show on" = "Mostrar on";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show fullscreen windows" = "Mostra finestres a pantalla completa";
|
||||
"Show hidden windows" = "Mostrar finestres ocultes";
|
||||
"Show in switcher" = "Mostrar al selector";
|
||||
"Show minimized windows" = "Mostrar finestres minimitzades";
|
||||
"Show on" = "Mostrar a";
|
||||
"Show on:" = "Mostrar a:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show standard tabs as windows" = "Mostrar pestanyes com a finestres";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show standard tabs as windows:" = "Mostrar pestanyes com a finestres:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show titles" = "Títols d’espectacles";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from applications" = "Mostra les finestres des de les aplicacions";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from screens" = "Mostra les finestres des de les pantalles";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from Spaces" = "Mostra les finestres des d’espais";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show titles" = "Mostrar títols";
|
||||
"Show windows from applications" = "Mostrar finestres d'aplicacions";
|
||||
"Show windows from screens" = "Mostrar finestres de pantalles";
|
||||
"Show windows from Spaces" = "Mostrar finestres d'espais";
|
||||
"Show windows from:" = "Mostrar finestres de:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Size" = "Tamany";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Size" = "Mida";
|
||||
"Skipped" = "Omès";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Small" = "Petit";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Some apps like Finder or Preview use standard tabs which act like independent windows. Some other apps like web browsers use custom tabs which act in unique ways and are not actual windows. AltTab can't list those separately." = "Algunes aplicacions com el cercador o la vista prèvia utilitzen pestanyes estàndard que actuen com a finestres independents.Algunes altres aplicacions com els navegadors web utilitzen pestanyes personalitzades que actuen de maneres úniques i no són finestres reals.AltTab no pot enumerar -los per separat.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Small" = "Petita";
|
||||
"Some apps like Finder or Preview use standard tabs which act like independent windows. Some other apps like web browsers use custom tabs which act in unique ways and are not actual windows. AltTab can't list those separately." = "Aplicacions com Finder o Previsualització tenen pestanyes que funcionen com finestres independents. D'altres com els navegadors web tenen pestanyes amb funcionament especial i no són finestres reals. L'AltTab no pot enumerar-les per separat.";
|
||||
"Source code repository" = "Repositori del codi font";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Space" = "Espai";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Space Order" = "Ordre d'espai";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Space Order" = "Ordre dels espais";
|
||||
"Start" = "Inici";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Start at login" = "Comença a la sessió";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Start at login" = "Obrir en iniciar sessió";
|
||||
"Start at login:" = "Obrir en iniciar la sessió:";
|
||||
|
||||
/*Menubar option*/
|
||||
"Support this project ❤️" = "Recolza aquest projecte ❤️";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Switch between 3 different styles. You can customize them." = "Canvieu entre 3 estils diferents.Podeu personalitzar -los.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Support this project" = "Recolzar aquest projecte";
|
||||
"Swipe with Four Fingers" = "Lliscament de quatre dits";
|
||||
"Swipe with Three Fingers" = "Lliscament de tres dits";
|
||||
"Switch between 3 different styles. You can customize them." = "Escull entre 3 estils diferents i personalitza'ls.";
|
||||
"System" = "Sistema";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"System Default" = "Per defecte";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"The application needs to restart to apply the language change." = "Cal reiniciar l'Alt-Tab per tal d'aplicar el canvi d'idioma.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"System Default" = "Sistema";
|
||||
"The ⌘⎋ (command+escape) shortcut may be used by macOS for GameOverlay.\n\nYour change would assign it to: %@.\n\nIf you want to continue, make sure that the GameOverlay shortcut is disabled.\nAlso note that macOS has reported bugs where the shortcut may still interfere while disabled." = "macOS sol reservar la drecera ⌘⎋ (Ordre+Esc) per la superposició de pantalla durant els jocs.\n\nEl teu canvi la reassignaria a: %@.\n\nSi vols continuar, assegura’t que la drecera nativa per la superposició per jocs està desactivada.\nmacOS ha informat de problemes en què aquesta drecera nativa pot continuar interferint tot i estar desactivada.";
|
||||
"The ⎋ (escape) key is reserved by some macOS shortcuts (e.g. ⌘⌥⎋ will show the Force Quit Applications window).\n\nIf you want to use ⎋, make sure that Hold modifiers are neither: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃" = "La tecla ⎋ (Esc) està reservada per algunes dreceres natives de macOS (ex. ⌘⌥⎋ obre la finestra per forçar la sortida d'aplicacions).\n\nSi vols fer servir ⎋, assegura't que el modificador \"Mantenir\" no sigui ⌘⌥, ⌘⌥⇧ ni ⌘⌥⇧⌃";
|
||||
"The ⎋ (escape) key is reserved by some macOS shortcuts (e.g. ⌘⌥⎋ will show the Force Quit Applications window).\n\nYour change would assign it to: %@.\n\nIf you want to use ⎋, make sure that Hold modifiers are neither: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃" = "La tecla ⎋ (Esc) està reservada per algunes dreceres natives de macOS (ex. ⌘⌥⎋ obre la finestra per forçar la sortida d'aplicacions).\n\nEl teu canvi les reassignaria a: %@.\n\nSi vols fer servir ⎋, assegura't que el modificador \"Mantenir\" no sigui ⌘⌥, ⌘⌥⇧ ni ⌘⌥⇧⌃";
|
||||
"The application needs to restart to apply the imported settings." = "L'aplicació ha de reiniciar-se per aplicar els ajustos importats.";
|
||||
"The application needs to restart to apply the language change." = "Cal reiniciar l'AltTab per tal d'aplicar el canvi d'idioma.";
|
||||
"Theme" = "Tema";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Theme:" = "Tema:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Then release:" = "En deixar anar:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"This permission is needed to focus windows after you release the shortcut" = "Aquest permís és necessari per activar una finestra amb una drecera";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"This permission is needed to show screenshots and titles of open windows" = "Aquest permís és necessari per mostrar les miniatures i els títols de les finestres";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"This permission is needed to show thumbnails and preview of open windows" = "Aquest permís és necessari per mostrar les miniatures i la previsualització de les finestres obertes";
|
||||
"Thumbnails" = "Miniatures";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Title" = "Títol";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Title truncation" = "Títol Truncation";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Title truncation" = "Escurçar el títol";
|
||||
"Titles" = "Títols";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Trigger shortcut" = "Drecera de disparador";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Trackpad haptic feedback" = "Resposta hàpitca";
|
||||
"Trigger" = "Activador";
|
||||
"Trigger shortcut" = "Drecera del selector";
|
||||
"Unassign existing shortcut and continue" = "Eliminar drecera ja existent i continuar";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Updates policy" = "Política d'actualització";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Updates policy" = "Política d'actualitzacions";
|
||||
"Updates policy:" = "Política d'actualitzacions:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Use the app without this permission. Thumbnails won’t show." = "Fer servir l'Alt-Tab sense aquest permís. No es mostraran les miniatures.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Use the app without this permission. Thumbnails won’t show." = "Fer servir l'AltTab sense aquest permís. No es mostraran les miniatures.";
|
||||
"Version" = "Versió";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vertical Swipe with Four Fingers" = "Lliscament de quatre dits vertical";
|
||||
"Vertical Swipe with Three Fingers" = "Lliscament de tres dits vertical";
|
||||
"View existing discussions" = "Veure discussions en curs";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vim keys" = "Tecles de Vim";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vim keys already assigned to other actions:\n%@" = "Tecles de Vim ja en ús:\n%@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Visibility" = "Visibilitat";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Visible Spaces" = "Espais visibles";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"When disabled, avoids the macOS purple screen-recording indicator, and avoids flickers when playing DRM video. Thumbnails will be less up-to-date." = "Quan està desactivat, evita l'indicador morat de gravació de pantalla de macOS i evita parpellejos en reproduir vídeo amb DRM. Les miniatures estaran menys actualitzades.";
|
||||
"When fullscreen" = "Quan es veu a pantalla completa";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"When no open window" = "Quan no hi ha finestres obertes";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"While open, press:" = "Mentre es mostren les miniatures:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window app icon size:" = "Mida de les icones:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is fullscreen" = "La finestra es veu a pantalla completa";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is minimized" = "La finestra està minimitzada";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is on every Space" = "La finestra és present a tots els espais";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is on Space %d" = "La finestra és present a l'espai %d";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window max width in row:" = "Amplada màxima de finestra dins d'una fila:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window min width in row:" = "Amplada mínima de finestra dins d'una fila:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window order:" = "Mostrar en ordre:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window Title" = "Títol de la finestra";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window title contains" = "El títol de la finestra conté";
|
||||
"Window title font size:" = "Mida dels títols:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window title truncation:" = "Escurçament dels títols:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Windows" = "Finestres";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"You can’t undo this action." = "Aquesta opció no es pot desfer.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"You didn’t write your email, thus can’t receive any response." = "No has indicat adreça de correu, no rebràs cap resposta.";
|
||||
"You may need to disable some conflicting system gestures" = "És possible que calgui deshabilitar gestos del sistema que entrin en conflicte";
|
||||
@@ -1,716 +1,293 @@
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"3-finger Horizontal Swipe" = "3 prsty vodorovně";
|
||||
"3-finger Vertical Swipe" = "3 prsty svisle";
|
||||
"4-finger Horizontal Swipe" = "4 prsty vodorovně";
|
||||
"4-finger Vertical Swipe" = "4 prsty svisle";
|
||||
"About" = "O AltTab";
|
||||
|
||||
/*Menubar option. %@ is AltTab*/
|
||||
"About %@" = "O %@u";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Accessibility" = "Zpřístupnění";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Acknowledgments" = "Zvláštní zmínky";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Acknowledgments" = "Poděkování";
|
||||
"Active app" = "Aktivní aplikace";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active screen" = "Aktivní obrazovka";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active Space" = "Aktivní Plocha";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active Space" = "Aktivní plocha";
|
||||
"Add a running app" = "Přidat spuštěnou aplikaci";
|
||||
"Add an app from disk" = "Přidat aplikaci z disku";
|
||||
"Additional controls" = "Další ovládací prvky";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Additional controls…" = "Další ovládací prvky ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Advanced" = "Pokročilý";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Additional controls…" = "Další ovládací prvky…";
|
||||
"Advanced" = "Pokročilé";
|
||||
"After keys are released" = "Po uvolnění kláves";
|
||||
"After release" = "Po vydání";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Align windows" = "Zarovnejte okna";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Align windows" = "Zarovnat okna";
|
||||
"Align windows:" = "Zarovnat okna:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All apps" = "Všechny aplikace";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All data from this form will be made public, as a ticket on github.com" = "Všechna data z tohoto formuláře budou zveřejněna jako tiket na github.com";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All data from this form will be made public, as a ticket on github.com" = "Všechna data z tohoto formuláře budou zveřejněna jako požadavek (ticket) na github.com";
|
||||
"All screens" = "Všechny obrazovky";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All Spaces" = "Všechny Plochy";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All Spaces" = "Všechny plochy";
|
||||
"Allowed" = "Povoleno";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Alphabetical" = "Alphabetical";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Alphabetical" = "Abecedně";
|
||||
"Alphabetical Order" = "Abecední pořadí";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Also select windows using:" = "Také okna vybírat pomocí:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab crashed last time you used it. Sending a crash report will help get the issue fixed" = "AltTab byl naposled neočekávaně ukončen. Odeslání hlášení o pádu pomůže chybu opravit";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab is currently set to show Applications. This setting is only available when AltTab is set to show Windows." = "Alttab je v současné době nastaven na zobrazování aplikací.Toto nastavení je k dispozici pouze tehdy, když je Alttab nastavena tak, aby zobrazovala Windows.";
|
||||
|
||||
/*Menubar callout*/
|
||||
"AltTab is running without Screen Recording permissions. Thumbnails won’t show." = "AltTab is running without Screen Recording permissions. Thumbnails won’t show.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab needs some permissions" = "AltTab potřebuje některá oprávnění";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab will show if the window is currently minimized or fullscreen with a status icon." = "AltTab zobrazí, zda je okno aktuálně minimalizováno nebo na celé obrazovce se stavovým ikonou.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Also select windows using:" = "Také vybírat okna pomocí:";
|
||||
"AltTab crashed last time you used it. Sending a crash report will help get the issue fixed" = "Při posledním použití aplikace AltTab došlo k pádu. Odesláním hlášení pomůžete problém vyřešit.";
|
||||
"AltTab is currently set to show Applications. This setting is only available when AltTab is set to show Windows." = "AltTab je aktuálně nastaveno na zobrazení aplikací. Toto nastavení je dostupné pouze tehdy, když je AltTab nastaveno na zobrazení oken.";
|
||||
"AltTab is running without Screen Recording permissions. Thumbnails won’t show." = "AltTab běží bez oprávnění pro záznam obrazovky. Náhledy se nebudou zobrazovat.";
|
||||
"AltTab needs some permissions" = "AltTab potřebuje určitá oprávnění";
|
||||
"AltTab will show if the window is currently minimized or fullscreen with a status icon." = "AltTab zobrazí stavovou ikonu, pokud je okno právě minimalizováno nebo zobrazeno na celé obrazovce.";
|
||||
"Always" = "Vždy";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Always send crash reports" = "Vždy odesílat hlášení o pádu";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"and press" = "a stiskněte";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"and press:" = "a stiskněte:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Animations" = "Animace";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Animations…" = "Animace ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App (BundleID starting with)" = "Aplikace (Bundleid počínaje)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Animations…" = "Animace…";
|
||||
"App (BundleID starting with)" = "Aplikace (BundleID začínající na)";
|
||||
"App Icons" = "Ikony aplikace";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App is hidden" = "Aplikace je skrytá";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App is running but has no open window" = "Aplikace běží, ale nemá otevřené okno";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Apparition delay" = "Zpoždění zjevení";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Apparition delay" = "Zpoždění zobrazení";
|
||||
"Apparition delay of Switcher" = "Zpoždění zobrazení přepínače";
|
||||
"Apparition delay:" = "Prodleva zobrazení:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Appearance" = "Vzhled";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Application Name" = "Název aplikace";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Application Name - Window Title" = "Název aplikace - název okna";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Applications" = "Aplikace";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Are you sure you don’t want a response?" = "Jste si jistí, že nechcete dostat odpověď?";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Arrow keys" = "Šipky";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ask whether to send crash reports" = "Zeptat se, zda odeslat hlášení o pádu";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Auto-install updates periodically" = "Automaticky instalovat aktualizace";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Blacklists" = "Blacklisty";
|
||||
|
||||
/*Cancel button*/
|
||||
"Are you sure you don’t want a response?" = "Opravdu nechcete odpověď?";
|
||||
"Arrow keys" = "Směrové šipky";
|
||||
"Ask whether to send crash reports" = "Zeptat se, zda odesílat hlášení o pádu";
|
||||
"Auto" = "Auto";
|
||||
"Auto-install updates periodically" = "Automaticky pravidelně instalovat aktualizace";
|
||||
"Blacklists" = "Seznamy vyloučených";
|
||||
"Cancel" = "Zrušit";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Cancel and hide" = "Zrušit a skrýt";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Center" = "Na střed";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates now…" = "Zkontrolovat aktualizace...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
/*Fuzzy*/
|
||||
"Check for updates now…" = "Zkontrolovat aktualizace…";
|
||||
"Check for updates periodically" = "Pravidelně kontrolovat aktualizace";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates…" = "Zkontrolovat aktualizace...";
|
||||
|
||||
/*Menubar option*/
|
||||
"Check permissions…" = "Zkontrolujte oprávnění ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates…" = "Zkontrolovat aktualizace…";
|
||||
"Check permissions…" = "Zkontrolujte oprávnění…";
|
||||
"Close window" = "Zavřít okno";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Conflicting shortcut" = "Konflikt zkratek";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Controls" = "Ovládání";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Crash reports policy" = "Zásady zpráv o havárii";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Crash reports policy:" = "Odesílání hlášení o pádu:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Cursor follows focus" = "Cursor follows focus";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Crash reports policy" = "Zásady odesílání hlášení o pádu aplikace";
|
||||
"Crash reports policy:" = "Zásady odesílání hlášení o pádu aplikace:";
|
||||
"Cursor follows focus" = "Kurzor následuje zaměření";
|
||||
"Customize App Icons style…" = "Přizpůsobte styl ikon aplikací…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize Thumbnails style…" = "Přizpůsobte si miniatury styl ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize Titles style…" = "Přizpůsobit styl titulů ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Dark" = "Tma";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize Thumbnails style…" = "Přizpůsobte si styl náhledů…";
|
||||
"Customize Titles style…" = "Přizpůsobit styl názvů…";
|
||||
"Dark" = "Tmavý";
|
||||
"Debug tools" = "Nástroje pro ladění";
|
||||
"Disabled" = "Deaktivováno";
|
||||
"Do nothing" = "Nedělat nic";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
/*Fuzzy*/
|
||||
"Don’t check for updates periodically" = "Zakázat kontrolu aktualizací";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Don’t check for updates periodically" = "Neprovádět pravidelnou kontrolu aktualizací";
|
||||
"Don’t send" = "Neodesílat";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Don’t show windows from these apps" = "Nezobrazovat okna těchto aplikací";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Done" = "Hotovo";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"End" = "Na konci";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fade out animation" = "Fade out animace";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fade out animation:" = "Animace mizení";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Exceptions" = "Výjimky";
|
||||
"Export settings…" = "Exportovat nastavení…";
|
||||
"Export…" = "Exportovat…";
|
||||
"Fade in animation of Preview" = "Animace pozvolného zobrazení náhledu";
|
||||
"Fade out animation" = "Animace pozvolného zmizení";
|
||||
"Fade out animation of Switcher" = "Animace pozvolného zmizení přepínače";
|
||||
"Fade out animation:" = "Animace pozvolného zmizení:";
|
||||
"Failed to import settings" = "Nepodařilo se importovat nastavení";
|
||||
"Focus selected window" = "Přepnout do vybraného okna";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen window" = "Fullscreen window";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen window" = "Okno na celou obrazovku";
|
||||
"Fullscreen windows:" = "Okna na celou obrazovku:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen/Defullscreen window" = "Okno Fullscreen/DefullScreen";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen/Defullscreen window" = "Přepnout okno do/z režimu celé obrazovky";
|
||||
"General" = "Obecné";
|
||||
|
||||
/*Menubar callout button*/
|
||||
"Grant permission" = "Grant permission";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Gesture" = "Gesto";
|
||||
"Grant permission" = "Udělit oprávnění";
|
||||
"Hidden windows:" = "Skrytá okna:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide" = "Skrýt";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide app badges" = "Skrýt čísla notifikací";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide app badges:" = "Skrýt čísla notifikací";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide app badges" = "Skrýt počty notifikací";
|
||||
"Hide app badges:" = "Skrýt počty notifikací:";
|
||||
"Hide apps with no open window" = "Skrýt aplikace bez aktivních oken";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide apps with no open window:" = "Skrýt aplikace bez aktivních oken";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide colored circles on mouse hover" = "Skrýt barevná kolečka při najetí myši";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide colored circles on mouse hover:" = "Skrýt barevná kolečka při najetí myši";
|
||||
|
||||
/*%@ is AltTab*/
|
||||
"Hide apps with no open window:" = "Skrýt aplikace bez aktivních oken:";
|
||||
"Hide colored circles on mouse hover" = "Skrýt ovládací prvky oken při přejetí myší";
|
||||
"Hide colored circles on mouse hover:" = "Skrýt ovládací prvky oken při přejetí myší:";
|
||||
"Hide in %@" = "Skrýt %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide Space number labels" = "Skrýt čísla Ploch";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide Space number labels:" = "Skrýt čísla Ploch";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide Space number labels" = "Skrýt čísla ploch";
|
||||
"Hide Space number labels:" = "Skrýt čísla ploch:";
|
||||
"Hide status icons" = "Skrýt ikony stavu";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide status icons:" = "Skrýt ikony stavu";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide status icons:" = "Skrýt ikony stavu:";
|
||||
"Hide window thumbnails:" = "Skrýt náhledy oken:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide/Show app" = "Skrýt/zobrazit aplikaci";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"High" = "Vysoký";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"High" = "Vysoká";
|
||||
"Highest" = "Nejvyšší";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hold" = "Podržet";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"I think the app could be improved with…" = "Myslím, že aplikace by mohla být vylepšena tak, že...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ignore shortcuts when active" = "Ignorujte zkratky, když jsou aktivní";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ignore shortcuts while a window from these apps is active" = "Ignorovat klávesové zkratky, když jsou aktivní okna následujících programů";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Language" = "Language";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Language Change" = "Language Change";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Large" = "Velký";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Later" = "Later";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
/*Fuzzy*/
|
||||
"Latest releases" = "Poslední vydání aktualizací";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Leading" = "Vedoucí";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Horizontal Swipe with Four Fingers" = "Vodorovné přejetí čtyřmi prsty";
|
||||
"Horizontal Swipe with Three Fingers" = "Vodorovné přejetí třemi prsty";
|
||||
"I think the app could be improved with…" = "Myslím, že aplikace by mohla být vylepšena tak, že…";
|
||||
"Ignore shortcuts when active" = "Ignorovat klávesové zkratky, když jsou aktivní";
|
||||
"Ignore shortcuts while a window from these apps is active" = "Ignorovat zkratky, pokud je aktivní okno některé z těchto aplikací";
|
||||
"Import settings…" = "Importovat nastavení…";
|
||||
"Import…" = "Importovat…";
|
||||
"Keep open" = "Ponechat otevřené";
|
||||
"Keep open and search" = "Ponechat otevřené a hledat";
|
||||
"Language" = "Jazyk";
|
||||
"Language Change" = "Změna jazyka";
|
||||
"Large" = "Velká";
|
||||
"Later" = "Později";
|
||||
"Latest releases" = "Poslední aktualizace";
|
||||
"Leading" = "Vlevo";
|
||||
"Left" = "Vlevo";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Light" = "Světlo";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Light" = "Světlý";
|
||||
"Lock search" = "Uzamknout vyhledávání";
|
||||
"Max height on screen:" = "Maximální výška na obrazovce";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Max width on screen:" = "Maximální šířka na obrazovce";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Medium" = "Střední";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Menubar icon" = "Ikona Menubar";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Menubar icon:" = "Ikona v menu";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Menubar icon" = "Ikona v panelu nabídek";
|
||||
"Menubar icon:" = "Ikona v panelu nabídek:";
|
||||
"Middle" = "Na středu";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Minimize/Deminimize window" = "Minimalizovat/odminimalizovat okno";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Minimized windows:" = "Minimalizovaná okna:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Miscellaneous" = "Různé";
|
||||
"Miscellaneous:" = "Různé:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Mouse hover" = "Najetí myši";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Multiple screens" = "Více obrazovek";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Never" = "Nikdy";
|
||||
"Never send crash reports" = "Nikdy neposílat hlášení o pádu";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Non-active apps" = "Neaktivní appky";
|
||||
"Non-visible Spaces" = "Neviditelné plochy";
|
||||
"Normal" = "Normální";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Not allowed" = "Nepovoleno";
|
||||
|
||||
/*Copyright (human-readable)*/
|
||||
"NSHumanReadableCopyright" = "Licence GPL-3.0";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Only if the window is fullscreen" = "Jen pokud je okno na celou obrazovku";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Open Accessibility Preferences…" = "Otevřít Volby zpřístupnění";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Open Screen Recording Preferences…" = "Otevřít Nastavení oprávnění nahrávání obrazovky";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
/*Fuzzy*/
|
||||
"Optional: email (if you want a reply)" = "E-mail (nepovinný, pokud chcete odpověď)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Order windows by" = "Objednat Windows od";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
/*Fuzzy*/
|
||||
"Policies" = "Aktualizace a hlášení o pádu";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preferences…" = "Nastavení...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview selected window" = "Náhled vybrané okno";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview selected window:" = "Preview selected window:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview the selected window." = "Náhled vybrané okno.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Only on different screen" = "Pouze na jiné obrazovce";
|
||||
"Open Accessibility Preferences…" = "Otevřít volby Zpřístupnění…";
|
||||
"Open Accessibility Settings…" = "Otevřít nastavení přístupnosti…";
|
||||
"Open Screen Recording Preferences…" = "Otevřít nastavení oprávnění nahrávání obrazovky…";
|
||||
"Open Screen Recording Settings…" = "Otevřít nastavení nahrávání obrazovky…";
|
||||
"Open System Settings to confirm, and continue" = "Otevřít Systémová Nastavení pro potvrzení, a pokračovat";
|
||||
"Open Trackpad Preferences…" = "Otevřít předvolby trackpadu…";
|
||||
"Open Trackpad Settings…" = "Otevřít nastavení trackpadu…";
|
||||
"Optional: email (if you want a reply)" = "Volitelně: e-mail (pokud chcete odpověď)";
|
||||
"Order windows by" = "Seřadit okna podle";
|
||||
"Please fill in the form" = "Prosím vyplňte formulář";
|
||||
"Policies" = "Zásady";
|
||||
"Preferences…" = "Nastavení…";
|
||||
"Preview selected window" = "Zobrazit náhled vybraného okna";
|
||||
"Preview selected window:" = "Náhled vybraného okna:";
|
||||
"Preview the selected window." = "Zobrazit náhled vybraného okna.";
|
||||
"Quit" = "Zavřít";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Quit %@" = "Ukončit %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Quit app" = "Zavřít aplikaci";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Created" = "Recently Created";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Created First" = "Nedávno vytvořen jako první";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Focused" = "Recently Focused";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Focused First" = "Nedávno se nejprve soustředil";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Remember my choice" = "Pamatovat si mou volbu";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Reset preferences and restart" = "Resetujte předvolby a restartujte";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Reset preferences and restart…" = "Resetujte předvolby a restartujte ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Restart Now" = "Restart Now";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Rows of thumbnails:" = "Počet řádků náhledů:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen including menu bar" = "Obrazovka s hlavní nabídkou";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen including mouse" = "Obrazovka s myší";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Created" = "Nedávno vytvořené";
|
||||
"Recently Created First" = "Nejnověji vytvořené jako první";
|
||||
"Recently Focused" = "Nedávno aktivní";
|
||||
"Recently Focused First" = "Naposledy aktivní jako první";
|
||||
"Remember my choice" = "Zapamatovat si mou volbu";
|
||||
"Reset preferences and restart" = "Obnovit předvolby a restartovat";
|
||||
"Reset preferences and restart…" = "Obnovit předvolby a restartovat…";
|
||||
"Reset settings and restart" = "Obnovit nastavení a restartovat";
|
||||
"Reset settings and restart…" = "Obnovit nastavení a restartovat…";
|
||||
"Restart Now" = "Restartovat nyní";
|
||||
"Rows of thumbnails:" = "Řádky náhledů:";
|
||||
"Screen including menu bar" = "Obrazovka včetně panelu nabídek";
|
||||
"Screen including mouse" = "Obrazovka včetně kurzoru myši";
|
||||
"Screen Recording" = "Nahrávání obrazovky";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen showing AltTab" = "Obrazovka zobrazující AltTab";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Search" = "Hledat";
|
||||
"Select next window" = "Vybrat následující okno";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select previous window" = "Vybrat předchozí okno";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows on mouse hover" = "Vyberte Windows na vznášení myši";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows using arrow keys" = "Vyberte Windows pomocí kláves se šipkami";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows using vim keys" = "Vyberte Windows pomocí kláves Vim";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows on mouse hover" = "Vybrat okna při najetí myší";
|
||||
"Select windows using arrow keys" = "Vybrat okna pomocí směrových šipek";
|
||||
"Select windows using vim keys" = "Vybrat okna pomocí kláves ve stylu Vim";
|
||||
"Send" = "Odeslat";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send a crash report?" = "Odeslat hlášení o pádu?";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send anyway" = "Poslat tak jako tak";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send anyway" = "Přesto odeslat";
|
||||
"Send debug profile (CPU, memory, etc)" = "Odeslat diagnostická data (CPU, paměť atd.)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send feedback" = "Odeslat zpětnou vazbu";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send feedback…" = "Odeslat zpětnou vazbu...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Share improvement ideas, or report bugs" = "Navrhnout vylepšení nebo nahlásit chybu";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send feedback…" = "Odeslat zpětnou vazbu…";
|
||||
"Settings imported" = "Nastavení importována";
|
||||
"Settings…" = "Nastavení";
|
||||
"Share improvement ideas, or report bugs" = "Navrhněte vylepšení nebo nahlaste chybu";
|
||||
"Shortcut" = "Zkratka";
|
||||
"Shortcut 1" = "Zkratka 1";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 2" = "Zkratka 2";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 3" = "Zkratka 3";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 4" = "Zkratka 4";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 5" = "Zkratka 5";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut already assigned to another action: %@" = "Zkratka je již používána jinou akcí: %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcuts When Active" = "Zkratky, když jsou aktivní";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcuts when active…" = "Zkratky, když jsou aktivní ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcuts when active…" = "Zkratky, když jsou aktivní…";
|
||||
"Show" = "Zobrazit";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show & Hide" = "Zobrazit a skrýt";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show an item in the switcher for each window, or for each application. Windows will be focused, whereas applications will be activated." = "Zobrazit položku v přepínači pro každé okno nebo pro každou aplikaci.Windows bude zaostřena, zatímco aplikace budou aktivovány.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show an item in the switcher for each window, or for each application. Windows will be focused, whereas applications will be activated." = "Zobrazit položku v přepínači pro každé okno, nebo pro každou aplikaci. Okna budou aktivována jako zaměřená, zatímco aplikace budou spouštěny.";
|
||||
"Show apps with no open window" = "Zobrazit appky bez otevřeného okna";
|
||||
"Show at the end" = "Zobrazit na konci";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show fullscreen windows" = "Zobrazit okna na celé obrazovce";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show hidden windows" = "Zobrazit skrytá okna";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show in switcher" = "Zobrazit v přepínači";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show minimized windows" = "Zobrazit minimalizovaná okna";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show on" = "Zobrazit na";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show on:" = "Zobrazit na:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show standard tabs as windows" = "Zobrazit standardní taby jako okna";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show standard tabs as windows:" = "Zobrazit standardní taby jako okna";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show titles" = "Zobrazit tituly";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from applications" = "Zobrazit Windows z aplikací";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show standard tabs as windows" = "Zobrazit standardní panely jako okna";
|
||||
"Show standard tabs as windows:" = "Zobrazit standardní panely jako okna:";
|
||||
"Show titles" = "Zobrazit názvy";
|
||||
"Show windows from applications" = "Zobrazit okna z aplikací";
|
||||
"Show windows from screens" = "Zobrazit okna z obrazovek";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from Spaces" = "Zobrazit okna z mezer";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from Spaces" = "Zobrazit okna z ploch";
|
||||
"Show windows from:" = "Zobrazit okna z:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Size" = "Velikost";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Skipped" = "Skipped";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Small" = "Malý";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Some apps like Finder or Preview use standard tabs which act like independent windows. Some other apps like web browsers use custom tabs which act in unique ways and are not actual windows. AltTab can't list those separately." = "Některé aplikace, jako je Finder nebo Preview, používají standardní karty, které fungují jako nezávislá Windows.Některé další aplikace, jako jsou webové prohlížeče, používají vlastní karty, které působí jedinečnými způsoby a nejsou skutečnými okny.Alttab je nemůže vyjmenovat samostatně.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Skipped" = "Přeskočeno";
|
||||
"Small" = "Malá";
|
||||
"Some apps like Finder or Preview use standard tabs which act like independent windows. Some other apps like web browsers use custom tabs which act in unique ways and are not actual windows. AltTab can't list those separately." = "Některé aplikace jako Finder nebo Náhled používají standardní panely, které fungují jako samostatná okna. Jiné aplikace, jako například webové prohlížeče, používají vlastní panely, které se chovají specifickým způsobem a nejsou skutečnými okny. AltTab je nemůže zobrazit samostatně.";
|
||||
"Source code repository" = "Repozitář zdrojového kódu";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Space" = "Space";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Space Order" = "Vesmírný pořadí";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Space" = "Plocha";
|
||||
"Space Order" = "Pořadí plochy";
|
||||
"Start" = "Na začátku";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Start at login" = "Začněte při přihlášení";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Start at login:" = "Spustit při přihlášení:";
|
||||
|
||||
/*Menubar option*/
|
||||
"Support this project ❤️" = "Podpořte tento projekt ❤";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Switch between 3 different styles. You can customize them." = "Přepněte mezi 3 různými styly.Můžete je přizpůsobit.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Start at login" = "Spustit po přihlášení";
|
||||
"Start at login:" = "Spustit po přihlášení:";
|
||||
"Support this project" = "Podpořte tento projekt";
|
||||
"Swipe with Four Fingers" = "Přejeďte čtyřmi prsty";
|
||||
"Swipe with Three Fingers" = "Přejeďte třemi prsty";
|
||||
"Switch between 3 different styles. You can customize them." = "Přepínejte mezi 3 různými styly. Můžete si je upravit.";
|
||||
"System" = "Systém";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"System Default" = "System Default";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"The application needs to restart to apply the language change." = "The application needs to restart to apply the language change.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Theme" = "Téma";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Theme:" = "Styl:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Then release:" = "Potom uvolněte:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"System Default" = "Výchozí nastavení systému";
|
||||
"The ⌘⎋ (command+escape) shortcut may be used by macOS for GameOverlay.\n\nYour change would assign it to: %@.\n\nIf you want to continue, make sure that the GameOverlay shortcut is disabled.\nAlso note that macOS has reported bugs where the shortcut may still interfere while disabled." = "Zkratka ⌘⎋ (command+escape) může být použita macOS pro GameOverlay.\n\nVaŠe změna jí nastaví na : %@.\n\nPro pokračování, se ujistěte, že zkratka GameOverlay je vypnuta.\nDbejte také, že macOS hlásí chyby kdy zkratka GameOverlay může stále ovlivňovat chování i při jejím vypnutí.";
|
||||
"The ⎋ (escape) key is reserved by some macOS shortcuts (e.g. ⌘⌥⎋ will show the Force Quit Applications window).\n\nIf you want to use ⎋, make sure that Hold modifiers are neither: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃" = "Klávesa ⎋ (escape) je rezervována některými macOS zkratkami (např. ⌘⌥⎋ zobrazí okno vynuceného ukončení aplikací).\n\nPokud chcete použít ⎋, ujistěte se, že modifikátory Přidržení nejsou: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃";
|
||||
"The ⎋ (escape) key is reserved by some macOS shortcuts (e.g. ⌘⌥⎋ will show the Force Quit Applications window).\n\nYour change would assign it to: %@.\n\nIf you want to use ⎋, make sure that Hold modifiers are neither: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃" = "Klávesa ⎋ (escape) je rezervována některými macOS zkratkami (např. ⌘⌥⎋ zobrazí okno vynuceného ukončení aplikací).\n\nVaŠe změna jí nastaví na : %@.\n\nPokud chcete použít ⎋, ujistěte se, že modifikátory Přidržení nejsou: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃";
|
||||
"The application needs to restart to apply the imported settings." = "Aplikace musí být restartována, aby se aplikovala importovaná nastavení.";
|
||||
"The application needs to restart to apply the language change." = "Aplikace se musí restartovat, aby se změna jazyka projevila.";
|
||||
"Theme" = "Motiv";
|
||||
"Theme:" = "Motiv:";
|
||||
"Then release:" = "Co se stane po uvolnění:";
|
||||
"This permission is needed to focus windows after you release the shortcut" = "Toto oprávnění je potřeba k přepnutí do okna po uvolnění klávesové zkratky";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"This permission is needed to show screenshots and titles of open windows" = "Toto oprávnění je potřeba k zobrazení náhledů a titulků otevřených oken";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Thumbnails" = "Miniatury";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Title" = "Title";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Title truncation" = "Zkrácení titulu";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Titles" = "Tituly";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"This permission is needed to show screenshots and titles of open windows" = "Toto oprávnění je potřeba k zobrazení náhledů a názvů otevřených oken";
|
||||
"This permission is needed to show thumbnails and preview of open windows" = "Toto oprávnění je potřeba k zobrazení náhledů a ukázek otevřených oken.";
|
||||
"Thumbnails" = "Náhledy";
|
||||
"Title" = "Název";
|
||||
"Title truncation" = "Zkrácení názvu";
|
||||
"Titles" = "Názvy";
|
||||
"Trackpad haptic feedback" = "Haptická zpětná vazba trackpadu";
|
||||
"Trigger" = "Spouštěč";
|
||||
"Trigger shortcut" = "Spouštěcí zkratka";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Unassign existing shortcut and continue" = "Odebrat existující zkratku a pokračovat";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Updates policy" = "Aktualizace zásad";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Updates policy:" = "Kontrola aktualizací:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Use the app without this permission. Thumbnails won’t show." = "Use the app without this permission. Thumbnails won’t show.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Updates policy" = "Zásady aktualizací";
|
||||
"Updates policy:" = "Zásady aktualizací:";
|
||||
"Use the app without this permission. Thumbnails won’t show." = "Používejte aplikaci bez tohoto oprávnění. Náhledy se nebudou zobrazovat.";
|
||||
"Version" = "Verze";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vertical Swipe with Four Fingers" = "Svislé přejetí čtyřmi prsty";
|
||||
"Vertical Swipe with Three Fingers" = "Svislé přejetí třemi prsty";
|
||||
"View existing discussions" = "Zobrazit existující diskuse";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vim keys" = "Vim keys";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vim keys" = "Vim klávesy";
|
||||
"Vim keys already assigned to other actions:\n%@" = "Klávesy Vim již přiřazené k jiným akcím: \\ n%@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Visibility" = "Viditelnost";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Visible Spaces" = "Viditelné Plochy";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"When fullscreen" = "Když je na plné obrazovce";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"When no open window" = "Když žádné otevřené okno";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"While open, press:" = "Při otevření stiskněte";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window app icon size:" = "Velikost ikony okna:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Visible Spaces" = "Viditelné plochy";
|
||||
"When fullscreen" = "Při režimu celé obrazovky";
|
||||
"When no open window" = "Při neotevřeném okně";
|
||||
"While open, press:" = "Při otevření stiskněte:";
|
||||
"Window app icon size:" = "Velikost ikony okna aplikace:";
|
||||
"Window is fullscreen" = "Okno je na celé obrazovce";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is minimized" = "Okno je minimalizováno";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is on every Space" = "Okno je na každém prostoru";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is on Space %d" = "Okno je na vesmíru %d";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is on every Space" = "Toto okno je zobrazeno na všech plochách";
|
||||
"Window is on Space %d" = "Okno je na ploše %d";
|
||||
"Window max width in row:" = "Maximální šířka okna v řádku:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window min width in row:" = "Minimální šířka okna v řádku:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window order:" = "Window order:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window order:" = "Pořadí oken:";
|
||||
"Window Title" = "Název okna";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window title font size:" = "Velikost nadpisu okna:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window title truncation:" = "Zkrácení titulku okna";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window title contains" = "Název okna obsahuje";
|
||||
"Window title font size:" = "Velikost písma v titulku okna:";
|
||||
"Window title truncation:" = "Zkrácení názvu okna:";
|
||||
"Windows" = "Okna";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"You can’t undo this action." = "Tuto akci nemůžete zrušit.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"You didn’t write your email, thus can’t receive any response." = "Nenapsali jste váš e-mail, takže nemůžete dostat odpověď.";
|
||||
"You can’t undo this action." = "Tuto akci nelze vrátit zpět.";
|
||||
"You didn’t write your email, thus can’t receive any response." = "Nezadali jste svůj e-mail, proto nemůžete obdržet žádnou odpověď.";
|
||||
"You may need to disable some conflicting system gestures" = "Možná bude potřeba zakázat některá konfliktní systémová gesta";
|
||||
@@ -1,711 +1,293 @@
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"3-finger Horizontal Swipe" = "3-fingers vandret swipe";
|
||||
"3-finger Vertical Swipe" = "3-fingers lodret swipe";
|
||||
"4-finger Horizontal Swipe" = "4-fingers vandret swipe";
|
||||
"4-finger Vertical Swipe" = "4-fingers lodret swipe";
|
||||
"About" = "Om";
|
||||
|
||||
/*Menubar option. %@ is AltTab*/
|
||||
"About %@" = "Om %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Accessibility" = "Tilgængelighed";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Acknowledgments" = "Anerkendelser";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active app" = "Aktiv app";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active screen" = "Aktiv skærm";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Active Space" = "Aktivt Område";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Add a running app" = "Tilføj en kørende app";
|
||||
"Add an app from disk" = "Tilføj en app fra disk";
|
||||
"Additional controls" = "Yderligere kontroller";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Additional controls…" = "Yderligere kontrol ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Advanced" = "Fremskreden";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"After keys are released" = "Efter taster slippes";
|
||||
"After release" = "Efter frigivelse";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Align windows" = "Juster vinduer";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Align windows:" = "Tilpas vinduer:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All apps" = "Alle apps";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All data from this form will be made public, as a ticket on github.com" = "Alt data fra denne formular vil blive gjort offentlig som en ticket på github.com";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All screens" = "Alle skræme";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"All Spaces" = "Alle Områder";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Allowed" = "Tilladt";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Alphabetical" = "Alfabetisk";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Alphabetical Order" = "Alfabetisk rækkefølge";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Also select windows using:" = "Også vælg vinduer ved hjælp af:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab crashed last time you used it. Sending a crash report will help get the issue fixed" = "AltTab sluttede uventet sidste gang du brugte den. Ved at sende en uventet afslutningsrapport, kan det hjælpe med at få problemet løst";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab is currently set to show Applications. This setting is only available when AltTab is set to show Windows." = "Alttab er i øjeblikket klar til at vise applikationer.Denne indstilling er kun tilgængelig, når Alttab er indstillet til at vise Windows.";
|
||||
|
||||
/*Menubar callout*/
|
||||
"AltTab is running without Screen Recording permissions. Thumbnails won’t show." = "AltTab is running without Screen Recording permissions. Thumbnails won’t show.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab is running without Screen Recording permissions. Thumbnails won’t show." = "AltTab kører uden tilladelse til skærmoptagelse. Miniaturer vises ikke.";
|
||||
"AltTab needs some permissions" = "AltTab har brug for nogle tilladelser";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"AltTab will show if the window is currently minimized or fullscreen with a status icon." = "Alttab viser, om vinduet i øjeblikket er minimeret eller fuldskærm med et statusikon.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Always" = "Altid";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Always send crash reports" = "Altid send rapporter når programmet slutter uventet";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"and press" = "og tryk";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"and press:" = "og tryk:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Animations" = "Animationer";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Animations…" = "Animationer ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App (BundleID starting with)" = "App (BundleID starter med)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App Icons" = "Appikoner";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App is hidden" = "App er skjult";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"App is running but has no open window" = "App kører men har ingen åbne vinduer";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Apparition delay" = "Tilsyneladende forsinkelse";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Apparition delay of Switcher" = "Forsinkelse før visning af skifter";
|
||||
"Apparition delay:" = "Forsinkelse af forsvinding:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Appearance" = "Udseende";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Application Name" = "Anvendelsesnavn";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Application Name - Window Title" = "Applikationsnavn - Vinduetitel";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Applications" = "Applikationer";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Are you sure you don’t want a response?" = "Er du sikker på at du ikke vil have et svar?";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Arrow keys" = "Piletaster";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ask whether to send crash reports" = "Spørg om der skal sendes uventet afslutningsrapporter";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Auto" = "Auto";
|
||||
"Auto-install updates periodically" = "Periodisk installer opdateringer automatisk";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Blacklists" = "Sortliste";
|
||||
|
||||
/*Cancel button*/
|
||||
"Cancel" = "Annuller";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Cancel and hide" = "Annuller og skjul";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Center" = "Centrer";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates now…" = "Søg efter opdateringer nu...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates periodically" = "Søg efter opdateringer periodisk";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Check for updates…" = "Søg efter opdateringer";
|
||||
|
||||
/*Menubar option*/
|
||||
"Check permissions…" = "Tjek tilladelser...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Close window" = "Luk vindue";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Conflicting shortcut" = "Konfliktende genveje";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Controls" = "Kontroller";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Crash reports policy" = "Crash rapporterer politik";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Crash reports policy:" = "Politik om uventede afslutningsrapporter:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Cursor follows focus" = "Musen følger fokus";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize App Icons style…" = "Tilpas appikoner stil ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize Thumbnails style…" = "Tilpas miniaturebilledstil ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Customize Titles style…" = "Tilpas titler stil ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Dark" = "Mørk";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Debug tools" = "Fejlfindingsværktøjer";
|
||||
"Disabled" = "Deaktiveret";
|
||||
"Do nothing" = "Gør ingenting";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Don’t check for updates periodically" = "Søg ikke periodisk efter opdateringer";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Don’t send" = "Send ikke";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Don’t show windows from these apps" = "Vis ikke vinduer fra disse apps";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Done" = "Færdig";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"End" = "Slut";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Exceptions" = "Undtagelser";
|
||||
"Export settings…" = "Eksporter indstillinger…";
|
||||
"Export…" = "Eksporter…";
|
||||
"Fade in animation of Preview" = "Indtoningsanimation for forhåndsvisning";
|
||||
"Fade out animation" = "Fade Out Animation";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fade out animation of Switcher" = "Udtoningsanimation for skifter";
|
||||
"Fade out animation:" = "Udfasnings-animation:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Failed to import settings" = "Kunne ikke importere indstillinger";
|
||||
"Focus selected window" = "Fokuser valgte vindue";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen window" = "Fuldkærm vindue";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen windows:" = "Fuldskærm vinduer:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Fullscreen/Defullscreen window" = "Fuldskærm/affuldskærm vindue";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"General" = "Generelt";
|
||||
|
||||
/*Menubar callout button*/
|
||||
"Grant permission" = "Grant permission";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Gesture" = "Bevægelse";
|
||||
"Grant permission" = "Tillad";
|
||||
"Hidden windows:" = "Skjulte vinduer:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide" = "Skjul";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide app badges" = "Skjul app -badges";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide app badges:" = "Skjul appbadges:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide apps with no open window" = "Skjul apps uden åbent vindue";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide apps with no open window:" = "Skjul apps med ingen åbne vinduer:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide colored circles on mouse hover" = "Skjul farvede cirkler på musens svæver";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide colored circles on mouse hover:" = "Skjul farvede cirkler når musen holdes over:";
|
||||
|
||||
/*%@ is AltTab*/
|
||||
"Hide in %@" = "Skjul i %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide Space number labels" = "Skjul pladsnummeretiketter";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide Space number labels:" = "Skjul Område etiket:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide status icons" = "Skjul statusikoner";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide status icons:" = "Skjul statusikoner:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide window thumbnails:" = "Skjul vindue miniaturer";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hide/Show app" = "Skjul/vis app";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"High" = "Høj";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Highest" = "Højest";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Hold" = "Hold";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Horizontal Swipe with Four Fingers" = "Vandret strygning med fire fingre";
|
||||
"Horizontal Swipe with Three Fingers" = "Vandret strygning med tre fingre";
|
||||
"I think the app could be improved with…" = "Jeg synes appen kunne forbedres med...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ignore shortcuts when active" = "Ignorer genveje når aktiv";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Ignore shortcuts while a window from these apps is active" = "Ignorer genveje imens et vindue fra disse apps er aktiv";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Language" = "Language";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Language Change" = "Language Change";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Import settings…" = "Importer indstillinger…";
|
||||
"Import…" = "Importer…";
|
||||
"Keep open" = "Hold åben";
|
||||
"Keep open and search" = "Hold åben og søg";
|
||||
"Language" = "Sprog";
|
||||
"Language Change" = "Skift sprog";
|
||||
"Large" = "Stor";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Later" = "Later";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Later" = "Senere";
|
||||
"Latest releases" = "Seneste udgivelser";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Leading" = "Førende";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Left" = "Venstre";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Light" = "Lys";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Lock search" = "Lås søgning";
|
||||
"Max height on screen:" = "Maks. højde på skærm:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Max width on screen:" = "Maks. bredde på skærm:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Medium" = "Medium";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Menubar icon" = "Menubar Icon";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Menubar icon:" = "Menulinjeikon:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Middle" = "Midten";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Minimize/Deminimize window" = "Minimer/vis vindue";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Minimized windows:" = "Minimeret vinduer:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Miscellaneous" = "Diverse";
|
||||
"Miscellaneous:" = "Diverse:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Mouse hover" = "Hold musen over";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Multiple screens" = "Flere skærme";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Never" = "Aldrig";
|
||||
"Never send crash reports" = "Send aldrig rapporter når programmet slutter uventet";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Non-active apps" = "Ikke-aktive apps";
|
||||
"Non-visible Spaces" = "Ikke-synlige Spaces";
|
||||
"Normal" = "Normal";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Not allowed" = "Ikke tilladt";
|
||||
|
||||
/*Copyright (human-readable)*/
|
||||
"NSHumanReadableCopyright" = "GPL-3.0 licens";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Only if the window is fullscreen" = "Kun hvis vinduet er fuldskærm";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Only on different screen" = "Kun på anden skærm";
|
||||
"Open Accessibility Preferences…" = "Åbn Tilgængelighedsindstillinger";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Open Accessibility Settings…" = "Åbn tilgængelighedsindstillinger…";
|
||||
"Open Screen Recording Preferences…" = "Åbn Skærmoptagelseindstillinger";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Open Screen Recording Settings…" = "Åbn skærmoptagelsesindstillinger…";
|
||||
"Open System Settings to confirm, and continue" = "Åbn systemindstillinger for at bekræfte og fortsæt";
|
||||
"Open Trackpad Preferences…" = "Åbn indstillinger for pegefelt…";
|
||||
"Open Trackpad Settings…" = "Åbn pegefeltindstillinger…";
|
||||
"Optional: email (if you want a reply)" = "Valgfri: e-mail (hvis du vil have svar)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Order windows by" = "Bestil vinduer efter";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Please fill in the form" = "Udfyld venligst formularen";
|
||||
"Policies" = "Politikker";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preferences…" = "Indstillinger…";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview selected window" = "Eksempel på valgt vindue";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview selected window:" = "Forrige valgte vindue:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Preview the selected window." = "Forhåndsvis det valgte vindue.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Quit" = "Afslut";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Quit %@" = "Afslut %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Quit app" = "Afslut app";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Created" = "Fornyelig lavet";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Created First" = "For nylig oprettet først";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Focused" = "Fornyelige forkuseret";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Recently Focused First" = "For nylig fokuseret først";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Remember my choice" = "Husk mit valg";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Reset preferences and restart" = "Nulstil indstillinger og genstart";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Reset preferences and restart…" = "Nulstil indstillinger og genstart...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Restart Now" = "Restart Now";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Reset settings and restart" = "Nulstil indstillinger og genstart";
|
||||
"Reset settings and restart…" = "Nulstil indstillinger og genstart…";
|
||||
"Restart Now" = "Genstart nu";
|
||||
"Rows of thumbnails:" = "Rækker af miniaturer:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen including menu bar" = "Skærm inklusiv menu linje";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen including mouse" = "Skærm inklusiv mus";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen Recording" = "Skærmoptagelse";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Screen showing AltTab" = "Skærm visende AltTab";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Search" = "Søg";
|
||||
"Select next window" = "Vælg næste vindue";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select previous window" = "Vælg forrige vindue";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows on mouse hover" = "Vælg Windows på musens svæver";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows using arrow keys" = "Vælg Windows ved hjælp af piletaster";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Select windows using vim keys" = "Vælg Windows ved hjælp af VIM -taster";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send" = "Send";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send a crash report?" = "Send uventet afslutningsrapport?";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send anyway" = "Send alligevel";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send debug profile (CPU, memory, etc)" = "Send debug profil (CPU, hukommelse, osv.)";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send feedback" = "Send evaluering";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Send feedback…" = "Send evaluering...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Settings imported" = "Indstillinger importeret";
|
||||
"Settings…" = "Indstillinger";
|
||||
"Share improvement ideas, or report bugs" = "Del forbedrelsesidéer eller rappport fejl";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut" = "Genvej";
|
||||
"Shortcut 1" = "Genvej 1";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 2" = "Genvej 2";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 3" = "Genvej 3";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 4" = "Genvej 4";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut 5" = "Genvej 5";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcut already assigned to another action: %@" = "Genvej er allerede tildelt til anden funktion: %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcuts When Active" = "Genveje, når de er aktive";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Shortcuts when active…" = "Genveje, når de er aktive ...";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show" = "Vis";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show & Hide" = "Vis og skjul";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show an item in the switcher for each window, or for each application. Windows will be focused, whereas applications will be activated." = "Vis en vare i switcher for hvert vindue eller for hver applikation.Windows vil være fokuseret, mens applikationer vil blive aktiveret.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show apps with no open window" = "Vis apps uden åbent vindue";
|
||||
"Show at the end" = "Vis ved slutningen";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show fullscreen windows" = "Vis fuldskærmsvinduer";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show hidden windows" = "Vis skjulte vinduer";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show in switcher" = "Vis i switcher";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show minimized windows" = "Vis minimerede vinduer";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show on" = "Vis på";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show on:" = "Vis på:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show standard tabs as windows" = "Vis standardfaner som Windows";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show standard tabs as windows:" = "Vis standard faner som vinduer:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show titles" = "Vis titler";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from applications" = "Vis vinduer fra applikationer";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from screens" = "Vis vinduer fra skærme";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from Spaces" = "Vis vinduer fra rum";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Show windows from:" = "Vis vinduer fra:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Size" = "Størrelse";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Skipped" = "Skipped";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Skipped" = "Springet over";
|
||||
"Small" = "Lille";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Some apps like Finder or Preview use standard tabs which act like independent windows. Some other apps like web browsers use custom tabs which act in unique ways and are not actual windows. AltTab can't list those separately." = "Nogle apps som Finder eller Preview bruger standardfaner, der fungerer som uafhængige vinduer.Nogle andre apps som webbrowsere bruger brugerdefinerede faner, der virker på unikke måder og ikke er faktiske vinduer.Alttab kan ikke liste dem separat.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Source code repository" = "Kildekode-lager";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Space" = "Område";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Space Order" = "Rumordre";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Start" = "Start";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Start at login" = "Start ved login";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Start at login:" = "Start ved login:";
|
||||
|
||||
/*Menubar option*/
|
||||
"Support this project ❤️" = "Støt dette projekt ❤️";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Support this project" = "Støt dette projekt";
|
||||
"Swipe with Four Fingers" = "Stryg med fire fingre";
|
||||
"Swipe with Three Fingers" = "Stryg med tre fingre";
|
||||
"Switch between 3 different styles. You can customize them." = "Skift mellem 3 forskellige stilarter.Du kan tilpasse dem.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"System" = "System";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"System Default" = "System Default";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"The application needs to restart to apply the language change." = "The application needs to restart to apply the language change.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"System Default" = "Systemstandard";
|
||||
"The ⌘⎋ (command+escape) shortcut may be used by macOS for GameOverlay.\n\nYour change would assign it to: %@.\n\nIf you want to continue, make sure that the GameOverlay shortcut is disabled.\nAlso note that macOS has reported bugs where the shortcut may still interfere while disabled." = "Genvejen ⌘⎋ (kommando+escape) kan bruges af macOS til GameOverlay.\n\nDin ændring vil tildele den til: %@.\n\nHvis du vil fortsætte, skal du sørge for, at GameOverlay-genvejen er deaktiveret.\nBemærk også, at macOS har rapporteret fejl, hvor genvejen stadig kan forstyrre, selvom den er deaktiveret.";
|
||||
"The ⎋ (escape) key is reserved by some macOS shortcuts (e.g. ⌘⌥⎋ will show the Force Quit Applications window).\n\nIf you want to use ⎋, make sure that Hold modifiers are neither: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃" = "⎋ (escape)-tasten er reserveret af nogle macOS-genveje (f.eks. vil ⌘⌥⎋ vise vinduet Tving apps til at afslutte).\n\nHvis du vil bruge ⎋, skal du sørge for, at Hold-modifikatorerne hverken er: ⌘⌥, ⌘⌥⇧ eller ⌘⌥⇧⌃";
|
||||
"The ⎋ (escape) key is reserved by some macOS shortcuts (e.g. ⌘⌥⎋ will show the Force Quit Applications window).\n\nYour change would assign it to: %@.\n\nIf you want to use ⎋, make sure that Hold modifiers are neither: ⌘⌥, ⌘⌥⇧, or ⌘⌥⇧⌃" = "⎋ (escape)-tasten er reserveret af nogle macOS-genveje (f.eks. vil ⌘⌥⎋ vise vinduet Tving apps til at afslutte).\n\nDin ændring vil tildele den til: %@.\n\nHvis du vil bruge ⎋, skal du sørge for, at Hold-modifikatorerne hverken er: ⌘⌥, ⌘⌥⇧ eller ⌘⌥⇧⌃";
|
||||
"The application needs to restart to apply the imported settings." = "Applikationen skal genstartes for at anvende de importerede indstillinger.";
|
||||
"The application needs to restart to apply the language change." = "Programmet skal genstartes for at anvende sprogændringen.";
|
||||
"Theme" = "Tema";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Theme:" = "Tema:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Then release:" = "Og så slip:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"This permission is needed to focus windows after you release the shortcut" = "Denne tilladelse er nødvendig for at kunne fokuser vindue efter du slipper genvejen";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"This permission is needed to show screenshots and titles of open windows" = "Denne tilladelse er nødvendig for at kunne vise skærmbilleder og titlen af åbne vinduer";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"This permission is needed to show thumbnails and preview of open windows" = "Denne tilladelse er nødvendig for at vise miniaturer og forhåndsvisning af åbne vinduer";
|
||||
"Thumbnails" = "Miniaturebilleder";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Title" = "Title";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Title" = "Titel";
|
||||
"Title truncation" = "Titel afkortning";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Titles" = "Titler";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Trackpad haptic feedback" = "Pegefelt haptisk feedback";
|
||||
"Trigger" = "Udløser";
|
||||
"Trigger shortcut" = "Trigger genvej";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Unassign existing shortcut and continue" = "Fjern eksisterende genveje og fortsæt";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Updates policy" = "Opdaterer politik";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Updates policy:" = "Opdaterings-politik:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Use the app without this permission. Thumbnails won’t show." = "Use the app without this permission. Thumbnails won’t show.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Use the app without this permission. Thumbnails won’t show." = "Brug appen uden denne tilladelse. Miniaturer vises ikke.";
|
||||
"Version" = "Version";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vertical Swipe with Four Fingers" = "Lodret strygning med fire fingre";
|
||||
"Vertical Swipe with Three Fingers" = "Lodret strygning med tre fingre";
|
||||
"View existing discussions" = "Vis eksisterende diskussioner";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vim keys" = "Vim taster";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Vim keys already assigned to other actions:\n%@" = "Vim taster allerede tildelt til andre funktioner: %@";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Visibility" = "Sigtbarhed";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Visible Spaces" = "Synlige Områder";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"When fullscreen" = "Når fuldskærm";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"When no open window" = "Når ingen åbne vinduer";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"While open, press:" = "Imens åben, tryk:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window app icon size:" = "Vindue app ikonstørrelse:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is fullscreen" = "Vinduet er fuldskærm";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is minimized" = "Vindue er minimeret";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is on every Space" = "Vinduet er i alle Områder";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window is on Space %d" = "Vindue er i Område %d";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window max width in row:" = "Vindue maks. bredde i række:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window min width in row:" = "Vindue min. bredde i række:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window order:" = "Vindue rækkefølge:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window Title" = "Vinduetitel";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window title contains" = "Vinduetitel indeholder";
|
||||
"Window title font size:" = "Vindue titel skriftstørrelse:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Window title truncation:" = "Afkortning af vinduestitel:";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"Windows" = "Windows";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"You can’t undo this action." = "Du kan ikke fortryde denne handling.";
|
||||
|
||||
/*No comment provided by engineer.*/
|
||||
"You didn’t write your email, thus can’t receive any response." = "Du skrev ikke din e-mail og derfor kan du ikke få svar.";
|
||||
"You may need to disable some conflicting system gestures" = "Du skal muligvis deaktivere nogle systembevægelser, der er i konflikt";
|
||||