Любителям переключения раскладки Alt+Shift

Вот тут набросал маленький скриптик, который переделывает текущую консольную раскладку для переключения с помощью сочетания Alt+Shift

#!/bin/bash
#
#   kbd_alt_sh.sh
#
#   Copyright (c) 2012 ArchAnTavr <archlinux@antavr.ru>;
#   http://archlinux.antavr.ru
#
#   This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2 of the License, or
#   (at your option) any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program.  If not, see <http://www.gnu.org/licenses/>;.
#
# Цвет и вид текста сообщений
BLDRED='\e[1;31m' # Red
BLDGRN='\e[1;32m' # Green
BLDYLW='\e[1;33m' # Yellow
BLDBLU='\e[1;34m' # Blue
BLDWHT='\e[1;37m' # White
TXTRST='\e[0m'    # Text Reset
# Если не root то выход
[[ ${EUID} -ne 0 ]] && echo -e "${BLDRED}$(gettext 'You must have root privileges to run!!!')${TXTRST}" >&2 && exit -1
CONFFILE='/etc/vconsole.conf'
KEYMAPSDIR='/etc/kbd/keymaps/'
[ ! -f "${CONFFILE}" ] && echo -e "${BLDRED}${CONFFILE} $(gettext 'Файл не найден!!!')${TXTRST}" >&2 && exit 1
source "${CONFFILE}"
mkdir -p "${KEYMAPSDIR}"
add_strs()
{
  local P_KEYNAME_S="${1}"
  local P_KEYNAME_A="${2}"
  local P_KEYMAP_FILE="${3}"
  local KEYCODE
  local STR
  grep "${P_KEYNAME_S}$" "${P_KEYMAP_FILE}" \
  | while read STR
    do
      KEYCODE=(${STR})
      sed -i "/${STR}/ a${P_KEYNAME_A} keycode ${KEYCODE[1]} = AltGr_Lock\naltgr ${P_KEYNAME_A} keycode ${KEYCODE[1]} = AltGr_Lock" "${P_KEYMAP_FILE}"
    done
}
conv_alt_sh()
{
  local P_KEYMAP="${1}"
  local KEYMAP_FILE=$(find '/usr/share/kbd/keymaps/' -iname "${P_KEYMAP}.map.gz")
  [ ! "${KEYMAP_FILE}" ] && echo -e "${BLDRED}$(gettext 'Файл раскладки клавиатуры не найден!!!')${TXTRST}" >&2 && exit 4
  local KEYMAP_FILE_NEW="${KEYMAPSDIR}${P_KEYMAP}.map"
  gzip -dc "${KEYMAP_FILE}" | grep -v 'AltGr_Lock' | sed 's/#\(.*\)//;s/^[ \t]*//;s/[ \t]*$//;s/ \{1,\}/ /g' | sed '/^ *$/d' > "${KEYMAP_FILE_NEW}"
  add_strs 'Alt' 'shift' "${KEYMAP_FILE_NEW}"
  add_strs 'Shift' 'alt' "${KEYMAP_FILE_NEW}"
  sed -i "1i # Gen `date '+%Y-%m-%d %H:%M'`. From ${P_KEYMAP}.map.gz. Mode is switched by the Alt+Shift" "${KEYMAP_FILE_NEW}"
  gzip -9f "${KEYMAP_FILE_NEW}"
  echo "${KEYMAP_FILE_NEW}.gz"
}
[ ! "${KEYMAP}" ] && echo -e "${BLDRED}KEYMAP $(gettext 'Не определен в файле ')${CONFFILE}${TXTRST}" >&2 && exit 2
[ -f "${KEYMAP}" ] && echo -e "${BLDRED} KEYMAP=${KEYMAP} $(gettext 'Параметр является файлом!!!')${TXTRST}" >&2 && exit 3
KEYMAP_FILE_NEW=$(conv_alt_sh "${KEYMAP}")
loadkeys "${KEYMAP_FILE_NEW}" 2> /dev/null
sed -i "s/KEYMAP=${KEYMAP}/KEYMAP='$(echo "${KEYMAP_FILE_NEW}" | sed 's/\//\\\//g')'/" "${CONFFILE}"
[ ! "${KEYMAP_TOGGLE}" ] && echo -e "${BLDYLW}KEYMAP_TOGGLE $(gettext 'Не определен в файле ')${CONFFILE}${TXTRST}" >&2 && exit
[ -f "${KEYMAP_TOGGLE}" ] && echo -e "${BLDRED} KEYMAP_TOGGLE=${KEYMAP_TOGGLE} $(gettext 'Параметр является файлом!!!')${TXTRST}" >&2 && exit 3
KEYMAP_FILE_NEW=$(conv_alt_sh "${KEYMAP_TOGGLE}")
loadkeys "${KEYMAP_FILE_NEW}" 2> /dev/null
sed -i "s/KEYMAP_TOGGLE=${KEYMAP}/KEYMAP_TOGGLE='$(echo "${KEYMAP_FILE_NEW}" | sed 's/\//\\\//g')'/" "${CONFFILE}"
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
А пораньше на пару лет нельзя было такое написать? Глядишь, я бы только в консоли и сидел :)
lampslave
А пораньше на пару лет нельзя было такое написать?
Даже не знаю почему раньше не написали скрипт для смены комбинаций переключения консольных раскладок.
Там же все просто.
Вообще есть идея доделать скрипт что бы он на выбор мог менять комбинации. но что то лень. )))
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
о! вот это за ништяк спасибо!
еще бы инструкцию что с ним делать для таких лохов как я и было бы ваще шикарно
Да тут все просто.
Нужно запустить скрипт с правами рута и все.

Скрипт прочитает из /etc/vconsole.conf какая раскладка сейчас установлена, найдет ее тут /usr/share/kbd/keymaps/, скопирует в /etc/kbd/keymaps/, удалит из копии текущую комбинацию и добавит комбинацию Alt+Shift, потом пропишет новую раскладку в /etc/vconsole.conf.
И после перезагрузки будет использоваться новая раскладка с комбинацией Alt+Shift.

В приципе должно работать с любой раскладкой, но проверялось только на раскладке “ru”

Кто потестирует скрипт на других раскладках буду очень признателен.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
 
Зарегистрироваться или войдите чтобы оставить сообщение.