Преимущества mac os перед windows os

#статьи


  • 0

Можно бесконечно смотреть на огонь, воду и срачи в IT-тусовке о лучшей операционке.

Иллюстрация: Apple / Windows / august96 / Pexels / George Keen / Wikimedia Commons / Colowgee для Skillbox Media

Мария Даровская

Журналист, коммерческий автор и редактор. Пишет про IT, цифровой маркетинг и бизнес.
Сайт: darovska.com.

Этот батл может длиться вечно, но мы всё-таки рискнули спросить у комьюнити, что лучше.

Симпатия к той или иной операционной системе — это прежде всего эмоции. Тем не менее любители техники Apple почти поголовно влюблены в macOS. И вот что им нравится больше всего.

По словам любителей яблочной операционки, macOS и сама по себе работает очень стабильно, при этом железо в компьютерах от Apple тоже надёжное и долговечное.

Скриншот: Skillbox Media

«Я занимаюсь антивирусами и работаю на разных платформах — и Windows, и Mac. Без сомнения, macOS — гораздо более стабильная и удобная. У Apple очень ограниченный набор железа, а мир Windows наводнён дешёвыми компьютерами. Может показаться, что аппаратное обеспечение Apple стоит дороже, но если сравнивать их возможности, то становится понятно: у Apple очень конкурентные цены».

promixr,
пользователь Reddit


«Я всё ещё использую свой ПК с Windows — но в основном только для игр. А пару месяцев назад я купил MacBook Air M1 и теперь просто очарован им. До него у меня был Lenovo Ideapad за 350 евро — он хуже любого MacBook, поэтому переход на Apple был потрясающим опытом. Мой новый ноутбук кажется более прочным, чем все, которые я пробовал раньше, а вся начинка, от трекпада до клавиатуры, работает практически безупречно. Не то что Lenovo».

Unius_,
пользователь Reddit

macOS — единственный вариант для полноценной разработки ПО под технику Apple: макбуки, айпады и айфоны. Без macOS разрабатывать, тестировать и отлаживать приложения для яблочной экосистемы практически невозможно — ведь понадобится Xcode, а для других платформ её не выпускают.

Скриншот: Skillbox Media

Однако тут есть и минус — ПО для разработки под Apple платное.

«Разработка для macOS и iOS (Apple в целом) — это кошмар. Эти ребята дерут с вас деньги за всё: относятся к программированию под их платформу как к привилегии, символу принадлежности к „элитной“ группе. Нужно платить 99 долларов в год за программу для разработки. Что это за фанатизм?»

Marie-Eva Volmar,
CEO в Dallada Corporation на Quora

Немало веб-программистов работают исключительно на macOS, и им всё нравится. Ещё бы: тут есть и всё необходимое ПО (в отличие от Linux), и полноценная командная строка (в отличие от Windows). Даже те, кто не любят продукты Apple, признают, что запускать код на macOS невероятно удобно:

«Я признаю, что OS X от Apple меня впечатлила — по сути, она может запускать ваш код и без IDE».

Evan Sawyer,
пользователь Quora

Пользователи macOS считают, что эта система работает гораздо эффективнее Windows. Но, возможно, они просто не отделяют операционку от яблочного железа и никогда не использовали Hackintosh :)

«В 90% случаев в macOS всё работает безупречно, как обычно у продуктов Apple, а вот в 10% случаев какое-то нужное мне приложение в их экосистеме не работает или вообще не поддерживается. Тогда мне приходится обращаться к старому компьютеру с Windows. Но я думаю, что большинство обычных пользователей не сталкиваются с такой проблемой».

Инженер Фредо,
пользователь Reddit

AirDrop, iMessage, FaceTime, iCloud и так далее. Это и правда удобно: все твои устройства работают в единой экосистеме, и переход от одного к другому по-настоящему бесшовный.

«С точки зрения производительности MacBook — отличный выбор. И во многом благодаря различным вспомогательным приложениям вроде Alfred или диспетчера задач. Однако я бы не купил себе MacBook, если бы уже не использовал iPhone и другие устройства Apple. Не поймите меня неправильно, macOS великолепна, но есть сферы, в которых она слабовата.

Для меня главное преимущество macOS — бесшовная интеграция с другими продуктами Apple. Без этого всё, что я могу делать на своём Mac, можно делать и на компьютере с Windows».

PunyDev,
пользователь Reddit


«Я могу просматривать входящие сообщения как с macOS, так и с iPhone. Могу начать разговор или общение в мессенджерах на одном устройстве, а продолжить его на другом. Могу принимать звонки в macOS, если мой телефон находится в той же Wi-Fi-сети. При этом никакого дополнительного программного обеспечения не надо.

iCloud работает безупречно с iPhone, MacBook и iPad. Раньше у меня возникали проблемы с синхронизацией файлов в OneDrive, которыми я делился с женой, — тогда у меня дома ещё стояла Windows 10. Из-за этих проблем я даже перешёл на Dropbox. Теперь мы используем его для обмена файлами, а iCloud — для их хранения. Всякий раз, когда я перехожу на новый iPhone, мне просто нужно залогиниться в iCloud, и все мои данные появляются в приложениях «Фотографии» или «Файлы».

Jeff LeBlanc,
пользователь Quora, администратор SCCM

Пользователи, перешедшие на macOS с Windows отмечают качество взаимодействия с операционной системой — в том числе с помощью жестов.

«Я всю жизнь пользовался Windows, а потом перешёл на MacBook Air M1 — понравились отзывы. macOS отличается от Windows, причём в лучшую сторону. Всё, начиная от жестов трекпада и взаимодействия с пользователем до ОС в целом, кажется более интуитивным и плавным. Я ни разу не сталкивался с ограничениями в необходимых для работы программах.

В продуктах Apple меня всегда вдохновляло, что, даже несмотря на более слабые заявленные характеристики (оперативная память, размер батареи и так далее), они работают гораздо лучше решений конкурентов».

Proxima_Centuari,
пользователь Reddit


«Пару недель назад перешёл на базовую модель M1 MacBook Air. Это мой первый продукт Apple за более чем 10 лет. Однажды у него произошёл один сбой — причину я так и не выяснил. Но в остальном это лучший компьютер, который у меня когда-либо был, — и я сомневаюсь, что когда-нибудь снова куплю ноутбук с Windows. Трекпад тонкий, крутой и совершенно бесшумный, мощности хватает для большей части моих задач. У меня есть и десктоп с Windows, но нужен он только для игр».

GRosasSilva,
пользователь Reddit

Большинство пользователей macOS практически ни разу не сталкивались с проблемами от вирусов и вредоносных программ, даже если у них не стоял антивирус.

«Вредоносных программ и вирусов на маке практически нет. У моих родителей дома стоит ПК с Windows 10, а для путешествий я подарил им свой старенький MacBook. Каждый раз, приходя к ним в гости, я обычно проверяю их компьютер на вирусы. И в Windows стабильно нахожу до 600 нежелательных элементов. В итоге я даже забрал права администратора у отца. А что в macOS? Ноль…»

Jeff LeBlanc,
пользователь Quora, администратор SCCM


«Компьютеры от Apple не так сильно распространены, поэтому для macOS пишется меньше вредоносного ПО — хотя угроза постепенно растёт, например за счёт популярности кросс-платформенной Java. У Windows — гораздо больше установок, чем у других ОС для настольных компьютеров, поэтому чаще всего вирусописатели целятся именно в неё».

Akshay M,
пользователь Quora

Когда вы покупаете макбук, он уже работает как надо. Достаточно только авторизоваться в системе под своим Apple ID: все данные и конфигурации быстро переносятся с предыдущего девайса. В процессе использования вам также не понадобится делать каких-то сложных манипуляций, чтобы установить ПО или настроить систему. В Windows возможностей для настроек и установки софта будет значительно больше, но и сделать всё это нормально будет сложнее.

«Я думаю, что компьютеры Mac — лучший вариант для людей, которые хотят делать только то, что им действительно нужно. Это похоже на разницу между вождением и ремонтом автомобиля. Есть люди, которые любят возиться со своими автомобилями и тюнинговать их — в этом нет ничего плохого. Но есть и люди, которые просто хотят добраться из пункта А в пункт Б, и такие люди просто выбирают максимально комфортную машину.

То же с macOS и Microsoft Windows. Я пробовал Windows много раз — у нас на работе даже есть ноутбук с Windows, но, по моим ощущениям, он гораздо менее интуитивный по сравнению с макбуками. Однако тут надо отметить, что я всю жизнь пользуюсь Mac, поэтому у меня давно сформировались привычки».

Jorge Chambers,
инженер-программист, пользователь Quora

В случае с макбуком вам не понадобится обновлять оперативную память или менять видеокарту — это в принципе невозможно. А значит, не придётся заморачиваться и с совместимостью железа или установкой драйверов. Вы покупаете яблочный компьютер и просто им пользуетесь.

«Apple контролирует все пакеты аппаратного и программного обеспечения, обновления, поэтому каждый Mac работает бесперебойно: не возникает задержек или несовместимости по железу. Для Windows разные модели ноутбуков и даже персональные ПК могут не иметь подходящих драйверов для каждого компонента в каждой версии ОС, поэтому регулярно выскакивают проблемы с совместимостью и тормоза. Иногда из-за этого невозможно достичь ожидаемой производительности».

Akshay M,
пользователь Quora

Любителей Windows — тоже немало. Есть даже такие грешники, которые предпочитают ставить Windows… на устройства от Apple, хотя это скорее исключение из правил.

Скриншот: Skillbox Media

Фанаты Windows отмечают, что эту систему легче настроить под себя, а ещё она более функциональна и подходит под большее число задач.

Ещё Windows — единственный вариант для геймеров. На macOS и Linux выбор игр сильно ограничен. Да и по-настоящему крутые игровые компьютеры с мощной графикой существуют только в мире Windows.

«Будучи тру-геймером, я люблю использовать Windows из-за её хардкорной графики и потрясающей производительности, а также простоты доступа по сравнению с macOS».

Akshay M,
пользователь Quora

А ещё на Windows существует больше бесплатного софта, а в ОС от Apple почти за всё нужно платить.

Для Windows существует больше разнообразных программ. Гораздо больше. Кроме игр есть куча софта для архитектуры, видеомонтажа, бизнес-аналитики и других задач — и многие из этих программ выпускаются в режиме only Windows.

Инженеры утверждают, что в Windows можно запускать среду разработки, сохраняя идентичность окружения, что довольно удобно. А ещё есть свой аналог CLI — WSL — и нет проклятущего Finder, как в macOS.

Скриншот: Skillbox Media

Многим нравится, что Windows поддерживает MST: при закрытии окна закрывается и приложение, а аудиомикшер позволяет регулировать громкость каждого приложения отдельно, а не только всех сразу. Плюс на «окнах» удобнее работать, используя только клавиатуру.

По мнению многих разработчиков, Windows лучше подходит для корпоративной рабочей среды.

«Mac привлекает графических дизайнеров, продюсеров видео и музыки, технических журналистов, разработчиков приложений и так далее. У Windows же широкий охват по всем профилям. А бизнес-пользователи, как правило, используют оборудование с Windows на борту из-за хорошей совместимости».

Akshay M,
пользователь Quora

По версии специалистов, организовать корпоративную рабочую среду, где есть AD, групповые политики Exchange, серверы, клиенты и тонкие клиенты на macOS или iOS, — нереально.

Скриншот: Skillbox Media

Инструменты разработки для Windows чаще всего критикуют за то же, за что и инструменты для Apple, — ценовую политику. Зато сам выбор софта на платформе от Microsoft, безусловно, шире.

«Инструменты разработки под Win хороши, но дороги — например, та же Visual Studio. Да и все инструменты разработки под Win в первую очередь выпускаются для Win (и конечно, не бесплатно), при этом остальные ОС поддерживаются гораздо хуже. А уж инструменты разработки с открытым исходным кодом на Windows поддерживаются и настраиваются гораздо хуже, чем в Linux и macOS».

Sergiy Reypolskyy,
разработчик в Apple, пользователь Quora

Компьютеры на базе Windows гораздо более гибкие в настройке — и их проще сконфигурировать под себя. На macOS всё гораздо строже, поэтому, если вам не пришлась по вкусу яблочная экосистема, велик шанс, что вы вернётесь к Windows.

«Обычно я использую компьютеры с Windows для игр и программирования. По-моему, Windows — гораздо более развитая ОС с точки зрения программирования и игр. Существует множество вариантов настройки вашего ПК с Windows, и вы можете кастомизировать чуть ли не все компоненты. Да и в целом Windows очень гибкая — и хотя иногда это может быть недостатком, мне она нравится.

С точки зрения персонализации и настройки под себя macOS — ужасная система, потому что в ней очень мало пространства для манёвра. Конечно, Mac тоже можно использовать для разработки, но я предпочитаю Windows, потому что маковский терминал не умеет запускать сложные программы».

Sameep Rastogi,
технический энтузиаст, пользователь Quora

Чтобы полноценно работать с Windows, не нужно покупать какой-то специальный ноутбук, есть множество вариантов по любым ценам — от эконом-класса до мощных машин, не уступающих по ценам продукции Apple. А ещё вы всегда можете докупить оперативной памяти или сменить жёсткий диск. В случае с техникой Apple это сделать уже нельзя. Единственная возможность апгрейдить яблочный ноутбук или ПК — купить новую модель.

«Когда вы покупаете ПК с Windows (или любой ПК со стандартным аппаратным обеспечением), это ваш компьютер. Вы администратор. Вы можете изменять, настраивать и обновлять всё, что захотите. Вы можете собрать компьютер с нуля. Вы можете установить SSD любого размера, оперативную память, процессор, ОС, аккумулятор, устройства чтения дисков и так далее. Обновляйте своё оборудование в любое время — как хотите и гораздо дешевле. Я активно использовал Windows на множестве компьютеров, но никогда не сталкивался с синим экраном смерти, BSOD».

Evan Sawyer,
пользователь Quora


«Windows — это универсальная ОС, которая поддерживает всё, что вы ей предлагаете. Я могу использовать её с любой конфигурацией процессора, материнской платы, видеокарты, и она заработает под управлением Windows».

Collin Campbell,
пользователь Quora

Полноценно пользоваться операционной системой от Apple можно, только если вы счастливый обладатель фирменной техники. А вот купить и поставить копию Windows может любой человек — и оборудование может стоить хоть 300, хоть 3000 долларов.

«Покупка Mac в наши дни — это, по сути, покупка ПК от Gucci. Процессор, платы и другое железо имеют ту же архитектуру, что и железо других брендов, — во многих случаях они идентичны. Единственное, что удерживает вас от запуска macOS на ПК, — это один дополнительный чип на материнской плате. Однако в итоге вы платите бешеные деньги за этот маленький логотип Apple на корпусе».

Gregg Schoenberger,
специалист по компьютерной безопасности и системный администратор, разработчик, бакалавр компьютерных наук, пользователь Quora

Обычно выбор операционки зависит от того, чем именно занимается человек и какой софт для работы ему нужен. Например, пользователи 3ds Max используют Windows, потому что этот самый Max существует только в версии для Windows. А пользователи Final Cut Pro, напротив, используют компьютеры Mac, потому что этот софт не работает на Windows.

Скриншот: Skillbox Media

Современные macOS и Windows 10 — удобные и инновационные операционные системы с кучей классных приложений, функций и инструментов. Поэтому многие разработчики констатируют, что выбирают одну или другую ОС просто потому, что им так привычнее.

Скриншот: Skillbox Media

Однако есть и третья коалиция — суровые линуксоиды, «бздуны», бубунтоводы и прочие маргиналы от IT, которые плюются от «проприетарщины» и давно сидят на Linux, BSD-системах :)

Жизнь можно сделать лучше!
Освойте востребованную профессию, зарабатывайте больше и получайте от работы удовольствие. А мы поможем с трудоустройством и важными для работодателей навыками.

Посмотреть курсы

Уровень сложности
Простой

Время на прочтение
50 мин

Количество просмотров 43K

Предисловие

Что ж, перед тем, как перейти к содержательной части, обозначу, в чем я вижу здесь проблему, стоящую упоминания. Компьютер — довольно сложное в управлении устройство. Если вам кажется, что это не так, попробуйте вспомнить свое первое знакомство с клавиатурой, когда вам надо на ней что-то напечатать, а где буквы — вы еще не выучили. Я вот помню, что у нас это была целая лабораторная работа — набрать на компьютере короткое стихотворение Пушкина из трех строф, и на это отводился весь академический час — 45 минут. И этого еще не хватало, потому что все время, отведенное на выполнение задания, занимал поиск «да где же тут эта чертова буква на этой чертовой клавиатуре».

Это понимали люди, стоявшие у истоков тех рек, чье мощное течение создало ландшафт IT-экосистемы в том виде, в котором мы имеем честь наблюдать его в настоящее время. Одним из таких людей был специалист по UI-UX интерфейсам, одно время возглавлявший данное направление в корпорации Apple, а также летчик-любитель Джеф Раскин. Именно он сформулировал основной принцип проектирования эргономичных (удобных для использования) интерфейсов, применимый равно как для взаимодействия людей и самолетов, так и людей и компьютеров  — принцип монотонности.

Этот принцип, хотя и расшифровывается достаточно просто и понятно (Раскин раскрывал его как «одинаковое действие всегда должно вести к одинаковому результату», а, в качестве пояснения использовал примеры из авиации, вроде тех, что «представьте, что вы пилот самолета, и потянули штурвал на себя, а самолет, вместо того, чтобы пойти вверх, начал пикировать, и на таком самолете вы могли бы нормально летать только после очень долгого переучивания»), имеет несколько следствий.  Например, таких:

  • переучиваться больно и тяжело

  • выгоды от переучивания должны превышать затраченный на переучивание труд

  • лучше сразу учиться делать правильно (эргономично и экономно), чтобы не пришлось переучиваться

Что ж, купив макбук и, попробовав на нем поработать, я почти сразу осознал, что либо мне придется переучиваться под принятые в этой экосистеме правила, либо я попытаюсь как-то настроить систему, чтобы она вела себя так, как я привык, и как мне надо. Ну, я почему-то решил попробовать второй вариант, и у меня в общем и целом получилось, хотя не полностью и не окончательно. Вот, что я предпринял.

Часть 1. Что не так и что с этим можно сделать?

  • Штатный Alt-Tab не работает (так, как должен). Решилось установкой бесплатной опенсорсной программы AltTab.

  • Непривычные (для виндузятника) хоткеи. Решается тем, что в штатных настойках клавиатуры отключаются почти все хоткеи, назначенные по умолчанию, а потом постепенно, по мере использования, перенастраиваются на привычные.

  • Штатное в Windows и в Ubuntu переключение на самые нужные приложения по Win-1, Win-2, Win-3 и т.д. не работает. Решилось установкой бесплатной программы Snap (спасибо за совет коллеге Алексею. Алексей, привет!)

  • Штатное переключение РУС/ЛАТ по Caps Lock есть и работает, но в моём специальном случае (надо часто подключаться по RDP к машинам с Windows) очень быстро задолбало его включать и отключать. Решилось созданием клавиатурной раскладки ruscaps в бесплатной программе Ukelele (точно такое же концептуально решение я использую и на Windows, которое подсмотрел в статье Ассемблер/дизассемблер клавиатурных раскладок Windows с помощью flat assembler здесь же на Хабре. Работает этот способ хорошо как на маке, так и на винде, по сути это оказался и там и там самый безглючный способ использовать переключение языка по Caps Lock. В Приложении техническая инструкция, как настроить[1]).

  • При использовании такого способа переключения клавиатурных раскладок очень хочется иметь наглядный индикатор, какая именно сейчас раскладка активна, а штатного индикатора состояния Caps Lock, которое и служит индикатором активной раскладки, в menu bar нет. Решилось установкой бесплатной программы Captin (программа работает хорошо, хотя по таймеру состояние Caps (нажато или нет) не опрашивает, отчего иногда кажется, что она зависла)

  • Как семантический эквивалент клавиши Ctrl в системе используется специфичная для маков клавиша Command, которой ни на каких других компьютерах нет. Тут пользователю надо либо переучиться, изменив свои десятилетиями наработанные клавиатурные привычки, либо попытаться настроить систему под себя.  Второй путь сложнее, но я пошел по нему, потому что Vim (для мака это будет MacVim, один из основных моих инструментов) ничего не знает про клавишу Command, и по умолчанию использует клавиатурные комбинации с клавишей Control.

  • Idea в клавиатурной раскладке по умолчанию на маках использует Command вместо Ctrl, но это решается перенастройкой клавиатурной схемы, что требует много телодвижений, но хотя бы работает  (скорее всего, она, как и MacVim, ловит скан-коды, и поэтому может использовать любую клавиатурную раскладку, но почему-то в комплект не положили схему «Idea classic как в Windows», где вместо Command был бы Control, и ее пришлось городить самостоятельно).

  • Очень непривычно себя ведут операции манипулирования с текстом в обычных текстовых полях и редакторах, в частности, при вводе текста в textarea в браузерах, и т.п. Сочетания Ctrl-Home, Ctrl-End, Shift-Ctrl-Home, Shift-Ctrl-End, и аналогичные сочетания с кнопками курсора делают не совсем то (или совсем не то), что они делают в Windows и в Ubuntu. Это приводит просто к ужасному дискомфорту, когда Idea и Vim ведут себя как надо (ну, почти), а редактирование текста в браузерной форме (набить заметку в Evernote) или штатном редакторе вроде TextEdit использует совершенно другие сочетания клавиш для тех же самых действий. Так жить совершенно точно нельзя и не нужно, и, к счастью, это можно почти полностью исправить с помощью настроек: DefaultKeyBinding (в Приложении инструкция, как настроить[2]).

  • горячие клавиши в Chrome (Ctrl-T, Ctrl-W, Ctrl-L, Ctrl-F, F3) не работают по дефолту, потому что вместо Ctrl тут для них нужно использовать Command. Решилось штатными настройками горячих клавиш в System Settings — Keyboard — Application hotkeys (заменить Command на Ctrl, и клавиатурное управление наиболее частыми действиями в Chrome становится консистентным с Windows).

  • Аналог «ножниц» (сделать скриншот части экрана) есть, но сочетание клавиш для его активации не такое, как в Windows. Решилось назначением хоткея Win-Shift-S (такой же, как в Windows) при помощи штатных средств (системные настройки хоткеев)

  • Некоторого привычного софта нету, а есть только аналоги. Решается тем, что приобретается новый опыт, как использовать эти аналоги для решения задач, справляться с которыми ранее помогал привычный софт. (привычный Tortoise Git или DBForge не поставишь, но в Idea есть почти вся нужная функциональность, которую нужно освоить, попутно освоив способы, как обходить присущие этой функциональности баги и шероховатости. Idea хорошая программа, и JetBrains хорошая корпорация, но UX дизайнеров уровня Раскина там нет ни одного, и, кажется, не будет никогда).

  • вместо Far Manager тут Midnight Commander. Некоторой функциональности в нем все равно нет, но базовые вещи (вроде пользовательского меню с пунктами «Отправить в MacVim», «Показать в Finder», «Скопировать путь» и т.п.) настроить вроде получилось (в Приложении инструкция, как именно [3]). Также есть возможность сделать список с самыми часто используемыми директориями, и SFTP-подключения (которые умеют использовать ключи из ssh-agent). В настройках программы Terminal нужно включить галку «Use Option as Meta key», и тогда оно станет реагировать на клавиатурные сочетания, включающие Meta key (это Alt на обычной клавиатуре), а их там немало.

  • кое-где всё равно используются только маковские хоткеи. Вставить текст из буфера в терминале получается только по Command-V. Решилось… никак не решилось, но таких мест мало, и я решил, что пока с ними можно смириться. Возможно, по мере обживания конфигов найдется способ что-то подправить и там.

  • Концепция «рабочих простанств» (Spaces) оказалась сравнительно удобной для использования вместе с виртуальными машинами, но пришлось немного подкрутить: — штатный хоткей для перемещения туда-сюда между пространствами это Ctrl-Left и Ctrl-Right, который использовать совершенно невозможно, потому что в моем представлении это сочетание клавиш должно использоваться для перемещения курсора между словами при редактировании текста. Это довольно просто перенастраивается штатными средствами (я сделал Ctrl-Alt-Shift-(Left | Right). Второй нюанс в том, что мне нужно, чтобы виртуальная машина ловила все хоткеи, в том числе те, для которых назначено действие в хост-системе (Alt-Tab, Win-1, Win-2, Win-3, …). И этого можно достичь, если в настройках Parallels включить пункт «Send macOs system shortcuts = Always». Но побочным следствием такого будет то, что по Ctrl-Alt-Shift-Right войти в виртуальную машину можно, а выйти из нее по Ctrl-Alt-Shift-Left уже нельзя! К счастью, нашелся workaround — если двинуть мышь вверх, чтобы показалось системное меню Parallels, то Ctrl-Alt-Shift-Left обработается хост-системой. Ну и еще одно, что надо упомянуть — по умолчанию macOs использует поведение «Automatically rearrange spaces based on most recent use», что, возможно, иногда оправдано, но нарушает вышеупомянутый принцип монотонности совершенно явным образом (Раскин бы не одобрил), и чаще всего лучше эту опцию выключить.

  • Еще часто критикуют Макось за ее «недостаточные» возможности, предназначенные для тайлинга (расположения окон приложений по рабочему пространству одного или нескольких мониторов). Тут ничего толкового сказать не могу, потому что мой сценарий использования — это окно приложения, распахнутое на весь экран и переход к этому окну «монотонным» способом — Vim: Win-1, Chrome: Win-2, Far (Terminal): Win-3 и так далее.  Однако в комментариях к предыдущей статье был упомянут проект https://github.com/ianyh/Amethyst — на первый взгляд его возможностей должно быть достаточно для тех, кто привык раскладывать из окон красивую мозаику (автор вдохновлялся xmonad, когда его делал). Я, возможно, когда-нибудь попробую его поюзать.

Часть 2.  Субъективные реплики к пунктам статей этой своеобразной серии.

Читайте только если занудства в первой части вам показалось маловато, и надо бы добавить еще.

Тут попробую записать свое восприятие проблем, которые при переходе на Mac испытали авторы двух перечисленных статей. Начну с более старой опытной «7 причин почему вам не стоит переходить на Mac, или как справиться с этой демонической машиной»

  • Бестолковый Dock Bar

Мне он не показался бестолковым, потому что я, пользуясь Windows с версии Windows 95, еще помню, как эволюционировал Task Bar там. Раньше он выглядел так:

но, начиная с Windows Vista, стал выглядеть очень похоже на Mac-версию. В Windows 7 иконки приложений стали более квадратными (чтобы их помещалось по горизонтали больше) — как и в Mac, добавились визуальные элементы индикации, отображающие текущий статус приложения (запущено, не запущено, сколько окон — как и в Маке, скачивает / занято процессом — лучше, чем в Маке), но в целом никаких неудобств докбар не вызвал, потому что этот элемент управления работает и ведет себя почти так же, как и в Windows. Здесь мы видим пример процесса, когда UI-элементы из разных систем эволюционируют, перенимая друг у друга лучшие черты, и превращаются плюс-минус в одно и то же. Мое имхо: докбар — хорошо сделано, еще и выглядит eye-candy.  Доставить программу Snap, и оно еще и на клавиши начинает реагировать монотонно.

  • Планшетный LaunchPad

Это просто второстепенное приложение для запуска других приложений, которое использует метафоры UI, принятые на планшетах — вроде «перетащите Pages на Numbers, чтобы сделать Productivity», и т.п. Никаких проблем это не вызывает, потому что этим можно пользоваться точно так же, как на iPad, если привык к такому UI-решению, либо не пользоваться вовсе, если оно не нужно (как мне). А вот облегчить переходный период пользователю iPad, который впервые купил себе Макбук зачем-то, такое приложение может.

  • Активные углы

Тут пока воздержусь от комментария, потому что не пользовался, и не имею hands-on experience, как оно. Но в теории, эта штука обладает свойством монотонности, то есть бросок мыши в конкретный угол экрана должен приводить к одинаковому результату. Поэтому, вероятно, если настроить эту фичу правильно, то она скорее полезна, чем вредна.

  • Окна — боль

Тут сценарии использования тоже могут отличаться, но по моим многолетним наблюдениям за собой и за окружающими, основной сценарий использования — это окно приложения, распахнутое на весь экран, и переключение между несколькими  такими «максимизированными» окнами по мере того, какое приложение нужно. История с тайловыми менеджерами, призванными городить хитрую мозаику из окон запущенных приложений, почти никогда не находит применений в практике (исключения — двухпанельный интерфейс файловых менеджеров вроде Far, mc, Total Commander — но и там удобнее оказалось это сделать в виде двух панелей внутри одного приложения, и дашборды мониторинга, где надо одновременно выводить много метрик (визуально оформленных как градусники, спидометры, энцефалограммы, и т.п.) в реальном времени — но и там оказалось удобнее сделать это в чем-то вроде Графаны). В результате эти кнопки светофорных цветов оказались не особо нужны, поэтому и не особо мешают (хотя то, что они ведут себя по разному для разных приложений — это стыд, позор и нарушение принципа монотонности Раскина — например, красная кнопка может просто «свернуть» приложение, а может отправить виртуальную машину в сон, что, хотя концептуально и похоже на «свернуть», а все же значительно отличается, потому что при отправке в сон, в отличие от свертывания, порвутся открытые сокетные соединения).

  • Full Screen — выбор между плохим и ужасным

Вообще в теории Full Screen режим — это хорошо, потому что вспомогательные элементы управления прячутся и не отвлекают внимания, а нужное в данный момент приложение занимает всё доступное место. На практике же это оказывается неудобным, потому что прячутся не только ненужные элементы интерфейса, но и нужные тоже (menu bar вверху, где нужно обычно не само меню, а часы, календарь, текущая раскладка, статус клавиши CapsLock), докбар (где нужна иконка System Monitor с текущей загрузкой процессора), и подобные мелочи. Эту информацию о текущем статусе системы наверняка можно реализовать как дополнительное приложение, которое будет показывать ее и в полноэкранном режиме тоже, в виде какого-нибудь полупрозрачного окна, но такое приложение надо либо искать, либо писать. Кстати, это мысль.

  • Trackpad

Тут я промолчу, потому что не люблю использовать трекпад, и, когда возможно, использую по привычке мышь. Хотя трекпад хороший, работает, отзывчивый и чувствительный. Для случаев, когда совсем никакой мыши нет, наверное, можно перебиться.

  • Touch Bar

Про Touch Bar либо хорошо, либо ничего. Его убрали в новых макбуках, и правильно сделали.

Теперь про статью «Перейти с Linux на macOS и не сойти с ума».

Проблема: Dock занимает много места, принося минимальную пользу.

Решение: убрать влево, включить автоскрытие.

Почти согласен. Тоже убрал влево, но автоскрытие выключил, потому что от него (имхо) больше вреда, чем пользы. Автоскрытие было и есть и в таскбаре Windows тоже уже очень давно, и там оно тоже приносит больше вреда, чем пользы, по причинам, перечисленным выше.

Проблема: Command + Tab (аналог Alt + Tab в других ОС) показывает все приложения со всех рабочих столов, непригоден для переключения между несколькими окнами одного приложения.

Решение: использовать альтернативный переключатель окон AltTab, использовать жесты тачпада.

Тут благодарность автору за наводку на бесплатную опенсорсную программу Alt-Tab. Работает очень хорошо, хотя и не совсем так как в Windows, но в чем-то даже лучше.

Проблема: Тайлинг окон, нормальное разворачивание окна на весь экран.

Решение: Rectangle.

Для меня это не оказалось проблемой, потому что окно разворачивается на весь экран двойным кликом по заголовку (как и в Windows) и дальше остается в этом состоянии до перезагрузки. Еще можно зажать Alt на клавиатуре и мышкой нажать на зеленую кнопку — это, оказалось, как раз разворачивание окна на весь экран.

Проблема: Переключение раскладки клавиатуры по CapsLock для тех, кто быстро печатает и часто переключает раскладки.

Решение: Использование Karabiner-Elements.

А вот тут мне пришлось почесать репу. Я тоже быстро печатаю, и тоже привык использовать CapsLock для переключения РУС/ЛАТ. В Макоси есть для этого штатная функция (Use CapsLock to switch to and from US, что-то такое), и, сначала показалось, что это прямо то, что нужно. Оно действительно работает хорошо, пока не надо использовать странные сценарии, вроде таких как «подключиться по RDP к Windows-машине», где клавиатурную раскладку тоже нужно переключать по CapsLock. TL;DR: рабочим решением оказалось сделать то же самое, что и под Windows, а именно — сконструировать кастомную клавиатурную раскладку. На Маке это оказалось сделать (с помощью программы Ukelele) даже проще, потому что клавиатурная раскладка здесь — это файл в xml-формате, а на Windows — это полноценная DLL в формате PE, который еще разный под 32, 64 и ARM архитектуру должен быть. Под ARM (aarch64) у меня пока не получилось такую DLL собрать. Пичалька.

Проблема: Непривычная русская раскладка.

Решение: Использование раскладки «Russian — PC».

Для меня это не оказалось проблемой, потому что я сразу последовал этому совету, и поставил Russian — PC. И, хотя потом пришлось городить свою раскладку, русские буквы я разложил в ней именно так, как в Russian — PC, которая была взята за основу. Спасибо автору за хороший совет.

Проблема: Autocomplete в терминале.

Решение: Fig.

Тут я это решение использовать пока не стал, потому что мне настолько хитрое решение пока не нужно, а автодополнение названий веток в Git по Tab как-то само заработало (то ли после установки Homebrew, то ли сразу было).  Терминал (zsh) можно подвергнуть настройке, чтобы показывал текущую ветку git. Для этого в ~/.zshrc нужно дописать примерно такое (честно утянуто со StackOverflow):

Hidden text

parse_git_branch() {
    git branch 2> /dev/null | sed -n -e 's/^\* \(.*\)/[\1]/p'
}
COLOR_DEF='%f'
COLOR_USR='%F{243}'
COLOR_DIR='%F{197}'
COLOR_GIT='%F{39}'
NEWLINE=$'\n'
setopt PROMPT_SUBST
export PROMPT='${COLOR_USR}%n@%M ${COLOR_DIR}%d ${COLOR_GIT}$(parse_git_branch)${COLOR_DEF}%% '

Проблема: Docker-контейнеры тормозят.

Решение: нет.

Тут промолчу, ибо сам еще не налаживал и не запускал, но, говорят, что если надо запустить что-то x64, то придется использовать какое-то странное решение, в котором одновременно встречаются слова «docker» и «qemu», и оно вроде как еще потребляет много оперативы. (A work around is to spin up an x86 container using Colima, https://oralytics.com/2022/09/22/running-oracle-database-on-docker-on-apple-m1-chip/)

Проблема: Виртуальная машина с Windows и Linux.

Решение: UTM или QEMU.

Там автору подсказали, что «более лучшее» решение — это Parallels. Работает очень хорошо, Microsoft совсем недавно (февраль 2023) что-то даже официально сертифицировала, что Parallels для запуска Windows на макбуках с процессором Apple Silicon — это ОК, но все же Windows работает в режиме виртуальной машины там. То есть софт, который не лезет в ядро, вроде как работает весь, и с отличной, почти native, скоростью, но драйвера не запустятся, даже сравнительно безопасные, типа виртуальных сетевых интерфейсов для openconnect.

Часть 3.  Минусы и плюсы.

Начну с субъективных минусов (которых достаточно), чтобы закончить субъективными плюсами (которых тоже немало).

Сильнее всего не понравилось — это поведение курсора и системы выделения текста в штатных полях редактирования текста. Как-будто специально сделано, чтобы виндузятники не лезли на мак, и наоборот, с целью огораживания. Это оказалось возможным преодолеть (не полностью), но сама необходимость этим заниматься (гуглить нетривиальный способ настройки, а затем еще тюнить его под мои потребности) — создало достаточное количество предвзятости, немного даже переходящей в негатив. При этом в GUI линуксов, сколько их помню, редактирование текста вело себя так же, как в Windows, либо очень похоже.

Еще напрягло (и напрягает до сих пор) скроллинг по колесу внешней (не эппловской, а логитековской) мыши: он то слишком быстрый, то слишком медленный, и нельзя настроить, чтоб было привычно, как в Windows.

Не понравилось, что частота сканирования внешней клавиатуры совсем уж мала (внутренняя работает без нареканий), и с нее Caps иногда не включается или не выключается, когда жмешь его слишком быстро. «А вы просто не жмите так, а жмите помедленнее, с чувством, с толком, с расстановкой», — ну, что ж, такой совет помогает. Но вот в Windows никогда не крохоборничали на этой частоте, и оно всегда, сколько помню, отрабатывало моментально (с одним исключением — когда у Windows забивается дисковая очередь — вот тогда даже ядро начинает тормозить в базовых функциях реагирования на мышь и клавиатуру)

Что еще? Ну, непривычное и неконсистентное поведение кнопок управления размером окна… но это не воспринималось, как напряг, просто местная особенность.

Остальное же плюс-минус точно такое же, как и в других компьютерах. Процессор с регистрами, память, прерывания, планировщик, тред, файл, диск, сокет, пайп, GUI с реактивной моделью, что тут еще можно придумать… [место для смайлика с разведенными руками ¯_(ツ)_/¯ ]

Теперь про плюсы.

  • не глючит (не глючит сама ОС, приложения, к сожалению, еще как глючат и вылетают, в том числе даже системный WindowServer)

  • не тормозит (заставить тормозить не удалось)

  • не греется и не жужжит вентиляторами (заставить греться и жужжать получилось, но для этого надо было выключить режим low power mode, запустить виртуалку с виндой и в ней запустить GPU Stress Test системы «волосатый бублик», при этом включив еще опции «cpu burner», и запустить этот cpu burner параллельно с бубликом)

  • производительный (10 ядер, быстрая оперативка, можно запустить виртуальную машину с виндой и в ней упомянутый «волосатый бублик», и он будет показывать 60 FPS на FullHD. Не знаю, умеет ли так какой-либо ноутбук на Windows).

  • почти все нужные тулзы тут есть сразу (ssh, openssl, base64, md5, curl, split, xmllint, вот это вот все) — на винде сейчас приходится доустанавливать даже банальный telnet. Git, как я понял, ставится вместе с Homebrew, и потом тоже доступен везде.

  • чего нету — обычно легко доустанавливается через Homebrew (типа jq для форматирования JSON или nginx, тоже бывает нужен, хотя бы захостить статику)

  • обнаружил, что MacVim довольно тесно интегрируется с шеллом (zsh), и может исполнять команды шелла прямо если написать непосредственно в текущем документе (а не в режиме командной строки), причем это корректно отрабатывает даже с sudo-командами, когда надо вводить пароль, или ping, которые выдают строку за строкой. Это повышает удобство использования CLI-утилит просто в разы, и на Винде такой тесной интеграции мне достичь не удалось, хотя дёргать CLI-утилиты таким способом можно и там тоже (см. Приложение [4]).

  • долго держит батарейку (не проверял, потому что у меня компьютер практически всегда подключен к сети, и мне это не очень актуально)

  • умеет подзаряжаться даже от старых и слабых телефонных зарядок. Как-то у меня не было нормального мощного зарядного устройства, и пришлось подключить разряженный макбук к тому, что было (телефонное зарядное устройство, 5В, 2А). Часов за 9 он набрал полный заряд. Не видел, чтобы виндобуки так умели делать.

  • есть Spotlight Search (тот самый, который по Command-Space) — вот он работает быстро и принцип монотонности соблюдает как раз просто канонически. Хотя, справедливости ради, похожий по назначению Everything Search Engine под Windows работает не хуже, если не считать, что функциональность последнего ограничена поиском только по именам файлов и каталогов.

  • вроде как не кряхтит даже под нагрузкой (две виртуальных машины, Ubuntu и Windows 11, Идея,  запущенный java-проект и запущенный dev server под node, запущенный Хром и остальное по мелочи) — и оно не демонстрирует никаких подтормаживаний, хотя график Memory Pressure в мониторе ресурсов уже устойчиво уходит в желтую зону. Это у меня с 16 Gb RAM конфигурация, а бывают и с 32.

  • экран и встроенная клавиатура, говорят, хороши, но я пользуюсь нормальной внешней клавиатурой со стандартной раскладкой, к которой приспособлен мой навык десятипальцевой слепой печати, и, по возможности, внешним монитором тоже (4K 60 Hz без проблем работает через HDMI), так что тут оценить в полной мере не могу.

  • Имеется rosetta2 (которую надо, сначала, доустановить с помощью sudo softwareupgrade rosetta2), которая позволяет запускать собранные (для Макоси, конечно) бинарники с архитектурой x86_64. Помогает, если нужно запустить что-то, что под aarch64 еще не успели пересобрать.

  • Как Ubuntu, так и ARM-версия Windows 11 запускаются в Parallels, причем работают почти что с native-производительностью. При этом Windows с помощью какой-то магии умеет запускать exe-шники всех трех архитектур: x86, x86_64 и ARM (hint: чтобы посмотреть, что это за exe-шник, можно использовать встроенную в макбук программу file). Однако полного чуда все равно не происходит, и кое-что все равно не работает: некоторые драйверы (у меня не завелся openconnect под Windows, потому что он не смог установить tap/tun драйвер, или что-то такое), а также не смогла загрузиться DLL с клавиатурной раскладкой, предназначенной для переключения по Caps Lock, собранная под x86_64, причем система ее видит и показывает в списке доступных клавиатурных раскладок, но не может использовать. Даже Microsoft Keyboard Layout Creator, запущенный под ARM-виндой, собирает DLL под архитектуру x86_64, и она под этой виндой оказывается неюзабельной.

  • красиво и престижно иметь красивый и престижный компьютер с яблоком (ну, тут, как бы да, но как бы и не совсем)

Эпилог. «И как тебе макбук»?

Скорее стал нравиться,  после полугодовой доработки напильником, но фэнбойства никакого не появилось и близко. Как-то так. У этого компьютера есть ощутимые плюсы, которые, может быть, перевешивают минусы, но минусы никуда не деваются, а устранить их могут только в корпорации Apple, потому что это вопросы идеологии. «Является ли такое поведение системы багом или фичей», вот в чем вопрос.

Стоило ли оно того (полгода не очень больших, но всё же усилий, чтобы сконфигурировать этот макбук под мои потребности виндузятника)? Вопрос почти риторический. В моем случае — скорее это было не оправдано. На Винде у меня уже всё было готовое (не только набор софта, но и клавиатурные привычки и наработанные способы решения задач), а тут мне пришлось многое заново изучать, настраивать и конфигурировать. Но с другой стороны, любим же мы компьютерщину не за то, что все настроено и работает, а именно за то, что можно возиться и все настраивать и улучшать :). По принципу «put the fun back into computing — use Linux, BSD…» Поэтому с одной стороны у меня присутствует ощущение потраченных не таких уж маленьких денег и затраченного не такого уж маленького времени, чтобы настроить этот компьютер до состояния, что я могу на нем работать (а при этом он работает плюс-минус с той же отзывчивостью, скоростью и безглючностью, что и хороший виндобук), а с другой стороны, есть и ощущение некоторого удовлетворения, что я смог разобраться и настроить как мне надо, и, в процессе этого, наверное, узнал какие-то новые нюансы взаимодействия с nix-системами.  От которых мы в ближайшем обозримом будущем никуда не денемся, потому что сейчас уже понятно, что мало-мальски важную инфраструктуру будут впредь выстраивать именно на открытых, а не на проприетарных решениях.

Короче, компьютер действительно тихий и быстрый, имеет запас прочности по производительности (я так и не смог его нагрузить своими текущими задачами по-полной), и, по сути, предлагает производительность хорошего десктопа в форм-факторе ноутбука, который еще и работает обычно абсолютно бесшумно (последнее для меня весьма важно).

Еще некоторое удовлетворение приносит факт, что я осилил дописать эту статью :)

Вот. Поздравляю всех с наступившей весной, желаю мира, добра, любви и эргономичного взаимодействия как с компьютерами, так и не с компьютерами.

Приложение. Как конкретно настроить то, сё, пятое, десятое. Технические подробности.

Мои конфиги для макоси, которые описываю ниже, я разместил в репозитории https://github.com/konstlvov/macos.

  1. Переключение РУС/ЛАТ по CapsLock. Решается с помощью создания кастомной клавиатурной раскладки «ruscaps» с помощью программы Ukelele для Макоси. Эта программа предоставляет графический интерфейс, с помощью нажимания на кнопки в котором в конце концов получается примерно такой файл:

Hidden text

<?xml version="1.1" encoding="UTF-8"?>
<!DOCTYPE keyboard SYSTEM "file://localhost/System/Library/DTDs/KeyboardLayout.dtd">
<!--Created by Ukelele version 359 on 2023-02-24 at 13:05 (GMT+3)-->
<!--Last edited by Ukelele version 359 on 2023-02-26 at 13:38 (GMT+3)-->
<keyboard group="126" id="-5618" name="ruscaps" maxout="1">
    <layouts>
        <layout first="0" last="17" mapSet="ANSI" modifiers="Modifiers"/>
        <layout first="18" last="18" mapSet="JIS" modifiers="Modifiers"/>
        <layout first="21" last="23" mapSet="JIS" modifiers="Modifiers"/>
        <layout first="30" last="30" mapSet="JIS" modifiers="Modifiers"/>
        <layout first="33" last="33" mapSet="JIS" modifiers="Modifiers"/>
        <layout first="36" last="36" mapSet="JIS" modifiers="Modifiers"/>
        <layout first="194" last="194" mapSet="JIS" modifiers="Modifiers"/>
        <layout first="197" last="197" mapSet="JIS" modifiers="Modifiers"/>
        <layout first="200" last="201" mapSet="JIS" modifiers="Modifiers"/>
        <layout first="206" last="207" mapSet="JIS" modifiers="Modifiers"/>
    </layouts>
    <modifierMap id="Modifiers" defaultIndex="10">
        <keyMapSelect mapIndex="0">
            <modifier keys=""/>
        </keyMapSelect>
        <keyMapSelect mapIndex="1">
            <modifier keys="anyShift"/>
        </keyMapSelect>
        <keyMapSelect mapIndex="2">
            <modifier keys="anyOption"/>
        </keyMapSelect>
        <keyMapSelect mapIndex="3">
            <modifier keys="anyShift caps? anyOption"/>
        </keyMapSelect>
        <keyMapSelect mapIndex="4">
            <modifier keys="caps"/>
        </keyMapSelect>
        <keyMapSelect mapIndex="5">
            <modifier keys="command"/>
        </keyMapSelect>
        <keyMapSelect mapIndex="6">
            <modifier keys="anyShift command"/>
        </keyMapSelect>
        <keyMapSelect mapIndex="7">
            <modifier keys="anyOption command"/>
        </keyMapSelect>
        <keyMapSelect mapIndex="8">
            <modifier keys="anyShift anyOption command"/>
        </keyMapSelect>
        <keyMapSelect mapIndex="9">
            <modifier keys="caps command"/>
        </keyMapSelect>
        <keyMapSelect mapIndex="10">
            <modifier keys="anyControl"/>
        </keyMapSelect>
        <keyMapSelect mapIndex="11">
            <modifier keys="caps anyControl"/>
        </keyMapSelect>
        <keyMapSelect mapIndex="12">
            <modifier keys="anyShift caps"/>
        </keyMapSelect>
    </modifierMap>
    <keyMapSet id="ANSI">
        <keyMap index="0">
            <key code="0" output="a"/>
            <key code="1" output="s"/>
            <key code="2" output="d"/>
            <key code="3" output="f"/>
            <key code="4" output="h"/>
            <key code="5" output="g"/>
            <key code="6" output="z"/>
            <key code="7" output="x"/>
            <key code="8" output="c"/>
            <key code="9" output="v"/>
            <key code="10" output="§"/>
            <key code="11" output="b"/>
            <key code="12" output="q"/>
            <key code="13" output="w"/>
            <key code="14" output="e"/>
            <key code="15" output="r"/>
            <key code="16" output="y"/>
            <key code="17" output="t"/>
            <key code="18" output="1"/>
            <key code="19" output="2"/>
            <key code="20" output="3"/>
            <key code="21" output="4"/>
            <key code="22" output="6"/>
            <key code="23" output="5"/>
            <key code="24" output="="/>
            <key code="25" output="9"/>
            <key code="26" output="7"/>
            <key code="27" output="-"/>
            <key code="28" output="8"/>
            <key code="29" output="0"/>
            <key code="30" output="]"/>
            <key code="31" output="o"/>
            <key code="32" output="u"/>
            <key code="33" output="["/>
            <key code="34" output="i"/>
            <key code="35" output="p"/>
            <key code="36" output="&#x000D;"/>
            <key code="37" output="l"/>
            <key code="38" output="j"/>
            <key code="39" output="&#x0027;"/>
            <key code="40" output="k"/>
            <key code="41" output=";"/>
            <key code="42" output="\"/>
            <key code="43" output=","/>
            <key code="44" output="/"/>
            <key code="45" output="n"/>
            <key code="46" output="m"/>
            <key code="47" output="."/>
            <key code="48" output="&#x0009;"/>
            <key code="49" output=" "/>
            <key code="50" output="`"/>
            <key code="51" output="&#x0008;"/>
            <key code="53" output="&#x001B;"/>
            <key code="64" output="&#x0010;"/>
            <key code="65" output="."/>
            <key code="66" output="&#x001D;"/>
            <key code="67" output="*"/>
            <key code="69" output="+"/>
            <key code="70" output="&#x001C;"/>
            <key code="71" output="&#x001B;"/>
            <key code="72" output="&#x001F;"/>
            <key code="75" output="/"/>
            <key code="76" output="&#x0003;"/>
            <key code="77" output="&#x001E;"/>
            <key code="78" output="-"/>
            <key code="79" output="&#x0010;"/>
            <key code="80" output="&#x0010;"/>
            <key code="81" output="="/>
            <key code="82" output="0"/>
            <key code="83" output="1"/>
            <key code="84" output="2"/>
            <key code="85" output="3"/>
            <key code="86" output="4"/>
            <key code="87" output="5"/>
            <key code="88" output="6"/>
            <key code="89" output="7"/>
            <key code="91" output="8"/>
            <key code="92" output="9"/>
            <key code="96" output="&#x0010;"/>
            <key code="97" output="&#x0010;"/>
            <key code="98" output="&#x0010;"/>
            <key code="99" output="&#x0010;"/>
            <key code="100" output="&#x0010;"/>
            <key code="101" output="&#x0010;"/>
            <key code="103" output="&#x0010;"/>
            <key code="105" output="&#x0010;"/>
            <key code="106" output="&#x0010;"/>
            <key code="107" output="&#x0010;"/>
            <key code="109" output="&#x0010;"/>
            <key code="111" output="&#x0010;"/>
            <key code="113" output="&#x0010;"/>
            <key code="114" output="&#x0005;"/>
            <key code="115" output="&#x0001;"/>
            <key code="116" output="&#x000B;"/>
            <key code="117" output="&#x007F;"/>
            <key code="118" output="&#x0010;"/>
            <key code="119" output="&#x0004;"/>
            <key code="120" output="&#x0010;"/>
            <key code="121" output="&#x000C;"/>
            <key code="122" output="&#x0010;"/>
            <key code="123" output="&#x001C;"/>
            <key code="124" output="&#x001D;"/>
            <key code="125" output="&#x001F;"/>
            <key code="126" output="&#x001E;"/>
        </keyMap>
        <keyMap index="1">
            <key code="0" output="A"/>
            <key code="1" output="S"/>
            <key code="2" output="D"/>
            <key code="3" output="F"/>
            <key code="4" output="H"/>
            <key code="5" output="G"/>
            <key code="6" output="Z"/>
            <key code="7" output="X"/>
            <key code="8" output="C"/>
            <key code="9" output="V"/>
            <key code="10" output="±"/>
            <key code="11" output="B"/>
            <key code="12" output="Q"/>
            <key code="13" output="W"/>
            <key code="14" output="E"/>
            <key code="15" output="R"/>
            <key code="16" output="Y"/>
            <key code="17" output="T"/>
            <key code="18" output="!"/>
            <key code="19" output="@"/>
            <key code="20" output="#"/>
            <key code="21" output="$"/>
            <key code="22" output="^"/>
            <key code="23" output="%"/>
            <key code="24" output="+"/>
            <key code="25" output="("/>
            <key code="26" output="&#x0026;"/>
            <key code="27" output="_"/>
            <key code="28" output="*"/>
            <key code="29" output=")"/>
            <key code="30" output="}"/>
            <key code="31" output="O"/>
            <key code="32" output="U"/>
            <key code="33" output="{"/>
            <key code="34" output="I"/>
            <key code="35" output="P"/>
            <key code="36" output="&#x000D;"/>
            <key code="37" output="L"/>
            <key code="38" output="J"/>
            <key code="39" output="&#x0022;"/>
            <key code="40" output="K"/>
            <key code="41" output=":"/>
            <key code="42" output="|"/>
            <key code="43" output="&#x003C;"/>
            <key code="44" output="?"/>
            <key code="45" output="N"/>
            <key code="46" output="M"/>
            <key code="47" output="&#x003E;"/>
            <key code="48" output="&#x0009;"/>
            <key code="49" output=" "/>
            <key code="50" output="~"/>
            <key code="51" output="&#x0008;"/>
            <key code="53" output="&#x001B;"/>
            <key code="64" output="&#x0010;"/>
            <key code="65" output="."/>
            <key code="66" output="&#x001D;"/>
            <key code="67" output="*"/>
            <key code="69" output="+"/>
            <key code="70" output="&#x001C;"/>
            <key code="71" output="&#x001B;"/>
            <key code="72" output="&#x001F;"/>
            <key code="75" output="/"/>
            <key code="76" output="&#x0003;"/>
            <key code="77" output="&#x001E;"/>
            <key code="78" output="-"/>
            <key code="79" output="&#x0010;"/>
            <key code="80" output="&#x0010;"/>
            <key code="81" output="="/>
            <key code="82" output="0"/>
            <key code="83" output="1"/>
            <key code="84" output="2"/>
            <key code="85" output="3"/>
            <key code="86" output="4"/>
            <key code="87" output="5"/>
            <key code="88" output="6"/>
            <key code="89" output="7"/>
            <key code="91" output="8"/>
            <key code="92" output="9"/>
            <key code="96" output="&#x0010;"/>
            <key code="97" output="&#x0010;"/>
            <key code="98" output="&#x0010;"/>
            <key code="99" output="&#x0010;"/>
            <key code="100" output="&#x0010;"/>
            <key code="101" output="&#x0010;"/>
            <key code="103" output="&#x0010;"/>
            <key code="105" output="&#x0010;"/>
            <key code="106" output="&#x0010;"/>
            <key code="107" output="&#x0010;"/>
            <key code="109" output="&#x0010;"/>
            <key code="111" output="&#x0010;"/>
            <key code="113" output="&#x0010;"/>
            <key code="114" output="&#x0005;"/>
            <key code="115" output="&#x0001;"/>
            <key code="116" output="&#x000B;"/>
            <key code="117" output="&#x007F;"/>
            <key code="118" output="&#x0010;"/>
            <key code="119" output="&#x0004;"/>
            <key code="120" output="&#x0010;"/>
            <key code="121" output="&#x000C;"/>
            <key code="122" output="&#x0010;"/>
            <key code="123" output="&#x001C;"/>
            <key code="124" output="&#x001D;"/>
            <key code="125" output="&#x001F;"/>
            <key code="126" output="&#x001E;"/>
        </keyMap>
        <keyMap index="2">
            <key code="0" output=""/>
            <key code="1" output=""/>
            <key code="2" output=""/>
            <key code="3" output=""/>
            <key code="4" output=""/>
            <key code="5" output=""/>
            <key code="6" output=""/>
            <key code="7" output=""/>
            <key code="8" output=""/>
            <key code="9" output=""/>
            <key code="10" output=""/>
            <key code="11" output=""/>
            <key code="12" output=""/>
            <key code="13" output=""/>
            <key code="14" output=""/>
            <key code="15" output=""/>
            <key code="16" output=""/>
            <key code="17" output=""/>
            <key code="18" output=""/>
            <key code="19" output=""/>
            <key code="20" output=""/>
            <key code="21" output=""/>
            <key code="22" output=""/>
            <key code="23" output=""/>
            <key code="24" output=""/>
            <key code="25" output=""/>
            <key code="26" output=""/>
            <key code="27" output=""/>
            <key code="28" output=""/>
            <key code="29" output=""/>
            <key code="30" output=""/>
            <key code="31" output=""/>
            <key code="32" output=""/>
            <key code="33" output=""/>
            <key code="34" output=""/>
            <key code="35" output=""/>
            <key code="36" output="&#x000D;"/>
            <key code="37" output=""/>
            <key code="38" output=""/>
            <key code="39" output=""/>
            <key code="40" output=""/>
            <key code="41" output=""/>
            <key code="42" output=""/>
            <key code="43" output=""/>
            <key code="44" output=""/>
            <key code="45" output=""/>
            <key code="46" output=""/>
            <key code="47" output=""/>
            <key code="48" output="&#x0009;"/>
            <key code="49" output=""/>
            <key code="50" output=""/>
            <key code="51" output="&#x0008;"/>
            <key code="53" output="&#x001B;"/>
            <key code="64" output="&#x0010;"/>
            <key code="65" output=""/>
            <key code="66" output="&#x001D;"/>
            <key code="67" output=""/>
            <key code="69" output=""/>
            <key code="70" output="&#x001C;"/>
            <key code="71" output="&#x001B;"/>
            <key code="72" output="&#x001F;"/>
            <key code="75" output=""/>
            <key code="76" output="&#x0003;"/>
            <key code="77" output="&#x001E;"/>
            <key code="78" output=""/>
            <key code="79" output="&#x0010;"/>
            <key code="80" output="&#x0010;"/>
            <key code="81" output=""/>
            <key code="82" output=""/>
            <key code="83" output=""/>
            <key code="84" output=""/>
            <key code="85" output=""/>
            <key code="86" output=""/>
            <key code="87" output=""/>
            <key code="88" output=""/>
            <key code="89" output=""/>
            <key code="91" output=""/>
            <key code="92" output=""/>
            <key code="96" output="&#x0010;"/>
            <key code="97" output="&#x0010;"/>
            <key code="98" output="&#x0010;"/>
            <key code="99" output="&#x0010;"/>
            <key code="100" output="&#x0010;"/>
            <key code="101" output="&#x0010;"/>
            <key code="103" output="&#x0010;"/>
            <key code="105" output="&#x0010;"/>
            <key code="106" output="&#x0010;"/>
            <key code="107" output="&#x0010;"/>
            <key code="109" output="&#x0010;"/>
            <key code="111" output="&#x0010;"/>
            <key code="113" output="&#x0010;"/>
            <key code="114" output="&#x0005;"/>
            <key code="115" output="&#x0001;"/>
            <key code="116" output="&#x000B;"/>
            <key code="117" output="&#x007F;"/>
            <key code="118" output="&#x0010;"/>
            <key code="119" output="&#x0004;"/>
            <key code="120" output="&#x0010;"/>
            <key code="121" output="&#x000C;"/>
            <key code="122" output="&#x0010;"/>
            <key code="123" output="&#x001C;"/>
            <key code="124" output="&#x001D;"/>
            <key code="125" output="&#x001F;"/>
            <key code="126" output="&#x001E;"/>
        </keyMap>
        <keyMap index="3">
            <key code="0" output=""/>
            <key code="36" output="&#x000D;"/>
            <key code="48" output="&#x0009;"/>
            <key code="51" output="&#x0008;"/>
            <key code="53" output="&#x001B;"/>
            <key code="64" output="&#x0010;"/>
            <key code="66" output="&#x001D;"/>
            <key code="70" output="&#x001C;"/>
            <key code="71" output="&#x001B;"/>
            <key code="72" output="&#x001F;"/>
            <key code="76" output="&#x0003;"/>
            <key code="77" output="&#x001E;"/>
            <key code="79" output="&#x0010;"/>
            <key code="80" output="&#x0010;"/>
            <key code="96" output="&#x0010;"/>
            <key code="97" output="&#x0010;"/>
            <key code="98" output="&#x0010;"/>
            <key code="99" output="&#x0010;"/>
            <key code="100" output="&#x0010;"/>
            <key code="101" output="&#x0010;"/>
            <key code="103" output="&#x0010;"/>
            <key code="105" output="&#x0010;"/>
            <key code="106" output="&#x0010;"/>
            <key code="107" output="&#x0010;"/>
            <key code="109" output="&#x0010;"/>
            <key code="111" output="&#x0010;"/>
            <key code="113" output="&#x0010;"/>
            <key code="114" output="&#x0005;"/>
            <key code="115" output="&#x0001;"/>
            <key code="116" output="&#x000B;"/>
            <key code="117" output="&#x007F;"/>
            <key code="118" output="&#x0010;"/>
            <key code="119" output="&#x0004;"/>
            <key code="120" output="&#x0010;"/>
            <key code="121" output="&#x000C;"/>
            <key code="122" output="&#x0010;"/>
            <key code="123" output="&#x001C;"/>
            <key code="124" output="&#x001D;"/>
            <key code="125" output="&#x001F;"/>
            <key code="126" output="&#x001E;"/>
        </keyMap>
        <keyMap index="4">
            <key code="0" output="ф"/>
            <key code="1" output="ы"/>
            <key code="2" output="в"/>
            <key code="3" output="а"/>
            <key code="4" output="р"/>
            <key code="5" output="п"/>
            <key code="6" output="я"/>
            <key code="7" output="ч"/>
            <key code="8" output="с"/>
            <key code="9" output="м"/>
            <key code="10" output="ё"/>
            <key code="11" output="и"/>
            <key code="12" output="й"/>
            <key code="13" output="ц"/>
            <key code="14" output="у"/>
            <key code="15" output="к"/>
            <key code="16" output="н"/>
            <key code="17" output="е"/>
            <key code="18" output="1"/>
            <key code="19" output="2"/>
            <key code="20" output="3"/>
            <key code="21" output="4"/>
            <key code="22" output="6"/>
            <key code="23" output="5"/>
            <key code="24" output="="/>
            <key code="25" output="9"/>
            <key code="26" output="7"/>
            <key code="27" output="-"/>
            <key code="28" output="8"/>
            <key code="29" output="0"/>
            <key code="30" output="ъ"/>
            <key code="31" output="щ"/>
            <key code="32" output="г"/>
            <key code="33" output="х"/>
            <key code="34" output="ш"/>
            <key code="35" output="з"/>
            <key code="36" output="&#x000D;"/>
            <key code="37" output="д"/>
            <key code="38" output="о"/>
            <key code="39" output="э"/>
            <key code="40" output="л"/>
            <key code="41" output="ж"/>
            <key code="42" output="\"/>
            <key code="43" output="б"/>
            <key code="44" output="."/>
            <key code="45" output="т"/>
            <key code="46" output="ь"/>
            <key code="47" output="ю"/>
            <key code="48" output="&#x0009;"/>
            <key code="49" output=" "/>
            <key code="50" output="ё"/>
            <key code="51" output="&#x0008;"/>
            <key code="53" output="&#x001B;"/>
            <key code="64" output="&#x0010;"/>
            <key code="65" output="."/>
            <key code="66" output="&#x001D;"/>
            <key code="67" output="*"/>
            <key code="69" output="+"/>
            <key code="70" output="&#x001C;"/>
            <key code="71" output="&#x001B;"/>
            <key code="72" output="&#x001F;"/>
            <key code="75" output="/"/>
            <key code="76" output="&#x0003;"/>
            <key code="77" output="&#x001E;"/>
            <key code="78" output="-"/>
            <key code="79" output="&#x0010;"/>
            <key code="80" output="&#x0010;"/>
            <key code="81" output="="/>
            <key code="82" output="0"/>
            <key code="83" output="1"/>
            <key code="84" output="2"/>
            <key code="85" output="3"/>
            <key code="86" output="4"/>
            <key code="87" output="5"/>
            <key code="88" output="6"/>
            <key code="89" output="7"/>
            <key code="91" output="8"/>
            <key code="92" output="9"/>
            <key code="96" output="&#x0010;"/>
            <key code="97" output="&#x0010;"/>
            <key code="98" output="&#x0010;"/>
            <key code="99" output="&#x0010;"/>
            <key code="100" output="&#x0010;"/>
            <key code="101" output="&#x0010;"/>
            <key code="103" output="&#x0010;"/>
            <key code="105" output="&#x0010;"/>
            <key code="106" output="&#x0010;"/>
            <key code="107" output="&#x0010;"/>
            <key code="109" output="&#x0010;"/>
            <key code="111" output="&#x0010;"/>
            <key code="113" output="&#x0010;"/>
            <key code="114" output="&#x0005;"/>
            <key code="115" output="&#x0001;"/>
            <key code="116" output="&#x000B;"/>
            <key code="117" output="&#x007F;"/>
            <key code="118" output="&#x0010;"/>
            <key code="119" output="&#x0004;"/>
            <key code="120" output="&#x0010;"/>
            <key code="121" output="&#x000C;"/>
            <key code="122" output="&#x0010;"/>
            <key code="123" output="&#x001C;"/>
            <key code="124" output="&#x001D;"/>
            <key code="125" output="&#x001F;"/>
            <key code="126" output="&#x001E;"/>
        </keyMap>
        <keyMap index="5">
            <key code="0" output="a"/>
            <key code="1" output="s"/>
            <key code="2" output="d"/>
            <key code="3" output="f"/>
            <key code="4" output="h"/>
            <key code="5" output="g"/>
            <key code="6" output="z"/>
            <key code="7" output="x"/>
            <key code="8" output="c"/>
            <key code="9" output="v"/>
            <key code="10" output=""/>
            <key code="11" output="b"/>
            <key code="12" output="q"/>
            <key code="13" output="w"/>
            <key code="14" output="e"/>
            <key code="15" output="r"/>
            <key code="16" output="y"/>
            <key code="17" output="t"/>
            <key code="18" output="1"/>
            <key code="19" output="2"/>
            <key code="20" output="3"/>
            <key code="21" output="4"/>
            <key code="22" output="6"/>
            <key code="23" output="5"/>
            <key code="24" output="="/>
            <key code="25" output="9"/>
            <key code="26" output="7"/>
            <key code="27" output="-"/>
            <key code="28" output="8"/>
            <key code="29" output="0"/>
            <key code="30" output="]"/>
            <key code="31" output="o"/>
            <key code="32" output="u"/>
            <key code="33" output="["/>
            <key code="34" output="i"/>
            <key code="35" output="p"/>
            <key code="36" output="&#x000D;"/>
            <key code="37" output="l"/>
            <key code="38" output="j"/>
            <key code="39" output="&#x0027;"/>
            <key code="40" output="k"/>
            <key code="41" output=";"/>
            <key code="42" output="\"/>
            <key code="43" output=","/>
            <key code="44" output="/"/>
            <key code="45" output="n"/>
            <key code="46" output="m"/>
            <key code="47" output="."/>
            <key code="48" output="&#x0009;"/>
            <key code="49" output=" "/>
            <key code="50" output="`"/>
            <key code="51" output="&#x0008;"/>
            <key code="53" output="&#x001B;"/>
            <key code="64" output="&#x0010;"/>
            <key code="65" output=""/>
            <key code="66" output="&#x001D;"/>
            <key code="67" output="*"/>
            <key code="69" output="+"/>
            <key code="70" output="&#x001C;"/>
            <key code="71" output="&#x001B;"/>
            <key code="72" output="&#x001F;"/>
            <key code="75" output="/"/>
            <key code="76" output="&#x0003;"/>
            <key code="77" output="&#x001E;"/>
            <key code="78" output="-"/>
            <key code="79" output="&#x0010;"/>
            <key code="80" output="&#x0010;"/>
            <key code="81" output="="/>
            <key code="82" output="0"/>
            <key code="83" output="1"/>
            <key code="84" output="2"/>
            <key code="85" output="3"/>
            <key code="86" output="4"/>
            <key code="87" output="5"/>
            <key code="88" output="6"/>
            <key code="89" output="7"/>
            <key code="91" output="8"/>
            <key code="92" output="9"/>
            <key code="96" output="&#x0010;"/>
            <key code="97" output="&#x0010;"/>
            <key code="98" output="&#x0010;"/>
            <key code="99" output="&#x0010;"/>
            <key code="100" output="&#x0010;"/>
            <key code="101" output="&#x0010;"/>
            <key code="103" output="&#x0010;"/>
            <key code="105" output="&#x0010;"/>
            <key code="106" output="&#x0010;"/>
            <key code="107" output="&#x0010;"/>
            <key code="109" output="&#x0010;"/>
            <key code="111" output="&#x0010;"/>
            <key code="113" output="&#x0010;"/>
            <key code="114" output="&#x0005;"/>
            <key code="115" output="&#x0001;"/>
            <key code="116" output="&#x000B;"/>
            <key code="117" output="&#x007F;"/>
            <key code="118" output="&#x0010;"/>
            <key code="119" output="&#x0004;"/>
            <key code="120" output="&#x0010;"/>
            <key code="121" output="&#x000C;"/>
            <key code="122" output="&#x0010;"/>
            <key code="123" output="&#x001C;"/>
            <key code="124" output="&#x001D;"/>
            <key code="125" output="&#x001F;"/>
            <key code="126" output="&#x001E;"/>
        </keyMap>
        <keyMap index="6">
            <key code="0" output="A"/>
            <key code="1" output="S"/>
            <key code="2" output="D"/>
            <key code="3" output="F"/>
            <key code="4" output="H"/>
            <key code="5" output="G"/>
            <key code="6" output="Z"/>
            <key code="7" output="X"/>
            <key code="8" output="C"/>
            <key code="9" output="V"/>
            <key code="11" output="B"/>
            <key code="12" output="Q"/>
            <key code="13" output="W"/>
            <key code="14" output="E"/>
            <key code="15" output="R"/>
            <key code="16" output="Y"/>
            <key code="17" output="T"/>
            <key code="18" output="!"/>
            <key code="19" output="@"/>
            <key code="20" output="#"/>
            <key code="21" output="$"/>
            <key code="22" output="^"/>
            <key code="23" output="%"/>
            <key code="24" output="+"/>
            <key code="25" output="("/>
            <key code="26" output="&#x0026;"/>
            <key code="27" output="_"/>
            <key code="28" output="*"/>
            <key code="29" output=")"/>
            <key code="30" output="}"/>
            <key code="31" output="O"/>
            <key code="32" output="U"/>
            <key code="33" output="{"/>
            <key code="34" output="I"/>
            <key code="35" output="P"/>
            <key code="36" output="&#x000D;"/>
            <key code="37" output="L"/>
            <key code="38" output="J"/>
            <key code="39" output="&#x0022;"/>
            <key code="40" output="K"/>
            <key code="41" output=":"/>
            <key code="42" output="|"/>
            <key code="43" output="&#x003C;"/>
            <key code="44" output="?"/>
            <key code="45" output="N"/>
            <key code="46" output="M"/>
            <key code="47" output="&#x003E;"/>
            <key code="48" output="&#x0009;"/>
            <key code="49" output=" "/>
            <key code="50" output="~"/>
            <key code="51" output="&#x0008;"/>
            <key code="53" output="&#x001B;"/>
            <key code="64" output="&#x0010;"/>
            <key code="66" output="&#x001D;"/>
            <key code="67" output="*"/>
            <key code="69" output="+"/>
            <key code="70" output="&#x001C;"/>
            <key code="71" output="&#x001B;"/>
            <key code="72" output="&#x001F;"/>
            <key code="75" output="/"/>
            <key code="76" output="&#x0003;"/>
            <key code="77" output="&#x001E;"/>
            <key code="78" output="-"/>
            <key code="79" output="&#x0010;"/>
            <key code="80" output="&#x0010;"/>
            <key code="81" output="="/>
            <key code="82" output="0"/>
            <key code="83" output="1"/>
            <key code="84" output="2"/>
            <key code="85" output="3"/>
            <key code="86" output="4"/>
            <key code="87" output="5"/>
            <key code="88" output="6"/>
            <key code="89" output="7"/>
            <key code="91" output="8"/>
            <key code="92" output="9"/>
            <key code="96" output="&#x0010;"/>
            <key code="97" output="&#x0010;"/>
            <key code="98" output="&#x0010;"/>
            <key code="99" output="&#x0010;"/>
            <key code="100" output="&#x0010;"/>
            <key code="101" output="&#x0010;"/>
            <key code="103" output="&#x0010;"/>
            <key code="105" output="&#x0010;"/>
            <key code="106" output="&#x0010;"/>
            <key code="107" output="&#x0010;"/>
            <key code="109" output="&#x0010;"/>
            <key code="111" output="&#x0010;"/>
            <key code="113" output="&#x0010;"/>
            <key code="114" output="&#x0005;"/>
            <key code="115" output="&#x0001;"/>
            <key code="116" output="&#x000B;"/>
            <key code="117" output="&#x007F;"/>
            <key code="118" output="&#x0010;"/>
            <key code="119" output="&#x0004;"/>
            <key code="120" output="&#x0010;"/>
            <key code="121" output="&#x000C;"/>
            <key code="122" output="&#x0010;"/>
            <key code="123" output="&#x001C;"/>
            <key code="124" output="&#x001D;"/>
            <key code="125" output="&#x001F;"/>
            <key code="126" output="&#x001E;"/>
        </keyMap>
        <keyMap index="7">
            <key code="0" output=""/>
            <key code="36" output="&#x000D;"/>
            <key code="48" output="&#x0009;"/>
            <key code="51" output="&#x0008;"/>
            <key code="53" output="&#x001B;"/>
            <key code="64" output="&#x0010;"/>
            <key code="66" output="&#x001D;"/>
            <key code="70" output="&#x001C;"/>
            <key code="71" output="&#x001B;"/>
            <key code="72" output="&#x001F;"/>
            <key code="76" output="&#x0003;"/>
            <key code="77" output="&#x001E;"/>
            <key code="79" output="&#x0010;"/>
            <key code="80" output="&#x0010;"/>
            <key code="96" output="&#x0010;"/>
            <key code="97" output="&#x0010;"/>
            <key code="98" output="&#x0010;"/>
            <key code="99" output="&#x0010;"/>
            <key code="100" output="&#x0010;"/>
            <key code="101" output="&#x0010;"/>
            <key code="103" output="&#x0010;"/>
            <key code="105" output="&#x0010;"/>
            <key code="106" output="&#x0010;"/>
            <key code="107" output="&#x0010;"/>
            <key code="109" output="&#x0010;"/>
            <key code="111" output="&#x0010;"/>
            <key code="113" output="&#x0010;"/>
            <key code="114" output="&#x0005;"/>
            <key code="115" output="&#x0001;"/>
            <key code="116" output="&#x000B;"/>
            <key code="117" output="&#x007F;"/>
            <key code="118" output="&#x0010;"/>
            <key code="119" output="&#x0004;"/>
            <key code="120" output="&#x0010;"/>
            <key code="121" output="&#x000C;"/>
            <key code="122" output="&#x0010;"/>
            <key code="123" output="&#x001C;"/>
            <key code="124" output="&#x001D;"/>
            <key code="125" output="&#x001F;"/>
            <key code="126" output="&#x001E;"/>
        </keyMap>
        <keyMap index="8">
            <key code="0" output=""/>
            <key code="36" output="&#x000D;"/>
            <key code="48" output="&#x0009;"/>
            <key code="51" output="&#x0008;"/>
            <key code="53" output="&#x001B;"/>
            <key code="64" output="&#x0010;"/>
            <key code="66" output="&#x001D;"/>
            <key code="70" output="&#x001C;"/>
            <key code="71" output="&#x001B;"/>
            <key code="72" output="&#x001F;"/>
            <key code="76" output="&#x0003;"/>
            <key code="77" output="&#x001E;"/>
            <key code="79" output="&#x0010;"/>
            <key code="80" output="&#x0010;"/>
            <key code="96" output="&#x0010;"/>
            <key code="97" output="&#x0010;"/>
            <key code="98" output="&#x0010;"/>
            <key code="99" output="&#x0010;"/>
            <key code="100" output="&#x0010;"/>
            <key code="101" output="&#x0010;"/>
            <key code="103" output="&#x0010;"/>
            <key code="105" output="&#x0010;"/>
            <key code="106" output="&#x0010;"/>
            <key code="107" output="&#x0010;"/>
            <key code="109" output="&#x0010;"/>
            <key code="111" output="&#x0010;"/>
            <key code="113" output="&#x0010;"/>
            <key code="114" output="&#x0005;"/>
            <key code="115" output="&#x0001;"/>
            <key code="116" output="&#x000B;"/>
            <key code="117" output="&#x007F;"/>
            <key code="118" output="&#x0010;"/>
            <key code="119" output="&#x0004;"/>
            <key code="120" output="&#x0010;"/>
            <key code="121" output="&#x000C;"/>
            <key code="122" output="&#x0010;"/>
            <key code="123" output="&#x001C;"/>
            <key code="124" output="&#x001D;"/>
            <key code="125" output="&#x001F;"/>
            <key code="126" output="&#x001E;"/>
        </keyMap>
        <keyMap index="9">
            <key code="0" output="A"/>
            <key code="1" output="S"/>
            <key code="2" output="D"/>
            <key code="3" output="F"/>
            <key code="4" output="H"/>
            <key code="5" output="G"/>
            <key code="6" output="Z"/>
            <key code="7" output="X"/>
            <key code="8" output="C"/>
            <key code="9" output="V"/>
            <key code="10" output=""/>
            <key code="11" output="B"/>
            <key code="12" output="Q"/>
            <key code="13" output="W"/>
            <key code="14" output="E"/>
            <key code="15" output="R"/>
            <key code="16" output="Y"/>
            <key code="17" output="T"/>
            <key code="18" output="1"/>
            <key code="19" output="2"/>
            <key code="20" output="3"/>
            <key code="21" output="4"/>
            <key code="22" output="6"/>
            <key code="23" output="5"/>
            <key code="24" output="="/>
            <key code="25" output="9"/>
            <key code="26" output="7"/>
            <key code="27" output="-"/>
            <key code="28" output="8"/>
            <key code="29" output="0"/>
            <key code="30" output="]"/>
            <key code="31" output="O"/>
            <key code="32" output="U"/>
            <key code="33" output="["/>
            <key code="34" output="I"/>
            <key code="35" output="P"/>
            <key code="36" output="&#x000D;"/>
            <key code="37" output="L"/>
            <key code="38" output="J"/>
            <key code="39" output="&#x0027;"/>
            <key code="40" output="K"/>
            <key code="41" output=";"/>
            <key code="42" output="\"/>
            <key code="43" output=","/>
            <key code="44" output="/"/>
            <key code="45" output="N"/>
            <key code="46" output="M"/>
            <key code="47" output="."/>
            <key code="48" output="&#x0009;"/>
            <key code="49" output=" "/>
            <key code="50" output="`"/>
            <key code="51" output="&#x0008;"/>
            <key code="53" output="&#x001B;"/>
            <key code="64" output="&#x0010;"/>
            <key code="65" output=""/>
            <key code="66" output="&#x001D;"/>
            <key code="67" output="*"/>
            <key code="69" output="+"/>
            <key code="70" output="&#x001C;"/>
            <key code="71" output="&#x001B;"/>
            <key code="72" output="&#x001F;"/>
            <key code="75" output="/"/>
            <key code="76" output="&#x0003;"/>
            <key code="77" output="&#x001E;"/>
            <key code="78" output="-"/>
            <key code="79" output="&#x0010;"/>
            <key code="80" output="&#x0010;"/>
            <key code="81" output="="/>
            <key code="82" output="0"/>
            <key code="83" output="1"/>
            <key code="84" output="2"/>
            <key code="85" output="3"/>
            <key code="86" output="4"/>
            <key code="87" output="5"/>
            <key code="88" output="6"/>
            <key code="89" output="7"/>
            <key code="91" output="8"/>
            <key code="92" output="9"/>
            <key code="96" output="&#x0010;"/>
            <key code="97" output="&#x0010;"/>
            <key code="98" output="&#x0010;"/>
            <key code="99" output="&#x0010;"/>
            <key code="100" output="&#x0010;"/>
            <key code="101" output="&#x0010;"/>
            <key code="103" output="&#x0010;"/>
            <key code="105" output="&#x0010;"/>
            <key code="106" output="&#x0010;"/>
            <key code="107" output="&#x0010;"/>
            <key code="109" output="&#x0010;"/>
            <key code="111" output="&#x0010;"/>
            <key code="113" output="&#x0010;"/>
            <key code="114" output="&#x0005;"/>
            <key code="115" output="&#x0001;"/>
            <key code="116" output="&#x000B;"/>
            <key code="117" output="&#x007F;"/>
            <key code="118" output="&#x0010;"/>
            <key code="119" output="&#x0004;"/>
            <key code="120" output="&#x0010;"/>
            <key code="121" output="&#x000C;"/>
            <key code="122" output="&#x0010;"/>
            <key code="123" output="&#x001C;"/>
            <key code="124" output="&#x001D;"/>
            <key code="125" output="&#x001F;"/>
            <key code="126" output="&#x001E;"/>
        </keyMap>
        <keyMap index="10">
            <key code="0" output="&#x0001;"/>
            <key code="1" output="&#x0013;"/>
            <key code="2" output="&#x0004;"/>
            <key code="3" output="&#x0006;"/>
            <key code="4" output="&#x0008;"/>
            <key code="5" output="&#x0007;"/>
            <key code="6" output="&#x001A;"/>
            <key code="7" output="&#x0018;"/>
            <key code="8" output="&#x0003;"/>
            <key code="9" output="&#x0016;"/>
            <key code="10" output="0"/>
            <key code="11" output="&#x0002;"/>
            <key code="12" output="&#x0011;"/>
            <key code="13" output="&#x0017;"/>
            <key code="14" output="&#x0005;"/>
            <key code="15" output="&#x0012;"/>
            <key code="16" output="&#x0019;"/>
            <key code="17" output="&#x0014;"/>
            <key code="18" output="1"/>
            <key code="19" output="2"/>
            <key code="20" output="3"/>
            <key code="21" output="4"/>
            <key code="22" output="6"/>
            <key code="23" output="5"/>
            <key code="24" output="="/>
            <key code="25" output="9"/>
            <key code="26" output="7"/>
            <key code="27" output="&#x001F;"/>
            <key code="28" output="8"/>
            <key code="29" output="0"/>
            <key code="30" output="&#x001D;"/>
            <key code="31" output="&#x000F;"/>
            <key code="32" output="&#x0015;"/>
            <key code="33" output="&#x001B;"/>
            <key code="34" output="&#x0009;"/>
            <key code="35" output="&#x0010;"/>
            <key code="36" output="&#x000D;"/>
            <key code="37" output="&#x000C;"/>
            <key code="38" output="&#x000A;"/>
            <key code="39" output="&#x0027;"/>
            <key code="40" output="&#x000B;"/>
            <key code="41" output=";"/>
            <key code="42" output="&#x001C;"/>
            <key code="43" output=","/>
            <key code="44" output="/"/>
            <key code="45" output="&#x000E;"/>
            <key code="46" output="&#x000D;"/>
            <key code="47" output="."/>
            <key code="48" output="&#x0009;"/>
            <key code="49" output=""/>
            <key code="50" output="`"/>
            <key code="51" output="&#x0008;"/>
            <key code="52" output="&#x0003;"/>
            <key code="53" output="&#x001B;"/>
            <key code="65" output="."/>
            <key code="66" output="&#x001D;"/>
            <key code="67" output="*"/>
            <key code="69" output="+"/>
            <key code="70" output="&#x001C;"/>
            <key code="71" output="&#x001B;"/>
            <key code="72" output="&#x001F;"/>
            <key code="75" output="/"/>
            <key code="76" output="&#x0003;"/>
            <key code="77" output="&#x001E;"/>
            <key code="78" output="-"/>
            <key code="81" output="="/>
            <key code="82" output="0"/>
            <key code="83" output="1"/>
            <key code="84" output="2"/>
            <key code="85" output="3"/>
            <key code="86" output="4"/>
            <key code="87" output="5"/>
            <key code="88" output="6"/>
            <key code="89" output="7"/>
            <key code="91" output="8"/>
            <key code="92" output="9"/>
            <key code="96" output="&#x0010;"/>
            <key code="97" output="&#x0010;"/>
            <key code="98" output="&#x0010;"/>
            <key code="99" output="&#x0010;"/>
            <key code="100" output="&#x0010;"/>
            <key code="101" output="&#x0010;"/>
            <key code="102" output="&#x0010;"/>
            <key code="103" output="&#x0010;"/>
            <key code="104" output="&#x0010;"/>
            <key code="105" output="&#x0010;"/>
            <key code="106" output="&#x0010;"/>
            <key code="107" output="&#x0010;"/>
            <key code="108" output="&#x0010;"/>
            <key code="109" output="&#x0010;"/>
            <key code="110" output="&#x0010;"/>
            <key code="111" output="&#x0010;"/>
            <key code="112" output="&#x0010;"/>
            <key code="113" output="&#x0010;"/>
            <key code="114" output="&#x0005;"/>
            <key code="115" output="&#x0001;"/>
            <key code="116" output="&#x000B;"/>
            <key code="117" output="&#x007F;"/>
            <key code="118" output="&#x0010;"/>
            <key code="119" output="&#x0004;"/>
            <key code="120" output="&#x0010;"/>
            <key code="121" output="&#x000C;"/>
            <key code="122" output="&#x0010;"/>
            <key code="123" output="&#x001C;"/>
            <key code="124" output="&#x001D;"/>
            <key code="125" output="&#x001F;"/>
            <key code="126" output="&#x001E;"/>
        </keyMap>
        <keyMap index="11">
            <key code="0" output="&#x0001;"/>
            <key code="1" output="&#x0013;"/>
            <key code="2" output="&#x0004;"/>
            <key code="3" output="&#x0006;"/>
            <key code="4" output="&#x0008;"/>
            <key code="5" output="&#x0007;"/>
            <key code="6" output="&#x001A;"/>
            <key code="7" output="&#x0018;"/>
            <key code="8" output="&#x0003;"/>
            <key code="9" output="&#x0016;"/>
            <key code="10" output="0"/>
            <key code="11" output="&#x0002;"/>
            <key code="12" output="&#x0011;"/>
            <key code="13" output="&#x0017;"/>
            <key code="14" output="&#x0005;"/>
            <key code="15" output="&#x0012;"/>
            <key code="16" output="&#x0019;"/>
            <key code="17" output="&#x0014;"/>
            <key code="18" output="1"/>
            <key code="19" output="2"/>
            <key code="20" output="3"/>
            <key code="21" output="4"/>
            <key code="22" output="6"/>
            <key code="23" output="5"/>
            <key code="24" output="="/>
            <key code="25" output="9"/>
            <key code="26" output="7"/>
            <key code="27" output="&#x001F;"/>
            <key code="28" output="8"/>
            <key code="29" output="0"/>
            <key code="30" output="&#x001D;"/>
            <key code="31" output="&#x000F;"/>
            <key code="32" output="&#x0015;"/>
            <key code="33" output="&#x001B;"/>
            <key code="34" output="&#x0009;"/>
            <key code="35" output="&#x0010;"/>
            <key code="36" output="&#x000D;"/>
            <key code="37" output="&#x000C;"/>
            <key code="38" output="&#x000A;"/>
            <key code="39" output="&#x0027;"/>
            <key code="40" output="&#x000B;"/>
            <key code="41" output=";"/>
            <key code="42" output="&#x001C;"/>
            <key code="43" output=","/>
            <key code="44" output="/"/>
            <key code="45" output="&#x000E;"/>
            <key code="46" output="&#x000D;"/>
            <key code="47" output="."/>
            <key code="48" output="&#x0009;"/>
            <key code="49" output=""/>
            <key code="50" output="`"/>
            <key code="51" output="&#x0008;"/>
            <key code="52" output="&#x0003;"/>
            <key code="53" output="&#x001B;"/>
            <key code="65" output="."/>
            <key code="66" output="&#x001D;"/>
            <key code="67" output="*"/>
            <key code="69" output="+"/>
            <key code="70" output="&#x001C;"/>
            <key code="71" output="&#x001B;"/>
            <key code="72" output="&#x001F;"/>
            <key code="75" output="/"/>
            <key code="76" output="&#x0003;"/>
            <key code="77" output="&#x001E;"/>
            <key code="78" output="-"/>
            <key code="81" output="="/>
            <key code="82" output="0"/>
            <key code="83" output="1"/>
            <key code="84" output="2"/>
            <key code="85" output="3"/>
            <key code="86" output="4"/>
            <key code="87" output="5"/>
            <key code="88" output="6"/>
            <key code="89" output="7"/>
            <key code="91" output="8"/>
            <key code="92" output="9"/>
            <key code="96" output="&#x0010;"/>
            <key code="97" output="&#x0010;"/>
            <key code="98" output="&#x0010;"/>
            <key code="99" output="&#x0010;"/>
            <key code="100" output="&#x0010;"/>
            <key code="101" output="&#x0010;"/>
            <key code="102" output="&#x0010;"/>
            <key code="103" output="&#x0010;"/>
            <key code="104" output="&#x0010;"/>
            <key code="105" output="&#x0010;"/>
            <key code="106" output="&#x0010;"/>
            <key code="107" output="&#x0010;"/>
            <key code="108" output="&#x0010;"/>
            <key code="109" output="&#x0010;"/>
            <key code="110" output="&#x0010;"/>
            <key code="111" output="&#x0010;"/>
            <key code="112" output="&#x0010;"/>
            <key code="113" output="&#x0010;"/>
            <key code="114" output="&#x0005;"/>
            <key code="115" output="&#x0001;"/>
            <key code="116" output="&#x000B;"/>
            <key code="117" output="&#x007F;"/>
            <key code="118" output="&#x0010;"/>
            <key code="119" output="&#x0004;"/>
            <key code="120" output="&#x0010;"/>
            <key code="121" output="&#x000C;"/>
            <key code="122" output="&#x0010;"/>
            <key code="123" output="&#x001C;"/>
            <key code="124" output="&#x001D;"/>
            <key code="125" output="&#x001F;"/>
            <key code="126" output="&#x001E;"/>
        </keyMap>
        <keyMap index="12">
            <key code="0" output="Ф"/>
            <key code="1" output="Ы"/>
            <key code="2" output="В"/>
            <key code="3" output="А"/>
            <key code="4" output="Р"/>
            <key code="5" output="П"/>
            <key code="6" output="Я"/>
            <key code="7" output="Ч"/>
            <key code="8" output="С"/>
            <key code="9" output="М"/>
            <key code="10" output="Ё"/>
            <key code="11" output="И"/>
            <key code="12" output="Й"/>
            <key code="13" output="Ц"/>
            <key code="14" output="У"/>
            <key code="15" output="К"/>
            <key code="16" output="Н"/>
            <key code="17" output="Е"/>
            <key code="18" output="!"/>
            <key code="19" output="&#x0022;"/>
            <key code="20" output="№"/>
            <key code="21" output=";"/>
            <key code="22" output=":"/>
            <key code="23" output="%"/>
            <key code="24" output="+"/>
            <key code="25" output="("/>
            <key code="26" output="?"/>
            <key code="27" output="_"/>
            <key code="28" output="*"/>
            <key code="29" output=")"/>
            <key code="30" output="Ъ"/>
            <key code="31" output="Щ"/>
            <key code="32" output="Г"/>
            <key code="33" output="Х"/>
            <key code="34" output="Ш"/>
            <key code="35" output="З"/>
            <key code="36" output="&#x000D;"/>
            <key code="37" output="Д"/>
            <key code="38" output="О"/>
            <key code="39" output="Э"/>
            <key code="40" output="Л"/>
            <key code="41" output="Ж"/>
            <key code="42" output="/"/>
            <key code="43" output="Б"/>
            <key code="44" output=","/>
            <key code="45" output="Т"/>
            <key code="46" output="Ь"/>
            <key code="47" output="Ю"/>
            <key code="48" output="&#x0009;"/>
            <key code="49" output=" "/>
            <key code="50" output="Ë"/>
            <key code="51" output="&#x0008;"/>
            <key code="53" output="&#x001B;"/>
            <key code="64" output="&#x0010;"/>
            <key code="65" output="."/>
            <key code="66" output="&#x001D;"/>
            <key code="67" output="*"/>
            <key code="69" output="+"/>
            <key code="70" output="&#x001C;"/>
            <key code="71" output="&#x001B;"/>
            <key code="72" output="&#x001F;"/>
            <key code="75" output="/"/>
            <key code="76" output="&#x0003;"/>
            <key code="77" output="&#x001E;"/>
            <key code="78" output="-"/>
            <key code="79" output="&#x0010;"/>
            <key code="80" output="&#x0010;"/>
            <key code="81" output="="/>
            <key code="82" output="0"/>
            <key code="83" output="1"/>
            <key code="84" output="2"/>
            <key code="85" output="3"/>
            <key code="86" output="4"/>
            <key code="87" output="5"/>
            <key code="88" output="6"/>
            <key code="89" output="7"/>
            <key code="91" output="8"/>
            <key code="92" output="9"/>
            <key code="96" output="&#x0010;"/>
            <key code="97" output="&#x0010;"/>
            <key code="98" output="&#x0010;"/>
            <key code="99" output="&#x0010;"/>
            <key code="100" output="&#x0010;"/>
            <key code="101" output="&#x0010;"/>
            <key code="103" output="&#x0010;"/>
            <key code="105" output="&#x0010;"/>
            <key code="106" output="&#x0010;"/>
            <key code="107" output="&#x0010;"/>
            <key code="109" output="&#x0010;"/>
            <key code="111" output="&#x0010;"/>
            <key code="113" output="&#x0010;"/>
            <key code="114" output="&#x0005;"/>
            <key code="115" output="&#x0001;"/>
            <key code="116" output="&#x000B;"/>
            <key code="117" output="&#x007F;"/>
            <key code="118" output="&#x0010;"/>
            <key code="119" output="&#x0004;"/>
            <key code="120" output="&#x0010;"/>
            <key code="121" output="&#x000C;"/>
            <key code="122" output="&#x0010;"/>
            <key code="123" output="&#x001C;"/>
            <key code="124" output="&#x001D;"/>
            <key code="125" output="&#x001F;"/>
            <key code="126" output="&#x001E;"/>
        </keyMap>
    </keyMapSet>
    <keyMapSet id="JIS">
        <keyMap index="0" baseMapSet="ANSI" baseIndex="0">
            <key code="512" output=""/>
        </keyMap>
        <keyMap index="1" baseMapSet="ANSI" baseIndex="1">
            <key code="512" output=""/>
        </keyMap>
        <keyMap index="2" baseMapSet="ANSI" baseIndex="2">
            <key code="512" output=""/>
        </keyMap>
        <keyMap index="3" baseMapSet="ANSI" baseIndex="3">
            <key code="512" output=""/>
        </keyMap>
        <keyMap index="4" baseMapSet="ANSI" baseIndex="4">
            <key code="512" output=""/>
        </keyMap>
        <keyMap index="5" baseMapSet="ANSI" baseIndex="5">
            <key code="512" output=""/>
        </keyMap>
        <keyMap index="6" baseMapSet="ANSI" baseIndex="6">
            <key code="512" output=""/>
        </keyMap>
        <keyMap index="7" baseMapSet="ANSI" baseIndex="7">
            <key code="512" output=""/>
        </keyMap>
        <keyMap index="8" baseMapSet="ANSI" baseIndex="8">
            <key code="512" output=""/>
        </keyMap>
        <keyMap index="9" baseMapSet="ANSI" baseIndex="9">
            <key code="512" output=""/>
        </keyMap>
        <keyMap index="10" baseMapSet="ANSI" baseIndex="10">
            <key code="512" output=""/>
        </keyMap>
        <keyMap index="11" baseMapSet="ANSI" baseIndex="11">
            <key code="512" output=""/>
        </keyMap>
        <keyMap index="12" baseMapSet="ANSI" baseIndex="12">
            <key code="512" output=""/>
        </keyMap>
    </keyMapSet>
</keyboard>

Потом этот файл помещается в /Users/konst/Library/Keyboard Layouts/  ,  в настройках системы он становится виден как новая клавиатурная раскладка с названием ruscaps, и, когда ее выбрать, в режиме, когда включен Caps, набираются русские буквы, а когда выключен — латинские. Система же думает, что язык и клавиатурная раскладка никогда не переключается.

  1. Стандартное (почти) поведение Ctrl, Shift, Home, End, PgUp, PgDown и стрелочных клавиш в режиме редактирования текста достигается созданием файла Users/konst/Library/KeyBindings/DefaultKeyBinding.dict

в котором написано примерно следующее:

Hidden text

{ 
  "^\UF72B"  = "moveToEndOfDocument:";                         /* Ctrl-End */ 
  "^$\UF72B" = "moveToEndOfDocumentAndModifySelection:";       /* Ctrl + Shift + End */ 
  "^\UF729"  = "moveToBeginningOfDocument:";                   /* Ctrl  + Home  */ 
  "^$\UF729" = "moveToBeginningOfDocumentAndModifySelection:"; /* Shift + Ctrl  + Home */ 
  "\UF729"   = "moveToBeginningOfLine:";                       /* Home         */ 
  "$\UF729"  = "moveToBeginningOfLineAndModifySelection:";     /* Shift + Home */ 
  "\UF72B"   = "moveToEndOfLine:";                             /* End          */ 
  "$\UF72B"  = "moveToEndOfLineAndModifySelection:";           /* Shift + End  */ 
  "\UF72C"   = "pageUp:";                                      /* PageUp       */ 
  "\UF72D"   = "pageDown:";                                    /* PageDown     */ 
  "^\U007F"  = "deleteWordBackward:";                          /* Ctrl  + Backspace */ 
  "^c"       = "copy:";                                        /* Ctrl  + C */ 
  "^v"       = "paste:";                                       /* Ctrl  + V */ 
  "^x"       = "cut:";                                         /* Ctrl  + X */ 
  "^z"       = "undo:";                                        /* Ctrl  + Z */ 
  "^с"       = "copy:";                                        /* Ctrl  + C in Russian keyboard layout */ 
  "^м"       = "paste:";                                       /* Ctrl  + V in Russian keyboard layout */ 
  "^ч"       = "cut:";                                         /* Ctrl  + X in Russian keyboard layout */ 
  "^я"       = "undo:";                                        /* Ctrl  + Z in Russian keyboard layout */ 
   
  "^\UF702" = moveWordLeft:; 
  "^\UF703" = moveWordRight:; 
  "^$\UF702" = moveWordLeftAndModifySelection:; 
  "^$\UF703" = moveWordRightAndModifySelection:; 
}
  1. Далее приведены страшные символы, создающие полезные пункты в пользовательском меню Midnight Commander, которое вызывается по F2. Придумать их невозможно, можно только нагуглить из интернета.

Итак, для начала создаем файл ~/mc.menu и в нем дописываем, кому что надо. Мне сразу понадобилось такое:

+ ! t t
v       Edit with MacVim
        /Applications/MacVim.app/Contents/MacOS/Vim --remote-tab-silent %f
+ ! t t
@       Set full path to current file to flist
        echo %d/%f >> ~/flist 
+ ! t t
l       Launch file (with finder)
        open %f
+ ! t t
o       Open and show file in Finder
        open -R %f
+ ! t t
@       Do something bad on the current file
        CMD=%{Enter command}
        $CMD %f
  1. Интеграция Vim и терминала (zsh) у меня выглядит примерно так (фрагмент из моего .vimrc):

" Отформатировать JSON
vnoremap ,j :! /opt/homebrew/bin/jq . <CR>

" Отформатировать XML
vnoremap ,f :!xmllint --format -<CR>

" Исполнить текущую строку в bash (например, вызвать curl на api endpoint)
" точка перед w означает, что использовать надо конкретную строку
nnoremap ,e :.w !bash<CR>:echo('...done.')<CR>

" то же самое, но вставить вывод команды в текущий буфер
nnoremap ,E :exec 'r!'.getline('.')<CR>

" Исполнить текущее выделение (range of lines) в bash
vnoremap ,e :w !bash<CR>

Вы, наверняка, уже слышали много мнений на тему того, какая операционная система лучше — macOS или Windows. Оба продукта имеют свои достоинства и недостатки, и выбор между ними зависит от ваших потребностей и предпочтений. Однако, если вы являетесь пользователем продуктов Apple, то macOS может стать для вас идеальным выбором.

В этой статье мы рассмотрим 5 причин, почему macOS лучше Windows. Наш список включает в себя факторы, такие как надежность и стабильность, лучшая интеграция с продуктами Apple, лучший интерфейс и дизайн, безопасность и защита данных, а также лучшая производительность и эффективность работы.

macos-monterey-vs-windows-11.jpg

Надежность и стабильность

Одной из главных причин, почему многие пользователи выбирают macOS вместо Windows, является надежность и стабильность этой операционной системы. macOS, как и все продукты Apple, разрабатывается с упором на производительность, эффективность и минимизацию возможных сбоев и ошибок. В результате, macOS предлагает непревзойденный уровень стабильности и надежности, что особенно важно для пользователей, которые используют свои компьютеры для работы или других важных целей. Операционная система Windows, с другой стороны, известна своими частыми обновлениями, которые могут привести к сбоям и несовместимости со сторонними приложениями, что может привести к потере данных и проблемам с работой.

Лучшая интеграция с продуктами Apple

Если вы являетесь пользователем продуктов Apple, то macOS будет идеальным выбором для вас благодаря лучшей интеграции с другими устройствами и сервисами компании. macOS позволяет легко синхронизировать все ваши устройства Apple, такие как iPhone, iPad, Apple Watch и другие, что значительно облегчает передачу файлов, документов, фотографий и других данных между устройствами. Кроме того, macOS предлагает полную интеграцию с другими сервисами Apple, такими как iCloud, TV+ и Apple Music, что позволяет пользователю получить полный доступ к своей музыкальной, видео и фото библиотеке, а также сохранять все свои файлы и данные в облаке. В отличие от Windows, которая не так глубоко интегрирована с продуктами Apple и требует дополнительных приложений и программ для связи с другими устройствами.

hq720.jpg

Лучший интерфейс и дизайн

Еще одним фактором, который делает macOS более привлекательным для пользователей, является его превосходный интерфейс и дизайн. Одним из ключевых принципов дизайна Apple является простота и минимализм, и macOS не является исключением. Интерфейс macOS построен на принципах интуитивности и простоты использования, что делает его очень доступным и понятным для новых пользователей. Кроме того, macOS предлагает красивые и элегантные дизайн-решения, которые делают работу на компьютере более приятной и эстетически привлекательной. Операционная система Windows, с другой стороны, известна своими менее совершенными дизайн-решениями и менее интуитивным интерфейсом, который может быть немного сложным для новых пользователей.

Безопасность и защита данных

Безопасность и защита данных — это еще один аспект, в котором macOS превосходит Windows. Apple известна своей приверженностью безопасности, и macOS не является исключением. Операционная система macOS поставляется с целым рядом интегрированных функций безопасности, которые помогают защитить ваш компьютер от различных угроз, включая вредоносное ПО, фишинговые атаки и другие виды киберпреступлений. Кроме того, macOS имеет встроенную защиту от вирусов и других угроз, что делает его менее подверженным к атакам в сравнении с Windows. В дополнение к этому, macOS также предлагает механизмы шифрования данных, что обеспечивает высокий уровень защиты ваших конфиденциальных данных. С другой стороны, Windows, хотя и имеет определенные функции безопасности, известна своей более низкой степенью защиты в сравнении с macOS.

Лучшая производительность и эффективность работы

Еще одним фактором, который делает macOS привлекательным для пользователей, является его превосходная производительность и эффективность работы. Операционная система macOS была разработана, чтобы обеспечить оптимальную производительность на аппаратном обеспечении компьютеров Apple, что делает ее более эффективной в сравнении с Windows. macOS использует свою аппаратную часть и операционную систему более эффективно, что позволяет работать с большим количеством приложений и программ, не замедляя работу компьютера. Кроме того, macOS также обеспечивает высокую скорость работы и отзывчивость интерфейса, что делает работу на компьютере более приятной и продуктивной. В то же время, Windows, хотя и обеспечивает определенную производительность, часто может замедляться при работе с большим количеством программ и приложений, что может негативно сказаться на эффективности работы пользователей.


В целом, macOS предлагает ряд преимуществ по сравнению с Windows, включая надежность, стабильность, лучшую интеграцию с продуктами Apple, лучший интерфейс и дизайн, безопасность и защиту данных, а также лучшую производительность и эффективность работы. Конечно, выбор между macOS и Windows зависит от индивидуальных потребностей пользователя, однако, если вы цените надежность, безопасность, эффективность и качество, то macOS может стать для вас идеальным выбором. В итоге, macOS — это операционная система, которая предоставляет пользователям все необходимые инструменты и функции для выполнения их задач на высоком уровне, не причиняя при этом лишних хлопот и проблем.

Бутов С.В. 1, Малышева Е.Н. 1


1Тобольская социально-педагогическая академия им. Д.И. Менделеева


Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке «Файлы работы» в формате PDF

Mac OS X — это операционная система на базе платформы UNIX, разработанная корпорацией Apple для линейки компьютеров Macintosh. Среди пользователей эта операционная система (ОС) становится все более популярной. Рассмотрим ее преимущества и недостатки по сравнению с Windows.

Преимущества Mac OS:

1) Графическая оболочка, с одной стороны, красива, с другой стороны, не «перегружена» спецэффектами.

2) Удобный для пользователя интерфейс с множеством оригинальных функций, облегчающих работу с компьютером.

3) Высокая безопасность в связи с меньшим количеством вирусов из-за неширокой распространенности этой операционной системы.

3) Поставка дистрибутивов приложений в виде образа диска (по двойному клику по файлу ОС производит монтирование образа, после чего им можно пользоваться как обычным разделом жесткого диска).

4) Совместимость основных форматов (DOC, RTF, PDF, JPEG, MP3, HTML и др.) с другими компьютерами.

5) Стабильная работа (Mac OS разработана специально для компьютеров Macintosh; интегрирование в операционную систему большинства драйверами для стороннего оборудования; высокая совместимость компонентов, минимальные трудности с охлаждением).

6) Простота в установке и удалении приложений.

7) Возможность установки Windows в качестве второй операционной системы (с помощью утилиты Boot Camp на всех компьютерах Macintosh с процессором Intel).

Недостатки Mac OS:

1) Меньший по сравнению с Windows выбор программ.

2) Меньшее количество игр и сравнительно слабые видеокарты.

3) Меньшая гибкость в управлении размерами и расположением панелей.

4) Более высокая стоимость. Компьютеры Apple стоят дороже примерно в 2 раза, чем РС аналогичной конфигурации.

Около 4 месяцев назад мне повезло купить роскошный MacBook Pro 15 2018-го года. До этого всю жизнь использовал ПК, и мне нравилась ОС от Microsoft.

Настолько, что даже после приобретения iMac 27 в 2012 году прямо в магазине попросил накатить Windows через BootCamp.

А во время работы старался как можно реже заходить на территорию OS X. Было лень вникать во что-то новое, когда есть привычное.

Но казалось, будто что-то упускал, поэтому вместе с MacBook уже решил освоиться в системе. И теперь точно понял, что имели ввиду люди, которые говорили «один раз привыкнешь, потом ПК терпеть не сможешь».

Ниже расскажу, что зацепило сильнее всего. Windows до такого ещё очень далеко.

Система работает как единое целое

Первый запуск сразу напоминает активацию iOS. Этапы понятно оформлены, они «с порога» учат логике интерфейса и работе с Mac.

А дальше даже сложные элементы легко считываются: вот настройки с доходчивыми ярлыками, наверху строка состояния с часами показывает нужные иконки управления, а Launchpad выдаёт все установленные приложения.

На Windows же, например, до сих пор путаюсь в Параметрах из-за того, что они хранятся в двух разделах: обновлённом красивом меню и классической Панели управления, которая сама ещё по-разному группируется.


Система от Apple насыщена элементами менеджмента всего, что вы храните на Mac. Например, получается быстро подтянуть настройки дисплея или клавиатуры или перекроить логику хранения файлов.

И, самое главное, всем этим хочется пользоваться. Тот же Spotlight, например, оформлен строкой посреди экрана, он сразу смотрит на вас и по мере того, как пишите, выводит результат на центральную часть.

Поиск в Windows 10 постепенно развивают в ту же сторону, но сейчас его дизайн грубый, будто недоделанный.


В сравнении выше разделом слева никогда не пользовался. А вот Spotlight на Mac вызываю постоянно. Нет перегружающих деталей и есть огромная выдача нужного.

Windows пережила несколько крупных перезапусков, и каждый раз её дизайн штормило. Только с релизом десятой версии в Microsoft начали прилизывать и доводить до идеала систему. Она начинает иметь постоянное лицо.

С другой стороны, macOS развивалась постепенно, и даже в грядущей Big Sur редизайн пойдёт не в сторону чего-то нового, а адаптации всего знакомого под уже популярный стиль iOS.

Узнаваемость интерфейса вырастет ещё сильнее, а цельной будет восприниматься не только ОС, но и её бесшовная работа с другими устройствами. На связку Windows-Android останется только смотреть и грустить.

Тут нереальная поддержка анимаций

Анимировать движение элемента из точки А в точку Б можно двумя видами:

1. «Запечь» перемещение. В таком случае предмет при нажатии на кнопку активации перемещается вне зависимости от ваших дальнейших действий. Например, так сворачиваются окна, и вы уже никак их в этот момент не остановите.

2. Сделать так, чтобы объект двигался вместе с пальцем в реальном времени. И для удобства довести анимацию, если жест был резкий. По такому принципу работает скролл страницы. И многие системные жесты в macOS.

То, что выдают драйвера трекпада Windows Precision удобно для навигации по системе, но движение не будет чувстоваться так же живо, как перелистывание рабочих столов или открытие Mission Control на Mac.

Это такая вещь, которая работает на подсознательном уровне.

Если вы начали проводить рукой, чтобы проверить все открытые окна, а затем передумали, на компьютере от Apple вы сможете отменить действие, вернув пальцы назад.

А вот на Windows режим сначала откроется, и его придётся закрывать.

На такой детали и строится полноценное чувство устройства. Оно реагирует как живое и всегда даёт контроль над собой.

Поэтому люди обожают ту же iOS, которая с релизом на iPhone X ещё лучше стала подстраиваться под движения пользователя.

Если научиться окнам и рабочим столам, вернуться назад сложно

Функция Exposé, которая показывает все открытые пространства одной программы

Тот, кто работал с окнами в macOS знает, что их не получится распределять так же плотно, как в Windows.

Виной тому патент аж от 2000 года у Microsoft на функцию Snap. Предполагаю, что по той же причине в iPad для многозадачности имеем Split Screen.

Из-за ограничения macOS постепенно развивалась с той логикой, чтобы программы лежали стопками, а перепрыгивать на них можно было с помощью горячих клавиш и быстрых жестов.

Так сформировался текущий вид, когда мы перелистываем развёрнутые на весь экран окна или выбираем нужное на рабочем столе через Mission Control.

Удобно это сразу по двум причинам.

1. Каждая программа для меня – отдельное рабочее пространство. При их смене словно переключаюсь между режимами, полностью уделяя текущей задаче всё своё внимание.

2. Простым взмахом вверх вижу все рабочие окна и могу перепрыгивать к ним намного быстрее, чем в Windows. Особенно это помогает ориентироваться в папках.

Не всех такой расклад, правда, устраивает. Например, когда Рабочие столы автоматически меняются, однако это мелкая вещь, которую легко исправить. В остальном же я полностью доволен логикой.

А из-за того, что рабочий стол выглядит поначалу похожим на таковой в Windows, им многие и пользуются по инерции точно как же. То есть хранят десятки файлов и папок или пробуют распределять окна теми же блоками.

В macOS такая логика не нужна. На моём рабочем столе хранится 6 папок, которые подключены к iCloud Drive. И больше ничего. Обязанности «хранилища ярлыков» взяли на себя Dock на нижней части экрана и Finder.

Система способствует такой логике, о чём писал во впечатлениях от нового макбука.

То, что качаю, удобно сразу хранить в загрузках, скриншоты тоже направляю в отдельную папку, а все фото и материалы по работе расфасовал в одну простую структуру.

Так подошли к самой странной вещи Mac, которой сейчас не хватает на Windows.

Finder сначала напугал, а теперь стал лучшим другом

Всё нужное и ничего лишнего

После перехода на Mac местный файловый менеджер казался обычным приложением Папки. Но со временем ему находились новые применения и сейчас удивлён, насколько больше он умеет.

Сразу заметно удобную навигацию. Боковое меню в Папках Windows регулируется через костыли: нельзя в два клика спрятать ненужные разделы вроде Этот компьютер или One Drive из бокового меню или быстро перепрыгнуть ко списку всех установленных программ.

Finder же умеет и это, и много других вещей, например:

  • Создавать смарт-папки с удобной фильтрацией объектов
  • Выдавать рассортированные по тегам файлы
  • Делать предпросмотр картинки по нажатию на Пробел
  • Поворачивать изображения и оставлять на них заметки
  • Делать PDF и обрезать фото без сторонних программ
  • И это только поверхностные функции, есть много материалов про стороннюю настройку. Таким менеджером приятно пользоваться, потому что что он не замусорен лишними элементами как в Windows, и его удобно адаптировать под свои нужды.

    Раскладка клавиатуры и горячие клавиши и созданы для моментальной работы


    Для меня было невероятным открытием найти второй и даже третий слой символов под кнопками Option и Shift.

    Такое можно настроить и на Windows, но точно не встроенными средствами «из коробки».

    При работе с текстом иметь быстрый доступ к тире (), точке для списков () или к обозначению рубля () критически важно в работе автора, SMM-специалиста или блоггера, а для всех остальных это просто удобная дополнительная функция.

    Попробуйте напечатать эти символы в Windows. В лучшем случае они выпрыгнут в поисковой выдаче сразу, но иногда есть только советы ввести несуразную комбинацию цифр.

    Для того же самого тире это Alt + 0151. Гарантирую – с первого раза у вас это не получится. У меня и с пятого не печатается порой.

    Со штатными сочетаниями тут тоже всё хорошо

    В Mac это делается через Option + . Быстро и удобно. Та же ситуация с кавычками-ёлочками, неразрывным пробелом и многим другим.

    Да, официальная русская раскладка от Apple хромает неудобным расположением, о чём подробно объяснял в материале про мои попытки улучшить штатную клавиатуру.

    Сейчас вернулся к PC-раскладке, просто потому что у неё есть этот слой дополнительных символов через сочетание клавиш, который слетает на кастомных версиях.

    Иногда получается, что всё ещё не хватает пары знаков. Но даже в таком случае есть ловкое решение.

    В настройках клавиатуры в разделе Текст можно задать автозамену одних слов и символов на другие. Использую функцию и для сокращения длинных предложений, и для редких знаков.

    Например, напечатать неразрывный дефис штатными средствами нельзя. Тогда я просто программирую систему на место сочетания «–» вставлять один особенный.

    Сюда же улетели коды форматирования для WordPress и всякие бытовые сокращения. Например, для электронной почты печатаю только три первые буквы, а остальная часть сама впрыгивает в строку.

    Или, когда встречаюсь с кем-нибудь, удобно писать «тгд» и жать Enter. Собеседник на другом конце увидит понятное «Ты где сейчас?».

    Внутри системы сочетания тоже играют важную роль. В одном Finder их добрый десяток, чего говорить о других приложениях.

    Про самые удобные мы уже собирали два списка.

    Само собой, Windows тоже напичкана горячими клавишами, но на Mac работать с сочетаниями получается быстрее и естественнее. Продуманы лучше, работают понятнее и, опять же, подгонять их под себя через один общий пункт Клавиатура в Настройках удобнее.

    Словарь делает такое, что Windows не снилось

    Помните новое приложение Переводчик, которое прилетит к нам вместе с iOS 14? Так вот его предком я пользуюсь уже три года начиная с iPhone 5S.

    В свои системы Apple встроила невероятно полезный словарь, который поддерживает многие языки.

    Например, вы установили русский, английский и немецкий.

    Затем видите незнакомое слово Aktualisieren, выделяете его и в контекстном меню выбераете Найти в словаре.

    Вам выскочит и значение слова на немецком, и его перевод на русский, и на английский. Ещё и синонимы узнаете.

    А самое удобное, что словарь можно вызывать усиленным нажатием по трекпаду, если включить функцию в настройках.

    Центр уведомлений и виджеты постоянно выручают

    Очередной пример того, как важен дизайн. Внешний вид push-уведомлений в macOS копирует таковой из iOS. Карточки аккуратные, небольшие, привычные и понятные. Их приятно оставлять активными, чего не могу сказать о тех, что в Windows.

    Из-за того, что система от Microsoft живёт отдельно от других устройств, чувства одного информационного поля не наступает. Когда мне приходит уведомление из того же Telegram, оно выглядит непривычно, словно залез в чужой аккаунт.

    Но с этим можно смириться, а вот отсутсвие виджетов делает панель уведомлений на Windows совсем бесполезной.

    Это целиком на совести Microsoft, потому что в macOS использую штатные приложения с всего одним исключением.

    В Apple сделали удобные виджеты Погоды, Акций и Калькулятора, которые у меня всегда под рукой. Сюда же некоторые добавляют Календарь с Напоминаниями, если плотно ими пользуются (я – нет).

    И получается так, что в Центре уведомлений есть все ключевые вещи, которые выдадут важную информацию на текущий день.

    В App Store же выбор виджетов небольшой, поэтому и сказал, что применение штатных средств целиком лежит на разработчике ОС.

    Сам вот пользуюсь одним приложением. Постепенно учу себя заполнять расписание на неделю в календаре и делать списки задач в Todoist. Так вот у последнего простой и удобный виджет. В нём сразу вижу задачи, не забываю о них и быстро отмечаю завершённые.

    Не хватает только горячих клавиш для переключения между вкладками Сегодня и Уведомления. Посмотрим, как это исправят в Big Sur.

    Apple доводит синхронизацию до идеала

    Список того, что у меня хранится в облаке iCloud Drive

    На конференции разработчиков WWDC 2018 вице-президент по разработке ПО Крейг Федериги сказал чёткое «Нет» на вопрос, объединяется ли iOS и macOS в единое целое.

    Однако он пояснил, что в компании планируют делать так, что приложения с iPhone и iPad работали на Mac без больших затрат на оптимизацию.

    Так сначала на macOS пришли «домашние» Диктофон и Акции, а в прошлом году инструмент переноса Catalyst стал доступен всем.

    Для пользователей такие изменения пока не особо заметны. Однако это показало намерения компании не объединить код систем в один, а сделать так, чтобы для покупателей все устройства давали похожие ощущения.

    И сейчас плавность перехода видна например, когда на лету синхронизируются все заметки и напоминания, работает единый буфер обмена, а на iPhone тут же прилетает фото, которое только что обработал на MacBook.

    Последний пункт для меня самый важный. Покупка iCloud на 2 ТБ избавила от огромной головной боли.

    Теперь я не беспокоюсь о том, что все данные пропадут в случае поломки. Больше не нужно постоянно перебрасывать файлы по жёстким дискам. И постоянно есть доступ ко всему, что хранится и на моём смартфоне, и на ноутбуке.

    Облако работает бесшовно, потому что вплетено в системы: ко всем своим исходникам и PSD-файлам для редактирования у меня есть доступ из любой точки мира.

    Ну а от хранилищ других компаний сервис отличается тем, что он глубоко врос во системы Apple. Немного напоминает монопольное поведение, но не думаю, что кто-то сделает интеграцию лучше с той же степенью приватности.

    В ближайшие два года Apple начнёт ставить во все Mac собственные процессоры и заменит тем самым текущую архитектуру x86 на ARM.

    На ней базируются остальные продукты компании, в том числе iPhone и iPad, поэтому приложения с мобильных систем станут полностью доступны на компьютерах.

    Это приведёт к синергии устройств и контента, благодаря чему последний в сегодняшнем списке пункт про синхронизацию устройств через несколько лет станет самым важным в преимуществе macOS над Windows.

    Даже интересно, как будет выкручиваться Microsoft. Пока же попытки выглядят как минимум странно.

    1 Звезд2 Звезды3 Звезды4 Звезды5 Звезд (71 голосов, общий рейтинг: 4.51 из 5)

    🤓 Хочешь больше? Подпишись на наш Telegram.

    undefined

    iPhones.ru


    Оторвите меня от макбука.

    Павел avatar

    Павел

    @Tinelray

    У меня 4 новых года: обычный, свой, WWDC и сентябрьская презентация Apple. Последний — самый ожидаемый, и ни капли за это не стыдно.

  • Преимущества astra linux перед windows
  • Презентация по информатике операционная система windows
  • Презентация на тему windows vista
  • Появляется консоль при запуске windows
  • Презентация на тему стандартные программы windows