edit koha code with vim

Par mc, 27 juin 2009 18 h 51 min

Using a terminal based editor is cool: you can remotely edit the code on our server and share your screen to make a collaborative work session with someone elsewhere (screen -xS koha). But some claims that they work faster with IDEs. I want to share my tips for koha editing.

[color=blue]always from the koha root[/color]

When i start a koha devel session, i change directory to koha root and update the code and refresh the tags

cd ~/src/koha
git pull --rebase
ctags --languages=perl -R -f TAGS

[color=blue]tags[/color]

If you don’t know about tags: this is an amazing way to navigate into the code:

- goto a function call (cursor under the function name)
- split the window ( <c-w>f )
- call the tag ( <c-]> )

you have now 2 windows: one on the function call, one on the function def.
you can go to any other tag: type :tag Add<tab> to see all koha functions begining by tags.

tags can also be used to complete the code: in insertmode, type Add<c-x]> and choose the function name in the menu.

[color=blue]open templates[/color]

this is my ~/.vim/plugin/koha. it provides easy way to access to a template or include:

- drive the cursor over the name of the template
- in normal mode, type ,to (template open).
- ensure it’s the good template name
- type enter
- et voila …

" if vim is in a koha root
if isdirectory('C4')
	let g:koha_itmpl='koha-tmpl/intranet-tmpl/prog/en/modules' " intranet templates
	let g:koha_iinc='koha-tmpl/intranet-tmpl/prog/en/includes' " intranet includes
 
	" ,te: template edit: just prepare :e with correct path to template root 
	" ,to; template open: just prepare :e with correct path to the template
	" under the cursor
	" ,ie and ,io are the same for includes 
	nnoremap ,te :e <c-r>=g:koha_itmpl<cr>
	nmap ,to ,te/<c-r><c-f>
	nnoremap ,ie :e <c-r>=g:koha_iinc<cr>
	nmap ,io ,ie/<c-r><c-f>
 
	" add include in the path ... so gf works inside templates
	exec 'set path+='.g:koha_iinc
endif

[color=blue]edit templates[/color]

this is my ~/.vim/plugin/html_template.vim

inoremap <V <!-- TMPL_VAR NAME="" --><c-o>F"
inoremap <L <!-- TMPL_LOOP NAME="" --><!--/TMPL_LOOP --><c-o>F"
inoremap <I <!-- TMPL_IF X><!-- /TMPL_IF --><esc>FXs
inoremap <U <!-- TMPL_UNLESS X><!-- /TMPL_UNLESS --><esc>FXs
inoremap <EI <!-- TMPL_ELSIF NAME="" --><c-o>F"
inoremap <EL <!-- TMPL_ELSE -->
inoremap <# <!-- TMPL_INCLUDE NAME="" --><c-o>F"

now, in insert mode: type <V or <I or ..

et voila

HTH

put regexes in a module

Par mc, 27 juin 2009 17 h 37 min

Koha is full of complex regexes and the authors never used the x flag, this is one of the things i would like to rewrite. I want them to be readable, flexible, testable and documented … i want them in a module … so this is my draft. Feedbacks are welcome.

#! /usr/bin/perl
package Token::Archive; 
use strict;
use warnings;
use utf8;
 
=head1 Token::Archive 
 
matches the different parts of a CPAN archive filename.
 
this documentation uses the filename modifiers as you can find it in vim, csh
or zsh so if you're familiar to them, it would be easy to read this doc.
 
=head2 C<$basename>
 
just matches the basename ( :t ).  Note that you have to add the $ yourself
 
=cut
our $basename = qr{ [^/]+ }x;
 
 
=head2 C<$capture_basename>
 
capture the basename. 
 
... rest of the doc have to be written ...
=cut
 
our $capture_basename = qr{ ( $basename ) $ }x;
 
# capture one of the known extensions
our $extension = qr{
	\. (?:
	    tar.gz | tgz
	) 
}x;
 
# capture the basename 
our $capture_basename_without_extension = qr{
    ( $basename  )
    (?: $extension )
    $ 
}x;
our $capture_parts = qr{
    ( .* ) / 
    ( $basename )
    ( $extension )
    $ 
}x;

so now … it’s easy to use and test:

package main;
use utf8;
use strict;
use warnings;
use Token::Archive; 
use Test::More 'no_plan';
use Data::Compare;
use YAML;
 
sub test_token {
 
    # $description is the description of the test 
    # $result   is a ref to a ARRAY that contains submatches 
    # $expected is a ref to a ARRAY that contains what must be captured
    my ( $description, $result, $expected ) = @_;
    ok( Compare( $result, $expected )
	, $description  
    ) or diag( Dump $result ); 
};
 
 
$_="path/to/archive.tgz";
 
test_token 'the 3 parts are correct'
    , [/$Token::Archive::capture_parts/]
    , [qw< path/to archive .tgz >]
; 
 
test_token 'good basename'
    , [/$Token::Archive::capture_basename/]
    , [qw< archive.tgz >]
; 
 
test_token 'good basename without extension'
    , [/$Token::Archive::capture_basename_without_extension/]
    , [qw< archive >]
;

et voila …

ok 1 - the 3 parts are correct
ok 2 - good basename
ok 3 - good basename without extension
1..3

the counterpart is that every regexes are compiled …

delicious et les liens du patron

Par mc, 25 juin 2009 9 h 48 min

we make it fasteeeeer!

J’ajouterais a ca les nouveautés d’html5/xforms2.0 qui font bien simplifier et fiabiliser la création de formulaires comme le repetition model ou la gestion du drag events; Les types courants sont gérés et on pourra ajouter des guards a base de regex dans les attributs des champs.

la derniere fois que le web m’a fait cet effet là, c’etait en 1997, hilton de casablanca: microsoft présentait IE4, dhtml, les web channels et active desktop … j’ai encore le CD de demo amoureusement gardé depuis …

la plus mauvaise idée du jour

Par mc, 23 juin 2009 20 h 59 min

Vu ce matin sur facebook: on peut devenir « fan de » « Suspendre les pédophiles par les couilles » … moi qui croyais avoir touché le fond en ayant pensé a faire un « fan de » « Karen Cheryl » …

Pour être sincère: je ne sais pas ce qui se passerait si j’en prenais un sur le fait: je crois que la haine est une réaction légitime … toutefois la proposition de ce groupe me parrait aussi stérile que l’idée d’envoyer l’armée dans nos banlieues pour en finir avec le problème des cités.

Dans le meme temps:

Quand je lis « la France-Afrique », je ferais bien prendre un bain de vinaigre jusqu’a l’os a tous les présidents de la Veme république et a toutes les personnes qui ont profité, en France ou ailleurs de ce systeme, quand je regarde un reportage sur monsanto, je leur ferais bien bouffer du PCB a la petite cuillère, quand je vois une video de corrida, je m’acharnerais bien sur un toréador a coup de pic a glace … je peux continuer comme ca longtemps …

Bref … avant de s’attaquer a des psychopathes qui pour les cas les plus graves sont eux-même passés par la case victime, j’aurais tendance a m’acharner d’abord sur ceux qui répendent la souffrance froidement, pour des raisons économiques ou politiques ou pire: par jeu!

Pour ce qui est de soigner les pédophiles: je n’ai évidement pas plus d’idée que les spécialistes en la matière. Il me semble toutefois, d’apres ce que j’en ai lu, que le nombre de pédophiles refoulés et légers est plus important qu’on le crois. Je me dis alors que la prévention et le suivi psychologique pourrait exister si ces personnes pouvaient se présenter chez leur docteur sans honte et demander « la petite voisine m’exite: que faire? ». Il faudrait pour ca que l’attitude haineuse du francais moyen cesse et que les gens se documentent un peu sur la pédophilie au lieu de regarder le JT de TF1. Je n’en attend malheureusement pas tant de mes compatriotes dans leur grande majorité.

En temps que père de famille, je compatis sincèrement à la douleur des victimes et de leurs familles mais ce qui m’importe est de faire en sorte que cela arrive moins pour éviter cette souffrance à mes enfants … et je doute qu’on regle le pb en pendant des malades mentaux par les couilles!

Panorama Theme by Themocracy