Isto pode ser falso, mas desfazer parece ser possível com a fonte de 7.16 RPM do Fedora, provavelmente os pacotes Debian fontes , com os recursos Yank e Pull, e alguns ajustes estratégicos.
Por exemplo, o comando =, em sc.c, linha 1140, uma mudança de linha,
case '=':
if (locked_cell(currow, curcol))
break;
/* set mark 0 */
savedrow[27] = currow;
savedcol[27] = curcol;
savedstrow[27] = strow;
savedstcol[27] = stcol;
/* btiffin, yank current cell to buffer 0 */
yankr(lookat(currow, curcol), lookat(currow, curcol));
(void) sprintf(line,"let %s = ", v_name(currow, curcol));
linelim = strlen(line);
insert_mode();
break;
A chamada para yankr
coloca o conteúdo atual da célula no buffer '0', como diria o comando 'x' ou 'yy'. Então, se um erro for cometido, pelo menos entradas simples, 'pp' colocará o conteúdo da célula antiga de volta no lugar.
Isso pode estar errado, mas funcionou o charme aqui. O próximo passo é yankr
com operações de intervalo. De uma olhada rápida, não deve haver mais de 50 chamadas estratégicas para yankr(start, end)
para que os comandos Pull sejam usados quando erros são cometidos. Pelo menos para um nível.
Primeiras quatro experiências tiveram sucesso,
= LET, < LEFTSTRING, > RIGHTSTRING and \ LABEL
e as sensações 'on edge' ao usar sc
estão muito diminuídas. O caso de uso não é apenas para a planilha, mas sim para direcionar a planilha de scripts externos e configurar / obter valores de célula com simples popen
chamadas, no COBOL, a propósito, GnuCOBOL .
Note que isto é apenas hoje. Poderia descobrir a encenação fatal, do que parece ser uma solução simples, amanhã. Hmmm, agora ponderando, lendo isso antes de apertar Post, pode não ser buffer '0', ... mais leitura de códigos-fonte, clicando em Postar mesmo assim.