ref: 518be82da324d9d72bcbd7007809e8c4f76f787b
parent: 91791a03db3747cdcb480d62b1fd90b92626f1aa
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Mon Sep 19 15:35:53 EDT 2022
audio/zuke: "r" key - "repeat one" mode, based on the patch from qwx (thanks)
--- a/sys/man/1/zuke
+++ b/sys/man/1/zuke
@@ -121,6 +121,9 @@
.B p c Space
Pause/Resume.
.TP
+.B r
+Toggle ``repeat one''.
+.TP
.B s
Toggle ``shuffle''.
.TP
--- a/sys/src/cmd/audio/zuke/zuke.c
+++ b/sys/src/cmd/audio/zuke/zuke.c
@@ -90,6 +90,7 @@
static char *cols = "AatD";
static int colspath;
static int *shuffle;
+static int repeatone;
static Rectangle seekbar;
static int seekmx, newseekmx = -1;
static double seekoff; /* ms */
@@ -273,34 +274,33 @@
Image *col;
/* seekbar playback/duration text */
+ i = snprint(tmp, sizeof(tmp), "%s%s%s",
+ repeatone ? "¹" : "",
+ shuffle != nil ? "∫" : "",
+ (repeatone || shuffle != nil) ? " " : ""
+ );
msec = 0;
if(pcurplaying >= 0){
- dur = getmeta(pcurplaying)->duration;
msec = byteswritten*1000/Bps;
- if(dur > 0){
- snprint(tmp, sizeof(tmp), "%s%P/%P 100%%",
- shuffle != nil ? "∫ " : "",
- dur/1000, dur/1000);
+ if((dur = getmeta(pcurplaying)->duration) > 0){
+ snprint(tmp+i, sizeof(tmp)-i, "%P/%P %d%%", dur/1000, dur/1000, 100);
w = stringwidth(f, tmp);
msec = MIN(msec, dur);
- snprint(tmp, sizeof(tmp), "%s%P/%P %d%%",
- shuffle != nil ? "∫ " : "",
+ snprint(tmp+i, sizeof(tmp)-i, "%P/%P %d%%",
(uvlong)(newseekmx >= 0 ? seekoff : msec)/1000,
- dur/1000, volume);
+ dur/1000,
+ volume
+ );
}else{
- snprint(tmp, sizeof(tmp), "%s%P %d%%",
- shuffle != nil ? "∫ " : "",
- msec/1000, 100);
+ snprint(tmp+i, sizeof(tmp)-i, "%P %d%%", msec/1000, 100);
w = stringwidth(f, tmp);
- snprint(tmp, sizeof(tmp), "%s%P %d%%",
- shuffle != nil ? "∫ " : "",
- msec/1000, volume);
+ snprint(tmp, sizeof(tmp), "%P %d%%", msec/1000, volume);
}
}else{
dur = 0;
- snprint(tmp, sizeof(tmp), "%s%d%%", shuffle != nil ? "∫ " : "", 100);
+ snprint(tmp+i, sizeof(tmp)-i, "%d%%", 100);
w = stringwidth(f, tmp);
- snprint(tmp, sizeof(tmp), "%s%d%%", shuffle != nil ? "∫ " : "", volume);
+ snprint(tmp+i, sizeof(tmp)-i, "%d%%", volume);
}
lockdisplay(display);
@@ -727,8 +727,13 @@
while(1){
n = ioread(io, p[1], buf, Relbufsz);
- if(n <= 0)
+ if(n <= 0){
+ if(repeatone){
+ c = Cseekrel;
+ boffset = 0;
+ }
break;
+ }
thiscover = nil;
if(player->img != nil && nbrecv(player->img, &thiscover) != 0){
@@ -1267,7 +1272,7 @@
Scrollwidth = MAX(14, stringwidth(f, "#"));
Scrollheight = MAX(16, f->height);
Seekthicc = Scrollheight + 2;
- Coversz = MAX(64, stringwidth(f, "∫ 00:00:00/00:00:00 100%"));
+ Coversz = MAX(64, stringwidth(f, "¹∫ 00:00:00/00:00:00 100%"));
if((mctl = initmouse(nil, screen)) == nil)
sysfatal("initmouse: %r");
@@ -1492,6 +1497,10 @@
toggleshuffle();
recenter();
full = 1;
+ break;
+ case 'r':
+ repeatone ^= 1;
+ redraw(0);
break;
case 'c':
case 'p':