пʼятницю, 16 травня 2008 р.

zsh forever

Где-то неделю назад познакомился с этой зашибенной командной оболочкой. Сделал chsh -s /bin/zsh видать надолго 8)

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


Но в ней присутствовал один неприятный момент - в xterm криво работающие клавиши "Home", "End", я это исправил, вобщем - всё написано в конфиге

Общесистемный конфиг для zsh


/etc/zsh/zshrc
#
# /etc/zsh/zshrc by NETZMB
#
# прототип:
# http://www.freesource.info/wiki/AltLinux/DotFiles/Shells/Zsh/Sovety&
#

#
# менюобразная подсветка вариантов окончаний
#

zmodload zsh/complist
zstyle ':completion:*' menu yes select

#
# чтобы видеть все процессы для kill или killall
#

zstyle ':completion:*:processes' command 'ps -xuf'
zstyle ':completion:*:processes' sort false
zstyle ':completion:*:processes-names' command 'ps xho command'

#
# Настройка приглашения оболочки
# тема приглашения
#

autoload promptinit
promptinit
prompt gentoo

#
# Автодополнение имени хоста для SSH
#
if [ -e $HOME/.ssh/known_hosts ] ; then
hosts=(${${${(f)"$(<$HOME/.ssh/known_hosts)"}%%\ *}%%,*})
zstyle ':completion:*:hosts' hosts $hosts
fi



#
# Установка нормального поведения клавиш Delete, Home, End и т.д.:
#


case $TERM in
#
# для системной консоли (/dev/tty*)
#
linux|screen|screen.linux)

bindkey "^[[2~" yank
bindkey "^[[3~" delete-char
bindkey "^[[5~" up-line-or-history
bindkey "^[[6~" down-line-or-history
bindkey "^[[1~" beginning-of-line
bindkey "^[[4~" end-of-line
bindkey "^[e" expand-cmd-path # C-e for expanding path of typed command
bindkey "^[[A" up-line-or-search # up arrow for back-history-search
bindkey "^[[B" down-line-or-search # down arrow for fwd-history-search
bindkey " " magic-space # do history expansion on space
;;

#
# для X-терминалов
#
*xterm*|rxvt|(dt|k|E)term)

bindkey "^[[2~" yank
bindkey "^[[3~" delete-char
bindkey "^[[5~" up-line-or-history
bindkey "^[[6~" down-line-or-history
bindkey "^[[H" beginning-of-line # Клавиша Home
bindkey "^[[F" end-of-line # Клавиша End
bindkey "^E" expand-cmd-path # C-e добавляет к набираемой команде её
# абсолютный путь
# т.е. например, ls заменяется на /bin/ls.

# Действует аналогично команде `which ls`

bindkey "^[[A" up-line-or-search # Стрелка-вверх, пройтись назад по
# истории введённых команд

bindkey "^[[B" down-line-or-search # Стрелка-вверх, пройтись вперёд по
# истории введённых команд
bindkey " " magic-space ## do history expansion on space
;;
esac

# Примечание: если, скажем, в KDE для konsole
# выбрать тип Linux console, необходимости
# во второй секции нет.


#
# Убираем повторяющиеся каталоги из путей подстановки файлов
# при автодополнениях
#
typeset -U path cdpath fpath manpath


# Список хостов, к которым будет применяться автодополнение
# при наборе в командной строке
# Например, как аргументов браузера или ftp-клиента (см. man zstyle)

hosts=('hostname' sky.eth.net modem.eth.net ap1.eth.net wf-vaio.neb.net)


# Число команд, сохраняемых в файл истории введеных команд (HISTFILE)
SAVEHIST=500

# Чucлo koмaнg, coxpaняeмыx в сеансе
HISTSIZE=500

# максимальный размер стека каталогов
DIRSTACKSIZE=20

#
# Опции истории команд:
# Дописывание файла истрии
setopt APPEND_HISTORY
# Игнopupoвaть вce пoвтopeнuя команд
setopt HIST_IGNORE_ALL_DUPS
# Игнopupoвать лишние пpoбeлы
setopt HIST_IGNORE_SPACE
# Удалять из файла истории пустые строки
setopt HIST_REDUCE_BLANKS




Личные настройки пользователя zsh:


~/zshrc
#
# ~/zshrc by NETZMB

#
# включаем подстветку типов файлов для ls и делаем команду "ls"
# более "говорливой"
#

alias ls='ls --color'
alias cp='cp --verbose'

#
# Устанавливаем личные лимиты использования ресурсов компьютера
# дабы предотвратить заполнение системных каталогов ненужными
# файлами дампов аварийно завершившихся программ, а также предотвратить
# неконтролируемое потребление ресурсов компа кривой программой, или даже
# предупредить локальную DDoS атаку
#

limit stack 8192 # лимит объёма памяти, выделеной под стек.
# помогает от переполнения стека

limit core 0 # Выключаем запись файлов-дампов упавших программ

umask 022 # Установка атрибутов доступа для вновь создаваемых файлов
# В данном случае - rw-r--r--


#
# Каталоги, именованные для быстрого доступа к ним по короткой метке
# (например, здесь - вместо того, чтобы набирать
# /var/local/misc/dosemu-root/root/src/sto-ed/bin/tex, можно просто написать
# ~prc )
#

hash -d prc=/var/local/misc/dosemu-root/root/src/sto-ed/bin/tex




И ещё - если Вы в момент набора команды нажали клавишу Escape, то командная строка zsh начинает себя вести как редактор vi. Вобщем, если это Вам не нужно, то просто нажмите Ctrl+C, после чего zsh вернёт Вам контроль над историей ком. строки и проч.



Советую почитать, даже если вы не использовали zsh ранее (мой конфиг частично был содран оттуда) :Советы по настройке zsh


PS: пока это то, на что хватило времени написать. Остальное - чуть позже


Читать далее

середу, 14 травня 2008 р.

Лечим utf8 в man


Наверняка Вы заметили, что не смотря на рекомендации мануала по переводу на\включению юникода в gentoo, русские man'ы выводятся в искажённом виде. В этом посте можете оценить лёгкий способ, как избавиться от этой ошибки



Вот исходный вид вывода man mc на свежеустановленном Gentoo, но уже при настроенном юникоде (файлы русских man'ов идут в кодировке koi8-r):


/etc/man.conf
...
NROFF /usr/bin/nroff -Tascii -c -mandoc
...


вот что выводит man mc при такой настройке man'а


MC(1) GNU Midnight Commander MC(1)



iaeiaii-:-aiea
mc - -:-EUOAIOIAN IAIIIbEA AIN Unix-DIAIAIUE OEOOAI.

...


Как можно заключить из повторяющихся символов, исходной восьмибитной кодировке man'а (koi8-r) обрубили восьмой бит, а потом вывели в юникод.
Если последовать рекомендации Использование UTF-8 в Gentoo, и изменить строку с NROFF в /etc/man.conf на


/etc/man.conf
...
NROFF /usr/bin/nroff -mandoc -c

...


то получим чуть более содержательную кашу из символов:


MC(1) GNU Midnight Commander MC(1)



îáéíåîï÷áîéå
mc - ÷ÉÚÕÁÌØÎÁÑ ÏÂÏÌÏÞËÁ ÄÌÑ Unix-ÐÏÄÏÂÎÙÈ ÓÉÓÔÅÍ.

...


Вобщем, одному хорошему человеку срочно понадобился man 3 exp, который у меня идёт в русском варианте. Решил из принципа подкинуть именно русский ман. Смотрите, что я на коленке состряпал за пару минут:


/etc/man.conf
...
NROFF /usr/bin/nroff -mandoc -c | iconv -c -f utf8 -t iso8859-1 | iconv -c -f koi8-r -t utf8
...


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


/etc/man.conf
...
NROFF /usr/bin/nroff -mandoc -c | iconv -c -t iso8859-1 | iconv -c -f koi8-r
...



А вот что получилось:


MC(1) GNU Midnight Commander MC(1)



НАИМЕНОВАНИЕ
mc - Визуальная оболочка для Unix-подобных систем.

...


Вот так :)


Читать далее