LINUX.ORG.RU

Как поставить ударение над кириллическим символом?

 , , , ,


3

1

С помощью клавиши Compose (и файлика .XCompose) можно легко ввести символы, которые условно «не прибиты гвоздями на клавиатуре». Это и символы пунктуации вида «ёлочек», — тире (em-dash), – (en-dash) и ☺ смайлика. Греческие символы так же могут быть полезны (αβγδ…), как и расширенные матсимволы (±≥≠≤≈≡∃∧∨¬⇒·×∫∑∞∅∈∉). Само собой нужны шрифты для их отображения, но если они есть хоть в каком-то виде, то это удобнее чем писать словами.

Так же иногда для улучшения понимания текста полезно уметь ставить ударение. Для латиницы это просто, так как достаточно нажать Compose+клавишу апострофа+нужный символ, например, éóá, но что делать в случае кириллицы?

Как правило знак апострофа есть только в латинской раскладке, а в русской раскладке он отсутствует, поэтому предлагаю использовать слэш / (в вашей раскладке он ведь присутствует?) вместо апострофа. В файлик ~/.XCompose достаточно добавить следующие строчки:

# Для постановки ударения для кириллических гласных (за исключением ёЁ) 
#используем слэш вместо апострофа                                                                                                                                                                          

# Строчные гласные                                                                                                                                                                          
<Multi_key> <slash> <Cyrillic_a> : "а́"                                                                                                                                                      
<Multi_key> <slash> <Cyrillic_ie> : "е́"                                                                                                                                                     
<Multi_key> <slash> <Cyrillic_i> : "и́"                                                                                                                                                      
<Multi_key> <slash> <Cyrillic_o> : "о́"                                                                                                                                                      
<Multi_key> <slash> <Cyrillic_u> : "у́"                                                                                                                                                      
<Multi_key> <slash> <Cyrillic_yeru> : "ы́"                                                                                                                                                   
<Multi_key> <slash> <Cyrillic_e> : "э́"                                                                                                                                                      
<Multi_key> <slash> <Cyrillic_yu> : "ю́"                                                                                                                                                     
<Multi_key> <slash> <Cyrillic_ya> : "я́"                                                                                                                                                     
                                                                                                                                                                                            
# Прописные гласные                                                                                                                                                                         
<Multi_key> <slash> <Cyrillic_A> : "А́"                                                                                                                                                      
<Multi_key> <slash> <Cyrillic_IE> : "Е́"                                                                                                                                                     
<Multi_key> <slash> <Cyrillic_I> : "И́"                                                                                                                                                      
<Multi_key> <slash> <Cyrillic_O> : "О́"                                                                                                                                                      
<Multi_key> <slash> <Cyrillic_U> : "У́"                                                                                                                                                      
<Multi_key> <slash> <Cyrillic_YERY> : "Ы́"                                                                                                                                                   
<Multi_key> <slash> <Cyrillic_E> : "Э́"                                                                                                                                                      
<Multi_key> <slash> <Cyrillic_YU> : "Ю́"                                                                                                                                                     
<Multi_key> <slash> <Cyrillic_YA> : "Я́"
Всё. Теперь все последующие клиенты X11 при запуске будут следовать этим правилам ввода.

Если хочется просто добавить символ ударения уже после набора текста, то можно добавить ~/.XCompose следующие комбинации:

# Добавляем ударение. Встаём _после_ ударной гласной 
#и жмём Compose + / + a (латиница) или 
#Compose + / + ф (русская раскладка) 
<Multi_key> <slash> <a> : "́" U0301 # COMBINING ACUTE ACCENT                             
<Multi_key> <slash> <Cyrillic_ef> : "́" U0301 # COMBINING ACUTE ACCENT                   

emacs В случае emacs ситуация отличается, так как emacs имеет свою внутреннюю переключалку регистра. От этого есть как плюсы, так и минусы, которые позволяют набирать текст в emacs независимо от того на сколько слетела башня у разработчиков внешних сред в которых emacs умудряется работать. В .emacs следует добавить следующие строки:

;;                                                                                                                                                                                          
;; Чтобы раскладка соответствовала раскладке русских букв на виндовых (а теперь                                                                                                             
;;   таких большинство) клавиатурах, можно добавить еще следующие строки:                                                                                                                   
;;                                                                                                                                                                                          
;; redefine some orginal keybindings под MS - можно ли попроще?                                                                                                                             
;;                                                                                                                                                                                          
;; кнопка \| => \/ при переключения регистра (для моего удобства)                                                                                                                           
;;                                                                                                                                                                                          
(require 'quail)                                                                                                                                                                            
(require 'cyrillic)                                                                                                                                                                         
                                                                                                                                                                                            
    (quail-define-package                                                                                                                                                                   
     "russian-computer" "Cyrillic" "RU" nil                                                                                                                                                 
     "ЙЦУКЕH keyboard layout widely used in Russia"                                                                                                                   
     nil t t t t nil nil nil nil nil t)                                                                                                                                                     
                                                                                                                                                                                            
    (quail-define-rules                                                                                                                                                                     
     ("1" ?1) ("2" ?2) ("3" ?3) ("4" ?4) ("5" ?5) ("6" ?6) ("7" ?7) ("8" ?8)                                                                                                                
     ("9" ?9) ("0" ?0) ("-" ?-) ("=" ?=) ("`" ?ё) ("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" ?ь) ("," ?б) ("." ?ю) ("/" ?.) ("!" ?!)                                                                                                                
     ("@" ?\") ("#" ?№) ("$" ?\;) ("%" ?%) ("^" ?:) ("&" ??) ("*" ?*) ("(" ?\()                                                                                                             
     (")" ?\)) ("_" ?_) ("+" ?+) ("~" ?~)                                                                                                                                                   
     ("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" ?Ь) ("<" ?Б)                                                                                                                
     (">" ?Ю) ("?" ?,)                                                                                                                                                                      
     ;; Правила для ударений через = (внутри русского текста = вроде как не встречается)                                                                                                    
     ;; Ввод =+гласная в русском регистре                                                                                             
     ;; Используем латинские клавиши, которые соответствуют русским гласным в ЙЦУКЕН                                                                                                        
     ("=f" ["а́"]) ("=t" ["е́"]) ("=b" ["и́"]) ("=j" ["о́"]) ("=e" ["у́"]) 
     ("=s" ["ы́"]) ("='" ["э́"]) ("=." ["ю́"]) ("=z" ["я́"])                                                                                                                                                              
     ("=F" ["А́"]) ("=T" ["Е́"]) ("=B" ["И́"]) ("=J" ["О́"]) ("=E" ["У́"]) 
     ("=S" ["Ы́"]) ("=\"" ["Э́"]) ("=>" ["Ю́"]) ("=Z" ["Я́"]))                                                                                                                                                             
                                                                                                                                                                                            
(setq quail-keyboard-layout-type 'russian-computer)                        
Добавление ударения идёт через набор символа = + гласная (за исключением ёЁ) в русском регистре (= + что-то отличное от кириллической гласной оставляет символ равенства неизменным). Здесь же сразу определяется и раскладка в этом самом русском регистре. Она немного модифицирована под мои нужды.

Можно заменить = на / (как в случае набора через Compose). Для этого необходимо заменить = на | (в этой раскладке для русского регистра | переопределён в /), но в этом случае будет неадекватный результат при наборе вполне общепринятой буквенной комбинации а/я. А знак равенства вряд ли встречается внутри русского текста.

P.S. Если просто хочется добавить символ ударения (U+0301) средствами emacs, то можно, например, добавить соответствие вида:

("=a" ["́"])
и в русском регистре комбинация символов =ф автоматически преобразуется в юникодный символ ударения.

Ниже идёт код, предложенный Google Gemeni для вставки символа ударения по Ctrl-c+a (к сожалению в org-mode на эту комбинацию завязан вызов org-agenda):

;; расстановка ударения
(defun insert-cyrillic-accent-at-point ()
  "Ставит ударение над символом под курсором."
  (interactive)
  (let ((vowels "[аеиоуыэюяАЕИОУЫЭЮЯ]"))
    (if (looking-at vowels)
        (save-excursion
          (insert (decode-char 'ucs #x0301))) ;; Ставим акцент «после»
      (message "Под курсором не гласная!"))))

(global-set-key (kbd "C-c a") 'insert-cyrillic-accent-at-point)

Вариант с типографской раскладкой (misc:typo) В типографской раскладке misc:typo знак ударения вводится следующим образом:

  • Напечатайте гласную букву (например, о).
  • Сразу после неё нажмите комбинацию: Right Alt + a (латинский регистр) или Right Alt + ф (русский регистр)

Символ ударения автоматически «напрыгнет» (да, это ИИ так сказал) на предыдущую букву: о́, а́, ю́, и́. Причём «напрыгивание» происходит в случае абсолютно любых символов, а не только гласных. Полную раскладку «Третьего уровня» misc:typo можно глянуть здесь.

Типографская раскладка включается через xkboptions, например (последние две опции):

setxkbmap "us,ru" -option grp:caps_toggle,compose:menu,grp_led:scroll,lv3:ralt_switch,misc:typo

В случае засилья gnome возможно лучше воспользоваться строкой:

gsettings set org.gnome.desktop.input-sources xkb-options "['grp:caps_toggle','compose:menu','grp_led:scroll','lv3:ralt_switch','misc:typo']"

Либо сделать тоже через gnome-tweaks: «Дополнительные настройки» → «Клавиатура и мышь» → «Дополнительные параметры раскладки» → «Разные параметры совместимости» (Miscellaneous compatibility options) → «Включить дополнительные типографские символы» (Enable extra typographic characters). Следует так же убедиться, что в разделе «Клавиша выбора третьего уровня» выбран Right Alt (или другая удобная вам клавиша).

В KDE через настройки следует выбрать:

  • Keyboard → Key Bindings → Key to choose 3ed Level → Right Alt ✔
  • Keyboard → Key Bindings → Compatibility Options → Enable extra typographic characters ✔

P.S. Раскладка для дополнительных типографских символов позаимствована из «Типографской раскладки Ильи Бирмана», но с некоторыми изменениями в частности в области постановки ударений. Подробности про «Третий уровень» раскладки можно найти, например, в блоге Ивана Шихалева.

Вариант через xclip Создаём скрипт stress и кладём его куда-нибудь:

echo -en '\u0301' | xclip
Запускаем его. Если на вашем компьютере нет xclip — не беда: заходим через ssh -Y туда, где есть (вы ведь используете X11?), создаём скрипт и запускаем скрипт. Тепе́рь мо́жно понараставля́ть ударе́ний в уже́ на́бранном те́ксте (ставим курсор сразу после нужной гласной и жамкаем среднюю кнопку мышки или клавиатурную комбинацию для вставки).

P.S. Зачем могут понадобиться последние два варианта? Ввод через Compose предполагает расстановку ударений во время ввода текста, но автоматическая проверка орфографии русского языка, работающая сейчас по умолчанию, не знает что такое символ ударения и все слова с ним подчёркивает красным. Поэтому если нужна орфография, то ударения следует расставлять уже после её проверки. Правильным решением было бы если какая-то добрая и работящая душа создаст новый орфографический словарик, включающий (ну или на первых порах хотя бы игнорирующий) правильные ударения и пропихнёт его во все популярные дистрибутивы.

P.P.S. При написании правил настроек использовалась не только моя биологическая нейронная сеть, но и ИИ, который прилагается к поисковой строке google. Вариант с xclip был предложен dmitry237

★★★★★

Проверено: CrX ()
Последнее исправление: Evgueni (всего исправлений: 53)
Ответ на: комментарий от Evgueni

Compose + a конфликтует с имеющимися вроде a" = ä и другими в таком порядке. ф можно в принципе. Но мне как-то на «ё потому что всегда ударная» мнемоничнее кажется, чем «ф, потому что в другой раскладке там a от acute». Вот если бы и a тоже работало, тогда да.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от CrX

Ну, тут как кому удобнее и у кого какой .XCompose. Боюсь сделать какой-то стандарт, который всем угодил сложно. Мне, например, символ ä не нужен. Как минимум я его не собираюсь набирать на более-менее постоянной основе.

Типографская раскладка misc:typo возможно здесь поможет, но она XCompose не заменит, потому что символов там маловато.

Evgueni ★★★★★
() автор топика
Ответ на: комментарий от Evgueni

Ну, тут как кому удобнее и у кого какой .XCompose. Боюсь сделать какой-то стандарт, который всем угодил сложно.

Воистину.

Мне, например, символ ä не нужен. Как минимум я его не собираюсь набирать на более-менее постоянной основе.

А мне нужен бывает, хоть и редко. Но это же пример, я же упомяную «и другими». Там по тому же принципу áàąåâăāªæ, вот особенно последняя ae часто мне нужна, например. И в отличие от остальных её хочется набирать точно именно в этом порядке.

CrX ★★★★★
()
Ответ на: комментарий от CrX

Поправка: всё-таки есть интерференция с Compose+a — убираю из текста, точнее поменяю на <slash> <slash>. IMHO в этом случае лучше Типографскую раскладку включить.

Evgueni ★★★★★
() автор топика

Вот бы ещё точку на дополнительной клавиатуре заставить всегда вводить точку.

Aceler ★★★★★
()
Ответ на: комментарий от Aceler

Ээээ. У меня нет такой клавиатуры.

Evgueni ★★★★★
() автор топика
Ответ на: комментарий от Evgueni

IMHO в этом случае лучше Типографскую раскладку включить.

Как по мне, это лишние сложности. Хотя здесь, конечно, дело вкуса, и кому как удобнее и особенно привычнее.

CrX ★★★★★
()
Ответ на: комментарий от CrX

Остановился пока на таком варианте:

<Multi_key> <slash> <a> : "́" U0301 # COMBINING ACUTE ACCENT                             
<Multi_key> <slash> <Cyrillic_ef> : "́" U0301 # COMBINING ACUTE ACCENT   

Evgueni ★★★★★
() автор топика
Последнее исправление: Evgueni (всего исправлений: 3)
Ответ на: комментарий от Evgueni

Да пожалуйста. Хотя на ё объективно удобнее, чем так.

CrX ★★★★★
()
Ответ на: комментарий от Evgueni

Ну я уже говорил, для меня наблюдаемый мной феномен — загадка. Но факт остаётся фактом, при запущенном ibus-daemon у меня начинает работать переключение раскладки в compose.

Smacker ★★★★★
()
Ответ на: комментарий от thunar

Это легко находимая информация. В свою очередь я набрал достаточное число спецсимволов, чтобы заинтересовать для её поиска.

Evgueni ★★★★★
() автор топика
Последнее исправление: Evgueni (всего исправлений: 1)

У меня проще. Компоуз на оба контролла (они на месте альтов, кстати), так что стиль слепой печати не нарушен.

# ОБЩИЕ
<Multi_key> <minus> <minus> : "—"
<Multi_key> <1>             : "₁"
<Multi_key> <2>             : "₂"
<Multi_key> <3>             : "₃"
<Multi_key> <4>             : "₄"
<Multi_key> <5>             : "₅"
<Multi_key> <6>             : "₆"
<Multi_key> <7>             : "₇"
<Multi_key> <8>             : "₈"
<Multi_key> <9>             : "₉"
<Multi_key> <0>             : "₀"

# ЛАТИННИЦА
<Multi_key> <c>            : "©"
<Multi_key> <bracketleft>  : "«"
<Multi_key> <bracketright> : "»"
<Multi_key> <A>            : "À"
<Multi_key> <a>            : "à"
<Multi_key> <asciitilde>   : "È"
<Multi_key> <grave>        : "è"
<Multi_key> <E>            : "É"
<Multi_key> <e>            : "é"
<Multi_key> <I>            : "Ì"
<Multi_key> <i>            : "ì"
<Multi_key> <O>            : "Ò"
<Multi_key> <o>            : "ò"
<Multi_key> <U>            : "Ù"
<Multi_key> <u>            : "ù"

# КИРИЛЛИЦА
<Multi_key> <Cyrillic_es>       : "©"
<Multi_key> <Cyrillic_ha>       : "«"
<Multi_key> <Cyrillic_hardsign> : "»"
<Multi_key> <Cyrillic_er>       : "Ꝑ"
<Multi_key> <Cyrillic_A>        : "А́"
<Multi_key> <Cyrillic_a>        : "а́"
<Multi_key> <Cyrillic_YA>       : "Я́"
<Multi_key> <Cyrillic_ya>       : "я́"
<Multi_key> <Cyrillic_IE>       : "Е́"
<Multi_key> <Cyrillic_ie>       : "е́"
<Multi_key> <Cyrillic_E>        : "Э́"
<Multi_key> <Cyrillic_e>        : "э́"
<Multi_key> <Cyrillic_I>        : "И́"
<Multi_key> <Cyrillic_i>        : "и́"
<Multi_key> <Cyrillic_YERU>     : "Ы́"
<Multi_key> <Cyrillic_yeru>     : "ы́"
<Multi_key> <Cyrillic_O>        : "О́"
<Multi_key> <Cyrillic_o>        : "о́"
<Multi_key> <Cyrillic_U>        : "У́"
<Multi_key> <Cyrillic_u>        : "у́"
<Multi_key> <Cyrillic_YU>       : "Ю́"
<Multi_key> <Cyrillic_yu>       : "ю́"
papin-aziat ★★★★★
()

Говорил с Gemeni — много думал. Предложенный вариант расстановки акцентов для emacs с учётом что акцент может выставляться только над гласными русского алфавита:

;; расстановка ударения
(defun insert-cyrillic-accent-at-point ()
  "Ставит ударение над символом под курсором."
  (interactive)
  (let ((vowels "[аеиоуыэюяАЕИОУЫЭЮЯ]"))
    (if (looking-at vowels)
        (save-excursion
          (insert (decode-char 'ucs #x0301))) ;; Ставим акцент «после»
      (message "Под курсором не гласная!"))))

(global-set-key (kbd "C-c a") 'insert-cyrillic-accent-at-point)

Evgueni ★★★★★
() автор топика
Последнее исправление: Evgueni (всего исправлений: 2)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.