/
frontend-term
executable file
·104 lines (86 loc) · 2.21 KB
/
frontend-term
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/usr/bin/perl -w
#
# frontend-term - keybinding frontend to omxplayer-console
# Copyright (C) 2013-2014 Christian Garbs <mitch@cgarbs.de>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
use strict;
use Term::ReadKey;
# set this to true to show unknown key sequences
my $learning_mode = 0;
#################################
my %escapes = (
'A' => 'up',
'B' => 'down',
'C' => 'right',
'D' => 'left',
);
my %keys = (
'q' => 'quit',
"\n" => 'play',
' ' => 'stop',
'f' => 'seek +20',
'F' => 'seek +100',
'r' => 'seek -20',
'R' => 'seek -100',
'p' => 'pause',
'+' => 'volume +10',
'-' => 'volume -10',
'a' => 'audio',
's' => 'subtitle',
'S' => 'nosub',
'd' => 'subdelay+250',
'D' => 'subdelay-250',
'i' => 'info',
);
#################################
ReadMode 'cbreak';
my $esc = chr(27);
my $seq = '';
$|++;
while (1) {
my $key = ReadKey(0.15); # read timeout 150ms
next unless defined $key;
# build ESC sequences
if ($seq eq '' and $key eq $esc) {
$seq = $key;
}
elsif ($seq eq $esc and $key eq '[') {
$seq .= $key;
}
# parse ESC sequences
elsif ($seq eq $esc.'[') {
$seq = '';
if (exists $escapes{$key}) {
print "$escapes{$key}\n";
} elsif ($learning_mode) {
printf "ESC[ %03d=(%s)\n", ord($key), $key ;
}
}
# normal characters, reset sequence
else {
$seq = '';
if (exists $keys{$key}) {
print "$keys{$key}\n";
} elsif ($learning_mode) {
printf "%03d=(%s)\n", ord($key), $key;
}
# this has to be treated special -> loop end
if ($key eq 'q') {
last;
}
}
}
ReadMode 'restore';