ref: 218b0a12bc312732de56e6ff022204b3139de247
parent: dc3d917a36dfc186698a36b208f0ad54d331da25
author: Ali Gholami Rudi <ali@rudi.ir>
date: Thu Nov 23 08:39:25 EST 2017
tr: .co request to copy the contents of a register from or into a file To write the contents of register xy to out.txt: .co xy >out.txt To read the contents file out.txt into register xy: .co xy <out.txt
--- a/tr.c
+++ b/tr.c
@@ -858,6 +858,33 @@
tr_bm = args[1] ? map(args[1]) : -1;
}
+static void tr_co(char **args)
+{+ char *reg = args[1];
+ char *path = args[2];
+ char buf[1024];
+ if (!reg || !reg[0] || !path || !path[0])
+ return;
+ if (path[0] == '>') {+ FILE *fp = fopen(path + 1, "w");
+ if (fp && reg && str_get(map(reg)))
+ fputs(str_get(map(reg)), fp);
+ if (fp)
+ fclose(fp);
+ }
+ if (path[0] == '<') {+ FILE *fp = fopen(path + 1, "r");
+ struct sbuf sb;
+ sbuf_init(&sb);
+ while (fp && fgets(buf, sizeof(buf), fp))
+ sbuf_append(&sb, buf);
+ str_set(map(reg), sbuf_buf(&sb));
+ sbuf_done(&sb);
+ if (fp)
+ fclose(fp);
+ }
+}
+
/* read a macro argument */
static int tr_arg(struct sbuf *sbuf, int brk, int (*next)(void), void (*back)(int))
{@@ -1035,12 +1062,12 @@
{"br", tr_br}, {"c2", tr_c2}, {"cc", tr_cc},- {"ochar", tr_ochar, mkargs_ochar}, {"ce", tr_ce}, {"ch", tr_ch}, {"char", tr_char, mkargs_ds}, {"chop", tr_chop, mkargs_reg1}, {"cl", tr_cl},+ {"co", tr_co, mkargs_ds}, {"cp", tr_cp}, {"cs", tr_cs}, {"da", tr_di},@@ -1099,6 +1126,7 @@
{"nr", tr_nr, mkargs_reg1}, {"ns", tr_ns}, {"nx", tr_nx},+ {"ochar", tr_ochar, mkargs_ochar}, {"os", tr_os}, {"pc", tr_pc}, {"pl", tr_pl},--
⑨