1 |
dpavlin |
407 |
package Frey::Editor; |
2 |
|
|
use Moose; |
3 |
|
|
|
4 |
dpavlin |
417 |
extends 'Frey::ClassLoader'; |
5 |
|
|
|
6 |
dpavlin |
407 |
=head1 DESCRIPTION |
7 |
|
|
|
8 |
|
|
Support for local editor invocation from web |
9 |
|
|
|
10 |
dpavlin |
495 |
<a target="editor" href="/editor+$path+$line">$class</a> |
11 |
dpavlin |
407 |
|
12 |
|
|
=head2 url |
13 |
|
|
|
14 |
|
|
$path =~ $editor->url_regex |
15 |
|
|
|
16 |
|
|
=cut |
17 |
|
|
|
18 |
|
|
sub url_regex { qr{/editor\+?(.+?)\+(\d+)} } |
19 |
|
|
|
20 |
|
|
=head2 command |
21 |
|
|
|
22 |
|
|
my $system = $editor->command( $path ); |
23 |
|
|
|
24 |
|
|
=cut |
25 |
|
|
|
26 |
dpavlin |
617 |
sub switch_screen { |
27 |
|
|
my $cmd = 'xdotool key super+Tab'; |
28 |
|
|
warn "# switch_screen $cmd"; |
29 |
|
|
system $cmd; |
30 |
|
|
} |
31 |
|
|
|
32 |
dpavlin |
407 |
sub command { |
33 |
|
|
my ( $self, $url ) = @_; |
34 |
|
|
$url =~ url_regex; |
35 |
dpavlin |
417 |
my ( $path, $line ) = ( $1, $2 ); |
36 |
|
|
# FIXME SECURITY path verification for $path |
37 |
dpavlin |
407 |
my $editor = $ENV{VISUAL} || $ENV{EDITOR} || 'vi'; |
38 |
dpavlin |
417 |
$path = $self->class_path( $path ) || $path if ! -e $path; |
39 |
|
|
my $cmd = "$editor $path +$line"; |
40 |
dpavlin |
407 |
warn "# $url -> system $cmd"; |
41 |
dpavlin |
617 |
$self->switch_screen; |
42 |
|
|
system $cmd; |
43 |
|
|
$self->switch_screen; |
44 |
dpavlin |
407 |
} |
45 |
|
|
|
46 |
|
|
1; |