UTF8 локаль в ArchLinux

Дизель выложил в свое время замечательную ссылочку на форуме по поднятию UTF8 локали в Arch Linux http://vl-lug.ru/forum/viewtopic.php?id=105

Здесь я хочу что бы все желающие выдавали свои дополнения, оформенные ввиде статьи.

И так, положим начало...

Имена файлов

На старой koi8-r системе было довольно приличное количество файлов в русскими именами, естественно в кодировке koi8-r. Что делать, в UTF локали с такими именами файлов работать несподручно...

На решение пробелемы навел запуск такой команды:

LANG=ru_RU.KOI8-R ls | iconv -f koi8-r

Эта команда вывела список имен файлов с русскими именами как и положено, русскими буковками. Так родился скрипт:

#!/bin/bash
 
#
# Recode all file names in given codepage to UTF8
# on UTF8 system
#
 
CODE_FROM="KOI8-R"
recursive=0
scan_only=0
 
function parse_cmd_line()
{
    prev_arg=""
    need_next=0
    for i in "$@"
    do
	if [ $need_next -eq 0 ]; then
	    case $i in
	    "-f")
		prev_arg="-f"
    		need_next=1
	    ;;
	    "-r")
		recursive=1
	    ;;
	    "-s")
		scan_only=1
	    ;;
	    esac
	else
	    case $prev_arg in
	    "-f")
		CODE_FROM=`echo $i | tr '[:lower:]' '[:upper:]'`
	    ;;
	    esac
	    prev_arg=""
	    need_next=0
	fi
    done
}
 
function recode_file()
{
 
    old_name="$@"
    new_name=`echo $@ | iconv -f $CODE_FROM`
    stat1=$?
    mid_name=`echo $@ | iconv -f UTF8 2>/dev/null`
    stat2=$?
 
    if [ x"$old_name" != x"$new_name" -a $stat1 -eq 0 -a x"$mid_name" != x"$old_name" ]; then
	if [ $scan_only -eq 0 ]; then
	    echo "Recode: $old_name -> $new_name"
	    mv "$old_name" "$new_name"
	else
	    echo `pwd`"$@"
	fi
    fi
}
 
parse_cmd_line $@
 
oldIFS=$IFS
IFS=$'\n'
files=`ls -1 --color=none`
for i in $files
do
    if [ -d "$i" ]; then
	if [ $recursive -eq 1 ]; then
	    name=`basename $0`
	    if [ `dirname $0` == "." ]; then
		prefix=`pwd`
	    else
		prefix=`dirname $0`
	    fi
	    cd "$i"
 
	    $prefix/$name "$@"
 
	    cd ..
	fi
    fi
 
    recode_file "$i"
done

запускам сей скрипт из директории содержимое которой нужно привести к виду UTF8:

recodedir

Скрипт понимает ключи:

  • -r говорит что перебрать все каталоги рекурсивно, начиная с текущего
  • -s просканирует каталоги и выдаст список файлов которые нужно изменять
  • -f <кодировка> задает кодировку из которой перекодировать, по умолчанию KOI8-R

Кроме того, можно использовать готовую утилиту «convmv» из репозитория «extra». Умеет она намного больше, чем вышеописанный скрипт, но требует установленный perl в системе.

Midnight Commander

Есть два вариант, mc-utf8 из репозитария community либо вот этот образец: http://pupykins.googlepages.com/mc.html

Автор mc-cru и автор порта в community - суть один человек, имя ему Сергей Пупыкин (надеюсь правильно написал фамилию) в том виде в котором идет mc-cru очень нелицеприятный. Что бы привести его в чувство, смержил utf8 патч с той версии что в репозитарии, плюс сделал пееркодировку в редакторе (но тут кроется бага... страшная, которую пока лень решать, при перекодировке в редакторе не работает поиск и замена).

И так, по этой ссылке можно скачать правило для сборки для makepkg и патч: mc-cru.tar.gz


Личные инструменты