Compare commits

..
479 Commits
Author SHA1 Message Date
lwouis 6c35e10a66 ci: generate sitemap 2026-04-04 16:22:47 +02:00
lwouis 18b523e458 ci: migrate from netlify to cloudflare 2026-04-04 15:36:46 +02:00
lwouis 41d608efda fix: show more apps when adding an exception (closes #5463) 2026-03-29 18:22:52 +02:00
lwouis f1c59a2748 refactor: small improvements to concurrency 2026-03-28 17:21:10 +01:00
lwouis 0e897b0678 refactor: program main-menu instead of .xib
avoids SDK logs
not sure if easier to maintain though
2026-03-28 12:07:17 +01:00
lwouis 7a2a5482ae feat: improved detection of windows and apps
* find more windows and apps (e.g. apps that take 30s to launch)
* keep windows and apps more up-to-date
* more efficient, uses fewer resources
2026-03-28 11:57:48 +01:00
lwouis 170bd673e0 feat: better recognizes tabbed windows 2026-03-28 11:57:48 +01:00
lwouis ff1e92303a fix: better handle bugged apps with hidden windows (closes #5296) 2026-03-28 11:57:48 +01:00
lwouis edbbf2082c perf: improve badges retrieval 2026-03-28 11:57:48 +01:00
lwouis 1ab419dd09 fix: improve reliability after sleep/wake 2026-03-28 11:57:48 +01:00
lwouis 6bd5f26e1c refactor: improve logs for application discrimination 2026-03-24 11:35:05 +01:00
lwouis ecafbe7212 feat: update localizations 2026-03-22 18:51:57 +01:00
semantic-release-bot 173950af08 chore(release): 10.9.0 [skip ci]
# [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))
2026-03-22 16:29:10 +00:00
lwouis 5ed6c1d9ce feat: new setting to not capture windows in background (closes #5337)
Also closes #5371
2026-03-22 17:19:19 +01:00
lwouis 630527e0b7 feat: update fr/en localizations 2026-03-22 17:19:19 +01:00
lwouis a1f8b18888 fix: panel may re-center when searching 2026-03-22 17:19:18 +01:00
lwouis 9f3e20a826 feat: show better ui when there are no window (closes #283) 2026-03-22 17:19:18 +01:00
lwouis dbc77fe214 ci: release notes should interpret markdown (closes #597) 2026-03-22 17:19:17 +01:00
semantic-release-bot be2de1ab83 chore(release): 10.8.0 [skip ci]
# [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))
2026-03-20 20:57:34 +00:00
lwouis 56c1927584 fix: allow quitting multiple apps in a row (follow-up on #5421) 2026-03-20 21:52:24 +01:00
lwouis 7dd11cff01 feat: stabilize ui during search (closes #5431) 2026-03-20 21:52:24 +01:00
lwouis 15ede93868 feat: allow next-window shortcut without modifiers (closes #5433) 2026-03-20 21:52:23 +01:00
lwouis 4502e8bd15 refactor: improve logging of window discriminator logic 2026-03-20 21:52:23 +01:00
lwouis 6105bb30ad fix: switcher might show empty on rare occasions (closes #5432) 2026-03-20 21:52:22 +01:00
lwouis 545d81d872 fix: window order in the switcher might be incorrect (#5346) 2026-03-20 21:52:22 +01:00
lwouis 3b1c7c76a9 fix: avoid repeating shortcut that was released (closes #5429) 2026-03-19 21:11:06 +01:00
lwouis 8962ad1a54 fix: apps with no open window might not show up (closes #5424) 2026-03-16 19:44:17 +01:00
semantic-release-bot 39b818de11 chore(release): 10.7.0 [skip ci]
# [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))
2026-03-15 14:29:13 +00:00
lwouis b008d63928 fix: prevent sheets from messing up thumbnails order (#5346) 2026-03-15 15:19:38 +01:00
lwouis de9aaa1fc1 fix: allow quitting multiple apps in a row (closes #5421) 2026-03-15 15:15:07 +01:00
lwouis 739649a749 fix: avoid memory usage growth over time (closes #5138) 2026-03-14 18:44:57 +01:00
lwouis 2adf741355 fix: edit shortcuts in settings window search bar on first launch 2026-03-13 10:46:37 +01:00
lwouis ec763814a9 refactor: reduce ram usage by early returning when not visible 2026-03-13 10:27:00 +01:00
lwouis b21168a033 feat: reduce memory usage by storing fewer app icons 2026-03-13 10:22:04 +01:00
lwouis cf8a41528d refactor: throttling was not actually working 2026-03-12 17:15:24 +01:00
lwouis 57c95a6e35 fix: thumbnails might be shown too small 2026-03-12 11:24:47 +01:00
semantic-release-bot 17615d00a9 chore(release): 10.6.0 [skip ci]
# [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))
2026-03-10 20:49:15 +00:00
lwouis 35ddbe72ed fix: allow edit shortcuts in the search bar (closes #5308) 2026-03-10 21:33:46 +01:00
lwouis fd4e3734e8 fix: key repeat in search mode 2026-03-10 21:33:46 +01:00
lwouis cacb7891e7 fix: trackpad scrolling shouldn't also scroll on background apps 2026-03-10 21:33:44 +01:00
lwouis 9969a07b22 fix: right-click and middle-click outside panel 2026-03-10 21:33:25 +01:00
lwouis 9aea8f62c9 fix: better handle context menu in search bar 2026-03-10 21:33:00 +01:00
lwouis 106f7c90f9 fix: show preview window on first shortcut press (closes #5385) 2026-03-09 23:14:38 +01:00
lwouis 3b831d4e59 feat: scrolling the settings update the sidebar (closes #5400) 2026-03-09 23:09:46 +01:00
lwouis dbadb2b4e5 fix: preview may not update its position (closes #5396) 2026-03-09 16:34:17 +01:00
semantic-release-bot 7d0eb278bf chore(release): 10.5.0 [skip ci]
# [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))
2026-03-08 17:56:44 +00:00
lwouis 0f8d6f140a feat: improved search results 2026-03-08 18:49:58 +01:00
lwouis 15caa33a60 fix: input with ime better interacts with search (closes #5377) 2026-03-08 18:49:57 +01:00
lwouis d905617248 refactor: add log for menubar visibility change 2026-03-05 15:25:01 +01:00
lwouis 643cc80ae0 feat: refinements on mouse hover and dragging (#5350) 2026-03-05 15:25:00 +01:00
semantic-release-bot a867171a45 chore(release): 10.4.0 [skip ci]
# [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))
2026-03-04 18:43:30 +00:00
lwouis 2c6c9fb2cc fix: clicking tiles required to release precisely (closes #5373) 2026-03-04 19:37:39 +01:00
lwouis 0ad389aa6f feat: add kazakh and improve all localizations 2026-03-04 19:01:28 +01:00
lwouis a632e42fbc fix: switcher may show windows in the wrong order (closes #5346) 2026-03-04 11:45:58 +01:00
lwouis a809ffad61 feat: improve drag-and-drop over alttab (closes #5350) 2026-03-01 19:26:28 +01:00
lwouis ea7284b387 fix: issues when using multiple keyboard languages (closes #2125) 2026-03-01 16:45:30 +01:00
lwouis 37ba9662f1 docs: simplify website introduction page 2026-02-24 21:26:27 +01:00
lwouis 1f340a3590 ci: netlify deploy broke after they updated their ubuntu vm
make jekyll build use ruby 3 and more recent bundler, so it works on more recent VMs
2026-02-24 21:21:56 +01:00
semantic-release-bot f7368f0dfe chore(release): 10.3.0 [skip ci]
# [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))
2026-02-24 19:55:27 +00:00
lwouis dc538dc994 feat: add ur/mr localizations + update all localizations 2026-02-24 20:48:29 +01:00
lwouis 9f563bcec2 docs: release notes had bright titles in dark mode 2026-02-24 20:48:29 +01:00
lwouis 1ff8c9c19a docs: migrate faq to github discussions
also closes #5339
2026-02-24 20:48:28 +01:00
lwouis 810b7116cd chore: refresh controls ui on dark/light mode change 2026-02-24 20:48:28 +01:00
lwouis 3fb66d412a chore: derisk event handling (#5336)
* .listenOnly means we don't block event processing
* using CGEvent directly means we don't need main-thread to convert to NSEvent
2026-02-24 20:48:27 +01:00
lwouis 741b074134 chore: multiple shortcuts could be selected if scrolling 2026-02-24 20:48:27 +01:00
lwouis c3ef4bc87c chore: logs in the debug tools were hard to read in dark mode 2026-02-24 20:48:26 +01:00
lwouis f5e81fe8cd fix: fade-out speed could show wrong value in rare cases 2026-02-24 20:48:26 +01:00
lwouis 3c95c6c276 feat: reduce app disk size 2026-02-24 20:48:26 +01:00
lwouis f54aca3fd9 refactor: reuse nested-scrolling logic across controls and blacklist 2026-02-24 20:48:25 +01:00
lwouis 7220643c82 refactor: make migration code simpler 2026-02-24 20:48:25 +01:00
lwouis ede879f3d6 refactor: make language preferences drier 2026-02-24 20:48:24 +01:00
lwouis 8c7263e8f1 fix: mouse hover would sometimes disappear 2026-02-24 20:48:24 +01:00
lwouis 402b6f6ff1 fix: avoid clipping long settings window buttons (closes #5320) 2026-02-24 20:48:23 +01:00
lwouis 451bbbe035 fix: closing a window would remove the thumbnail (closes #5324) 2026-02-24 20:48:23 +01:00
lwouis db34a7eb8f refactor: use static vars/funcs as much as possible 2026-02-24 20:48:22 +01:00
lwouis 5ce48c18e6 fix: improve settings window on macos 10.13 2026-02-24 18:42:22 +01:00
lwouis 219098d6a3 feat: consolidate settings (closes #1732) 2026-02-24 18:42:21 +01:00
semantic-release-bot 5f87336f3f chore(release): 10.2.0 [skip ci]
# [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))
2026-02-19 22:42:05 +00:00
lwouis f5e1014bce feat: add burmese + update all localizations 2026-02-19 23:34:57 +01:00
lwouis 75347adc8d fix: improve settings ui on macos 10.13 (#5255) 2026-02-19 23:34:56 +01:00
lwouis 35eae11389 feat: add setting to blacklist window by title (closes #5299) 2026-02-19 23:34:55 +01:00
lwouis 28c4b121ca fix: rare crash when a window was opened 2026-02-19 23:20:15 +01:00
lwouis d5d699659c feat: can add running apps into blacklist (closes #5268) 2026-02-19 23:20:14 +01:00
lwouis 4b85fb8cf7 feat: remember position/size of secondary windows (closes #5305) 2026-02-19 23:20:14 +01:00
lwouis c51376fd26 feat: add new setting for auto size (closes #3669) 2026-02-19 23:20:13 +01:00
lwouis b9e0344da4 fix: small issues when mouse hover is set to select (closes #5292) 2026-02-19 23:20:12 +01:00
lwouis ea51d57d3d fix: sometimes the active app was not up-to-date (closes #5291) 2026-02-19 23:20:12 +01:00
semantic-release-bot a7b7a79ece chore(release): 10.1.0 [skip ci]
# [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))
2026-02-17 18:30:07 +00:00
lwouis 09789e297d refactor: remove unnecessary string 2026-02-17 18:24:48 +01:00
lwouis 69a9dfa41b feat: allow settings export/import (closes #4514) 2026-02-17 18:01:26 +01:00
lwouis 4e6361ff7b fix: issue with link drag-and-drop over the switcher (closes #5292) 2026-02-17 17:42:20 +01:00
lwouis 91d4a7781e refactor: update settings sidebar to liquid glass visuals 2026-02-17 17:42:18 +01:00
lwouis da6be203f0 fix: better flow when last 2 windows are minimized (closes #2159) 2026-02-17 11:45:55 +01:00
lwouis d074faafd1 fix: trackpad gesture active when disabled (closes #5301) 2026-02-17 10:38:08 +01:00
semantic-release-bot 39d7af8483 chore(release): 10.0.0 [skip ci]
# [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
2026-02-16 23:04:53 +00:00
lwouis 2ee406c909 refactor: fix tests 2026-02-16 23:56:14 +01:00
lwouis 66db895dd3 refactor: missed some renames 2026-02-16 23:56:13 +01:00
lwouis 07e4024a9c feat: add debug tools 2026-02-16 23:56:13 +01:00
lwouis 8cab3e1f8b feat: allow up to 9 shortcuts (#3882) 2026-02-16 22:53:01 +01:00
lwouis 3f1617cba0 feat: update bn localization 2026-02-16 22:53:01 +01:00
lwouis 82795d845c fix: quick switches could sometimes do nothing (closes #5289) 2026-02-16 22:53:01 +01:00
lwouis 99201191f4 refactor: prevent ambiguous ids between apps and windows 2026-02-16 22:53:00 +01:00
lwouis 3de027644c fix: app could crash in rare scenarios
concurrency issues on preferences
2026-02-16 22:53:00 +01:00
lwouis 3e47ebec8e fix: launched app may not be seen as active (closes #5291) 2026-02-16 22:52:59 +01:00
lwouis 3890beb9d3 feat: new settings experience (closes #5287) 2026-02-16 22:52:58 +01:00
lwouis 93e2b35dc7 refactor: permissions window is lazily initialized 2026-02-16 22:52:57 +01:00
lwouis da21cb8e21 refactor: feedback window is lazily initialized 2026-02-16 22:52:57 +01:00
lwouis 14a0b716b6 refactor: preferences window is lazily initialized 2026-02-16 22:52:56 +01:00
Jakku Sakura 4e986f37a0 feat: add fuzzy search mode (closes #590)
BREAKING CHANGE: a whole new alt-tab experience by pressing "s". You can also set search as the default style in the settings
2026-02-16 22:52:56 +01:00
lwouis e3092b4299 chore: remove complex ai rules 2026-02-16 13:33:19 +01:00
lwouis ceed334b06 feat: support app-icon badges with large numbers 2026-02-16 13:33:18 +01:00
lwouis 51db0cb8e4 feat: support showing only non-visible spaces (closes #1274) 2026-02-16 13:33:18 +01:00
semantic-release-bot 3961f2a888 chore(release): 9.0.0 [skip ci]
# [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
2026-02-11 20:50:23 +00:00
lwouis 91d44e72df ci: workaround github actions bug by checking out more commits 2026-02-11 21:42:44 +01:00
lwouis 314259032d fix: missing thumbnails in rare cases 2026-02-11 21:35:41 +01:00
lwouis fa9e4d0ee1 fix: preserve scroll position in switcher if windows change 2026-02-11 21:35:41 +01:00
lwouis 6de7fee90c refactor: add bottom padding when scrolling in appicons appearance 2026-02-11 21:35:40 +01:00
lwouis f7226f681a refactor: fix windowless indicator position 2026-02-11 21:35:39 +01:00
lwouis 26d46e3768 feat: new thumbnails shadows in macos 26 style 2026-02-11 21:35:39 +01:00
lwouis 216563b635 perf: prevent possible frequent permissions check 2026-02-11 21:35:38 +01:00
lwouis 3f2f391c93 refactor: extract statusiconsview 2026-02-11 21:35:38 +01:00
lwouis 9edf31244a perf: merge mouseevents into cursorevents 2026-02-11 21:35:37 +01:00
lwouis d89bc29425 perf: do all mouse interactions globally instead of local tracking 2026-02-11 21:35:36 +01:00
lwouis d525d350fc fix: prevent macos 10.13 crash (closes #5255) 2026-02-11 21:35:36 +01:00
lwouis d1ba6bd333 chore: update periphery + remove dead code 2026-02-11 21:35:35 +01:00
lwouis 6695e9be9c refactor: rename to tiles 2026-02-11 21:35:35 +01:00
lwouis 396ef6f0b0 refactor: fix mouse hover right after switching space 2026-02-11 21:35:34 +01:00
lwouis b9637e5802 perf: have views under and over the thumbnailview 2026-02-11 21:35:34 +01:00
lwouis fe52511885 refactor: space indicator always rightmost 2026-02-11 21:35:33 +01:00
lwouis 337e2fbfec perf: throttle all window/app ax calls 2026-02-11 21:35:32 +01:00
lwouis 4f5e32593b perf: improve hiding the ui 2026-02-11 21:35:32 +01:00
lwouis db314c9948 perf: small optimizations from profiling 2026-02-11 21:35:31 +01:00
lwouis 7dec9da401 perf: use calayer instead of nsview for lightimageview 2026-02-11 21:35:31 +01:00
lwouis 3a8c0f3bee perf: simplify and combine views for better perf 2026-02-11 21:35:30 +01:00
lwouis ec5802a487 perf: create overlay view to optimize view count 2026-02-11 21:35:29 +01:00
lwouis fefc491ce5 perf: prevent appkit work 2026-02-11 21:35:29 +01:00
lwouis 41e0e7c688 perf: prevent costly window recursive views update 2026-02-11 21:35:28 +01:00
lwouis ce2dfc1f19 perf: remove normalize-subview to avoid appkit work 2026-02-11 21:35:28 +01:00
lwouis 13ed78bc23 perf: cache expensive layout values 2 2026-02-11 21:35:27 +01:00
lwouis 904bd17c53 perf: cache expensive layout values 2026-02-11 21:35:27 +01:00
lwouis 1f3a653faa refactor: add benchmarker 2026-02-11 21:35:26 +01:00
lwouis cd1d6574f7 chore: remove dead code 2026-02-11 21:35:26 +01:00
lwouis a5135c5560 perf: cache screen uuids and frontmost app 2026-02-11 21:35:25 +01:00
lwouis 2bce0d2d40 perf: capture samplebuffer directly 2026-02-11 21:35:24 +01:00
lwouis 016052ca14 perf: better caanimation batching 2026-02-11 21:35:24 +01:00
lwouis 305870b3ee perf: cache font from appearance 2026-02-11 21:35:23 +01:00
lwouis 52530b2d5c perf: update windows manually after 250s 2026-02-11 21:35:23 +01:00
lwouis 5a35aa95bc perf: move app icon capture to background queue 2026-02-11 21:35:22 +01:00
lwouis 53da0344bf refactor: avoid checking transparency on some images 2026-02-11 21:35:22 +01:00
lwouis f30d3760a1 refactor: codex perf improvements 2026-02-11 21:35:21 +01:00
lwouis fbcc3f5f02 refactor: improve manual window discovery 2026-02-11 21:35:21 +01:00
Christian Battaglia 5d0a92f3f7 feat: improve performance when many windows are open (closes #5177)
BREAKING CHANGE: major performance improvements
2026-02-11 21:35:18 +01:00
lwouis 4b830e6ba7 perf: optim hangs from DebugMenu 2026-02-08 10:30:48 +01:00
lwouis 698e5e8e0c chore: update periphery config 2026-02-08 10:30:47 +01:00
lwouis a4f5a23846 docs: add ai agents rules 2026-02-08 10:30:44 +01:00
lwouis 268121850d feat: update cs/el/fr/ru localizations 2026-02-08 10:23:16 +01:00
semantic-release-bot aeaf782feb chore(release): 8.3.4 [skip ci]
## [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))
2026-01-31 18:18:25 +00:00
lwouis 21aeafd8dd fix: quitting apps by pressing q multiple times (closes #5247) 2026-01-31 18:42:45 +01:00
lwouis ab704dc4be fix: app could sometimes crash in the background
closes #5260

appcenter showed that access to debugId() from main and non-main threa could crash the app. Making debugId a string that's set once at init simplifies everything and allows concurrent access from threads
2026-01-31 18:42:42 +01:00
lwouis 42c0a03ddc docs: improve website title 2026-01-25 22:34:53 +01:00
semantic-release-bot 550529f1fa chore(release): 8.3.3 [skip ci]
## [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))
2026-01-25 21:24:33 +00:00
lwouis 23fbc01a0e fix: app icons could sometimes be invisible (closes #5226) 2026-01-25 22:19:02 +01:00
lwouis 56546571b6 docs: add frequently asked questions on website 2026-01-24 20:12:45 +01:00
lwouis e5c634e672 refactor: simplify v-center logic
no need for the complex bias thing. We round in the end. And up or down each have downsides, so let's pick the default without doing extra logic
2026-01-24 14:07:38 +01:00
lwouis 7fdfe4a9ee fix: title could be off-center in app-icons appearance (closes #5235) 2026-01-24 13:39:25 +01:00
lwouis 3e95f77cc0 fix: switcher could sometimes show with no window pre-selected 2026-01-24 13:39:24 +01:00
lwouis 9b5e43eec5 fix: improve trackpad gesture detection (closes #5203) 2026-01-23 18:27:42 +01:00
lwouis ac3c3740c2 chore: improve log 2026-01-23 18:18:27 +01:00
semantic-release-bot 35a67ddf16 chore(release): 8.3.2 [skip ci]
## [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))
2026-01-22 23:34:13 +00:00
lwouis 53815e0f28 fix: blacklisting fullscreen windows was not working (closes #5228) 2026-01-23 00:24:53 +01:00
semantic-release-bot 7b7a73bd46 chore(release): 8.3.1 [skip ci]
## [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))
2026-01-22 21:47:45 +00:00
lwouis bf3fa6734e fix: chrome apps windows would not show in the switcher (closes #5227) 2026-01-22 22:28:46 +01:00
semantic-release-bot be06aef6d7 chore(release): 8.3.0 [skip ci]
# [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))
2026-01-20 17:59:06 +00:00
lwouis 3e27abd1e8 chore: improve log levels 2026-01-19 19:35:15 +01:00
lwouis 0a6485e024 fix: small memory leak when opening the switcher (closes #4255) 2026-01-19 19:35:14 +01:00
lwouis 5b0df6bd4c feat: increase apparition delay granularity (closes #5210) 2026-01-19 19:35:14 +01:00
lwouis a3f2a54f20 fix: windows would sometimes not update their order (closes #5207) 2026-01-19 19:35:13 +01:00
lwouis d1fd1fd9d0 fix: position of windowless indicator in thumbnails appearance 2026-01-17 00:06:10 +01:00
lwouis cd5fb46963 chore: silence build warnings from pods 2026-01-15 19:21:32 +01:00
semantic-release-bot 09ebff06ee chore(release): 8.2.0 [skip ci]
# [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))
2026-01-15 18:02:05 +00:00
lwouis ac24d6d148 fix: thumbnails could sometimes be stretched (closes #5204) 2026-01-15 18:01:08 +01:00
lwouis f481d22b75 feat: stop checking screen-recording permission after launch (#5202)
closes #5202

the permission check was expensive for the os, leading to higher energy usage, thus more battery drain
2026-01-15 15:47:33 +01:00
lwouis 149e3a5026 docs: improve changelog design 2026-01-15 14:42:42 +01:00
lwouis ef83525e9a docs: improve website on mobile 2026-01-15 14:42:41 +01:00
semantic-release-bot 56a042716e chore(release): 8.1.0 [skip ci]
# [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))
2026-01-14 23:19:39 +00:00
lwouis 0fe722bfba feat: add belarusian localization 2026-01-15 00:08:36 +01:00
lwouis 3b53ce77bb feat: improve pl localization 2026-01-15 00:08:36 +01:00
lwouis b2f5c6c4d5 fix: mitigate macos 15 bugs with screencapture-kit (closes #5190) 2026-01-15 00:08:35 +01:00
emptiestplace 7c64864c2f fix: mouse hover detection for hidden/windowless apps 2026-01-15 00:08:35 +01:00
lwouis 9d0b947a48 fix: thumbnails could sometimes be the wrong size
* fixes issues when the user has monitors with different DPI
* fixes issues where screenshots after a window is resized could be wrong (because of cached SCWindow having stale frame.size)
2026-01-15 00:08:34 +01:00
lwouis 9ed8a199b0 fix: better handle palm/fingers resting on the trackpad (closes #5191) 2026-01-15 00:08:34 +01:00
lwouis a0c9feefca fix: allow f-keys as shortcuts-when-active (closes #5166) 2026-01-15 00:08:33 +01:00
lwouis 1a2822d130 docs: website redesign 2026-01-14 00:09:51 +01:00
lwouis 44007195b7 docs: improve website and readme 2026-01-12 17:15:25 +01:00
lwouis 74b5a119d3 feat: improve accidental cursor movement
see https://github.com/lwouis/alt-tab-macos/issues/4278#issuecomment-3733280737
2026-01-11 14:55:26 +01:00
lwouis 0539a3ad49 fix: avoid unintentional trackpad trigger (closes #4278) 2026-01-11 14:55:26 +01:00
lwouis a06afd4bd2 refactor: remove unneeded views; simplify views 2026-01-11 14:55:25 +01:00
lwouis 1090acf3a5 feat: show outline of windows hidden for privacy reasons (closes #5172) 2026-01-07 19:16:14 +01:00
semantic-release-bot b8ba0f0888 chore(release): 8.0.0 [skip ci]
# [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
2026-01-06 18:36:28 +00:00
lwouis 989b344b1d feat: improve ta localization 2026-01-06 19:27:16 +01:00
lwouis bf58335bbe feat: improve memory image of showing app icons (closes #5144) 2026-01-05 23:12:36 +01:00
lwouis 5c4199ec74 fix: avoid macos bug where many permission dialogs pop (closes #5106) 2026-01-04 22:53:54 +01:00
lwouis 7821d7c979 feat: improve thumbnails with screen-capture kit
BREAKING CHANGE: Better thumbnails with ScreenCaptureKit for users on macOS >= 14

* No more WindowServer memory leaks (closes #4255)
* No more purple UI from macOS bothering users
* Fullscreen thumbnails contain top part (closes #3652)
* Thumbnails contain dialogs (e.g. Save/Print panel)
* Show thumbnails for off-screen windows
* Memory usage drastically reduced (e.g. don't save full-resolution if Preview feature is not used)
* Limitations of ScreenCaptureKit compared to private API: can't capture minimized/hidden/tabbed windows
2026-01-04 22:49:41 +01:00
lwouis e2b47790a9 perf: debounce screen/space events to minimize work 2026-01-04 14:18:17 +01:00
lwouis ff66a0664d chore: reduce link font size 2026-01-04 12:08:44 +01:00
semantic-release-bot 6d42bef7ec chore(release): 7.39.0 [skip ci]
# [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))
2026-01-03 18:23:00 +00:00
lwouis cca3423a59 ci: github action somehow misses 2 commits; adding more leeway 2026-01-03 19:18:44 +01:00
lwouis 5e842d5850 feat: improve nb/tr localizations 2026-01-03 19:18:43 +01:00
lwouis 0c724f3c7b refactor: various small improvements 2026-01-03 19:18:43 +01:00
lwouis 55f3f59208 fix: thumbnails could sometimes have the wrong size 2026-01-03 19:18:43 +01:00
lwouis edc2f00603 fix: preview could sometimes be incorrectly positioned 2026-01-03 19:18:42 +01:00
lwouis bcb130e7eb refactor: clarify names and organize tidier 2026-01-03 19:18:42 +01:00
lwouis d8de1e80b8 refactor: logs overall: lazy + reviewed them 1 by 1 for better dx 2026-01-03 19:18:41 +01:00
lwouis 610378525a perf: improve mouse hover algo and core-animation side 2026-01-03 18:09:19 +01:00
lwouis 2f72c5d6ae perf: do login item and plist updates later to accelerate launch 2026-01-03 18:09:19 +01:00
lwouis a62949f0dc refactor: add logs 2026-01-03 18:09:18 +01:00
lwouis 7ded01c277 perf: don't compute diffs of running-apps; directly get new/old 2026-01-03 18:09:18 +01:00
lwouis a45361321d chore: document why we check mouse events on main-thread 2026-01-03 18:09:17 +01:00
lwouis b7204f9694 refactor: repeatingKeyThread -> repeatingKeyQueue 2026-01-03 18:09:17 +01:00
lwouis b8a3b779e1 chore: document why we use kvo for processes diffing 2026-01-03 18:09:16 +01:00
lwouis 7906d630be fix: permission checks might freeze or restart the app (closes #5112) 2026-01-03 18:09:16 +01:00
lwouis 3c04a4ce15 feat: avoid occasional delays in showing the switcher (closes #5109) 2026-01-03 17:36:23 +01:00
lwouis 2f875b3bcb fix: permission window could steal focus (see #3577) 2025-12-28 18:47:02 +01:00
lwouis 914f91f9f7 fix: permissions window could look wrong in some languages like chinese
see https://github.com/lwouis/alt-tab-macos/issues/5112#issuecomment-3692769341
2025-12-28 18:47:01 +01:00
lwouis fcc6651b6a fix: show some hovering windows (e.g. zoom.app) (closes #5140) 2025-12-28 18:47:01 +01:00
lwouis dda612c15e feat: remove shadow around app icon appearance 2025-12-28 18:47:00 +01:00
lwouis 894a69d41f fix: avoid showing closed windows (closes #3589)
closes #4924
2025-12-20 01:14:30 +01:00
lwouis e2523f1d99 docs: remove dead link on website (closes #5134) 2025-12-20 01:14:29 +01:00
lwouis 6fa35ae35c chore: document tab detection experiments 2025-12-16 10:31:37 +01:00
semantic-release-bot d0a2d31b5a chore(release): 7.38.1 [skip ci]
## [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))
2025-12-13 19:15:21 +00:00
lwouis 43838e1ccc fix: could sometimes freeze on the permission window
#5112
2025-12-13 20:10:52 +01:00
lwouis 741e7902db fix: prevent crash when sending a debug profile 2025-12-07 23:45:42 +01:00
semantic-release-bot 6426d318fb chore(release): 7.38.0 [skip ci]
# [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))
2025-12-07 11:40:27 +00:00
lwouis 8a98b4ee40 feat: improve ca/es/ga/pt/pt-br/uk localizations 2025-12-07 12:35:22 +01:00
lwouis dcaac482de refactor: separate concerns and simplify 2025-12-06 15:17:31 +01:00
lwouis ee27df7680 fix: could sometimes freeze upon launch (closes #5079) 2025-12-06 12:59:29 +01:00
lwouis e0ae29d64a fix: sending feedback with a debug-profile could sometimes crash 2025-12-06 12:31:33 +01:00
lwouis db78e66451 refactor: consolidate classes, avoid free functions and variables 2025-12-06 12:31:32 +01:00
lwouis b8ecd58005 feat: prevent mouse-hover when using trackpad swipes (closes #5071) 2025-12-06 12:31:32 +01:00
lwouis 2725834c4a refactor: move free functions/variables into their class 2025-12-06 12:31:31 +01:00
semantic-release-bot 42cb2d5d88 chore(release): 7.37.0 [skip ci]
# [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)
2025-11-28 23:07:33 +00:00
lwouis 3994429b88 feat: improve portuguese localization 2025-11-29 00:03:28 +01:00
lwouis 237bb1e0d9 fix: better crop app icons on macos < 26 (closes #5080) 2025-11-29 00:03:27 +01:00
lwouis 911aad42cc feat: warn tahoe users of shortcut conflict with macos game-overlay
closes #5018
2025-11-29 00:03:27 +01:00
lwouis 36ded28ce4 chore: add input-source to debug profile 2025-11-27 19:31:19 +01:00
semantic-release-bot 9761bb91e9 chore(release): 7.36.0 [skip ci]
# [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))
2025-11-25 08:56:30 +00:00
lwouis 435a310590 feat: improve portuguese localization 2025-11-25 09:51:59 +01:00
lwouis d377b3dbca fix: switcher could become broken after changing appearance
closes #5061
2025-11-25 09:51:57 +01:00
semantic-release-bot 850fe285b4 chore(release): 7.35.0 [skip ci]
# [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))
2025-11-24 22:30:41 +00:00
lwouis 2adeb8dbcb chore: remove sparkle updater object from mainmenu
it could crash the app, if loading the xib was done inside main.async{}
it was not needed in the first place, despite what Sparkle does said
2025-11-24 18:07:51 +01:00
lwouis fb5dfc4399 feat: add trackpad haptic feedback for better navigation (closes #4763) 2025-11-24 15:42:58 +01:00
lwouis 29e1cff8f1 fix: app would sometimes crash on macos monterey (closes #5051) 2025-11-24 11:19:44 +01:00
lwouis 2c3373ae16 feat: better icon for feedback form (closes #5013) 2025-11-24 11:19:44 +01:00
lwouis c294ad0d4d feat: improve portuguese localization 2025-11-24 11:19:43 +01:00
lwouis ee436cc7cc fix: closing fullscreen window would glitch it (closes #5029) 2025-11-24 11:19:43 +01:00
lwouis 168995493f fix: better gesture recognition (closes #5039) 2025-11-24 11:19:42 +01:00
semantic-release-bot e477f8b3da chore(release): 7.34.0 [skip ci]
# [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))
2025-11-20 23:27:41 +00:00
lwouis 516329a408 feat: improve localizations 2025-11-21 00:21:07 +01:00
lwouis 938b7353ff fix: reduce memory footprint after running for a while (closes #4255) 2025-11-20 23:42:27 +01:00
lwouis a80721b2d3 feat: improve responsiveness in showing switcher (closes #4959) 2025-11-20 23:42:26 +01:00
lwouis 4e065b9a80 docs: add delight to website support page 2025-11-20 23:42:25 +01:00
lwouis aa8d7d02d1 chore: fix changelog title being removed from now on 2025-11-17 21:18:58 +01:00
semantic-release-bot 05b36fc58f chore(release): 7.33.0 [skip ci]
# [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)
2025-11-16 17:57:31 +00:00
fhdufhdu d6196ecad8 feat: improve trackpad multi-fingers swiping (closes #4765) 2025-11-16 18:51:09 +01:00
lwouis 21a91421a6 docs: improve website menu 2025-11-16 18:51:08 +01:00
lwouis 272f51ad5b docs: remove auto-translation of release notes
closes #3933
2025-11-16 18:51:08 +01:00
lwouis c352591d72 feat: improve ux for titles-appearance (closes #4975) 2025-11-16 18:51:07 +01:00
lwouis 96caad46a5 feat: improve nl/pl/uk localizations 2025-11-16 18:51:07 +01:00
lwouis 309cae316b feat: macos tahoe improvements: menubar menu, feedback form, wording
closes #4986
2025-11-16 18:51:06 +01:00
lwouis ffd0c75e8b fix: app icon was too small in titles-appearance large-size 2025-11-15 19:14:38 +01:00
lwouis fdf313472c feat: improve dealing with reserved/conflicting shortcuts
(closes #3190, closes #3288, closes #1835, closes #3826)
2025-11-15 18:47:59 +01:00
lwouis 011fdba7d3 fix: take into account accent-color immediatly (closes #4984) 2025-11-12 19:07:37 +01:00
semantic-release-bot e5e8521ae3 chore(release): 7.32.0 [skip ci]
# [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))
2025-11-10 19:56:49 +00:00
lwouis 786e752417 feat: improve pl/zh-hk localizations 2025-11-10 20:48:58 +01:00
lwouis d2220c68bd fix: could sometimes crash when navigating up or down (closes #4110) 2025-11-10 20:48:58 +01:00
lwouis 26d40e1149 feat: titles appearance now resizes for better readability
parts of #3882

also fixed a display of titles in every appearance, especially on first display of the switcher ui
2025-11-10 20:48:57 +01:00
lwouis 15a55e6e07 chore: minor cleanup 2025-11-09 09:40:08 +01:00
lwouis 32ab8d6573 chore: calculate nstextfield frame width better 2025-11-09 09:40:07 +01:00
lwouis ec55ae8b00 perf: improve rendering performance by doing less work 2025-11-09 09:40:07 +01:00
lwouis 689adc0a30 feat: improve responsiveness of showing the switcher 2025-11-09 09:40:06 +01:00
lwouis fab9d7c0ab feat: new look for tahoe and liquid glass (closes #4658) 2025-11-09 09:40:06 +01:00
lwouis 4aec2aa6da chore: improve debug build speed 2025-11-09 09:40:05 +01:00
lwouis f46372b97c fix: alt-tab could crash if asked to close one of its own window 2025-11-02 16:05:26 +01:00
lwouis 33c661505e feat: update visuals for macos tahoe and liquid glass 2025-11-02 12:37:03 +01:00
lwouis 91e16f7863 chore: improve readme 2025-11-02 00:31:57 +01:00
lwouis 55e8c331a6 chore: add debug widget to monitor queues 2025-10-30 11:19:24 +01:00
lwouis ae092cd1a7 chore: better logs 2025-10-30 11:17:44 +01:00
semantic-release-bot 122dc2ec0f chore(release): 7.31.0 [skip ci]
# [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))
2025-10-26 16:45:18 +00:00
lwouis c25b918a51 chore: update xcbeautify to v3.0.0 2025-10-26 17:40:28 +01:00
lwouis 173bc97d0f feat: improve ar/de/fr/kn/ru/zh-tw localizations 2025-10-26 17:40:28 +01:00
lwouis 84166ab954 feat: new cli command to focus a window using focus order (closes #4610) 2025-10-26 17:40:27 +01:00
lwouis a1cfd1de25 fix: title was truncated in app-icons appearance (closes #4860)
fix was to update ci to use macos 15 and xcode 26, since the issue goes away when compiling with xcode 26, without any code change
2025-10-26 17:40:26 +01:00
lwouis 58fcae7af8 chore: improve podfile setup 2025-10-26 16:18:02 +01:00
lwouis 29f0a08391 chore: ignore cursor files 2025-10-26 16:18:01 +01:00
lwouis 2d683e7e46 docs: mention kind support from jetbrains 2025-10-26 16:17:54 +01:00
lwouis 247f6353b0 fix: cmd+q would quit alt-tab instead of the selected app (closes #4867)
closes #4891
2025-10-26 16:15:12 +01:00
lwouis 08e28fd0a5 refactor: improve launch logs 2025-10-26 16:15:11 +01:00
lwouis cab591eb48 feat: improve windows detection 2025-10-26 16:15:02 +01:00
lwouis 33e5acf0ea feat: save resources trying to detect certain windows 2025-09-24 20:21:20 +02:00
semantic-release-bot 15554ef767 chore(release): 7.30.0 [skip ci]
# [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))
2025-09-23 22:05:16 +00:00
lwouis a9cb03c26f feat: improve nb/nl/zh-tw localizations 2025-09-24 00:00:25 +02:00
lwouis fb6110d0eb fix: bring back pre-v7.28 performance (closes #4805) 2025-09-23 23:53:31 +02:00
semantic-release-bot c3ace1faff chore(release): 7.29.0 [skip ci]
# [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))
2025-09-20 13:15:32 +00:00
lwouis c5286c3a6e feat: improve fr/ja languages 2025-09-19 22:19:52 +02:00
lwouis 1316eb2769 fix: windows order was not updating correctly (closes #4754)
(regression introduced in v7.28.0)
2025-09-19 21:37:24 +02:00
semantic-release-bot 27909f1824 chore(release): 7.28.0 [skip ci]
# [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))
2025-09-15 20:18:27 +00:00
lwouis 78c852514f feat: add hong-kong cantonese + improve other languages 2025-09-15 22:10:41 +02:00
lwouis 985a681d72 feat: more fine-grained cursor-follows-focus preference (closes #4734) 2025-09-15 22:10:41 +02:00
lwouis 3c79840a29 fix: improve detection of windows (closes #4405) 2025-08-29 22:04:39 +02:00
lwouis 95ee614d9f refactor: improve logging and subscribeToNotification 2025-08-29 18:52:01 +02:00
lwouis 591ce5274f fix: focusing windows could fail after focusing a frozen app (#4520)
also generally reworked and improved background work handling
2025-08-29 10:00:43 +02:00
lwouis 3f18951368 refactor: improve running-applications handler 2025-08-29 10:00:43 +02:00
lwouis be077f1a67 fix: keyboard selection now works with dragging + mouse hover
(closes #4711)
2025-08-27 19:50:33 +02:00
lwouis 1a4b53917d chore: fix localization scripts 2025-08-27 19:50:33 +02:00
lwouis 726e13edcd feat: improve norwegian localization 2025-08-27 19:50:32 +02:00
lwouis 4ebd990e30 feat: add gujarati localization 2025-08-27 19:50:32 +02:00
lwouis 4567550978 feat: add preference to show only non-active apps (closes #4691) 2025-08-27 19:50:32 +02:00
lwouis f489bd7d36 ci: bring back appcenter symbols upload until june 2026 2025-08-27 19:50:32 +02:00
lwouis e93e42f952 fix: remove high-volume unactionable logs (closes #4697) 2025-08-22 21:09:05 +02:00
semantic-release-bot 250c9c4bce chore(release): 7.27.0 [skip ci]
# [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))
2025-08-12 20:02:54 +00:00
lwouis aa46a62457 feat: improve cs/th localizations 2025-08-12 16:33:17 +02:00
lwouis f66c92aefb fix: restore default command+tab if shortcut is unbound (closes #4642) 2025-08-12 16:26:32 +02:00
Inês Almeida a696611615 docs: fix broken link to private api documentation 2025-08-12 14:24:30 +02:00
lwouis 5db53b5a9e feat: windowless apps can now be shown in focus-order (closes #4653) 2025-08-11 11:41:05 +02:00
semantic-release-bot e9e732756e chore(release): 7.26.0 [skip ci]
# [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))
2025-07-31 17:55:19 +00:00
lwouis ca96b85352 ci: more portable unicode sorting for contributors 2025-07-31 19:48:59 +02:00
lwouis 67f5098c95 feat: improve preference to show-apps-with-open-window (closes #4485) 2025-07-31 12:01:32 +02:00
lwouis f37652942d feat: improve da/fi/ga localizations 2025-07-29 10:43:28 +02:00
Gregory f67d182a92 fix: ignore autodesk fusion internal panels (closes #4578) 2025-07-01 10:34:54 +02:00
semantic-release-bot b325cc75c0 chore(release): 7.25.0 [skip ci]
# [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))
2025-06-14 12:29:24 +00:00
lwouis 6cc76903b0 docs: update contributors list 2025-06-14 14:18:55 +02:00
lwouis b4bc0b006a fix: icons on thumbnails could sometimes be incorrect
example use-case: show a Finder window, and middle-click it. The next thumbnail under the mouse will not show its purple quit icon
2025-06-14 14:18:55 +02:00
lwouis b0ce899a71 feat: new cli commands: --show, --detailed-list (closes #4489) 2025-06-14 14:18:55 +02:00
semantic-release-bot bd162a9e08 chore(release): 7.24.0 [skip ci]
# [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))
2025-05-05 10:07:24 +00:00
lwouis 8b7d69c0ff feat: improve ca/pt/ro localizations 2025-05-05 12:02:25 +02:00
lwouis 518f8b402e perf: avoid updating preview if not necessary 2025-05-05 11:59:14 +02:00
lwouis 397457cacb feat: clicking to focus windows/apps is now easier (closes #4407) 2025-04-04 19:32:04 +02:00
semantic-release-bot eee0db133c chore(release): 7.23.0 [skip ci]
# [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))
2025-04-01 21:38:28 +00:00
lwouis dec05198c7 feat: improve hindi localization 2025-04-01 23:31:45 +02:00
lwouis 911c3c17c5 fix: window name would sometimes be empty (closes #4350) 2025-04-01 10:43:24 +02:00
lwouis 9d852eee9c fix: avoid crashing on uncommon keys in shortcuts (closes #4379) 2025-03-31 12:09:04 +02:00
semantic-release-bot 17e1f1e4c7 chore(release): 7.22.0 [skip ci]
# [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))
2025-03-30 00:58:26 +00:00
lwouis c0ac29fdd8 ci: remove appcenter upload 2025-03-30 01:51:26 +01:00
lwouis 9b3f93688e feat: update ca/de/fr/ko/ru/tw localizations 2025-03-30 01:34:58 +01:00
Yaros f4f7d9addc fix: language switcher picked up as window 2025-03-30 01:29:18 +01:00
lwouis 4e35f9f290 fix: prevent rare crash 2025-02-23 21:06:22 +01:00
semantic-release-bot 820b6ea3aa chore(release): 7.21.1 [skip ci]
## [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))
2025-02-22 09:54:48 +00:00
lwouis 647f900b85 fix: update how feedback messages are sent 2025-02-22 10:50:11 +01:00
semantic-release-bot 6c0f97ffe9 chore(release): 7.21.0 [skip ci]
# [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))
2025-02-21 21:33:37 +00:00
lwouis bc95b905af feat: add lithuanian localization 2025-02-21 22:27:58 +01:00
lwouis 330ac54c6f feat: improve chinese localization 2025-02-21 22:15:57 +01:00
lwouis 54249d03dd refactor: use new fine-grained token + better logs 2025-02-21 22:01:22 +01:00
lwouis d543393e3f fix: app would sometimes crash (closes #4244) 2025-02-21 21:20:29 +01:00
lwouis ee010de36c refactor: remove unused method 2025-02-20 22:44:26 +01:00
semantic-release-bot 3c7aaafa63 chore(release): 7.20.1 [skip ci]
## [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))
2025-02-20 07:11:54 +00:00
lwouis b62cec0cdc fix: may crash when changing space or screen 2025-02-20 08:04:13 +01:00
semantic-release-bot a474660498 chore(release): 7.20.0 [skip ci]
# [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))
2025-02-19 17:48:16 +00:00
lwouis 6e2a5ff081 docs: sunset discord server 2025-02-19 18:40:52 +01:00
lwouis 8dd63c722f feat: improve window focusing action 2025-02-15 20:02:41 +01:00
lwouis e98dff325d refactor: use more accurate type for private apis 2025-02-14 21:46:09 +01:00
lwouis 8d93508062 chore: remove unused param from previous experiment 2025-02-13 11:49:30 +01:00
lwouis fd0411b508 feat: update fr, kn, pt-br, uk localizations 2025-02-13 11:49:30 +01:00
lwouis 8564ed255a feat: add javanese localization 2025-02-13 11:49:29 +01:00
lwouis 9d78700ab7 feat: improve performance and lower resources consumption
avoid unnecessary AX calls and batch calls when possible
2025-02-13 11:49:29 +01:00
lwouis c72fedbb30 refactor: update window fullscreen, size, position, on space change 2025-02-12 18:01:20 +01:00
lwouis e637c61cc9 refactor: debounce high-frequency window events 2025-02-12 18:01:20 +01:00
lwouis dae19ca067 refactor: clarify type and windowless state 2025-02-12 18:01:20 +01:00
lwouis 9d6fc68642 feat: improve thumbnails quality and performance (closes #4183) 2025-02-12 18:01:19 +01:00
lwouis 2cd8b96d38 fix: better detect windows from other spaces (closes #1324)
We found a workaround after more than 3 years of searching!
2025-02-12 18:01:19 +01:00
lwouis 541337259d fix: window might be noted to be on the wrong space 2025-02-03 21:55:47 +01:00
lwouis 93defcd3a7 fix: stage manager no longer skews the thumbnails (closes #1731) 2025-02-03 11:25:47 +01:00
lwouis 69edbbdf42 refactor: improve writing launch-agent and its logs 2025-01-24 10:42:57 +01:00
lwouis dcea005d8d fix: colored circles would go away on ui refresh (closes #4151) 2025-01-22 12:05:52 +01:00
lwouis cfd59d31a1 chore: use a longer datetime format in logs 2025-01-22 12:05:52 +01:00
semantic-release-bot f42ffa61d1 chore(release): 7.19.1 [skip ci]
## [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))
2025-01-14 21:43:44 +00:00
lwouis 0a2254702f fix: a few labels were not displaying (closes #4127) 2025-01-14 22:37:09 +01:00
semantic-release-bot d02327af2d chore(release): 7.19.0 [skip ci]
# [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))
2025-01-14 17:37:05 +00:00
lwouis c10ca2a77e feat: add preference to toggle animation of preview (closes #4118) 2025-01-14 12:24:55 +01:00
lwouis 2f8c01418d feat: middle-click will now close windows and quit applications 2025-01-14 12:24:55 +01:00
semantic-release-bot 3a0c84a8f5 chore(release): 7.18.1 [skip ci]
## [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))
2025-01-12 21:33:06 +00:00
lwouis 597b443796 fix: show shadows around thumbnails (closes #4068) 2025-01-12 22:25:45 +01:00
lwouis 0ea925289b docs: clarify what the screen-recording permission is used for 2025-01-12 22:25:45 +01:00
lwouis f3b116e47c fix: don't check screen-recording permission if unnecessary
closes #4113
2025-01-12 22:25:45 +01:00
lwouis 4c3ec7d067 refactor: use swift shorthand for optional check 2025-01-12 22:25:45 +01:00
lwouis 941d8afb9a chore: document why we use CGSHWCaptureWindowList 2025-01-12 22:25:45 +01:00
lwouis 8e41662088 chore: test out SCScreenshotManager.captureImage 2025-01-12 22:25:44 +01:00
semantic-release-bot 71bb2d889b chore(release): 7.18.0 [skip ci]
# [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))
2025-01-07 00:20:50 +00:00
lwouis c712473c7a feat: improve polish localization 2025-01-07 01:16:05 +01:00
lwouis 121515cbc7 fix: various issues with the app freezing or being slowly 2025-01-07 01:12:06 +01:00
lwouis 8b52dc8acb chore: add testbed file if i ever need to investigate again 2025-01-07 01:09:37 +01:00
lwouis db5644e058 fix: window order on first display was wrong 2025-01-06 23:29:15 +01:00
lwouis 684cc666d3 fix: window preview was not showing in titles style 2025-01-06 14:25:40 +01:00
lwouis dfff608ad1 docs: document cli usage on the website 2025-01-05 22:55:11 +01:00
semantic-release-bot f1c5ae73c2 chore(release): 7.17.0 [skip ci]
# [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))
2025-01-05 18:28:55 +00:00
lwouis d85ec7bcfb fix: more robust screen-recording permission detection 2025-01-05 19:21:53 +01:00
lwouis 2855b1bb0b refactor: cache more runningapplication properties for perf 2025-01-05 19:21:53 +01:00
lwouis 2a616e2518 chore: remove unused xcode flag during run 2025-01-05 19:21:53 +01:00
lwouis d5d131185e fix: app icons could sometimes be at the wrong size 2025-01-05 19:21:53 +01:00
lwouis 0f2c0e794c feat: handle cli commands: --list and --focus=window_id 2025-01-05 19:21:53 +01:00
lwouis d4e697c0de docs: document why we don't see queue labels in instruments 2025-01-04 13:28:20 +01:00
semantic-release-bot 720dde1c06 chore(release): 7.16.0 [skip ci]
# [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))
2025-01-04 01:31:33 +00:00
lwouis 1e017475ff refactor: improve naming 2025-01-04 02:24:03 +01:00
lwouis 95e51d1c27 refactor: more performant methods used 2025-01-04 01:36:15 +01:00
lwouis d653a54fc3 feat: improve performance by caching preferences better 2025-01-04 01:18:50 +01:00
lwouis c2ccccd093 fix: app badges could be incorrectly positioned on the very first launch 2025-01-04 01:08:36 +01:00
lwouis 837fa03f64 fix: app-icons wouldn't show when permissions were skipped
also cached NSScreen.preferred for performance
2025-01-03 23:40:01 +01:00
lwouis f027b4795f fix: screen recording warnings shouldn't appear with skipped permissions 2025-01-03 23:33:55 +01:00
lwouis 6ede54e3e0 refactor: avoid re-fetching runningapplication data for perf 2025-01-03 19:15:06 +01:00
lwouis 922d259193 chore: set xcode to be able to profile alttab 2025-01-03 19:13:17 +01:00
lwouis 56075b5766 refactor: split private apis for clarity 2025-01-03 16:10:40 +01:00
lwouis b0f02c6a36 refactor: separate protocol methods for clarity + clarify required init 2025-01-03 13:58:11 +01:00
lwouis de1326e118 refactor: separate protocol methods for clarity 2025-01-03 13:58:10 +01:00
lwouis 53d1d1fded refactor: reformat + app code inspect + split protocol 2025-01-03 13:58:10 +01:00
lwouis e17f427a5d refactor: reformat + app code inspect 2025-01-03 13:58:10 +01:00
lwouis df5af7d60c refactor: reformat 2025-01-03 13:58:10 +01:00
lwouis 702cb0d140 refactor: split privateapis into used and experiments 2025-01-03 13:58:10 +01:00
lwouis 9e415bff54 refactor: reformat 2025-01-03 13:58:08 +01:00
lwouis a696a0e0b2 chore: update swiftformat rules
swift format does a wrapping that i find too rough, so we can't really use it at the moment, unfortunately
2025-01-03 11:45:55 +01:00
lwouis 52026701e4 refactor: simplify 2025-01-03 11:45:55 +01:00
lwouis 7471488e33 refactor: split preferences and other reorganisation 2025-01-03 11:45:55 +01:00
lwouis 0ef8a0b2d4 refactor: organizing and separating things better 2025-01-03 11:45:54 +01:00
semantic-release-bot 76a72a5ead chore(release): 7.15.0 [skip ci]
# [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))
2025-01-02 18:33:18 +00:00
lwouis 3b0cba493b fix: better position preview for fullscreen windows (closes #4051) 2025-01-02 19:28:35 +01:00
lwouis bc9f97f852 chore: remove unchanging param 2025-01-02 19:28:35 +01:00
lwouis 295eb2bd60 feat: reduce space between app icon and window title 2025-01-02 19:28:35 +01:00
lwouis dfcf9de78e feat: improve chinese-taiwanese localization 2025-01-02 19:28:35 +01:00
lwouis fc6d63603a feat: improve performance and order accuracy at launch 2025-01-02 19:28:34 +01:00
lwouis 9156ad915a refactor: clarify a nstextfield workaround 2025-01-02 19:28:34 +01:00
lwouis a138a922ef feat: improve quality of thumbnails and performance 2025-01-02 19:28:34 +01:00
lwouis b51ff6583d feat: switcher displays faster; other performance improvements 2025-01-02 01:55:27 +01:00
lwouis 7207ad6da7 chore: variadic param was not passed correctly; logging was messy 2024-12-30 23:55:15 +01:00
lwouis e3fafbc6ff chore: migrations would play when debugging local builds 2024-12-30 23:43:50 +01:00
lwouis be5eb26385 fix: layout was sometimes broken in app-icons style (closes #4036) 2024-12-30 12:17:02 +01:00
lwouis e9b529a644 chore: clean up 2 values which are constant 2024-12-30 12:15:56 +01:00
lwouis 250a1bcc81 chore: organize codesign script 2024-12-30 11:12:52 +01:00
semantic-release-bot 96edb065d7 chore(release): 7.14.1 [skip ci]
## [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))
2024-12-28 18:26:04 +00:00
lwouis 7e501a460a fix: improve label display in app-icons style 2024-12-28 19:20:15 +01:00
lwouis dd05ba239e fix: title would sometimes not show when mouse hovering
this would happen in AppIcons Style, when a window changed in the background, while AltTab was open
2024-12-28 19:20:14 +01:00
lwouis b373fc465b chore: use a constraint add-or-update helper to avoid conflicts 2024-12-28 19:20:14 +01:00
lwouis f92f7ca803 chore: fix new compilation errors from xcode 16.2 2024-12-28 19:20:14 +01:00
lwouis 51062a2499 ci: add add_terms script + organize scripts 2024-12-28 19:20:14 +01:00
semantic-release-bot 48a3967b82 chore(release): 7.14.0 [skip ci]
# [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))
2024-12-26 23:41:18 +00:00
lwouis 18ef16f6ee feat: improve chinese, irish, italian localizations 2024-12-27 00:33:05 +01:00
lwouis fda3ada055 feat: swipes can now be horizontal or vertical (closes #4020)
swipe recognition has also been improved in many ways
2024-12-27 00:33:05 +01:00
lwouis db5500f130 fix: improve acknowledgments tab (closes #4025) 2024-12-25 01:51:23 +01:00
lwouis 42bbd0fe01 feat: clear feedback form after submission (closes #4026) 2024-12-25 01:04:12 +01:00
lwouis b257752812 chore: make local setup work with openssl v3.x 2024-12-25 00:53:33 +01:00
lwouis 54b7c8d697 chore: update svg-to-png script 2024-12-24 15:32:57 +01:00
lwouis bcafd0790f chore: fix utils folder in pbxproj 2024-12-24 11:46:20 +01:00
semantic-release-bot e07da9cad9 chore(release): 7.13.1 [skip ci]
## [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))
2024-12-24 09:02:02 +00:00
lwouis d3b5befe3e fix: app crash from v7.13.0 (closes #4016) 2024-12-24 09:55:20 +01:00
lwouis 4481d94fa2 fix: acknowledgments tab was hard to read in dark mode (closes #4019) 2024-12-24 09:55:20 +01:00
lwouis 982a6dd5f2 chore: improve project settings 2024-12-24 09:55:20 +01:00
semantic-release-bot 898fc8c13c chore(release): 7.13.0 [skip ci]
# [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))
2024-12-24 01:55:39 +00:00
lwouis 9ec2762bff feat: reduce disk size of localizations 2024-12-24 02:48:27 +01:00
lwouis 6d9059ee86 feat: improve localizations 2024-12-24 02:30:53 +01:00
lwouis ef6ab620fb refactor: replace titles with nstextfield for performance 2024-12-24 02:17:59 +01:00
lwouis ecf4cb15be chore: improve poeditor override scripts 2024-12-24 02:17:59 +01:00
lwouis c9d36b5bad chore: add script to upload local l10n context to poeditor 2024-12-24 02:17:59 +01:00
lwouis 9e932799ee refactor: use auto-released notification observer api 2024-12-24 02:17:59 +01:00
lwouis 6215b65ec9 feat: swiping won't wrap-around to other rows (closes #3983) 2024-12-24 02:17:58 +01:00
lwouis 9adf64c374 feat: allow vertical swipes as trigger (closes #4012) 2024-12-24 02:17:58 +01:00
Ben Delaney d32f9533e3 fix: prevent initial window lastFocusOrder overlaps
The `sortByLevel` method in the Windows class has been updated to determine window z-order properly across all visible spaces. It now sets the `lastFocusOrder` for each window, using a map from window IDs to their z-order position. Windows not present in the list are set to have `lastFocusOrder` of `Int.max`. Afterwards, windows are sorted by their `lastFocusOrder`, and these values are ensured to be monotonic, starting from 0.
2024-12-24 02:17:58 +01:00
Ben Delaney 2a0a8585df fix: previews on multiple screens could get misplaced 2024-12-24 02:17:58 +01:00
Ben Delaney 87a2b219a5 fix: enabling previews with multiple screens could lead to flickering 2024-12-24 02:17:58 +01:00
allsochen c5e13ccc84 fix: titles could sometimes be covered when in small size 2024-12-24 02:17:58 +01:00
lwouis 40c9a18be4 feat: add fade-in for window previews (closes #2456) 2024-12-12 21:38:39 +01:00
semantic-release-bot 8a4aa7908f chore(release): 7.12.0 [skip ci]
# [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))
2024-12-11 20:59:03 +00:00
lwouis 82879e39e7 docs: update contributors 2024-12-11 21:53:55 +01:00
lwouis 60534bcfe3 fix: switcher could appear collapsed in titles style (closes #3744) 2024-12-11 21:51:09 +01:00
lwouis 41ddd7c1a6 feat: acknowledgments tab was slow to display (closes #3957) 2024-12-10 23:17:01 +01:00
semantic-release-bot 5601a556c9 chore(release): 7.11.0 [skip ci]
# [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))
2024-12-09 23:06:18 +00:00
lwouis 764e0f3f25 feat: improve chinese localization 2024-12-09 23:52:41 +01:00
lwouis 3619807cb9 refactor: clean up trackpad-events 2024-12-09 23:52:40 +01:00
lwouis d65f220530 feat: decrease shortcuts from 5 to 3 2024-12-09 19:33:49 +01:00
Saswat Bhattacharya 903e758528 feat: support 3 or 4 finger swipes to use the app (closes #730) 2024-12-09 19:33:43 +01:00
lwouis 9b85f00564 feat: switcher will now show in "show desktop" mode (closes #783) 2024-12-09 14:12:06 +01:00
lwouis cb191d60f3 feat: improve focus in show:apps mode (closes #3951) 2024-12-09 14:12:06 +01:00
lwouis ac70fcc5f9 fix: always show a window in show:apps mode (closes #3950) 2024-12-08 18:16:15 +01:00
324 changed files with 27554 additions and 37721 deletions

No files matched your search

+9 -7
View File
@@ -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
+3
View File
@@ -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/
+5 -7
View File
@@ -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/**
+9 -5
View File
@@ -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
+10
View File
@@ -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
+1
View File
@@ -0,0 +1 @@
@include ./AGENTS.md
+1 -1
View File
@@ -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"
Generated
+11 -9
View File
@@ -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": [
+29 -9
View File
@@ -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
+2 -6
View File
@@ -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
+2 -6
View File
@@ -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
+630 -840
View File
File diff suppressed because it is too large. Load diff
+2 -2
View File
@@ -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;
}
-21
View File
@@ -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.
-360
View File
@@ -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 (`![Image](<Name In 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/)
![Images](<Name of asset in bundle>)
> 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
![Screenshot](https://cl.ly/779e6964257a/swiftymarkdown-2020.png)
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: "![", intermediateTag: "](", closingTag: ")", 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
+13 -1
View File
@@ -1,7 +1,19 @@
<div align = center>
# AltTab
[![Screenshot](docs/public/demo/frontpage.jpg)](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>
+7
View File
@@ -0,0 +1,7 @@
#!/bin/bash
xcodebuild \
-workspace alt-tab-macos.xcworkspace \
-scheme Debug \
-configuration Debug \
-derivedDataPath ~/git/alt-tab-macos/DerivedData
+16
View File
@@ -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
Executable
+3
View File
@@ -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
File diff suppressed because it is too large. Load diff
@@ -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">
+958 -188
View File
File diff suppressed because it is too large. Load diff
+3 -1
View File
@@ -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
+7 -1
View File
@@ -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
+1
View File
@@ -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
+4
View File
@@ -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
+1
View File
@@ -0,0 +1 @@
3.4.4
-42
View File
@@ -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>
-248
View File
@@ -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
* 橙梓
* Ивайло
* Андрій Кирбаба
* Τσιλιμπότης Δημ.
+204 -140
View File
@@ -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
-72
View File
@@ -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).
-8
View File
@@ -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)
-7
View File
@@ -1,7 +0,0 @@
---
title: Thanks
---
{% include_relative Contributors.md %}
{% include_relative Acknowledgments.md %}
+10 -1
View File
@@ -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
+532 -178
View File
@@ -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;
}
}
+55
View File
@@ -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);
+2
View File
@@ -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>
+81 -40
View File
@@ -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>
+1
View File
@@ -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)
+5
View File
@@ -0,0 +1,5 @@
---
layout: changelog-bare
---
{% include_relative changelog.md %}
+804 -1
View File
@@ -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)
+8 -10
View File
@@ -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.
+7
View File
@@ -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, Τσιλιμπότης Δημ., Андрій Кирбаба, Ивайло, Пустой, 林清, 橙梓
+1
View File
@@ -0,0 +1 @@
google-site-verification: google24a020170798641a.html
+96
View File
@@ -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).
+13
View File
@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

+1
View File
@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

+1
View File
@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

+33
View File
@@ -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>
+9
View File
@@ -0,0 +1,9 @@
---
title: Thanks
permalink: /thanks
sitemap: true
---
{% include_relative contributors.md %}
{% include_relative acknowledgments.md %}
+223 -4
View File
@@ -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"
}
}
}
}
+8
View File
@@ -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"
}
}
+5 -4
View File
@@ -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'
],
}],
],
-675
View File
@@ -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>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 984 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

+116 -67
View File
@@ -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";
+71 -489
View File
@@ -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";
+296
View File
@@ -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" = "Магчыма, вам спатрэбіцца адключыць некаторыя канфліктуючыя сістэмныя жэсты";
+72 -487
View File
@@ -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" = "Може да се наложи да изключите някои конфликтни системни жестове";
+78 -493
View File
@@ -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" = "আপনাকে কিছু সাংঘর্ষিক সিস্টেম জেসচার নিষ্ক্রিয় করতে হতে পারে";
+129 -544
View File
@@ -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";
+182 -605
View File
@@ -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";
+68 -486
View File
@@ -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";
Loaded 100 of 324 files, more files were not shown because too many files have changed in this diff. Show more