[O] small koma bug

2014-03-10 Thread Alan Schmitt
Hello Rasmus and all,

I think I have found a small bug in ox-koma-letter, but to fix it I
would like your input.

The bug: if from-address is not specified in the file, then it will be
set unconditionally to the empty string, even if it is specified in an
lco file.

The reason of the bug is as follows.

To set up the from address, we call this:

#+begin_src emacs-lisp
   (let ((from-address (org-koma-letter--determine-to-and-from info 'from)))
 (and from-address (format \\setkomavar{fromaddress}{%s}\n from-address)))
#+end_src

This uses this function:
#+begin_src emacs-lisp
(defun org-koma-letter--determine-to-and-from (info key)
  Given INFO determine KEY for the letter.
KEY should be `to' or `from'.

`ox-koma-letter' allows two ways to specify TO and FROM.  If both
are present return the preferred one as determined by
`org-koma-letter-prefer-special-headings'.
  (let ((option (plist-get info (if (eq key 'to) :to-address :from-address)))
(headline (org-koma-letter--get-tagged-contents key)))
(replace-regexp-in-string
 \n \n
 (org-trim
  (or (if (plist-get info :special-headings) (or headline option)
(or option headline))
  ;; Fallback values.
  (if (eq key 'to) \\mbox{} org-koma-letter-from-address))
#+end_src

Note that in the default case we return org-koma-letter-from-address,
which is set to the empty string by default:
#+begin_src emacs-lisp
(defcustom org-koma-letter-from-address 
  Sender's address, as a string.
This option can also be set with one or more FROM_ADDRESS
keywords.
  :group 'org-export-koma-letter
  :type 'string)
#+end_src

As the empty string is considered as true, we apply the format
function in the first code block.

I would suggest to have org-koma-letter-from-address begin nil as
default. My question is: is it an allowed value for a string?

Thanks,

Alan



Re: [O] small koma bug

2014-03-10 Thread Rasmus
Hi Alan,

Alan Schmitt alan.schm...@polytechnique.org writes:

 I think I have found a small bug in ox-koma-letter, but to fix it I
 would like your input.

 The bug: if from-address is not specified in the file, then it will be
 set unconditionally to the empty string, even if it is specified in an
 lco file.

OK.  AFAIK it's OK to leave out the fromaddress and fromname.

 The reason of the bug is as follows.

 To set up the from address, we call this:

 #+begin_src emacs-lisp
(let ((from-address (org-koma-letter--determine-to-and-from info 'from)))
  (and from-address (format \\setkomavar{fromaddress}{%s}\n 
 from-address)))
 #+end_src

How about:

   (let ((from-address (org-koma-letter--determine-to-and-from info 'from)))
 (and (org-string-nw-p from-address) (format 
\\setkomavar{fromaddress}{%s}\n from-address)))

Or more explicitly

   (let ((from-address (org-koma-letter--determine-to-and-from info 'from)))
 (when (org-string-nw-p from-address) (format 
\\setkomavar{fromaddress}{%s}\n from-address)))

 This uses this function:
 #+begin_src emacs-lisp
 (defun org-koma-letter--determine-to-and-from (info key)
   Given INFO determine KEY for the letter.
 KEY should be `to' or `from'.

 `ox-koma-letter' allows two ways to specify TO and FROM.  If both
 are present return the preferred one as determined by
 `org-koma-letter-prefer-special-headings'.
   (let ((option (plist-get info (if (eq key 'to) :to-address :from-address)))
   (headline (org-koma-letter--get-tagged-contents key)))
 (replace-regexp-in-string
  \n \n
  (org-trim
   (or (if (plist-get info :special-headings) (or headline option)
   (or option headline))
 ;; Fallback values.
 (if (eq key 'to) \\mbox{} org-koma-letter-from-address))
 #+end_src

I guess org-koma-letter-from-address can be left empty, but for
instance 'to must have a value different from the empty string to not
create a LaTeX error.  As I said above, quick testing suggest this is
not necessary for fromaddress.

 As the empty string is considered as true, we apply the format
 function in the first code block.

See below.

 I would suggest to have org-koma-letter-from-address begin nil as
 default. My question is: is it an allowed value for a string?

You can use org-string-nw-p to test is S is only white-space.  When
Nicolas cleaned the file he made all (or most?) defaults into strings,
so let's stick with that.

Let me know if your happy with this.

—Rasmus

-- 
Summon the Mothership!



Re: [O] small koma bug

2014-03-10 Thread Alan Schmitt
Rasmus ras...@gmx.us writes:

 How about:

(let ((from-address (org-koma-letter--determine-to-and-from info 'from)))
  (and (org-string-nw-p from-address) (format 
 \\setkomavar{fromaddress}{%s}\n from-address)))

 Or more explicitly

(let ((from-address (org-koma-letter--determine-to-and-from info 'from)))
  (when (org-string-nw-p from-address) (format 
 \\setkomavar{fromaddress}{%s}\n from-address)))

It sounds good. I'll commit this change.

Thanks,

Alan