⚡ move ~/bin to ~/.local/bin
This commit is contained in:
94
.local/bin/§mail.mjs
Executable file
94
.local/bin/§mail.mjs
Executable file
@@ -0,0 +1,94 @@
|
||||
#!/usr/bin/env nodejsscript
|
||||
/* jshint esversion: 11,-W097, -W040, module: true, node: true, expr: true, undef: true *//* global echo, $, pipe, s, style, fetch, cyclicLoop, xdg, $ */
|
||||
import { basename } from "path";
|
||||
const app= {
|
||||
name: basename(process.argv[1]),
|
||||
version: "2022-09-28",
|
||||
cmd: $.xdg.home`.local/bin/himalaya`,
|
||||
configs: $.xdg.config`himalaya/`,
|
||||
modificator: "§"
|
||||
};
|
||||
const chars= { "&AOE-": "á", "&AWE-": "š", "&ARs-": "ě" };
|
||||
let argv_arr= argvArr();
|
||||
|
||||
if("help"===argv_arr.toString().replaceAll("-", "")){ //#region
|
||||
echo([ `${app.name}@${app.version}`,
|
||||
`This is small wrapper around 'himalaya' fixing coding errors and provide better 'read'. (Use § for calling himalaya directly)`,
|
||||
"" ].join("\n"));
|
||||
s.run(app.cmd+" --help");
|
||||
$.exit(0); //#endregion
|
||||
}
|
||||
if("version"===argv_arr.toString().replaceAll("-", "")){//#region
|
||||
echo(`${app.name} ${app.version}`);
|
||||
s.run(app.cmd+" --version");
|
||||
$.exit(0);//#endregion
|
||||
}
|
||||
if("completion,bash"===argv_arr.toString()){//#region
|
||||
const completion= s.run(app.cmd+" ::argv_arr::", { argv_arr });
|
||||
echo(completion.toString().replace("himalaya)", `himalaya|${app.name})`));
|
||||
echo(`alias ${app.name}-inbox="§mail § | less -R -S"`);
|
||||
echo(`complete -F _himalaya -o bashdefault -o default ${app.name}`);
|
||||
$.exit(0);//#endregion
|
||||
}
|
||||
(async function main(){
|
||||
if(argv_arr.indexOf(app.modificator)!==-1) await runH(argv_arr.filter(l=> l!==app.modificator));
|
||||
|
||||
argv_arr= argv_arr.filter(str=> str!==app.modificator);
|
||||
if(argv_arr.indexOf("list")!==-1){
|
||||
argv_arr.push("-w", process.stdout.columns);
|
||||
await runH(argv_arr);
|
||||
}
|
||||
if(argv_arr.indexOf("read")!==-1){
|
||||
const email= $.xdg.temp`/himalaya-read.eml`;
|
||||
argv_arr.push("-h", "From", "-h", "Subject");
|
||||
await s.$().runA(app.cmd+" ::argv_arr::", { argv_arr }).pipe(s=> s.to(email));
|
||||
await s.runA`vim ${email}`.pipe(process.stdout);
|
||||
$.exit(0);
|
||||
}
|
||||
|
||||
if(argv_arr[0] && argv_arr[0]!=="--rofi") await runH(argv_arr);
|
||||
|
||||
const template_path= app.configs+"template-inbox.json";
|
||||
if(!s.test("-f", template_path)) await runH([]);
|
||||
|
||||
const out= await pipe(
|
||||
f=> s.cat(f).xargs(JSON.parse),
|
||||
argv_arr.indexOf('--rofi')===-1 ? templateRead : templateRofi,
|
||||
a=> Promise.all(a)
|
||||
)(template_path);
|
||||
for(const l of out){
|
||||
if(typeof l=="string"&&!l.indexOf("%c===\n")) echo(l, "unset:all", "color:magenta");
|
||||
else echo(l);
|
||||
}
|
||||
$.exit(0);
|
||||
})();
|
||||
|
||||
function templateRofi(lines){
|
||||
return lines.filter(line=> line.type!=="text")
|
||||
.map(line=>
|
||||
s.$().runA(app.cmd+" ::value:: -w 120", line)
|
||||
.then(data=> data.toString().split("\n")
|
||||
.filter(l=> l)
|
||||
.map(line=> line.replaceAll("✷ ", "* "))
|
||||
.map(line_result=> line_result+" │ "+line.label)
|
||||
.join("\n"))
|
||||
);
|
||||
}
|
||||
function templateRead(lines){
|
||||
argv_arr.push("-w", process.stdout.columns);
|
||||
return lines.map(line=> line.type==="text" ?
|
||||
Promise.resolve("%c===\n%c"+line.value) :
|
||||
s.$().runA(app.cmd+" ::value:: ::argv_arr::", { value: line.value, argv_arr })
|
||||
);
|
||||
}
|
||||
|
||||
function argvArr(){
|
||||
const _chars= Object.entries(chars).reduce((acc, [ key, val ])=> Reflect.set(acc, val, key) && acc, {});
|
||||
return process.argv.slice(2).map(str=> str.replace(new RegExp(`(${Object.keys(_chars).join("|")})`, "g"), l=> _chars[l]));
|
||||
}
|
||||
async function runH(args){
|
||||
const result= await s.runA(app.cmd+" ::args::", { args }).pipe(process.stdout);
|
||||
$.exit(result.exitCode);
|
||||
}
|
||||
// vim: set tabstop=4 shiftwidth=4 textwidth=250 noexpandtab ft=javascript :
|
||||
// vim>60: set foldmethod=marker foldmarker=#region,#endregion :
|
Reference in New Issue
Block a user