LINUX.ORG.RU

зависит от де или вм которую используешь. К примеру на sway получить индикатор через скрипт очень легко, а на hyprland я пока еще не встретил нормального решения

monkdt
()
Последнее исправление: monkdt (всего исправлений: 1)

Если ты в PROMPT планируешь его добавить, то вряд ли оно будет работать так, как ты планируешь. Ведь он не постоянно обновляется, а только после команды или Return. Соответственно, часто будет ситуация, когда в PROMPT одно, а на самом деле другое.

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

Нужно прописать

RPROMPT='%D{%K:%M:%S %p}'                                                                                       
                                                                                                                
TMOUT=1                                                                                                         
                                                                                                                
TRAPALRM() {                                                                                                    
    zle reset-prompt                                                                                            
}       

в ~/.zshrc

В RPROMPT замени часы на индикацию раскладки,обновление раз в секунду.

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

как уже говорил реализация зависит от специфики вм/de. Вот на hyprland я сделал с помощью парсера выхлопа hyprctl с jq. Кому интересно



export GET_LAYOUT=$(hyprctl devices -j | jq '.keyboards[] | select(.name == "sigmachip-usb-keyboard")|.active_keymap')

PS1='\[\e[0m\]\u\[\e[0m\]@\[\e[0m\]\H\[\e[0m\]_\[\e[0m\][$GET_LAYOUT] '

где «sigmachip-usb-keyboard» имя клавиш из devices. Аналог hyprctl есть в любой вм и, вероятно, де

https://ibb.co/RcwDvsw

monkdt
()
Ответ на: комментарий от RodoSlav

Странно,у меня работает. А ты точно в zsh это делал а не в баше? source .zshrc сделать не забыл? PS и давай на ты плиз,ладно?

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

Есть такой вариант определения раскладки:

setxkbmap -print | sed -n 's#xkb_symbols[^"]*"\([^"]*\)".*$#\1#p' | awk -F+ '{print $2}'
Но у меня, как и большенства страждущих, результат всегда один - us

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

Да похожие темы действительно есть и не одна. Но к сожалению ни одного внятного решения я не нашёл. Если я что-то упустил - поделитесь ссылкой.

RodoSlav
() автор топика

to ddidwyll

что не так? По-моему никто не предложил нормального решения, а это работает на ура. Вот еще флаг страны в терминале как идентификатор лэйаута

https://youtu.be/IIfnZWX5CoU

надо только в ютубе на hd поменять

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

а это работает на ура

hyprctl по вашему универсальное решение? Я например не нашел способа для определения текущей раскладки в консоли. Не в эмуляторе терминала, здесь все просто.

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

Я на headless серваке еще ни разу не менял раскладку

Расскладка меняется без проблем, у меня так:

setfont ter-v28n                # шрифт (с кириллицей)         
sudo loadkeys ruwin_ctrl-UTF-8  # комбинация (праый ctrl)

А вот как програмно определить current layout, вот в чем вопрос.

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

Я когда создавал тему, думал, что индикацию в эмуляторе терминала будет сделать лекго, так как там есть пересечки с setxkbmap.
Но по факту, что в tty, что в эмуляторах я пока не нашёл как сделать индикацию.
Таким образом тема стала универсальной.
Твой пример не совсем понятен, что за hyprctl?

export GET_LAYOUT=$(hyprctl devices -j | jq '.keyboards[] | select(.name == "sigmachip-usb-keyboard")|.active_keymap')

PS1='\[\e[0m\]\u\[\e[0m\]@\[\e[0m\]\H\[\e[0m\]_\[\e[0m\][$GET_LAYOUT] '
У меня XFCE4. Wayland отсутствует.
Что там является аналогом hyprctl?
И насколько твой пример действительно универсален для DE и WM (ICEWM, openbox, XFCE4 и прочее).?
Под каждый нужен свой аналог hyprctl?

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

Поделитесь с сообществом.

У меня иксы:

pwsh:

#!/usr/bin/pwsh

$value = (xset -q | Select-String '(?<=LED\D+\s0{4})\d').Matches.Value

switch ($value)
{
    1 {'ru'}
    0 {'en'}
}

bash:

#!/usr/bin/bash

value=$(xset -q | grep 'LED' | sed -E 's/.+0{4}([01]).+/\1/')

case $value in
  0) echo en ;;
  1) echo ru ;;
esac
dmitry237 ★★★
()
Ответ на: комментарий от dmitry237

Да, для Bash такой вариант я находил.
Но этот вариант скорее всего не подойдёт если раскладок клавиатур больше 2-х.
Т.е. привязка раскладки к LED вызывает сомнения.
Так же это не совсем индикация. Данный скрипт покажет информацию после запуска эмулятора терминала.
При смене раскладки в текущей сессии терминала ни чего не поменяется.
Вобщем нужно так:

RodoSlav_RU$
Нажал зарезервированную комбинацию клавишь получил:
RodoSlav_EN$

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

А название темы какое? Я Вам и намекнул, что предложенное - не то что требуется. Про всякие панели я уже тоже писал. По сути это развлекушка программистов. По факту, кто смотрит на панель с индикацией текущей раскладки клавиатуры перед тем как набирать текст?

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

А название темы какое?

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

кто смотрит на панель с индикацией текущей раскладки клавиатуры перед тем как набирать текст?

Да, ввод не тех символов бывает раздражает, особенно, когда нарушена концентрация – думаешь о своем, а текст набираешь автоматом. Это наверное у всех так.

По существу ничего посоветовать не могу, индикация хороша в реальном времени, но для этого нужен сервис, который отслеживает состояние раскладки, координаты консольного курсора и выводит что-то в консоль, не блокируя потоки std*. Проще задуматься о звуковой индикации. Имхо, это нетривиальная задача выполнять параллельный код в одном консольном хосте. А если запихнуть в промпт, то скрипт будет отрабатывать не до ввода, а после него, что бессмысленно.

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