--- tkman-2.2.orig/prefs.tcl
+++ tkman-2.2/prefs.tcl
@@ -4,6 +4,37 @@
 #
 #--------------------------------------------------
 
+proc tk_optionMenus {path varName value args} {
+    upvar #0 $varName v
+
+    if {![info exists v]} {
+	set v $value
+    }
+
+    set m [tk_optionMenu $path $varName $v]
+    tk_optionMenus_add $m $varName [linsert $args 0 $value]
+    return $m
+}
+
+proc tk_optionMenus_add {m varName argl} {
+    $m delete 0 end
+    set next [menu $m.n -tearoff 0]
+    $m add cascade -label "Next" -menu $next
+    set index 0
+    foreach arg $argl {
+	$m insert $index radiobutton -label $arg -variable $varName
+	incr index
+	update idletasks
+	if {[winfo reqheight $m] >= [winfo screenheight $m]} {
+	    incr index -1
+	    $m delete $index
+	    tk_optionMenus_add $next $varName [lrange $argl $index end]
+	    return
+	}
+    }
+    $m delete end
+}
+
 proc manPreferencesMake {{w0 ""}} {
 	global prefedit manx man bozo
 # don't do global man here
@@ -44,7 +75,7 @@
 		pack $f.l -side left -fill x
 		pack $f.style -side right -padx 2
 		if {![string match diff* $var]} {
-			[eval tk_optionMenu $f.family prefedit($var-family) $manx(fontfamilies)] configure -tearoff no
+			[eval tk_optionMenus $f.family prefedit($var-family) $manx(fontfamilies)] configure -tearoff no
 			[eval tk_optionMenu $f.points prefedit($var-points) $manx(sizes)] configure -tearoff no
 			pack $f.points $f.family -after $f.style -side right -padx 2
 
