ID:1803564
 
(See the best response by Lummox JR.)
Code:
            winset(src, "HotKeys", "cells=2x[techniques.len]")
for(var/i=1, i<=techniques.len, ++i)
var/obj/Technique/item = techniques[i]
src << output(item, "HotKeys:[i],1")
src << output((item&&item.suffix), "HotKeys:[i],2")

Or ...

            var/iy = 0
for(var/obj/Technique/i in techniques)
src << output(i,"HotKeys:[++iy],1")
src << output("[i.suffix]","HotKeys:[iy],2")
winset(src, "HotKeys", "cells=[iy]x2")

Problem description:

The problem is that suffix wil appear in cell below instead next to the attack obj. The grid is vertically displaied. Thanks for the replay
I thought output() used [column],[row]. The way you have it, the list should be displayed horizontally with a maximum of two rows. If not, you might have to turn off "is a flexible list of entries" (aka is-list parameter).
Would it be to much if i ask for an example ?
        UpdateHotKeys(/*Phat T*/)
winset(src, "HotKeys", "cells=[techniques.len]x1")
for(var/i=1, i<=techniques.len, ++i)
var/obj/item = techniques[i]
src << output(item, "HotKeys:[i],1")
src << output((item&&item.suffix), "HotKeys:[i],1")


Doing this will only show the suffix >.>
Best response
You're outputting two different things to the same cell. That's why you only see the suffix.

The problem you have here isn't that the grid is vertical; it's actually more horizontal, because you swapped the column and row. The way you had it in your first post, it was always two rows but as many columns as there were items in the list. If you want two columns and a variable number of rows, you need to swap back.
"HotKeys: [i] ,1"

"HotKeys: [column] ,[row]"

you are arranging the items in column
change [i]=row so there will be only two column and row will be no of techniques you have

the more you add column more horizontal you see and more rows much vertical