Select orthographic mistake with the mouse pointer and press Ctrl+Enter. Let’s make our language cleaner!
Якщо помітите помилку на цій сторінці, будь ласка, виділіть її вказівником миші та натисніть Ctrl+Enter. Зробімо наше мовлення чистішим!
Показ дописів із міткою vim. Показати всі дописи
Показ дописів із міткою vim. Показати всі дописи

2008-03-26

Синтаксис BBv2 у Vim

До цих пір ніде не бачив підтримку скриптів Boost Build v2 для редактора Vim. Незручно, бо цією системою я користуюся ледь не щодня. Отже, довелося поправити ситуацію самостійно.

Насправді, це дуже просто. Насамперед заводимо розпізнавання типу файлів у ftdetect/bbv2.vim:

au BufNewFile,BufRead Jamfile                   setlocal filetype=bbv2
au BufNewFile,BufRead Jamroot                   setlocal filetype=bbv2

Потім розпізнаємо ключові слова у syntax/bbv2.vim:

" Чутливість до реєстру
syn case match

" Розпізнаємо цілі BBv2
syn match bbv2Target "^\s*\(exe\|lib\|install\|alias\|actions\|notfile\|make\|import\|path-constant\|explicit\|local\|project\|run\|test-suite\|build-project\)\>"
" Деякі властивості
syn match bbv2Feature "\(<location>\|<include>\|<cflags>\|<linkflags>\|<library>\|<define>\|<file>\)"
" Деякі ключові слова
syn match bbv2BuiltIn "\<\(glob-tree\|glob\|SHELL\|run\)\>"
" Змінні на зразок $(THIS) чи $(THAT)
syn match bbv2Variable "\$([^)]\+)"
" Коментарі
syn region bbv2Comment start="#" end="$"
" Розділ actions містить команди оболонки Unix
syn include @Shell syntax/sh.vim
syn region bbv2Actions start="^{$" end="^}$" keepend fold contains=@Shell

" Нарешті співставляємо розпізнані частини із відомими типами.
hi def link bbv2Comment Comment
hi def link bbv2Target Type
hi def link bbv2Feature Special
hi def link bbv2BuiltIn Keyword
hi def link bbv2Variable Identifier

І ось результат:

import notfile ;

############# Generic environment ###########
 lib sys_gsmme : : <name>gsmme ;
 lib sys_mysqlwrapped : : <name>mysqlwrapped ;
 alias gsmme : sys_gsmme ;
 alias libmysqlwrapped : sys_mysqlwrapped ;
############# VDNS environment ##############
# alias gsmme : $(VDNS_TOP)/src_gsmlib//libgsmme ; #gsmme
# alias libmysqlwrapped : $(VDNS_TOP)/src_mysqlwrapper//libmysqlwrapped ;
#############################################

path-constant BIN_DIR : . ;

# Main target.
exe mps
    : main.cc
      app//app_src common//common_src
    ;

install bin/stage
    : mps
    : <location>$(BIN_DIR)
    ;
install bin/stage2
    : mps
    : <location>$(VDNS_TOP)/binaries
    ;

# Black magic. Use this carefully.
notfile distclean : @distclean ;
actions distclean
{
    echo "Cleaning..."
    rm -rf `find . -name 'bin*'`
    rm -rf `find . -name '*.log'`
    rm -rf `find . -name '*.bak'`
    rm -rf `find . -name 'a.out'`
    rm -rf lib*.so
    rm -f mps
}
explicit distclean ;

# Another piece of the magic, white one. Use this to make sure
# everything works.
alias test : [ glob-tree test ] ;
explicit test ;

2008-03-25

Покращення vman

За порадою vimtip #167 з давніх-давен я переглядав сторінки підручника у редакторі Vim. Для цього у .bashrc був псевдонім:

vman() { man $* | col -b | vim -c 'set ft=man nomod nolist' - ; }

Неймовірно просто і зручно, проте одна дрібничка постійно набридала: якщо шуканої сторінки немає, переглядач все-таки запускався без будь-якого тексту. Допоміг невеличкий порух пальцями:

vman() { text=`man $*` && echo "$text" | col -b |\
        vim -c 'set ft=man nomod nolist' - ; }

2008-02-03

Нотна типографія

Можу відверто зізнатися, що я відчайдушний фанат типографської справи. Не менше мені подобається гітарна музика, українські пісні та програмування. Виявляється, є кухня, в якій можна приготувати відмінний салат із усіх цих частин. Мова піде про моє відкриття системи підготовки до друку музичних партитур Lilypond.

Нещодавно схотілося вивчити кілька українських пісень, знайти б тільки якусь хорошу обробку для гітари. Після години пошуків, тижня переговорів, таки отримав придбану на сайті http://gitara.in.ua збірку “Повій, вітре, на Вкраїну”. Тридцяток пісень — це дуже добре, тим більше, що я їх всіх раніше чув, і вони мені подобаються. До цих пір ніколи не доводилося розбирати та вчити гітарні п’єси з нот, проте виявилося, що це насправді легко.

Очевидно, альбом набраний у якомусь офісному текстовому процесорі, якість нотних партитур теж нікудишня — це тільки суб’єктивні враження. Але саме воно спонукало озирнутися по сторонах. Виявляється, продуктів є багато, перепробувати всі неможливо, тому довелося порівнювати відгуки користувачів. Таким чином вибір спинився на “ставку́ лілій”.

Розібратися із системою після кількох спотикань вдалося легко, тому хочу поділитися результатом, провести по своїх слідах. Від дистрибутиву лінукса наступні кроки залежать слабко, проте відмінності є. Я спробував це у debian-40r1, який у мене є пісочницею для різноманітних експериментів з ядром, та у Fedora-8, під керуванням якої працює лаптоп.

Procedure 1. Підготовка партитури пісні “Реве та стогне Дніпр широкий”

  1. Встановлюємо систему Lilypond

    З репозитарію Федори:

    [sakhnik@incognito ~]$ sudo yum install lilypond lilypond-doc

    З репозитарію Дебіан:

    [sakhnik@sandbox ~]$ sudo apt-get install lilypond
  2. Вивчаємо підручник

    Уважно читаємо підручник, який вже має бути десь у локальній файловій системі. Мушу зізнатися, що цей пункт, як завжди, я пропустив, але часто використовував документ в якості довідника.

  3. Готуємося до бою.

    Отже, до цих пір ми вже зрозуміли, що lilypond — це компілятор на зразок TeX/LaTeX. Якщо його накормити хитрим текстовим файлом, то він поверне кілька графічних партитур, файл MIDI для контролю за процесом на слух.

    Кожна нота вихідного файлу PDF містить посилання на місце її в джерелі: textedit:///home/sakhnik/dnipro.ly:10:12:36. У підручнику описано, як скористатися цим фактом у зв’язці lilypond-invoke-editor та xpdf. Не працює? — Не біда, легко підпилюємо GNOME, щоб він розбирав такі URL і користуємося більш зручним, на мій погляд, evince:

    gconftool-2 --set --type=string /desktop/gnome/url-handlers/textedit/command 'url.sh "%s"'
    gconftool-2 --set --type=bool /desktop/gnome/url-handlers/textedit/enabled true
    gconftool-2 --set --type=bool /desktop/gnome/url-handlers/textedit/need-terminal false

    Зрозуміло, що сам url.sh ще потрібно навчити запускати редактор Vim:

    #!/bin/bash
    #
    # Handle passed url. Useful for lilypond editing.
    
    [[ $# != 1 ]] && echo "`basename $0` <url>" && exit 1
    
    if [[ "$1" =~ '^textedit://([^:]+):([0-9]+):([0-9]+).*$' ]]; then
        server=LILYPOND
        if [ -z `gvim --serverlist | grep $server` ]; then
            gvim --servername $server
        fi
        fname=${BASH_REMATCH[1]}
        line=${BASH_REMATCH[2]}
        col=${BASH_REMATCH[3]}
        gvim --servername $server \
            --remote-send ":e $fname<cr>:call cursor($line,$col)<cr>\
    :call foreground()<cr>"
        exit 0
    fi
    
    echo "Unknown url scheme"; exit 1
  4. Готуємо редактор Vim

    Розробники Lilypond підготували виділення синтаксису, макроси для швидкого набору, компіляції. При встановленні пакету скрипти редактора автоматично копіюються у директорію /usr/share/vim/vim70. Але я використовую власної збірки найновішу версію редактора, тому розширення Lilypond довелося скопіювати самостійно.

  5. Виконуємо набір

    Власне, це і є найбільш цікава частина справи. Lilypond розроблений з допомогою мови програмування Схема, і вхідні файли теж є частиною програми. Таким чином набірник у руки отримує справжній швейцарський ніж: крім різання ним можна рубати, свердлити, точити, різьбити, відкорковувати вино… Найбільш вдалі зразки застосування можна знайти серед прикладів підручника.

    Цикл розробки дуже простий. Компілюємо вихідний файл dnipro.ly, переглядаємо його з допомогою evince, тикаємо мишкою на об’єкт, який потрібно поправити. На екрані з’являється (чи просто виводиться на передній план) вікно редактора Vim. Далі робимо потрібні виправлення, виконуємо команду :make, повертаємося до переглядача і перечитуємо файл комбінацією клавіш Ctrl+R.

    Подолати весь документ цілком відразу, очевидно, не вдасться. Тому я набирав його десь зо три години (з перервами, зрозуміло) поетапно.

    1. Підготовка шаблону

      Шаблон — це перший-ліпший приклад з підручника, який схожий на потрібний документ. Його тільки потрібно очистити від зайвого.

    2. Набір нот

      По черзі такт за тактом набрав усі три голоси́, часто компілюючи та звіряючись із джерелом.

    3. Набір аплікатури та струн

      Це легко додається у існуючий документ. На цьому етапі вперше виявилася потреба ручної корекції виводу. Але, як було згадано вище, це здійснюється дуже просто.

    4. Динаміка та мітки

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

  6. Куштуємо плоди

    Саме пора насолоджуватися результатом.

    Наступного разу розповім, як можна доповнити нотний запис п’єси табулатурою, трохи змінивши вихідний код.

2008-01-03

“Tears in the rain”

I’ve discovered an interesting tool that allows to record a screen cast. Thus I’m able to record some educational videos of how to use the Vim editor or the GNU/Linux operating system.

Let’s see!

2007-08-16

Robots help us

A year has passed quickly, and I celebrate my first anniversary of salsa LA study.

I’ve understood how not to spend much time updating my software. There’re packet managers, which work in my Fedora 7 just well. So I’ve stopped compiling software from sources.

But they don’t updated the Vim as quickly as I want. So recently I set up the aap build system. And now to update my Vim I just type:

$ aap update; sudo aap install

And that’s it! It’s fascinating, isn’t it?

2007-03-03

Typing text is getting easier

It was always complicated to type some beautiful text characters, for instance quotation marks ‘’ or “”. Actually, I’ve never known how to do it efficiently enough. When I worked under windows, I pressed the alt key then typed four-digit code of the character, and finally released the alt. That was six–seven keys to press!

There was no such possibility under Linux at all. So I tried to use the OpenOffice.org writer first. After years of software development I decided that there’s no better editor than the Vim. So I started using it everywhere. To edit a text in a web input field, I use the ViewSourceWith add-on for Mozilla. To type an exotic sign, I pressed <c-v>u2019. That was another seven keys.

And finally I discovered so called digraphs. This beast can help to type almost any character by pressing only four keys. For example, the same apostroph can be typed as <c-k>'9. Moreover, two-character abbreviation of a sign is very easy to remember:

'6, '9‘, ’Digits 6 and 9 are very like the sign itself.
"6, "9“, ”wThe same story as above.
-N, -M–, —En and em dashes respectively.
N0Numero, number.

I haven’t found the ellipsis , so I had to define it manually in my .vimrc: :digraph 3_ 8230.