Use variables ses-row and ses-col for dynamic binding.

* doc/misc/ses.texi:
* doc/translations/fr/misc/ses-fr.texi (Local printer functions)
(Customizing @acronym{SES}, Nonrelocatable references): Document
ses-row & ses-col dynamic binding.

* lisp/ses.el (ses-after-entry-functions): Document
ses-row & ses-col dynamic binding.
(ses-calculate-cell, ses-read-cell, ses-read-symbol): dlet
`ses-row' and `ses-col' to current cell coordinates.
(ses-read-cell, ses-read-symbol): Run ses-after-entry-functions
with `run-hook-with-args'.
This commit is contained in:
Vincent Belaïche 2026-03-28 14:23:53 +01:00
parent 77dbc2e362
commit d81505a3eb
3 changed files with 21 additions and 21 deletions

View file

@ -570,7 +570,7 @@ If you replace command @code{ses-define-local-printer} by function
the definition will occur only if a local printer with the same name
in not already defined.
Variables @code{ses--row} and @code{ses--col} are dynamically set to the
Variables @code{ses-row} and @code{ses-col} are dynamically set to the
coordinates of the current cell, so that you may have the output depend
not only of the cell's content, but as well of its position.
@ -770,7 +770,7 @@ which moves point right to the next cell@c TODO propagate extra
@c version. . You can
customize hook @code{ses-after-entry-functions} to move left or up or
down. For diagonal movement, select two functions from the
list. @code{ses--row} and @code{ses--col} are dynamically bound to
list. @code{ses-row} and @code{ses-col} are dynamically bound to
current cell coordinates, so by having your own movement function in
this hook you may make cursor movement depending on the cell
coordinates. For instance define:
@ -778,9 +778,9 @@ coordinates. For instance define:
@example
(defun my-ses-after-entry-hook (arg)
(cond
((= 0 ses--col)
((= 0 ses-col)
(forward-char arg))
((= 1 ses--col)
((= 1 ses-col)
(backward-char arg)
(next-line arg))
(t
@ -1295,10 +1295,10 @@ recorded as a dependency of this cell, so this cell will not be
updated automatically when @samp{B3} is changed, this is why using
@code{ses-rename-cell} is most of the time preferable.
The variables @code{ses--row} and @code{ses--col} are dynamically bound
The variables @code{ses-row} and @code{ses-col} are dynamically bound
while a cell formula is being evaluated. You can use
@lisp
(ses-cell-value row 0)
(ses-cell-value ses-row 0)
@end lisp
to get the value from the leftmost column in the current row. This
kind of dependency is also not recorded.

View file

@ -640,7 +640,7 @@ fonction @code{ses-define-if-new-local-printer}
la définition ne se produira que si aucune fonction dimpression de
même nom nest déjà définie.
Les variables @code{ses--row} et @code{ses--col} sont dynamiquement
Les variables @code{ses-row} et @code{ses-col} sont dynamiquement
réglées aux coordonnées de la cellule courante pendant l'évaluation de
la fonction d'impression, de sorte que vous pouvez faire dépendre la
sortie non seulement du contenu de la cellule mais aussi de sa position.
@ -860,7 +860,7 @@ ou à la première cellule à gauche de la ligne suivante si la cellule
courante est la plus à droite de la feuille. Vous pouvez personnaliser
@code{ses-after-entry-functions} pour que le déplacement soit vers la
gauche ou le haut ou le bas. Pour un mouvement diagonal, selectionnez
deux fonctions de la liste. @code{ses--row} et @code{ses--col} sont
deux fonctions de la liste. @code{ses-row} et @code{ses-col} sont
dynamiquement réglées aux coordonnées de la cellule coutante, de sorte
qu'en ayant votre propre fonction de mouvement dans ce crochet vous
pouvez rendre le mouvement du curseur dépendant des coordonnées de la
@ -869,9 +869,9 @@ cellule. Par exemple définissez :
@example
(defun mon-crochet-post-saisie-ses (arg)
(cond
((= 0 ses--col)
((= 0 ses-col)
(forward-char arg))
((= 1 ses--col)
((= 1 ses-col)
(backward-char arg)
(next-line arg))
(t
@ -1462,11 +1462,11 @@ cellule ne sera pas mise à jour automatiquement quand @samp{B3} est
modifiée, cest pourquoi lusage de @code{ses-rename-cell} est la
plupart du temps préférable.
Les variables @code{ses--row} et @code{ses--col} sont liées
dynamiquement pendant lévaluation dune formule de cellule. Vous pouvez
utiliser
Les variables @code{ses-row} et @code{ses-col} sont réglées
dynamiquement pendant lévaluation dune formule de cellule aux
coordonnées de celle-ci. Vous pouvez utiliser
@lisp
(ses-cell-value row 0)
(ses-cell-value ses-row 0)
@end lisp
pour obtenir la valeur de la colonne la plus à gauche de la ligne
courante. Ce type de dépendance nest pas non plus enregistré.

View file

@ -102,7 +102,7 @@
"Things to do after entering a value into a cell.
An abnormal hook that usually runs a cursor-movement function.
Each function is called with ARG=1.
Variables `ses--row' and `ses--col' are dynamically bound to cell
Variables `ses-row' and `ses-col' are dynamically bound to cell
coordinates during hook call."
:type 'hook
:options '(forward-char backward-char next-line previous-line))
@ -1007,8 +1007,8 @@ the old and FORCE is nil."
(setq formula (ses-safe-formula (cadr formula)))
(ses-set-cell row col 'formula formula))
(condition-case sig
(setq newval (let ((ses--row row)
(ses--col col))
(setq newval (dlet ((ses-row row)
(ses-col col))
(eval formula t)))
(error
;; Variable `sig' can't be nil.
@ -2588,8 +2588,8 @@ Return nil if cell formula was unsafe and user declined confirmation."
curval)))))))
(when (ses-edit-cell row col newval)
(ses-command-hook) ; Update cell widths before movement.
(let ((ses--row row)
(ses--col col))
(dlet ((ses-row row)
(ses-col col))
(run-hook-with-args 'ses-after-entry-functions 1))))
(defun ses-read-symbol (row col symb)
@ -2609,8 +2609,8 @@ spreadsheet is available for completions."
(list 'quote (intern newval))))))
(when (ses-edit-cell row col symb)
(ses-command-hook) ; Update cell widths before movement.
(let ((ses--row row)
(ses--col col))
(dlet ((ses-row row)
(ses-col col))
(run-hook-with-args 'ses-after-entry-functions 1))))
(defun ses-clear-cell-forward (count)