швидкодрук

пройшов кілька онлайнових тестів на швидкодрук:

1) англійська — 60 слів на хвилину, точність 99%;
2) французька — 47 слів на хвилину, точність 98%;
3) українська — хорошого тесту онлайн не знайшов, поганий дав 58 слів на хвилину, точність 100%.

потреную англійську для початку. мета — 70 слів на хвилину і точність 100%.
ще трохи порнографії для тих, хто в темі.

keyboard porno

a freak like me
just needs infinity

знадобився рік часу, дві механічних клавіатури, один кастомізований набір клавіш і відео на youtube, щоби зрозуміти, що мені потрібно:
рано чи пізно…

мудрував-мудрував, та не вимудрував: зрозуміло, що перевірка коду завершення попередньої команди має бути першою операцією під час формування промпту… тому значно простіше кодувати кольором перший елемент (номер команди в історії), аніж останній (власне запрошення $).

заміну домашньої теки на ~ також подужав, а от «розумне» скорочення шляху сегментами зробити, звісно, можна, — але з такими «вивертами», що результат не вартий тих зусиль і захаращеного .bashrc.

отже, фінальна версія запрошення:
  • показує номер команди в історії — червоним, якщо попередня команда завершилася з помилкою;
  • виділяє root'а кольором;
  • скорочує шлях до поточної директорії, якщо довший за 30 символів, попередньо заміняючи домашню теку на ~;
  • показує кількість фонових процесів, якщо є.
на цьому й зупинюся. анімований зняток ілюструє, як все виглядає. код на pastebin:

на продовження оповідки про кастомізацію запрошення bash yarema запитав, чи подужаю я змайструвати запрошення, котре автоматично скорочуватиме надміру довгі шляхи до поточної директорії. я взявся спробувати — і за кілька хвилин накидав досить примітивний варіант, котрий, тим не менш, працює.

ось код для .bashrc на pastebin (див. наприкінці допису). додати довелося лише ось цей фрагмент:

$(if [[ ${#PWD} -gt 30 ]]; then echo "${PWD:0:14}..${PWD:(-14)}"; else echo "${PWD}"; fi)

працює справді примітивно: якщо довжина шляху (${#PWD}) більша за 30 символів — беремо 14 символів від початку (${PWD:0:14}) та стільки ж від кінця (${PWD:(-14)}), додавши між ними дві крапки. і жодного виклику sed, — самі лише вбудовані функції bash.

результат на анімованому знятку. мені сподобалося, залишив і собі.

чому примітивно?
по-перше, замість шляху до домашньої теки користувача не підставляється ~, та й замість простого «вирізання» середини варто було б зробити розумну заміну внутрішніх сегментів адреси:

~/Dropbox/../write

але то вже буде задачка на інший раз.

p.s. …і, звісно ж, кольорове кодування $ залежно від коду завершення — поламалося. зараз міркуватиму, як поремонтувати.

трохи поекспериментував з кастомізацією запрошення в командній оболонці (bash prompt): додавав смайлики і навіть котиків, фарбував різні частини в усі кольори веселки тощо…

награвся і повернувся до стандартного, — не зовсім, але майже:
  • додав номер команди в історії;
  • додав кольорове кодування запрошення для root'а;
  • додав кольорове кодування залежно від коду завершення попередньої команди;
  • додав індикатор кількості фонових процесів.
результат на знятку. в .bashrc таке:

export PS1='\[\e[2;37m\]\! \[\e[1;32m\]\u@\H\[\e[0m\] \w $(if [[ $? != 0 ]]; then echo "\[\e[31m\]"; fi)$([ \j -gt 0 ] && echo "\[\e[2;37m\][\j]\[\e[0m\] ")\$\[\e[0m\] '

виглядає трохи складно. але якщо врахувати, що всі фрагменти «\[\e[2;37m\]» — то лише кодування кольорів тексту, залишається основа, яка теж працюватиме:

export PS1='\! \u@\H \w $(if [[ $? != 0 ]]; then echo "(Error)"; fi)$([ \j -gt 0 ] && echo "[\j] ")\$ '

її нескладно розібрати на елементи:
  • \! — номер команди в історії (див. history);
  • \u — ім'я користувача;
  • \H — ім'я машини (повністю);
  • \w — поточна директорія (повністю);
  • $(if [[ $? != 0 ]]; then echo "(Error)"; fi) — перевірка коду завершення ($?) попередньої команди;
  • $([ \j -gt 0 ] && echo "[\j] ") — перевірка (так, в bash можна без if), чи є фонові процеси (\j);
  • \$ — запрошення ($, або ж # для root'а)
налаштував і тішуся.