As a 2-minute looking over the definition of buff-menu.el and over the definition of `19.5 Operating on Several Buffers`, I think I need to check whether the buffer was modified, and in case that it was, I insert '*' on the 3rd column, otherwise insert space.
I remember this problem repeating for many years, but today it disturbed me again , and this is why I mailed.
In fact, the patch of the function "Buffer-menu-unmark" will look something like:
if "the 3rd column is S (from Save)" then
(if (buffer-modified-p current-buffer-from-the-point) has-modified-flag-on then
insert "*" else
insert " ".
This is the complete logic of the patch . Correct ?