Colon threw 7 2/3 innings, giving up two runs on six hits, no walks. Colon struck out four and threw 111 pitches total, improving his record to 7-9.
Thomas' homer, a two-run shot, came in the first inning off Indians' starter Jason Davis, scoring Jose Valentin, who walked. Magglio Ordonez followed that up with a homer of his own, putting the Sox in front, 3-0.
The three runs turned out to be enough when it was all said and done, but Carlos Lee assured the lead with a two-run homer in the sixth, scoring Carl Everett, who reached on a fielder's choice groundout to second.
After a leadoff double to start the game by Coco Crisp, Colon settled down and retired the next 17 batters and allowed just two more hits until the eighth, when the Indians, on two infield singles to set it all up, scored two runs.
Colon was pulled after the two runs and two outs for Damaso Marte, who ended the inning and threw a scoreless ninth, recording his sixth save.
The White Sox will now travel to Toronto to play a two-game set against the Blue Jays starting Wednesday at 6:05 p.m. CT. With Toronto's game on Tuesday against the Yankees getting postphoned, Roy Halladay will pitch game one against Mark Buehrle. The game will be televised on Fox Sports Net Chicago Plus.