#!/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 [ []]" 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" # + - это клавиша! get_const NSNewlineCharacter "$NSText_h" # # Смотри также: # # 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 # 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 # +