summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/clipboard.c29
-rw-r--r--src/clipboard.h1
-rw-r--r--src/cmds_command.c13
-rwxr-xr-xsrc/gram.y2
4 files changed, 45 insertions, 0 deletions
diff --git a/src/clipboard.c b/src/clipboard.c
index bf88bca..5861fba 100644
--- a/src/clipboard.c
+++ b/src/clipboard.c
@@ -58,6 +58,35 @@
#include "conf.h"
#include "utils/string.h"
+int convert_string_to_number( int r0, int c0, int rn, int cn) {
+ int row, col;
+ register struct ent ** pp;
+ wchar_t out[FBUFLEN] = L"";
+ for (row = r0; row <= rn; row++) {
+ // ignore hidden rows
+ //if (row_hidden[row]) continue;
+
+ for (pp = ATBL(tbl, row, col = c0); col <= cn; col++, pp++) {
+ // ignore hidden cols
+ //if (col_hidden[col]) continue;
+
+ if (*pp) {
+
+ // If a string exists
+ if ((*pp)->label) {
+ char * num = str_replace((*pp)->label," ","");
+ (*pp)->label ='\0';
+ swprintf(out, BUFFERSIZE, L"let %s%d=%s", coltoa(col), row, num);
+ send_to_interp(out);
+ }
+ }
+ }
+}
+
+ return 0;
+
+}
+
/**
* \brief Pastes from clipboard
*
diff --git a/src/clipboard.h b/src/clipboard.h
index 3a71c87..bc5e2ae 100644
--- a/src/clipboard.h
+++ b/src/clipboard.h
@@ -46,3 +46,4 @@
int copy_to_clipboard(int r0, int c0, int rn, int cn);
int save_plain(FILE * fout, int r0, int c0, int rn, int cn);
int paste_from_clipboard();
+int convert_string_to_number( int r0, int c0, int rn, int cn);
diff --git a/src/cmds_command.c b/src/cmds_command.c
index 8e96798..385439f 100644
--- a/src/cmds_command.c
+++ b/src/cmds_command.c
@@ -156,6 +156,7 @@ L"w",
L"wq",
L"x",
L"valueize",
+L"strtonum",
(wchar_t *) 0
};
@@ -709,6 +710,18 @@ void do_commandmode(struct block * sb) {
swprintf(interp_line + wcslen(interp_line), BUFFERSIZE, L"%s%d", coltoa(cf), rf);
send_to_interp(interp_line);
+ } else if ( ! wcsncmp(inputline, L"strtonum", 8) ) {
+ int r = currow, c = curcol, rf = currow, cf = curcol;
+ if (p != -1) {
+ c = sr->tlcol;
+ r = sr->tlrow;
+ rf = sr->brrow;
+ cf = sr->brcol;
+ }
+ swprintf(interp_line, BUFFERSIZE, L"strtonum %s%d:", coltoa(c), r);
+ swprintf(interp_line + wcslen(interp_line), BUFFERSIZE, L"%s%d", coltoa(cf), rf);
+ send_to_interp(interp_line);
+
} else if ( ! wcsncmp(inputline, L"cpaste", 6) ) {
swprintf(interp_line, BUFFERSIZE, L"cpaste");
send_to_interp(interp_line);
diff --git a/src/gram.y b/src/gram.y
index e6b0a66..65f3b87 100755
--- a/src/gram.y
+++ b/src/gram.y
@@ -120,6 +120,7 @@ token S_YANKCOL
%token S_SEVAL
%token S_ERROR
%token S_FILL
+%token S_STRTONUM
/*
token S_ADDNOTE
token S_DELNOTE
@@ -582,6 +583,7 @@ command:
// | S_GOTO WORD { /* don't repeat last goto on "unintelligible word" */ ; }
| S_CCOPY range { copy_to_clipboard($2.left.vp->row, $2.left.vp->col, $2.right.vp->row, $2.right.vp->col); }
+| S_STRTONUM range { convert_string_to_number($2.left.vp->row, $2.left.vp->col, $2.right.vp->row, $2.right.vp->col); }
| S_CPASTE { paste_from_clipboard(); }
| S_LOCK var_or_range { lock_cells($2.left.vp, $2.right.vp); }
| S_UNLOCK var_or_range { unlock_cells($2.left.vp, $2.right.vp); }