437 lines
18 KiB
Bash
437 lines
18 KiB
Bash
|
#!/bin/sh
|
|||
|
# vim:set sw=4 ts=8 fileencoding=utf8::Кодировка:UTF-8[АБЁЪЯабёъя]
|
|||
|
#
|
|||
|
# Авторское право (с) 2015, Сергей Леонтьев, leo@sai.msu.ru
|
|||
|
#
|
|||
|
# Разрешается повторное распространение и использование как в виде
|
|||
|
# исходника так и в двоичной форме, с модификациями или без, при
|
|||
|
# соблюдении следующих условий:
|
|||
|
#
|
|||
|
# 1. При повторном распространении исходного кода должно оставаться
|
|||
|
# указанное выше уведомление об авторском праве, этот список условий и
|
|||
|
# нижеследующий отказ от гарантий.
|
|||
|
#
|
|||
|
# 2. При повторном распространении двоичного кода должно
|
|||
|
# воспроизводиться указанное выше уведомление об авторском праве, этот
|
|||
|
# список условий и нижеследующий отказ от гарантий в документации
|
|||
|
# и/или в других материалах, поставляемых при распространении.
|
|||
|
#
|
|||
|
# 3. Ни название Крипто-Про, ни имена его сотрудников не могут быть
|
|||
|
# использованы в качестве поддержки или продвижения продуктов,
|
|||
|
# основанных на этом ПО без предварительного письменного разрешения.
|
|||
|
#
|
|||
|
# ЭТО ПРОГРАММА ПРЕДОСТАВЛЕНА БЕСПЛАТНО ДЕРЖАТЕЛЯМИ АВТОРСКИХ ПРАВ
|
|||
|
# И/ИЛИ ДРУГИМИ СТОРОНАМИ "КАК ОНА ЕСТЬ" БЕЗ КАКОГО-ЛИБО ВИДА
|
|||
|
# ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ
|
|||
|
# ОГРАНИЧИВАЯСЬ ИМИ, ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И
|
|||
|
# ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. НИ В КОЕМ СЛУЧАЕ, ЕСЛИ НЕ ТРЕБУЕТСЯ
|
|||
|
# СООТВЕТСТВУЮЩИМ ЗАКОНОМ, ИЛИ НЕ УСТАНОВЛЕНО В УСТНОЙ ФОРМЕ, НИ ОДИН
|
|||
|
# ДЕРЖАТЕЛЬ АВТОРСКИХ ПРАВ И НИ ОДНО ДРУГОЕ ЛИЦО, КОТОРОЕ МОЖЕТ
|
|||
|
# ИЗМЕНЯТЬ И/ИЛИ ПОВТОРНО РАСПРОСТРАНЯТЬ ПРОГРАММУ, КАК БЫЛО РАЗРЕШЕНО
|
|||
|
# ВЫШЕ, НЕ ОТВЕТСТВЕННЫ ПЕРЕД ВАМИ ЗА УБЫТКИ, ВКЛЮЧАЯ ЛЮБЫЕ ОБЩИЕ,
|
|||
|
# СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ ИЛИ ПОСЛЕДОВАВШИЕ УБЫТКИ, ПРОИСТЕКАЮЩИЕ ИЗ
|
|||
|
# ИСПОЛЬЗОВАНИЯ ИЛИ НЕВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ, НО
|
|||
|
# НЕ ОГРАНИЧИВАЯСЬ ПОТЕРЕЙ ДАННЫХ, ИЛИ ДАННЫМИ, СТАВШИМИ
|
|||
|
# НЕПРАВИЛЬНЫМИ, ИЛИ ПОТЕРЯМИ ПРИНЕСЕННЫМИ ИЗ-ЗА ВАС ИЛИ ТРЕТЬИХ ЛИЦ,
|
|||
|
# ИЛИ ОТКАЗОМ ПРОГРАММЫ РАБОТАТЬ СОВМЕСТНО С ДРУГИМИ ПРОГРАММАМИ),
|
|||
|
# ДАЖЕ ЕСЛИ ТАКОЙ ДЕРЖАТЕЛЬ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О
|
|||
|
# ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ.
|
|||
|
#
|
|||
|
|
|||
|
#
|
|||
|
# Построение ресурсов для Apple Terminal и iTerm по БД терминала
|
|||
|
# terminfo
|
|||
|
#
|
|||
|
|
|||
|
file_version="make-term-profiles.sh, v 1, 18-11-2015"
|
|||
|
|
|||
|
########################################################################
|
|||
|
# Разбор аргументов и т.д.
|
|||
|
########################################################################
|
|||
|
|
|||
|
set -e
|
|||
|
prog=$(basename "$0")
|
|||
|
|
|||
|
usage() {
|
|||
|
echo "$prog: Usage:
|
|||
|
$prog [<terminal> [<terminfo source>]]" 1>&2
|
|||
|
exit 1
|
|||
|
}
|
|||
|
|
|||
|
if [ $# -gt 3 ] ; then
|
|||
|
usage
|
|||
|
fi
|
|||
|
|
|||
|
term="${1:-$TERM}"
|
|||
|
tisrc="$2"
|
|||
|
|
|||
|
td=$(mktemp -d -t "mtp-XXXXXX")
|
|||
|
echo create "$td"
|
|||
|
trap 'echo remove "$td"; rm -r "$td"; exit 3' EXIT HUP INT TERM
|
|||
|
|
|||
|
########################################################################
|
|||
|
# Все строки в файле в UTF-8
|
|||
|
########################################################################
|
|||
|
|
|||
|
LANG="ru_RU.UTF-8"; export LANG
|
|||
|
LC_ALL="ru_RU.UTF-8"; export LC_ALL
|
|||
|
unset LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME
|
|||
|
|
|||
|
|
|||
|
########################################################################
|
|||
|
# Получаем коды клавиш и коды кодировок от OS X
|
|||
|
########################################################################
|
|||
|
|
|||
|
OSXF=/System/Library/Frameworks
|
|||
|
SHDR=framework/Versions/Current/Headers
|
|||
|
NSString_h="$OSXF/Foundation.$SHDR/NSString.h"
|
|||
|
CFStringEncodingExt_h="$OSXF/CoreFoundation.$SHDR/CFStringEncodingExt.h"
|
|||
|
NSEvent_h="$OSXF/AppKit.$SHDR/NSEvent.h"
|
|||
|
NSText_h="$OSXF/AppKit.$SHDR/NSText.h"
|
|||
|
|
|||
|
get_value() {
|
|||
|
sed -n \
|
|||
|
"/[[:space:]]*$1[[:space:]]*=[[:space:]]*\([0-9xa-fXA-F]*\).*/s//\1/p" \
|
|||
|
"$2"
|
|||
|
}
|
|||
|
|
|||
|
get_const() {
|
|||
|
eval "$1"="$(get_value $1 $2)"
|
|||
|
}
|
|||
|
|
|||
|
get_const NSDeleteCharacter "$NSText_h"
|
|||
|
get_const NSTabCharacter "$NSText_h"
|
|||
|
get_const NSBackTabCharacter "$NSText_h" # <Shift>+<Tab> - это клавиша!
|
|||
|
get_const NSNewlineCharacter "$NSText_h"
|
|||
|
|
|||
|
#
|
|||
|
# Смотри также:
|
|||
|
# <http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/CORPCHAR.TXT>
|
|||
|
#
|
|||
|
get_const NSUpArrowFunctionKey "$NSEvent_h"
|
|||
|
get_const NSDownArrowFunctionKey "$NSEvent_h"
|
|||
|
get_const NSLeftArrowFunctionKey "$NSEvent_h"
|
|||
|
get_const NSRightArrowFunctionKey "$NSEvent_h"
|
|||
|
|
|||
|
get_const NSF1FunctionKey "$NSEvent_h"
|
|||
|
get_const NSF2FunctionKey "$NSEvent_h"
|
|||
|
get_const NSF3FunctionKey "$NSEvent_h"
|
|||
|
get_const NSF4FunctionKey "$NSEvent_h"
|
|||
|
get_const NSF5FunctionKey "$NSEvent_h"
|
|||
|
get_const NSF6FunctionKey "$NSEvent_h"
|
|||
|
get_const NSF7FunctionKey "$NSEvent_h"
|
|||
|
get_const NSF8FunctionKey "$NSEvent_h"
|
|||
|
get_const NSF9FunctionKey "$NSEvent_h"
|
|||
|
get_const NSF10FunctionKey "$NSEvent_h"
|
|||
|
get_const NSF11FunctionKey "$NSEvent_h"
|
|||
|
get_const NSF12FunctionKey "$NSEvent_h"
|
|||
|
|
|||
|
get_const NSF13FunctionKey "$NSEvent_h"
|
|||
|
get_const NSF14FunctionKey "$NSEvent_h"
|
|||
|
get_const NSF15FunctionKey "$NSEvent_h"
|
|||
|
|
|||
|
get_const NSF16FunctionKey "$NSEvent_h"
|
|||
|
get_const NSF17FunctionKey "$NSEvent_h"
|
|||
|
get_const NSF18FunctionKey "$NSEvent_h"
|
|||
|
get_const NSF19FunctionKey "$NSEvent_h"
|
|||
|
|
|||
|
#get_const NSF20FunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSF21FunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSF22FunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSF23FunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSF24FunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSF25FunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSF26FunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSF27FunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSF28FunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSF29FunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSF30FunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSF31FunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSF32FunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSF33FunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSF34FunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSF35FunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
|
|||
|
#get_const NSInsertFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
get_const NSDeleteFunctionKey "$NSEvent_h" # Forward Delete key
|
|||
|
get_const NSHomeFunctionKey "$NSEvent_h"
|
|||
|
#get_const NSBeginFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
get_const NSEndFunctionKey "$NSEvent_h"
|
|||
|
get_const NSPageUpFunctionKey "$NSEvent_h"
|
|||
|
get_const NSPageDownFunctionKey "$NSEvent_h"
|
|||
|
|
|||
|
#get_const NSPrintScreenFunctionKey "$NSEvent_h" # Not on most Macintosh
|
|||
|
#get_const NSScrollLockFunctionKey "$NSEvent_h" # Not on most Macintosh
|
|||
|
#get_const NSPauseFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSSysReqFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSBreakFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSResetFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSStopFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSMenuFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSUserFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSSystemFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSPrintFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
|
|||
|
get_const NSClearLineFunctionKey "$NSEvent_h" # Clear/Num Lock key.
|
|||
|
#get_const NSClearDisplayFunctionKey "$NSEvent_h" # Not on most Macintosh
|
|||
|
#get_const NSInsertLineFunctionKey "$NSEvent_h" # Not on most Macintosh
|
|||
|
#get_const NSDeleteLineFunctionKey "$NSEvent_h" # Not on most Macintosh
|
|||
|
#get_const NSInsertCharFunctionKey "$NSEvent_h" # Not on most Macintosh
|
|||
|
#get_const NSDeleteCharFunctionKey "$NSEvent_h" # Not on most Macintosh
|
|||
|
#get_const NSPrevFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSNextFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSSelectFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSExecuteFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSUndoFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSRedoFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
#get_const NSFindFunctionKey "$NSEvent_h" # Not on most Macintosh keyboards
|
|||
|
get_const NSHelpFunctionKey "$NSEvent_h"
|
|||
|
#get_const NSModeSwitchFunctionKey "$NSEvent_h" # Not on most Macintosh
|
|||
|
|
|||
|
get_const NSUTF8StringEncoding "$NSString_h"
|
|||
|
|
|||
|
get_const kCFStringEncodingKOI8_R "$CFStringEncodingExt_h"
|
|||
|
get_const kCFStringEncodingKOI8_U "$CFStringEncodingExt_h"
|
|||
|
|
|||
|
nsKOI8_R=$((kCFStringEncodingKOI8_R + 0x80000000))
|
|||
|
nsKOI8_U=$((kCFStringEncodingKOI8_U + 0x80000000))
|
|||
|
#
|
|||
|
# Правда в fido7.mac.creature писали, что у русской кодировки ноги
|
|||
|
# растут от kTextEncodingKOI8_R из TextCommon.h
|
|||
|
# Date: Thu, 09 Mar 2006 11:33:20 +0300
|
|||
|
# From: Ivan Kuvshinov <Ivan.Kuvshinov@p10110.f830.n5020.z2.fidonet.org>
|
|||
|
# Subject: Русская раскладка в ОСИкс [0/0].
|
|||
|
# Message-ID: <1141904373@p10110.f830.n5020.z2.FidoNet.ftn>
|
|||
|
#
|
|||
|
|
|||
|
#printf "NSUpArrowFunctionKey %4X\n" $NSUpArrowFunctionKey
|
|||
|
#printf "NSSystemFunctionKey %4X\n" $NSSystemFunctionKey
|
|||
|
#printf "NSModeSwitchFunctionKey %4X\n" $NSModeSwitchFunctionKey
|
|||
|
#printf "UTF-8: %d 0x%08x\n" $NSUTF8StringEncoding $NSUTF8StringEncoding
|
|||
|
#printf "KOI8-R: %d 0x%08x\n" $nsKOI8_R $nsKOI8_R
|
|||
|
#printf "KOI8-U: %d 0x%08x\n" $nsKOI8_U $nsKOI8_U
|
|||
|
#set | grep -i ns
|
|||
|
|
|||
|
|
|||
|
########################################################################
|
|||
|
# Настраиваем БД терминалов terminfo
|
|||
|
########################################################################
|
|||
|
|
|||
|
# Биты маски DECFNK
|
|||
|
control=4
|
|||
|
option=2
|
|||
|
shift=1
|
|||
|
|
|||
|
if [ -n "$tisrc" ] ; then
|
|||
|
# http://invisible-island.net/ncurses/ncurses.faq.html#which_terminfo
|
|||
|
tic -x -o "$td" "$tisrc"
|
|||
|
TERMINFO="$td" ; export TERMINFO
|
|||
|
terminfo_version="$tisrc, "$(sed -n \
|
|||
|
'/#.*\$[[:space:]]*\([DR].*\)\$/s//\1/p' "$tisrc")
|
|||
|
else
|
|||
|
terminfo_version=$(uname -sr)", "$(type infocmp)", "$(infocmp -V)
|
|||
|
fi
|
|||
|
TERM="$term"; export TERM
|
|||
|
|
|||
|
hex() {
|
|||
|
echo 0x$(echo $(printf "$1" | iconv -t UCS-2LE | od -t x2 | cut -c 8-))
|
|||
|
}
|
|||
|
|
|||
|
dcomm() {
|
|||
|
defaults write "$plist" "commentGenerator" \
|
|||
|
-string "Generated by $file_version"
|
|||
|
defaults write "$plist" "commentCreator" \
|
|||
|
-string "Created by $(whoami) at $(LANG=C LC_ALL=C date)"
|
|||
|
defaults write "$plist" "commentTerminfoVersion" -string "$1"
|
|||
|
defaults write "$plist" "commentTerminal" -string "$2"
|
|||
|
}
|
|||
|
|
|||
|
dkey() {
|
|||
|
ms=
|
|||
|
if [ 0 -ne $((($1 - 1)&$control)) ]; then
|
|||
|
ms="${ms}^"
|
|||
|
fi
|
|||
|
if [ 0 -ne $((($1 - 1)&$option)) ]; then
|
|||
|
ms="${ms}~"
|
|||
|
fi
|
|||
|
if [ 0 -ne $((($1 - 1)&$shift)) ]; then
|
|||
|
ms="${ms}\$"
|
|||
|
fi
|
|||
|
s=$(printf "%s%04X" "$ms" "$2")
|
|||
|
defaults write "$plist" "keyMapBoundKeys" -dict-add "$s" '"'"$3"'"'
|
|||
|
}
|
|||
|
|
|||
|
dkey1() {
|
|||
|
tk=$(tput "$3" 2> /dev/null) && {
|
|||
|
echo "$3" >> "$td/tinfo-key"
|
|||
|
dkey "$1" "$2" "$tk"
|
|||
|
}
|
|||
|
return 0
|
|||
|
}
|
|||
|
|
|||
|
dkey1esc() {
|
|||
|
tk=$(tput "$3" 2> /dev/null) && {
|
|||
|
dkey "$1" "$2" $(printf "\033")"$tk"
|
|||
|
}
|
|||
|
return 0
|
|||
|
}
|
|||
|
|
|||
|
dkey3() {
|
|||
|
dkey1 1 "$1" "$2"
|
|||
|
if [ $# -gt 2 ] ; then
|
|||
|
dkey1 2 "$1" "$3"
|
|||
|
if [ $# -gt 3 ] ; then
|
|||
|
mkn="$4"
|
|||
|
dkey1 2 "$1" "$mkn"
|
|||
|
else
|
|||
|
mkn="$3"
|
|||
|
fi
|
|||
|
for m in 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
|
|||
|
dkey1 "$m" "$1" "$mkn$m"
|
|||
|
done
|
|||
|
fi
|
|||
|
return 0
|
|||
|
}
|
|||
|
|
|||
|
dkeyboard() {
|
|||
|
dkey3 $NSUpArrowFunctionKey kcuu1 kri kUP
|
|||
|
dkey3 $NSDownArrowFunctionKey kcud1 kind kDN
|
|||
|
dkey3 $NSLeftArrowFunctionKey kcub1 kLFT
|
|||
|
dkey3 $NSRightArrowFunctionKey kcuf1 kRIT
|
|||
|
dkey3 $NSDeleteFunctionKey kdch1 kDC
|
|||
|
dkey3 $NSHomeFunctionKey khome kHOM
|
|||
|
dkey3 $NSEndFunctionKey kend kEND
|
|||
|
dkey3 $NSPageUpFunctionKey kpp kPRV
|
|||
|
dkey3 $NSPageDownFunctionKey knp kNXT
|
|||
|
dkey3 $NSClearLineFunctionKey kclr
|
|||
|
dkey3 $NSClearLineFunctionKey kel kEOL
|
|||
|
dkey3 $NSHelpFunctionKey khlp kHLP
|
|||
|
|
|||
|
# <control>+<option>+I => Ins для узких клавиатур
|
|||
|
dkey1 $(($control + $option + 1)) $(hex i) kich1
|
|||
|
dkey1 $(($control + $option + $shift + 1)) $(hex i) kIC
|
|||
|
dkey3 $NSF13FunctionKey kich1 kIC # F13 => Ins для широких клав
|
|||
|
|
|||
|
dkey3 $NSHomeFunctionKey ka1
|
|||
|
dkey3 $NSPageUpFunctionKey ka3
|
|||
|
dkey3 $NSEndFunctionKey kc1
|
|||
|
dkey3 $NSPageDownFunctionKey kc3
|
|||
|
|
|||
|
#dkey3 $NSDeleteCharacter kbs
|
|||
|
#dkey3 $NSNewlineCharacter kent
|
|||
|
dkey3 $NSBackTabCharacter kcbt
|
|||
|
|
|||
|
dkey1esc $(($option + 1)) $NSDeleteCharacter kbs
|
|||
|
dkey1esc $(($option + 1)) $NSDeleteFunctionKey kent
|
|||
|
dkey1esc $(($option + 1)) $NSBackTabCharacter kcbt
|
|||
|
|
|||
|
n=0; while [ $n -lt 12 ] ; do n=$(($n + 1))
|
|||
|
eval dkey1 1 \$NSF${n}FunctionKey kf${n}
|
|||
|
eval dkey1 $(($shift +1)) \$NSF${n}FunctionKey kf$(($n + 12))
|
|||
|
eval dkey1 $(($control +1)) \$NSF${n}FunctionKey kf$(($n + 24))
|
|||
|
eval dkey1 $(($control+$shift+1)) \$NSF${n}FunctionKey kf$(($n + 36))
|
|||
|
eval dkey1 $(($option +1)) \$NSF${n}FunctionKey kf$(($n + 48))
|
|||
|
eval dkey1 $(($option +$shift+1)) \$NSF${n}FunctionKey kf$(($n + 60))
|
|||
|
done
|
|||
|
|
|||
|
dcomm "$terminfo_version" "$(infocmp -x | head -2)"
|
|||
|
echo "Отчёт по terminfo. Последовательности, для которых нет кнопок:"
|
|||
|
touch "$td/tinfo-key"
|
|||
|
sort -u "$td/tinfo-key" > "$td/tinfo-key.sort"
|
|||
|
infocmp -x | sed '
|
|||
|
/^[^[:space:]]/d
|
|||
|
s/=[^,]*,/\
|
|||
|
/g' \
|
|||
|
| sed -n '/^[[:space:]]*k/s//k/p' \
|
|||
|
| sort \
|
|||
|
| comm -3 - "$td/tinfo-key.sort" \
|
|||
|
| grep -v kmous
|
|||
|
|
|||
|
#
|
|||
|
# Имитация altSendsEscape xterm для белорусских, русских и
|
|||
|
# украинских символов
|
|||
|
# Обход ошибок в Apple Terminal и iTerm2
|
|||
|
#
|
|||
|
daltSendsEscape() {
|
|||
|
l=$(printf "\u0%x" $1 | iconv -f C99)
|
|||
|
u=$(printf "%s" "$l" | tr '[[:lower:]]' '[[:upper:]]')
|
|||
|
dkey $(($option + 1)) $1 "\033$l"
|
|||
|
dkey $(($option + $shift + 1)) $(hex "$u") "\033$u"
|
|||
|
}
|
|||
|
|
|||
|
c=$(($(hex "а")))
|
|||
|
while [ $c -le $(($(hex "я"))) ] ; do
|
|||
|
daltSendsEscape $c
|
|||
|
c=$(($c + 1))
|
|||
|
done
|
|||
|
daltSendsEscape $(hex "ё")
|
|||
|
daltSendsEscape $(hex "ў")
|
|||
|
daltSendsEscape $(hex "і")
|
|||
|
daltSendsEscape $(hex "ї")
|
|||
|
daltSendsEscape $(hex "ґ")
|
|||
|
daltSendsEscape $(hex "є")
|
|||
|
}
|
|||
|
|
|||
|
plist="$td"/xterm.plist
|
|||
|
|
|||
|
cp $(dirname "$0")/xterm.plist-template "$plist"
|
|||
|
|
|||
|
dkeyboard
|
|||
|
|
|||
|
for type in strict reverse combined ; do
|
|||
|
case "$type" in
|
|||
|
strict)
|
|||
|
#dkey1 $(($control+1)) $NSLeftArrowFunctionKey kLFT$(($control+1))
|
|||
|
#dkey1 $(($control+1)) $NSRightArrowFunctionKey kRIT$(($control+1))
|
|||
|
#dkey1 $(($option +1)) $NSLeftArrowFunctionKey kLFT$(($option +1))
|
|||
|
#dkey1 $(($option +1)) $NSRightArrowFunctionKey kRIT$(($option +1))
|
|||
|
;;
|
|||
|
reverse)
|
|||
|
dkey1 $(($control+1)) $NSLeftArrowFunctionKey kLFT$(($option +1))
|
|||
|
dkey1 $(($control+1)) $NSRightArrowFunctionKey kRIT$(($option +1))
|
|||
|
dkey1 $(($option +1)) $NSLeftArrowFunctionKey kLFT$(($control+1))
|
|||
|
dkey1 $(($option +1)) $NSRightArrowFunctionKey kRIT$(($control+1))
|
|||
|
;;
|
|||
|
combined)
|
|||
|
dkey1 $(($control+1)) $NSLeftArrowFunctionKey kLFT$(($control+1))
|
|||
|
dkey1 $(($control+1)) $NSRightArrowFunctionKey kRIT$(($control+1))
|
|||
|
dkey1 $(($option +1)) $NSLeftArrowFunctionKey kLFT$(($control+1))
|
|||
|
dkey1 $(($option +1)) $NSRightArrowFunctionKey kRIT$(($control+1))
|
|||
|
;;
|
|||
|
esac
|
|||
|
for charset in KOI8-R KOI8-U UTF-8 ; do
|
|||
|
defaults write "$plist" "name" -string "XTerm-${charset}-${type}"
|
|||
|
defaults write "$plist" "WindowTitle" -string "XTerm ${charset} ${type}"
|
|||
|
|
|||
|
case "$charset" in
|
|||
|
UTF-8)
|
|||
|
defaults write "$plist" "CharacterEncoding" \
|
|||
|
-int $NSUTF8StringEncoding
|
|||
|
defaults delete "$plist" "CommandString" 2> /dev/null || true
|
|||
|
;;
|
|||
|
KOI8-R)
|
|||
|
defaults write "$plist" "CharacterEncoding" \
|
|||
|
-int -$(((1<<32)-$nsKOI8_R))
|
|||
|
defaults delete "$plist" "CommandString" 2> /dev/null || true
|
|||
|
;;
|
|||
|
KOI8-U)
|
|||
|
defaults write "$plist" "CharacterEncoding" \
|
|||
|
-int -$(((1<<32)-$nsKOI8_U))
|
|||
|
defaults write "$plist" "CommandString" \
|
|||
|
-string 'LANG="ru_RU.KOI8-R" exec -a "-bash" bash -l'
|
|||
|
;;
|
|||
|
*)
|
|||
|
echo Internal Error 1>&2
|
|||
|
exit 10
|
|||
|
esac
|
|||
|
|
|||
|
terminal=$(dirname "$0")/XTerm-"$charset"-"$type".terminal
|
|||
|
plutil -convert xml1 -o - "$plist" | sed \
|
|||
|
-e "/-$(((1<<32)-$nsKOI8_R))/s//$(($nsKOI8_R))/" \
|
|||
|
-e "/-$(((1<<32)-$nsKOI8_U))/s//$(($nsKOI8_U))/" \
|
|||
|
> "$terminal"
|
|||
|
|
|||
|
done
|
|||
|
done
|
|||
|
|