⚡ gcalendar/§time.mjs
/shift-enter
=history-and-alias-expand-line
This commit is contained in:
parent
6a8f73450c
commit
60d6583472
@ -54,6 +54,9 @@ alias m='cd.'
|
|||||||
alias cd-vifm='cd `vifm --choose-dir -`'
|
alias cd-vifm='cd `vifm --choose-dir -`'
|
||||||
mkcd(){ mkdir -p -- "$1" && cd -P -- "$1"; }
|
mkcd(){ mkdir -p -- "$1" && cd -P -- "$1"; }
|
||||||
|
|
||||||
|
alias gcalendar-dovolené='gcalendar --account "práce" --calendar "Dovolené"'
|
||||||
|
alias gcalendar-události='gcalendar --account "default" --calendar "Události"'
|
||||||
|
|
||||||
alias §find.='find . -maxdepth 1'
|
alias §find.='find . -maxdepth 1'
|
||||||
|
|
||||||
alias pdftk='java -jar $HOME/bin/pdftk-all.jar'
|
alias pdftk='java -jar $HOME/bin/pdftk-all.jar'
|
||||||
|
2
.inputrc
2
.inputrc
@ -17,7 +17,7 @@ set menu-complete-display-prefix on
|
|||||||
"\e[A":history-search-backward
|
"\e[A":history-search-backward
|
||||||
"\e[B":history-search-forward
|
"\e[B":history-search-forward
|
||||||
|
|
||||||
"\e\C-e": history-and-alias-expand-line
|
"OM": history-and-alias-expand-line
|
||||||
|
|
||||||
set colored-stats On
|
set colored-stats On
|
||||||
|
|
||||||
|
80
bin/§time.mjs
Executable file
80
bin/§time.mjs
Executable file
@ -0,0 +1,80 @@
|
|||||||
|
#!/usr/bin/env nodejsscript
|
||||||
|
/* jshint esversion: 11,-W097, -W040, module: true, node: true, expr: true, undef: true *//* global echo, $, pipe, s, fetch, cyclicLoop */
|
||||||
|
const units= {
|
||||||
|
second: 1000,
|
||||||
|
get minute(){ return this.second*60; },
|
||||||
|
get hour(){ return this.minute*60; },
|
||||||
|
get day(){ return this.hour*24; },
|
||||||
|
get month(){ return this.day*30; },
|
||||||
|
get year(){ return this.day*365; }
|
||||||
|
};
|
||||||
|
|
||||||
|
$.api()
|
||||||
|
.version("2024-03-27")
|
||||||
|
.command("diff <time>", [
|
||||||
|
"Returns remaining time diff <time>.",
|
||||||
|
"The <time> is argument to bash `date -d <time> +%s`."
|
||||||
|
])
|
||||||
|
.alias("?")
|
||||||
|
.option("--unit", "Unit, use one of the: "+Object.keys(units).join(", "))
|
||||||
|
.action(diff)
|
||||||
|
.command("zone [time]", "Returns times in different time zones.")
|
||||||
|
.option("-z", "Use multiple times to see time in different time zones.")
|
||||||
|
.action(zone)
|
||||||
|
.parse();
|
||||||
|
|
||||||
|
function diff(given, { unit }){
|
||||||
|
const date_now= new Date();
|
||||||
|
const date_given= new Date(s.$().run`date -d ${given} +%Y-%m-%dT%H:%M:%S%z`.trim());
|
||||||
|
if(date_given.toLocaleString() === "Invalid Date")
|
||||||
|
return $.exit(1, echo(date_given));
|
||||||
|
|
||||||
|
const rtf= new Intl.RelativeTimeFormat();
|
||||||
|
let future= 1;
|
||||||
|
let diff= date_given - date_now;
|
||||||
|
if(diff < 0){
|
||||||
|
future= -1;
|
||||||
|
diff= -diff;
|
||||||
|
}
|
||||||
|
if(unit){
|
||||||
|
if(unit.endsWith("s")) unit= unit.slice(0, -1);
|
||||||
|
echo(rtf.format(future*Math.floor(diff/units[unit]), unit));
|
||||||
|
$.exit(0);
|
||||||
|
}
|
||||||
|
diff= echoUnit(future, diff, "year", rtf);
|
||||||
|
diff= echoUnit(future, diff, "month", rtf);
|
||||||
|
diff= echoUnit(future, diff, "day", rtf);
|
||||||
|
diff= echoUnit(future, diff, "hour", rtf);
|
||||||
|
diff= echoUnit(future, diff, "minute", rtf);
|
||||||
|
diff= echoUnit(future, diff, "second", rtf);
|
||||||
|
$.exit(0);
|
||||||
|
}
|
||||||
|
function zone(time, { z: zones }){
|
||||||
|
if(!Array.isArray(zones)) zones= zones ? [ zones ] : [];
|
||||||
|
if(!zones.length)
|
||||||
|
return $.error("Please specify at least one zone.");
|
||||||
|
|
||||||
|
const date_given= time ? new Date(s.$().run`date -d ${time} +%Y-%m-%dT%H:%M:%S%z`.trim()) : new Date();
|
||||||
|
if(date_given.toLocaleString() === "Invalid Date")
|
||||||
|
return $.error(date_given);
|
||||||
|
|
||||||
|
const max_length= Math.max(...zones.map(zone=> zone.length));
|
||||||
|
const dtf= timeZone=> new Intl.DateTimeFormat(undefined, { timeZone, dateStyle: "full", timeStyle: "long", hour12: false });
|
||||||
|
for(const zone of zones)
|
||||||
|
echo(zone.padStart(max_length, " "), "—", dtf(zone).format(date_given));
|
||||||
|
|
||||||
|
$.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {1|-1} future
|
||||||
|
* @param {number} num
|
||||||
|
* @param {'year'|'month'|'day'|'hour'|'minute'|'second'} unit
|
||||||
|
* @param {string} rtf
|
||||||
|
* */
|
||||||
|
function echoUnit(future, num, unit, rtf){
|
||||||
|
if(num <= units[unit]) return num;
|
||||||
|
|
||||||
|
echo(rtf.format(future*Math.floor(num/units[unit]), unit));
|
||||||
|
return num%units[unit];
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user