diff options
-rw-r--r-- | src/clipboard.c | 29 | ||||
-rw-r--r-- | src/clipboard.h | 1 | ||||
-rw-r--r-- | src/cmds_command.c | 13 | ||||
-rwxr-xr-x | src/gram.y | 2 |
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); @@ -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); } |