tengu_crow: (Default)
tengu_crow ([personal profile] tengu_crow) wrote2009-03-10 11:50 pm

АффигительноБольшойТекстовыйФайл5 - F3-линкер

Уже полтора месяца пользуюсь просмотром по F3, но никак не соберусь про него написать. Работает это так - я становлюсь курсором на любую ссылку в своем файле, например:

http://www.vim.org/

По нажатию F3 Vim открывает ссылку как внешнюю, запуская нужное приложение. Если это ссылка - она передается в firefox, если ссылка на файл - в соответствующее приложение.



Сама идея крутилась в голове достаточно давно - после WinOrganizer мне очень не хватало картинок в своих заметках - я уже успел привыкнуть к тому, что можно быстро набросать нужную схему в любой подручной рисовалке и положить ее в заметку, как иллюстрацию.

А с переходом на плэйнтекст это все пропало. Как верно заметил сэр [livejournal.com profile] andrzejn:

с картинками и причудливым форматированием придётся распрощаться

Собственно, его заметка подвигла меня на решение этой проблемы.



Технические детали.

Было несколько путей. Закопавшись в хелп, я нашел раздел о том, как передавать комстроке (:) спецаргументы в виде <cfile> (оно копирует в командную строку отрезок текста по тому же правилу обработки, по которому работает gf) и <cWORD> (по правилу движения через W - то есть копируется СЛОВО под курсором - где словом считается все, что находится между двумя пробелами или знаками абзаца - включая тире и прочие символы) - это позволило передать в комстроку название файла. Дальше пошли нюансы.

1. Путь, который я нашел сам:


nmap <F3> :! <cfile><CR>


(это у меня добавлено в vimrc)

//Кстати, о. Есть :! start и :!start - это две разные вещи - см. хелп. Вкратце - вторая позволяет запускать процессы отдельно от вима.

Это наиболее универсальное решение - правда только в том случае, если в системе прописана обработка нужных ссылок.

2. Следующей идеей было выдавать ссылку в промежуточный python-скрипт


:!starter.py <cWORD><CR>


После чего средствами Питона разбираться что и как запускать с помощью модулей os и shutils.

3. Заглянув на vim.org - понял, что занимался изобретением велосипеда :) Но в общем-то мыслил в правильном направлении. В статье Execute commands from buffer text under Windows описан следующий способ:


nmap <F3> :silent !start rundll32 url.dll,FileProtocolHandler <cWORD> <CR>


метод хорош тем, что корректно обрабатывает все - изображения, линки, наверное даже mail-to... ага и mailto тоже :)))

Работает аналогично примеру номер один, но тут используется вызов процедуры через rundll32 плюс - использован режим silent - чтобы вся работа по такому запуску происходила за кадром. Минус способа - разумеется работает исключительно под Windows.



Опыт использования


Такой запуск оказался очень полезным. Побочные эффекты оказались даже интереснее основной цели.

Во-первых, очень легко стало работать со ссылками. Теперь спокойно добавляю себе заметки - "посмотреть такой и такой <адрес> там очень интересно про то и про то".

Во-вторых, я и раньше коллекционировал в блоге самые разные линки - теперь все это богатство доступно по одному клику... в смысле по одному нажатию кнопки, без возни с копипастами. Коллекционирование линков в блоге, а не в букмарках скажем firefox'а имеет несколько преимуществ. Два главных для меня - возможность подробно и нехлопотно (то есть без включения головы) описать что именно лежит по такой ссылке плюс возможность также нехлопотно найти этот линк текстовым поиском.

В-третьих - картинки и прочие схемы, ради которых это все затевалось. Теперь можно проставить в блоге ссылку на любой нужный файл (в используемом мной FreeCommander'е - это делается по Alt+Insert) и потом легко иметь к нему доступ. Я уже давно складирую нужные иллюстрации в отдельной папке - так что теперь мой блог в том числе и с картинками. Теперь к ним тоже легко получать доступ - при этом совершенно неважно что за формат у картинки и сколько она весит - лишь бы система могла обработать ссылку.

Ну и в целом мой блог постепенно превращается в нечто, интегрирующее в себя ключевые ссылки, данные и прочее и прочее. Чем дальше - тем удобнее работать в такой системе.


Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting