I hate to see a question count against the site's unanswered list when there are good answers linked, so here's a community wiki containing some of those answers.
From https://stackoverflow.com/questions/26315925/get-usable-window-width-in-vim-script we have Christian Brabandt's answer, a snippet that uses redirection to make a query and math to calculate the result:
redir =>l:a |exe "sil sign place buffer=".bufnr('')|redir end
let l:signlist=split(l:a, '\n')
let width=winwidth(0) - &numberwidth - &foldcolumn - (len(signlist) > 2 ? 2 : 0)
On that same question, Ingo Karkat mentioned that he has a vimscript with that and other functions: