overhaul visual mode (fix #17)