@@ -134,10 +134,12 @@ local function getMapRaces(opts)
134134 local map_races = {}
135135 for _ , unit in pairs (df .global .world .units .active ) do
136136 if not checkUnit (opts , unit ) then goto continue end
137- local unit_race_name = dfhack .units .isUndead (unit ) and " UNDEAD" or df .creature_raw .find (unit .race ).creature_id
137+ local craw = df .creature_raw .find (unit .race )
138+ local unit_race_name = dfhack .units .isUndead (unit ) and ' UNDEAD' or craw .creature_id
138139 local race = ensure_key (map_races , unit_race_name )
139140 race .id = unit .race
140141 race .name = unit_race_name
142+ race .display_name = unit_race_name == ' UNDEAD' and ' ' or craw .name [0 ]
141143 race .count = (race .count or 0 ) + 1
142144 :: continue::
143145 end
@@ -187,14 +189,20 @@ local map_races = getMapRaces(options)
187189
188190if not positionals [1 ] or positionals [1 ] == ' list' then
189191 local sorted_races = {}
190- for race , value in pairs (map_races ) do
191- table.insert (sorted_races , { name = race , count = value .count })
192+ local max_width = 10
193+ for _ ,v in pairs (map_races ) do
194+ max_width = math.max (max_width , # v .name )
195+ table.insert (sorted_races , v )
192196 end
193197 table.sort (sorted_races , function (a , b )
194198 return a .count > b .count
195199 end )
196- for _ , race in ipairs (sorted_races ) do
197- print (([[ %4s %s]] ):format (race .count , race .name ))
200+ for _ ,v in ipairs (sorted_races ) do
201+ local name_str = v .name
202+ if name_str ~= ' UNDEAD' and v .display_name ~= string.lower (name_str ):gsub (' _' , ' ' ) then
203+ name_str = (' %-' .. tostring (max_width ).. ' s (%s)' ):format (name_str , v .display_name )
204+ end
205+ print ((' %4s %s' ):format (v .count , name_str ))
198206 end
199207 return
200208end
0 commit comments