In eshell:
~ $ history
1 history
~ $ eshell/clear
[...]
~ $
[...]
~ $ history
1 history
2 eshell/clear
3
[...]
4 history
An easy (dirty?) way to fix it could be override eshell-input-filter (from em-hist.el):
(defcustom eshell-input-filter
(function
(lambda (str)
(not (string-match "\\`\\s-*\\'" str))))
"Predicate for filtering additions to input history.
Takes one argument, the input. If non-nil, the input may be saved on
the input history list. Default is to save anything that isn't all
whitespace."
:type 'function
:group 'eshell-hist)
to:
(defcustom eshell-input-filter
(function
(lambda (str)
(not (string-match "\\`\\s-*\\'" (string-trim-left str)))))
"Predicate for filtering additions to input history.
Takes one argument, the input. If non-nil, the input may be saved on
the input history list. Default is to save anything that isn't all
whitespace."
:type 'function
:group 'eshell-hist)