OVH Cloud OVH Cloud

let

6 réponses
Avatar
Flatman
j'essaie de faire fonctionner ce code , sans succés ...
il semblerait qu'une erreur soit due à la commande 'let' ...

la commande shell-command-on-region fonctionne correctement sur mon
système.

Quelqu'un a une idée ?


(defun my-print-a2ps ()
(interactive)
(let ( (startpoint (point-min)) (endpoint (point-max)) )
(if (and transient-mark-mode mark-active)
(lambda ()
(setq startpoint (region-beginning))
(setq endpoint (region-end))))
(shell-command-on-region (startpoint) (endpoint) "a2ps --output=-
--columns=1 --rows=1 --portrait --chars-per-line=100 --major=rows
--margin=40 --encoding=iso15|ps2pdf14 -|lpr" nil nil)))

--
Erik

* Life is wonderful with Emacs and Perl *

6 réponses

Avatar
Matthieu Moy
Flatman writes:

(defun my-print-a2ps ()
(interactive)
(let ( (startpoint (point-min)) (endpoint (point-max)) )
(if (and transient-mark-mode mark-active)
(lambda ()


(progn

(sinon, tu définie une fonction sans nom, mais tu ne l'execute pas)

(setq startpoint (region-beginning))
(setq endpoint (region-end))))
(shell-command-on-region (startpoint) (endpoint) "a2ps --output=-


(shell-command-on-region startpoint endpoint "a2ps --output=-

Sinon, tu appelles les fonctions `startpoint' et `endpoint' au lieu
d'utiliser les variables.

--columns=1 --rows=1 --portrait --chars-per-line0 --major=rows
--margin@ --encoding=iso15|ps2pdf14 -|lpr" nil nil)))



Une autre version, fonctionnelle pure, serait

(let* ((use-region (and transient-mark-mode mark-active))
(startpoint (if use-region (region-beginning) (point-min)))
(endpoint (if use-region (region-end) (point-max))))
(...))

--
Matthieu
Avatar
Ralf Angeli
* Matthieu Moy (2005-10-10) writes:

Flatman writes:

(defun my-print-a2ps ()
(interactive)
(let ( (startpoint (point-min)) (endpoint (point-max)) )
(if (and transient-mark-mode mark-active)
(lambda ()


(progn



Je trouve

(when (and transient-mark-mode mark-active)
...)

meilleur. (c:

--
Ralf
Avatar
Flatman
* Matthieu Moy wrote:
|
| Flatman writes:
|
| > (defun my-print-a2ps ()
| > (interactive)
| > (let ( (startpoint (point-min)) (endpoint (point-max)) )
| > (if (and transient-mark-mode mark-active)
| > (lambda ()
| (progn
|
| (sinon, tu définie une fonction sans nom, mais tu ne l'execute pas)
|
| > (setq startpoint (region-beginning))
| > (setq endpoint (region-end))))
| > (shell-command-on-region (startpoint) (endpoint) "a2ps --output=-
| (shell-command-on-region startpoint endpoint "a2ps --output=-
|
| Sinon, tu appelles les fonctions `startpoint' et `endpoint' au lieu
| d'utiliser les variables.
|
| > --columns=1 --rows=1 --portrait --chars-per-line0 --major=rows
| > --margin@ --encoding=iso15|ps2pdf14 -|lpr" nil nil)))
|
| Une autre version, fonctionnelle pure, serait
|
| (let* ((use-region (and transient-mark-mode mark-active))
| (startpoint (if use-region (region-beginning) (point-min)))
| (endpoint (if use-region (region-end) (point-max))))
| (...))

Merci,

je vais essayer cela ...

--
Erik

* Life is wonderful with Emacs and Perl *
Avatar
drkm
Matthieu Moy writes:

Flatman writes:

(defun my-print-a2ps ()
(interactive)
(let ( (startpoint (point-min)) (endpoint (point-max)) )
(if (and transient-mark-mode mark-active)
(lambda ()


(progn

(sinon, tu définie une fonction sans nom, mais tu ne l'execute pas)

(setq startpoint (region-beginning))
(setq endpoint (region-end))))





Ou en l'occurrence :

(if ...
(setq ... ...
... ...))

Ou comme l'a signalé Ralf, utiliser 'when'.

--drkm
Avatar
drkm
Matthieu Moy writes:

Une autre version, fonctionnelle pure, serait

(let* ((use-region (and transient-mark-mode mark-active))
(startpoint (if use-region (region-beginning) (point-min)))
(endpoint (if use-region (region-end) (point-max))))
(...))



« Fonctionnelle pure », en utilisant 'let*' ?-)

--drkm
Avatar
Matthieu Moy
drkm writes:

Matthieu Moy writes:

Une autre version, fonctionnelle pure, serait



(let* ((use-region (and transient-mark-mode mark-active))
(startpoint (if use-region (region-beginning) (point-min)))
(endpoint (if use-region (region-end) (point-max))))
(...))



« Fonctionnelle pure », en utilisant 'let*' ?-)



Ça dépends comment tu vois les choses. Si tu vois let* comme une suite
d'affectations, c'est plus du tout du fonctionnel pure. Mais tu peux
aussi le voir comme une suite de let imbriqués:

(let ((use-region (and transient-mark-mode mark-active)))
(let ((startpoint (if use-region (region-beginning) (point-min)))
(endpoint (if use-region (region-end) (point-max))))
...))

A ce moment là, le let* n'est qu'un sucre syntaxique pour une version
fonctionnelle pure. Après, on pourrait discuter longtemps sur la
définition exacte de fonctionnel pur et comment l'appliquer ici. Je
suppose que si on est un peu puriste, on doit pouvoir me donner tort.

--
Matthieu