DTGaraGe | Автомобили, Офроуд, Заваряване, Linux, AI

Регистрирайте безплатен акаунт днес, за да станете член! След като влезете, ще можете да участвате в този сайт, като добавяте свои собствени теми и публикации, както и да се свързвате с други членове чрез вашата лична пощенска кутия!

apple Българска фонетична клавиатура на Mac: Ч на правилния клавиш

Българска фонетична клавиатура на Mac: Ч на правилния клавиш

bulgarska-fonetichna-klaviatura-mac.png



Готов keylayout файл и инсталация за две минути. Ч, Ю и Я на местата им, точно както си свикнал на Windows.


Идваш от Windows и знаеш клавиатурата наизуст. Клавишът вляво до Shift пише ч и пръстите ти го правят, без да мислиш.

Купуваш Mac. Инсталираш Bulgarian Phonetic. Натискаш същия клавиш и получаваш § или нищо. И така двадесет пъти на ден, всеки ден.

Решението не е да се преучиш. Решението е файл.


Този клавиш съществува само на ISO клавиатури - европейската подредба. Ако Mac-ът ти е с американска ANSI клавиатура, клавишът физически го няма и статията не важи за теб.

Проверката отнема секунда: погледни вляво от левия Shift. Ако там има допълнителен тесен клавиш - имаш ISO. Ако Shift-ът е широк и стига до края - имаш ANSI.



Бързият път


Ако не те интересува как работи, а само да проработи:
  • Свали прикачения файл Bulgarian-Phonetic-Windows.keylayout от края на публикацията
  • Отвори Finder, натисни Shift+Cmd+G и напиши ~/Library/Keyboard Layouts
  • Ако папката я няма, създай я с това име
  • Пусни файла вътре
  • Излез от профила си и влез обратно
  • System Settings, Keyboard, Input Sources, Edit, бутон +, търси "DTGaraGe"

Готово. Останалата част от статията обяснява какво точно се случва и как да си го промениш сам.



Какво е keylayout файл


macOS не знае какво пише всеки клавиш. Знае само номера на физическия клавиш - код 10, код 42, код 7. Кой символ да излезе при кой код се определя от XML файл с разширение .keylayout.

Всяка клавиатура в системата е такъв файл. Bulgarian Phonetic, US, German - всичките са XML.

Това означава, че нищо не е заключено. Можеш да напишеш свой файл и системата ще го третира точно като фабричен.


ПапкаЗа когоПрава
/System/Library/Keyboard Layouts/Системни, фабричниНе се пипат
~/Library/Keyboard Layouts/Само за тебБез sudo
/Library/Keyboard Layouts/Всички профилиИзисква sudo

Системната папка е защитена от SIP и не подлежи на редакция дори с sudo. Не е нужно да я пипаш - потребителската папка има приоритет.



Структурата, в едно изречение на елемент


ЕлементКакво прави
keyboardКоренът - id и име, което ще видиш в списъка
modifierMapКой модификатор кой слой включва
keyMapSetКонтейнерът на всички слоеве
keyMap index="0"Един слой - нормален, Shift, Caps и така нататък
key code / outputФизически клавиш и символът, който извежда

Слоевете в този файл са шест:

Code:
index 0   нормален
index 1   Shift
index 2   Caps Lock        главни букви, цифрите остават цифри
index 3   Caps + Shift     малки букви, цифрите дават символи
index 4   Option
index 5   Option + Shift

Разделянето на слоеве 2 и 3 е важно и е мястото, където повечето самоделни файлове грешат. Ако слой 2 просто наследи целия Shift слой, с включен Caps Lock цифрата 1 ще започне да пише удивителна. Затова слой 2 стъпва върху нормалния и подменя само буквите.

Ключовият ред в целия файл е един:


XML:
<key code="10" output="ч"/>

Код 10 е физическият клавиш вляво до Shift. Независимо какво е щамповано върху него, за системата той е код 10. Казваш му да пише ч и толкова.



Пълният код


Прикаченият файл е същият. Кодът е тук за тези, които искат да го прочетат или да го променят преди инсталация.

XML:
<?xml version="1.1" encoding="UTF-8"?>
<!DOCTYPE keyboard SYSTEM "file://localhost/System/Library/DTDs/KeyboardLayout.dtd">
<!--
  Bulgarian Phonetic Windows Style - DTGaraGe Edition
  Автор: Тони Ангелчовски | dtgarage.eu

  Разлика от стандартния Apple Bulgarian Phonetic:
    Клавиш § (code 10, вляво до Shift) = ч / Ч

  Изисква ISO клавиатура (европейска подредба).
  На американска ANSI клавиатура клавишът § физически не съществува.

  Инсталация:
    cp Bulgarian-Phonetic-Windows.keylayout ~/Library/Keyboard\ Layouts/
    Logout -> Login -> System Settings -> Keyboard -> Input Sources -> Add

  Слоеве:
    index 0 = нормален
    index 1 = Shift
    index 2 = Caps Lock       (главни букви, цифрите остават цифри)
    index 3 = Caps + Shift    (малки букви, цифрите дават символи)
    index 4 = Option
    index 5 = Option + Shift
-->
<keyboard group="126" id="-30008" name="Bulgarian Phonetic Windows DTGaraGe" maxout="1">
    <layouts>
        <layout first="0" last="17" mapSet="ANSI" modifiers="commonModifiers"/>
        <layout first="18" last="18" mapSet="ANSI" modifiers="commonModifiers"/>
        <layout first="21" last="23" mapSet="ANSI" modifiers="commonModifiers"/>
        <layout first="30" last="30" mapSet="ANSI" modifiers="commonModifiers"/>
    </layouts>

    <modifierMap id="commonModifiers" defaultIndex="0">
        <keyMapSelect mapIndex="0"><modifier keys=""/></keyMapSelect>
        <keyMapSelect mapIndex="1"><modifier keys="anyShift"/></keyMapSelect>
        <keyMapSelect mapIndex="2"><modifier keys="caps"/></keyMapSelect>
        <keyMapSelect mapIndex="3"><modifier keys="anyShift caps"/></keyMapSelect>
        <keyMapSelect mapIndex="4"><modifier keys="anyOption"/></keyMapSelect>
        <keyMapSelect mapIndex="5"><modifier keys="anyShift anyOption"/></keyMapSelect>
    </modifierMap>

    <keyMapSet id="ANSI">

        <!-- ============================================================
             INDEX 0 - нормален слой
             ============================================================ -->
        <keyMap index="0">
            <key code="10" output="ч"/>   <!-- §  ->  ч   ГЛАВНАТА ПРОМЯНА -->

            <!-- Горен буквен ред -->
            <key code="12" output="я"/>   <!-- Q -->
            <key code="13" output="в"/>   <!-- W -->
            <key code="14" output="е"/>   <!-- E -->
            <key code="15" output="р"/>   <!-- R -->
            <key code="17" output="т"/>   <!-- T -->
            <key code="16" output="ъ"/>   <!-- Y -->
            <key code="32" output="у"/>   <!-- U -->
            <key code="34" output="и"/>   <!-- I -->
            <key code="31" output="о"/>   <!-- O -->
            <key code="35" output="п"/>   <!-- P -->
            <key code="33" output="ш"/>   <!-- [ -->
            <key code="30" output="щ"/>   <!-- ] -->

            <!-- Среден буквен ред -->
            <key code="0"  output="а"/>   <!-- A -->
            <key code="1"  output="с"/>   <!-- S -->
            <key code="2"  output="д"/>   <!-- D -->
            <key code="3"  output="ф"/>   <!-- F -->
            <key code="5"  output="г"/>   <!-- G -->
            <key code="4"  output="х"/>   <!-- H -->
            <key code="38" output="й"/>   <!-- J -->
            <key code="40" output="к"/>   <!-- K -->
            <key code="37" output="л"/>   <!-- L -->
            <key code="41" output=";"/>   <!-- ; -->
            <key code="39" output="&#x0027;"/>  <!-- ' -->
            <key code="42" output="ю"/>   <!-- \ -->

            <!-- Долен буквен ред -->
            <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="45" output="н"/>   <!-- N -->
            <key code="46" output="м"/>   <!-- M -->
            <key code="43" output=","/>   <!-- , -->
            <key code="47" output="."/>   <!-- . -->
            <key code="44" output="/"/>   <!-- / -->

            <!-- Цифров ред -->
            <key code="50" output="`"/>
            <key code="18" output="1"/>
            <key code="19" output="2"/>
            <key code="20" output="3"/>
            <key code="21" output="4"/>
            <key code="23" output="5"/>
            <key code="22" output="6"/>
            <key code="26" output="7"/>
            <key code="28" output="8"/>
            <key code="25" output="9"/>
            <key code="29" output="0"/>
            <key code="27" output="-"/>
            <key code="24" output="="/>

            <!-- Управляващи -->
            <key code="36" action="return"/>
            <key code="48" action="tab"/>
            <key code="49" output=" "/>
            <key code="51" action="delete"/>
            <key code="53" output="&#x001B;"/>

            <!-- Цифрова клавиатура -->
            <key code="65" output="."/>
            <key code="67" output="*"/>
            <key code="69" output="+"/>
            <key code="71" output="&#x001B;"/>
            <key code="75" output="/"/>
            <key code="76" output="&#x0003;"/>
            <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="114" output="&#x0005;"/>
            <key code="115" output="&#x0001;"/>
            <key code="116" output="&#x000B;"/>
            <key code="117" output="&#x007F;"/>
            <key code="119" output="&#x0004;"/>
            <key code="121" output="&#x000C;"/>
            <key code="123" output="&#x001C;"/>
            <key code="124" output="&#x001D;"/>
            <key code="125" output="&#x001F;"/>
            <key code="126" output="&#x001E;"/>
        </keyMap>

        <!-- ============================================================
             INDEX 1 - Shift
             ============================================================ -->
        <keyMap index="1">
            <key code="10" output="Ч"/>   <!-- Shift + §  ->  Ч -->

            <key code="12" output="Я"/>
            <key code="13" output="В"/>
            <key code="14" output="Е"/>
            <key code="15" output="Р"/>
            <key code="17" output="Т"/>
            <key code="16" output="Ъ"/>
            <key code="32" output="У"/>
            <key code="34" output="И"/>
            <key code="31" output="О"/>
            <key code="35" output="П"/>
            <key code="33" output="Ш"/>
            <key code="30" output="Щ"/>

            <key code="0"  output="А"/>
            <key code="1"  output="С"/>
            <key code="2"  output="Д"/>
            <key code="3"  output="Ф"/>
            <key code="5"  output="Г"/>
            <key code="4"  output="Х"/>
            <key code="38" output="Й"/>
            <key code="40" output="К"/>
            <key code="37" output="Л"/>
            <key code="41" output=":"/>
            <key code="39" output="&#x0022;"/>
            <key code="42" output="Ю"/>

            <key code="6"  output="З"/>
            <key code="7"  output="Ь"/>
            <key code="8"  output="Ц"/>
            <key code="9"  output="Ж"/>
            <key code="11" output="Б"/>
            <key code="45" output="Н"/>
            <key code="46" output="М"/>
            <key code="43" output="&#x003C;"/>
            <key code="47" output="&#x003E;"/>
            <key code="44" output="?"/>

            <key code="50" output="~"/>
            <key code="18" output="!"/>
            <key code="19" output="@"/>
            <key code="20" output="#"/>
            <key code="21" output="$"/>
            <key code="23" output="%"/>
            <key code="22" output="^"/>
            <key code="26" output="&#x0026;"/>
            <key code="28" output="*"/>
            <key code="25" output="("/>
            <key code="29" output=")"/>
            <key code="27" output="_"/>
            <key code="24" output="+"/>

            <key code="36" action="return"/>
            <key code="48" action="tab"/>
            <key code="49" output=" "/>
            <key code="51" action="delete"/>
            <key code="53" output="&#x001B;"/>

            <key code="65" output="."/>
            <key code="67" output="*"/>
            <key code="69" output="+"/>
            <key code="71" output="&#x001B;"/>
            <key code="75" output="/"/>
            <key code="76" output="&#x0003;"/>
            <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="114" output="&#x0005;"/>
            <key code="115" output="&#x0001;"/>
            <key code="116" output="&#x000B;"/>
            <key code="117" output="&#x007F;"/>
            <key code="119" output="&#x0004;"/>
            <key code="121" output="&#x000C;"/>
            <key code="123" output="&#x001C;"/>
            <key code="124" output="&#x001D;"/>
            <key code="125" output="&#x001F;"/>
            <key code="126" output="&#x001E;"/>
        </keyMap>

        <!-- ============================================================
             INDEX 2 - Caps Lock
             Главни букви, но цифровият ред остава цифри.
             Затова базата е index 0, а не index 1.
             ============================================================ -->
        <keyMap index="2" baseMapSet="ANSI" baseIndex="0">
            <key code="10" output="Ч"/>
            <key code="12" output="Я"/>
            <key code="13" output="В"/>
            <key code="14" output="Е"/>
            <key code="15" output="Р"/>
            <key code="17" output="Т"/>
            <key code="16" output="Ъ"/>
            <key code="32" output="У"/>
            <key code="34" output="И"/>
            <key code="31" output="О"/>
            <key code="35" output="П"/>
            <key code="33" output="Ш"/>
            <key code="30" output="Щ"/>
            <key code="0"  output="А"/>
            <key code="1"  output="С"/>
            <key code="2"  output="Д"/>
            <key code="3"  output="Ф"/>
            <key code="5"  output="Г"/>
            <key code="4"  output="Х"/>
            <key code="38" output="Й"/>
            <key code="40" output="К"/>
            <key code="37" output="Л"/>
            <key code="42" output="Ю"/>
            <key code="6"  output="З"/>
            <key code="7"  output="Ь"/>
            <key code="8"  output="Ц"/>
            <key code="9"  output="Ж"/>
            <key code="11" output="Б"/>
            <key code="45" output="Н"/>
            <key code="46" output="М"/>
        </keyMap>

        <!-- ============================================================
             INDEX 3 - Caps Lock + Shift
             Малки букви, цифровият ред дава символи (както в Windows).
             ============================================================ -->
        <keyMap index="3" baseMapSet="ANSI" baseIndex="1">
            <key code="10" output="ч"/>
            <key code="12" output="я"/>
            <key code="13" output="в"/>
            <key code="14" output="е"/>
            <key code="15" output="р"/>
            <key code="17" output="т"/>
            <key code="16" output="ъ"/>
            <key code="32" output="у"/>
            <key code="34" output="и"/>
            <key code="31" output="о"/>
            <key code="35" output="п"/>
            <key code="33" output="ш"/>
            <key code="30" output="щ"/>
            <key code="0"  output="а"/>
            <key code="1"  output="с"/>
            <key code="2"  output="д"/>
            <key code="3"  output="ф"/>
            <key code="5"  output="г"/>
            <key code="4"  output="х"/>
            <key code="38" output="й"/>
            <key code="40" output="к"/>
            <key code="37" output="л"/>
            <key code="42" output="ю"/>
            <key code="6"  output="з"/>
            <key code="7"  output="ь"/>
            <key code="8"  output="ц"/>
            <key code="9"  output="ж"/>
            <key code="11" output="б"/>
            <key code="45" output="н"/>
            <key code="46" output="м"/>
        </keyMap>

        <!-- ============================================================
             INDEX 4 - Option
             Базата е index 0, за да не онемеят клавишите под Option.
             ============================================================ -->
        <keyMap index="4" baseMapSet="ANSI" baseIndex="0">
            <key code="10" output="§"/>   <!-- Option + §  ->  оригиналният § -->
            <key code="18" output="¡"/>
            <key code="19" output="™"/>
            <key code="20" output="£"/>
            <key code="21" output="¢"/>
            <key code="23" output="∞"/>
            <key code="22" output="§"/>
            <key code="26" output="¶"/>
            <key code="28" output="•"/>
            <key code="25" output="ª"/>
            <key code="29" output="º"/>
            <key code="27" output="-"/>
            <key code="24" output="≠"/>
            <key code="43" output="„"/>
            <key code="47" output="“"/>
        </keyMap>

        <!-- ============================================================
             INDEX 5 - Option + Shift
             ============================================================ -->
        <keyMap index="5" baseMapSet="ANSI" baseIndex="1">
            <key code="10" output="±"/>
            <key code="24" output="±"/>
            <key code="27" output="-"/>
            <key code="43" output="«"/>
            <key code="47" output="»"/>
        </keyMap>

    </keyMapSet>

    <actions>
        <action id="delete">
            <when state="none" output="&#x0008;"/>
        </action>
        <action id="return">
            <when state="none" output="&#x000D;"/>
        </action>
        <action id="tab">
            <when state="none" output="&#x0009;"/>
        </action>
    </actions>
</keyboard>



Инсталация през терминала


Ако предпочиташ терминала пред Finder:

Bash:
# създай папката, ако я няма
mkdir -p ~/Library/Keyboard\ Layouts

# копирай файла от Downloads
cp ~/Downloads/Bulgarian-Phonetic-Windows.keylayout ~/Library/Keyboard\ Layouts/

# провери
ls -l ~/Library/Keyboard\ Layouts/

За всички профили на машината:

Bash:
sudo cp ~/Downloads/Bulgarian-Phonetic-Windows.keylayout /Library/Keyboard\ Layouts/

Задължителен е logout и login. macOS чете keylayout файловете само при вход в профила. Без това новата подредба няма да се появи в списъка и ще решиш, че нещо не е станало.

Рестарт също върши работа, но е излишен.




Ако го пишеш на ръка


Копи-пейст в текстов редактор е най-честият източник на счупени файлове. Ако все пак минеш по този път:

TextEdit изисква Format, Make Plain Text преди запис. По подразбиране записва форматиран текст и файлът става негоден, макар да изглежда наред.

Разширението трябва да е .keylayout, не .keylayout.txt. Finder крие разширенията по подразбиране - включи ги от Finder, Settings, Advanced.

По-добрият вариант е редактор, който не се меси: BBEdit, TextMate, VS Code или nano в терминала.




Активиране


  • System Settings, после Keyboard
  • Input Sources, бутон Edit
  • Бутонът + долу вляво
  • Търси "DTGaraGe" или превърти до Bulgarian
  • Избери Bulgarian Phonetic Windows DTGaraGe и натисни Add

Превключването е от иконата в лентата горе или с Control+Space, ако си оставил стандартната комбинация.

Полезно: в същия панел има отметка "Show Input menu in menu bar". Ако я няма включена, няма да виждаш коя подредба е активна и ще се чудиш защо пише грешно.




Проверка


НатискашТрябва да пише
§ (вляво до Shift)ч
Shift + §Ч
Option + §§ (оригиналът, ако ти трябва)
A S D Fа с д ф
Caps Lock, после 11, не удивителна
Цифри от numpadЦифри
СтрелкиКурсорът се движи

Последните три реда не са излишни. Точно там се чупят самоделните keylayout файлове - клавиши, дефинирани с празен изход, спират да работят напълно, а човек го забелязва чак след седмица.

Има и вграден инструмент: System Settings, Keyboard, отметката за визуална клавиатура. Показва живата подредба на екрана и веднага виждаш кое къде е.




Ако не работи


ПроблемПричинаРешение
Не се появява в списъкаНяма logoutИзлез и влез отново
Пак пише § или нищоАктивна е старата подредбаВиж иконата в лентата
Файлът не се виждаЗаписан като .txt или RTFPlain Text и правилно разширение
Няма такъв клавишANSI клавиатураРемапни друг код по избор
Част от клавишите мълчатДефинирани с празен изходСвали файла оттук наново

Ако системата зареди файла, но нещо се държи странно, изтрий го, излез от профила, влез, върни го и излез пак. macOS кешира подредбите и понякога държи стара версия.



Картата на клавишите


Code:
§ -> ч          Q -> я    W -> в    E -> е    R -> р    T -> т
                Y -> ъ    U -> у    I -> и    O -> о    P -> п
                [ -> ш    ] -> щ

                A -> а    S -> с    D -> д    F -> ф    G -> г
                H -> х    J -> й    K -> к    L -> л
                \ -> ю

                Z -> з    X -> ь    C -> ц    V -> ж    B -> б
                N -> н    M -> м

Ако искаш ч на друг клавиш, смени само номера в реда с output="ч". Номерата се виждат във всеки редактор на подредби, или просто ги преброй от таблицата горе.



In English


How to add a Bulgarian Phonetic keyboard on macOS with the Windows key placement:

1. Download the attached Bulgarian-Phonetic-Windows.keylayout file.
2. Move it to ~/Library/Keyboard Layouts/ (create the folder if missing).
3. Log out and log back in - macOS only reads layout files at login.
4. Go to System Settings, Keyboard, Input Sources, Edit, then press +.
5. Search for "DTGaraGe" and add the layout.

The layout matches the standard Bulgarian Phonetic arrangement, with one change: the ISO key to the left of the left Shift outputs ч and Ч instead of §. Option plus that key still gives you the original § character.

Requires an ISO keyboard. On US ANSI keyboards that physical key does not exist.




Цялата macOS серия: aiflux.eu/macos-mastery

Ако имаш друг клавиш, който искаш да ремапнеш, пиши в темата - файлът се променя за минута.


Ключови думи: българска фонетична клавиатура mac, bulgarian phonetic macos, keylayout файл, ч на mac клавиатура, ремап на клавиш macos, кирилица на mac, bulgarian phonetic windows style, input sources macos, персонализирана клавиатурна подредба
Източници: Apple Keyboard Layout DTD, документация за Input Sources в macOS, собствена практика.


toni@dtgarage:~$ whoami
Тони Ангелчовски | Ексклузивно за DTGaraGe
toni@dtgarage:~$ cat LICENSE
🔒 Копирането и препубликуването без разрешение не е позволено.
toni@dtgarage:~$ ./support.sh
☕ Подкрепи DTGaraGe и независимото техническо съдържание
toni@dtgarage:~$ █
 

Attachments

  • Bulgarian-Phonetic-Windows.keylayout.zip
    3.4 KB · Views: 1
Last edited:
Top Bottom
🛡️ Този сайт използва аналитични инструменти за подобряване на потребителското изживяване. Никакви лични данни не се събират. С продължаването си в Потока приемаш тази философия на прозрачност и уважение.