Skip to content

Instantly share code, notes, and snippets.

@mgedmin
Last active February 4, 2016 09:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mgedmin/de3663d9fd5d32b2c779 to your computer and use it in GitHub Desktop.
Save mgedmin/de3663d9fd5d32b2c779 to your computer and use it in GitHub Desktop.

Visualize the way gvim draws text

The script 'vis.py' loads a log of drawing calls from a file called draw.log (produced by running 'gvim -f > draw.log' after applying vim.patch and rebuilding). It lets you single-step through them using <Left>/<Right> keys. Use 'q' to quit.

The last draw call is highlighted in blue.

This gist contains a snapshot of draw calls produced by running gvim, typing :help, then pressing <PageDown> to scroll one page and finally quitting with :qa.

(I'm debugging a redraw problem with an experimental GTK+ 3 patch.)

Here's a screencast of the script in motion: https://asciinema.org/a/35507

Drawing a string at (0,0): ' '
clearing (0,0): 149 cells
Drawing a string at (1,0): ' '
clearing (1,0): 149 cells
Drawing a string at (2,0): ' '
clearing (2,0): 149 cells
Drawing a string at (3,0): ' '
clearing (3,0): 149 cells
Drawing a string at (4,0): ' '
clearing (4,0): 149 cells
Drawing a string at (5,0): ' '
clearing (5,0): 149 cells
Drawing a string at (6,0): ' '
clearing (6,0): 149 cells
Drawing a string at (7,0): ' '
clearing (7,0): 149 cells
Drawing a string at (8,0): ' '
clearing (8,0): 149 cells
Drawing a string at (9,0): ' '
clearing (9,0): 149 cells
Drawing a string at (10,0): ' '
clearing (10,0): 149 cells
Drawing a string at (11,0): ' '
clearing (11,0): 149 cells
Drawing a string at (12,0): ' '
clearing (12,0): 149 cells
Drawing a string at (13,0): ' '
clearing (13,0): 149 cells
Drawing a string at (14,0): ' '
clearing (14,0): 149 cells
Drawing a string at (15,0): ' '
clearing (15,0): 149 cells
Drawing a string at (16,0): ' '
clearing (16,0): 149 cells
Drawing a string at (17,0): ' '
clearing (17,0): 149 cells
Drawing a string at (18,0): ' '
clearing (18,0): 149 cells
Drawing a string at (19,0): ' '
clearing (19,0): 149 cells
Drawing a string at (20,0): ' '
clearing (20,0): 149 cells
Drawing a string at (21,0): ' '
clearing (21,0): 149 cells
Drawing a string at (22,0): ' '
clearing (22,0): 149 cells
Drawing a string at (23,0): ' '
clearing (23,0): 149 cells
Drawing a string at (24,0): ' '
clearing (24,0): 149 cells
Drawing a string at (25,0): ' '
clearing (25,0): 149 cells
Drawing a string at (26,0): ' '
clearing (26,0): 149 cells
Drawing a string at (27,0): ' '
clearing (27,0): 149 cells
Drawing a string at (28,0): ' '
clearing (28,0): 149 cells
Drawing a string at (29,0): ' '
clearing (29,0): 149 cells
Drawing a string at (30,0): ' '
clearing (30,0): 149 cells
Drawing a string at (31,0): ' '
clearing (31,0): 149 cells
Drawing a string at (32,0): ' '
clearing (32,0): 149 cells
Drawing a string at (33,0): ' '
clearing (33,0): 149 cells
Drawing a string at (34,0): ' '
clearing (34,0): 149 cells
Drawing a string at (35,0): ' '
clearing (35,0): 149 cells
Drawing a string at (0,0): ' '
clearing (0,0): 1 cells
Drawing a string at (0,0): ' '
clearing (0,0): 1 cells
Drawing a string at (0,80): ' '
clearing (0,80): 69 cells
Drawing a string at (1,0): '~ '
clearing (1,0): 149 cells
Drawing a string at (2,0): '~ '
clearing (2,0): 149 cells
Drawing a string at (3,0): '~ '
clearing (3,0): 149 cells
Drawing a string at (4,0): '~ '
clearing (4,0): 149 cells
Drawing a string at (5,0): '~ '
clearing (5,0): 149 cells
Drawing a string at (6,0): '~ '
clearing (6,0): 149 cells
Drawing a string at (7,0): '~ '
clearing (7,0): 149 cells
Drawing a string at (8,0): '~ '
clearing (8,0): 149 cells
Drawing a string at (9,0): '~ '
clearing (9,0): 149 cells
Drawing a string at (10,0): '~ '
clearing (10,0): 149 cells
Drawing a string at (11,0): '~ '
clearing (11,0): 149 cells
Drawing a string at (12,0): '~ '
clearing (12,0): 149 cells
Drawing a string at (13,0): '~ '
clearing (13,0): 83 cells
Drawing a string at (13,83): ' '
clearing (13,83): 66 cells
Drawing a string at (14,0): '~ '
clearing (14,0): 149 cells
Drawing a string at (15,0): '~ '
clearing (15,0): 149 cells
Drawing a string at (16,0): '~ '
clearing (16,0): 149 cells
Drawing a string at (17,0): '~ '
clearing (17,0): 149 cells
Drawing a string at (18,0): '~ '
clearing (18,0): 149 cells
Drawing a string at (19,0): '~ '
clearing (19,0): 149 cells
Drawing a string at (20,0): '~ '
clearing (20,0): 149 cells
Drawing a string at (21,0): '~ '
clearing (21,0): 149 cells
Drawing a string at (22,0): '~ '
clearing (22,0): 149 cells
Drawing a string at (23,0): '~ '
clearing (23,0): 149 cells
Drawing a string at (24,0): '~ '
clearing (24,0): 149 cells
Drawing a string at (25,0): '~ '
clearing (25,0): 149 cells
Drawing a string at (26,0): '~ '
clearing (26,0): 102 cells
Drawing a string at (26,102): ' '
clearing (26,102): 47 cells
Drawing a string at (27,0): '~ '
clearing (27,0): 149 cells
Drawing a string at (28,0): '~ '
clearing (28,0): 149 cells
Drawing a string at (29,0): '~ '
clearing (29,0): 149 cells
Drawing a string at (30,0): '~ '
clearing (30,0): 149 cells
Drawing a string at (31,0): '~ '
clearing (31,0): 149 cells
Drawing a string at (32,0): '~ '
clearing (32,0): 149 cells
Drawing a string at (33,0): '1:[No Name] 0:0-1 1 All'
clearing (33,0): 149 cells
Drawing a string at (34,0): ' '
clearing (34,0): 1 cells
Drawing a string at (34,0): ' '
clearing (34,0): 1 cells
Drawing a string at (0,0): ' '
clearing (0,0): 1 cells
Drawing a string at (0,0): ' '
clearing (0,0): 80 cells
Drawing a string at (0,80): ' '
clearing (0,80): 69 cells
Drawing a string at (1,0): '~ '
clearing (1,0): 149 cells
Drawing a string at (2,0): '~ '
clearing (2,0): 149 cells
Drawing a string at (3,0): '~ '
clearing (3,0): 149 cells
Drawing a string at (4,0): '~ '
clearing (4,0): 149 cells
Drawing a string at (5,0): '~ '
clearing (5,0): 149 cells
Drawing a string at (6,0): '~ '
clearing (6,0): 149 cells
Drawing a string at (7,0): '~ '
clearing (7,0): 149 cells
Drawing a string at (8,0): '~ '
clearing (8,0): 149 cells
Drawing a string at (9,0): '~ '
clearing (9,0): 149 cells
Drawing a string at (10,0): '~ '
clearing (10,0): 149 cells
Drawing a string at (11,0): '~ '
clearing (11,0): 149 cells
Drawing a string at (12,0): '~ '
clearing (12,0): 149 cells
Drawing a string at (13,0): '~ '
clearing (13,0): 149 cells
Drawing a string at (14,0): '~ '
clearing (14,0): 149 cells
Drawing a string at (15,0): '~ '
clearing (15,0): 149 cells
Drawing a string at (16,0): '~ '
clearing (16,0): 149 cells
Drawing a string at (17,0): '~ '
clearing (17,0): 149 cells
Drawing a string at (18,0): '~ '
clearing (18,0): 149 cells
Drawing a string at (19,0): '~ '
clearing (19,0): 149 cells
Drawing a string at (20,0): '~ '
clearing (20,0): 149 cells
Drawing a string at (21,0): '~ '
clearing (21,0): 149 cells
Drawing a string at (22,0): '~ '
clearing (22,0): 149 cells
Drawing a string at (23,0): '~ '
clearing (23,0): 149 cells
Drawing a string at (24,0): '~ '
clearing (24,0): 149 cells
Drawing a string at (25,0): '~ '
clearing (25,0): 149 cells
Drawing a string at (26,0): '~ '
clearing (26,0): 149 cells
Drawing a string at (27,0): '~ '
clearing (27,0): 149 cells
Drawing a string at (28,0): '~ '
clearing (28,0): 149 cells
Drawing a string at (29,0): '~ '
clearing (29,0): 149 cells
Drawing a string at (30,0): '~ '
clearing (30,0): 149 cells
Drawing a string at (31,0): '~ '
clearing (31,0): 149 cells
Drawing a string at (32,0): '~ '
clearing (32,0): 149 cells
Drawing a string at (33,0): '1:[No Name] 0:0-1 1 All'
clearing (33,0): 149 cells
Drawing a string at (34,0): ' '
clearing (34,0): 149 cells
Drawing a string at (35,0): ' '
clearing (35,0): 149 cells
Drawing a string at (0,0): ' '
clearing (0,0): 1 cells
Drawing a string at (35,138): '~@k'
clearing (35,138): 3 cells
Drawing a string at (34,0): '"help.txt"'
clearing (34,0): 10 cells
Drawing a string at (34,11): '[readonly]'
clearing (34,11): 10 cells
Drawing a string at (34,22): '225L,'
clearing (34,22): 5 cells
Drawing a string at (34,28): '8382C'
clearing (34,28): 5 cells
Drawing a string at (0,0): ' '
clearing (0,0): 1 cells
Drawing a string at (34,33): ' '
clearing (34,33): 1 cells
Drawing a string at (34,33): ' '
clearing (34,33): 1 cells
Drawing a string at (0,0): 'help.txt'
clearing (0,0): 8 cells
Drawing a string at (0,16): 'For'
clearing (0,16): 3 cells
Drawing a string at (0,20): 'Vim version 7.4.'
clearing (0,20): 16 cells
Drawing a string at (0,38): 'Last'
clearing (0,38): 4 cells
Drawing a string at (0,43): 'change:'
clearing (0,43): 7 cells
Drawing a string at (0,51): '2016'
clearing (0,51): 4 cells
Drawing a string at (0,56): 'Jan'
clearing (0,56): 3 cells
Drawing a string at (0,60): '10'
clearing (0,60): 2 cells
Drawing a string at (1,0): ' '
clearing (1,0): 80 cells
Drawing a string at (1,80): ' '
clearing (1,80): 69 cells
Drawing a string at (2,0): ' VIM - main help file '
clearing (2,0): 80 cells
Drawing a string at (2,80): ' '
clearing (2,80): 69 cells
Drawing a string at (3,0): ' k '
clearing (3,0): 80 cells
Drawing a string at (3,80): ' '
clearing (3,80): 69 cells
Drawing a string at (4,0): ' Move around: Use the cursor keys, or "h" to go left, h l '
clearing (4,0): 80 cells
Drawing a string at (4,80): ' '
clearing (4,80): 69 cells
Drawing a string at (5,0): ' "j" to go down, "k" to go up, "l" to go right. j '
clearing (5,0): 80 cells
Drawing a string at (5,80): ' '
clearing (5,80): 69 cells
Drawing a string at (6,0): 'Close this window: Use ":q'
clearing (6,0): 27 cells
Drawing a string at (6,27): '<Enter>'
clearing (6,27): 7 cells
Drawing a string at (6,34): '". '
clearing (6,34): 46 cells
Drawing a string at (6,80): ' '
clearing (6,80): 69 cells
Drawing a string at (7,0): ' Get out of Vim: Use ":qa!'
clearing (7,0): 29 cells
Drawing a string at (7,29): '<Enter>'
clearing (7,29): 7 cells
Drawing a string at (7,36): '" (careful, all changes are lost!). '
clearing (7,36): 44 cells
Drawing a string at (7,80): ' '
clearing (7,80): 69 cells
Drawing a string at (8,0): ' '
clearing (8,0): 80 cells
Drawing a string at (8,80): ' '
clearing (8,80): 69 cells
Drawing a string at (9,0): 'Jump to a subject: Position the cursor on a tag (e.g. '
clearing (9,0): 55 cells
Drawing a string at (9,55): 'bars'
clearing (9,55): 4 cells
Drawing a string at (9,59): ') and hit '
clearing (9,59): 10 cells
Drawing a string at (9,69): 'CTRL-]'
clearing (9,69): 6 cells
Drawing a string at (9,75): '. '
clearing (9,75): 5 cells
Drawing a string at (9,80): ' '
clearing (9,80): 69 cells
Drawing a string at (10,0): ' With the mouse: ":set mouse=a" to enable the mouse (in xterm or GUI). '
clearing (10,0): 80 cells
Drawing a string at (10,80): ' '
clearing (10,80): 69 cells
Drawing a string at (11,0): ' Double-click the left mouse button on a tag, e.g. '
clearing (11,0): 70 cells
Drawing a string at (11,70): 'bars'
clearing (11,70): 4 cells
Drawing a string at (11,74): '. '
clearing (11,74): 6 cells
Drawing a string at (11,80): ' '
clearing (11,80): 69 cells
Drawing a string at (12,0): ' Jump back: Type '
clearing (12,0): 25 cells
Drawing a string at (12,25): 'CTRL-T'
clearing (12,25): 6 cells
Drawing a string at (12,31): ' or '
clearing (12,31): 4 cells
Drawing a string at (12,35): 'CTRL-O'
clearing (12,35): 6 cells
Drawing a string at (12,41): '. Repeat to go further back. '
clearing (12,41): 39 cells
Drawing a string at (12,80): ' '
clearing (12,80): 69 cells
Drawing a string at (13,0): ' '
clearing (13,0): 80 cells
Drawing a string at (13,80): ' '
clearing (13,80): 69 cells
Drawing a string at (14,0): 'Get specific help: It is possible to go directly to whatever you want help '
clearing (14,0): 80 cells
Drawing a string at (14,80): ' '
clearing (14,80): 69 cells
Drawing a string at (15,0): ' on, by giving an argument to the '
clearing (15,0): 53 cells
Drawing a string at (15,53): ':help'
clearing (15,53): 5 cells
Drawing a string at (15,58): ' command. '
clearing (15,58): 22 cells
Drawing a string at (15,80): ' '
clearing (15,80): 69 cells
Drawing a string at (16,0): ' Prepend something to specify the context: '
clearing (16,0): 63 cells
Drawing a string at (16,63): 'help-context'
clearing (16,63): 12 cells
Drawing a string at (16,75): ' '
clearing (16,75): 5 cells
Drawing a string at (16,80): ' '
clearing (16,80): 69 cells
Drawing a string at (17,0): ' '
clearing (17,0): 80 cells
Drawing a string at (17,80): ' '
clearing (17,80): 69 cells
Drawing a string at (18,0): ' '
clearing (18,0): 26 cells
Drawing a string at (18,26): 'WHAT PREPEND EXAMPLE'
clearing (18,26): 40 cells
Drawing a string at (18,66): ' '
clearing (18,66): 14 cells
Drawing a string at (18,80): ' '
clearing (18,80): 69 cells
Drawing a string at (19,0): ' Normal mode command :help x '
clearing (19,0): 80 cells
Drawing a string at (19,80): ' '
clearing (19,80): 69 cells
Drawing a string at (20,0): '2:help.txt [Help][-][RO] 1:1 244 Top'
clearing (20,0): 149 cells
Drawing a string at (21,0): ' '
clearing (21,0): 80 cells
Drawing a string at (21,80): ' '
clearing (21,80): 69 cells
Drawing a string at (33,0): '1:[No Name] 0:0-1 1 All'
clearing (33,0): 149 cells
Drawing a string at (34,0): '"'
clearing (34,0): 1 cells
Drawing a string at (34,0): '"'
clearing (34,0): 1 cells
Drawing a string at (0,0): 'h'
clearing (0,0): 1 cells
Drawing a string at (35,138): '~@k'
clearing (35,138): 3 cells
Drawing a string at (0,0): 'h'
clearing (0,0): 1 cells
Drawing a string at (35,138): ' '
clearing (35,138): 3 cells
Drawing a string at (0,0): ' '
clearing (0,0): 26 cells
Drawing a string at (0,26): 'WHAT PREPEND EXAMPLE'
clearing (0,26): 40 cells
Drawing a string at (0,66): ' '
clearing (0,66): 14 cells
Drawing a string at (0,80): ' '
clearing (0,80): 69 cells
Drawing a string at (1,0): ' Normal mode command :help x '
clearing (1,0): 80 cells
Drawing a string at (1,80): ' '
clearing (1,80): 69 cells
Drawing a string at (2,0): ' '
clearing (2,0): 149 cells
Drawing a string at (3,0): ' '
clearing (3,0): 149 cells
Drawing a string at (4,0): ' '
clearing (4,0): 149 cells
Drawing a string at (5,0): ' '
clearing (5,0): 149 cells
Drawing a string at (6,0): ' '
clearing (6,0): 149 cells
Drawing a string at (7,0): ' '
clearing (7,0): 149 cells
Drawing a string at (8,0): ' '
clearing (8,0): 149 cells
Drawing a string at (9,0): ' '
clearing (9,0): 149 cells
Drawing a string at (10,0): ' '
clearing (10,0): 149 cells
Drawing a string at (11,0): ' '
clearing (11,0): 149 cells
Drawing a string at (12,0): ' '
clearing (12,0): 149 cells
Drawing a string at (13,0): ' '
clearing (13,0): 149 cells
Drawing a string at (14,0): ' '
clearing (14,0): 149 cells
Drawing a string at (15,0): ' '
clearing (15,0): 149 cells
Drawing a string at (16,0): ' '
clearing (16,0): 149 cells
Drawing a string at (17,0): ' '
clearing (17,0): 149 cells
Drawing a string at (18,0): ' '
clearing (18,0): 149 cells
Drawing a string at (19,0): ' '
clearing (19,0): 149 cells
Drawing a string at (0,0): ' '
clearing (0,0): 1 cells
Drawing a string at (2,22): 'Visual'
clearing (2,22): 6 cells
Drawing a string at (2,29): 'mode'
clearing (2,29): 4 cells
Drawing a string at (2,34): 'command'
clearing (2,34): 7 cells
Drawing a string at (2,50): 'v_'
clearing (2,50): 2 cells
Drawing a string at (2,59): ':help'
clearing (2,59): 5 cells
Drawing a string at (2,65): 'v_u'
clearing (2,65): 3 cells
Drawing a string at (2,80): ' '
clearing (2,80): 69 cells
Drawing a string at (3,22): 'Insert'
clearing (3,22): 6 cells
Drawing a string at (3,29): 'mode'
clearing (3,29): 4 cells
Drawing a string at (3,34): 'command'
clearing (3,34): 7 cells
Drawing a string at (3,50): 'i_'
clearing (3,50): 2 cells
Drawing a string at (3,59): ':help'
clearing (3,59): 5 cells
Drawing a string at (3,65): 'i_'
clearing (3,65): 2 cells
Drawing a string at (3,67): '<Esc>'
clearing (3,67): 5 cells
Drawing a string at (3,80): ' '
clearing (3,80): 69 cells
Drawing a string at (4,22): 'Command-line'
clearing (4,22): 12 cells
Drawing a string at (4,35): 'command'
clearing (4,35): 7 cells
Drawing a string at (4,50): ':'
clearing (4,50): 1 cells
Drawing a string at (4,59): ':help'
clearing (4,59): 5 cells
Drawing a string at (4,65): ':quit'
clearing (4,65): 5 cells
Drawing a string at (4,80): ' '
clearing (4,80): 69 cells
Drawing a string at (5,22): 'Command-line'
clearing (5,22): 12 cells
Drawing a string at (5,35): 'editing'
clearing (5,35): 7 cells
Drawing a string at (5,50): 'c_'
clearing (5,50): 2 cells
Drawing a string at (5,59): ':help'
clearing (5,59): 5 cells
Drawing a string at (5,65): 'c_'
clearing (5,65): 2 cells
Drawing a string at (5,67): '<Del>'
clearing (5,67): 5 cells
Drawing a string at (5,80): ' '
clearing (5,80): 69 cells
Drawing a string at (6,22): 'Vim'
clearing (6,22): 3 cells
Drawing a string at (6,26): 'command'
clearing (6,26): 7 cells
Drawing a string at (6,34): 'argument'
clearing (6,34): 8 cells
Drawing a string at (6,50): '-'
clearing (6,50): 1 cells
Drawing a string at (6,59): ':help'
clearing (6,59): 5 cells
Drawing a string at (6,65): '-r'
clearing (6,65): 2 cells
Drawing a string at (6,80): ' '
clearing (6,80): 69 cells
Drawing a string at (7,22): 'Option'
clearing (7,22): 6 cells
Drawing a string at (7,50): '''
clearing (7,50): 1 cells
Drawing a string at (7,59): ':help'
clearing (7,59): 5 cells
Drawing a string at (7,65): ''textwidth''
clearing (7,65): 11 cells
Drawing a string at (7,80): ' '
clearing (7,80): 69 cells
Drawing a string at (8,22): 'Regular'
clearing (8,22): 7 cells
Drawing a string at (8,30): 'expression'
clearing (8,30): 10 cells
Drawing a string at (8,50): '/'
clearing (8,50): 1 cells
Drawing a string at (8,59): ':help'
clearing (8,59): 5 cells
Drawing a string at (8,65): '/['
clearing (8,65): 2 cells
Drawing a string at (8,80): ' '
clearing (8,80): 69 cells
Drawing a string at (9,20): 'See'
clearing (9,20): 3 cells
Drawing a string at (9,24): 'help-summary'
clearing (9,24): 12 cells
Drawing a string at (9,37): 'for'
clearing (9,37): 3 cells
Drawing a string at (9,41): 'more'
clearing (9,41): 4 cells
Drawing a string at (9,46): 'contexts'
clearing (9,46): 8 cells
Drawing a string at (9,55): 'and'
clearing (9,55): 3 cells
Drawing a string at (9,59): 'an'
clearing (9,59): 2 cells
Drawing a string at (9,62): 'explanation.'
clearing (9,62): 12 cells
Drawing a string at (9,80): ' '
clearing (9,80): 69 cells
Drawing a string at (10,80): ' '
clearing (10,80): 69 cells
Drawing a string at (11,2): 'Search'
clearing (11,2): 6 cells
Drawing a string at (11,9): 'for'
clearing (11,9): 3 cells
Drawing a string at (11,13): 'help:'
clearing (11,13): 5 cells
Drawing a string at (11,20): 'Type'
clearing (11,20): 4 cells
Drawing a string at (11,25): '":help'
clearing (11,25): 6 cells
Drawing a string at (11,32): 'word",'
clearing (11,32): 6 cells
Drawing a string at (11,39): 'then'
clearing (11,39): 4 cells
Drawing a string at (11,44): 'hit'
clearing (11,44): 3 cells
Drawing a string at (11,48): 'CTRL-D'
clearing (11,48): 6 cells
Drawing a string at (11,55): 'to'
clearing (11,55): 2 cells
Drawing a string at (11,58): 'see'
clearing (11,58): 3 cells
Drawing a string at (11,62): 'matching'
clearing (11,62): 8 cells
Drawing a string at (11,80): ' '
clearing (11,80): 69 cells
Drawing a string at (12,20): 'help'
clearing (12,20): 4 cells
Drawing a string at (12,25): 'entries'
clearing (12,25): 7 cells
Drawing a string at (12,33): 'for'
clearing (12,33): 3 cells
Drawing a string at (12,37): '"word".'
clearing (12,37): 7 cells
Drawing a string at (12,80): ' '
clearing (12,80): 69 cells
Drawing a string at (13,20): 'Or'
clearing (13,20): 2 cells
Drawing a string at (13,23): 'use'
clearing (13,23): 3 cells
Drawing a string at (13,27): '":helpgrep'
clearing (13,27): 10 cells
Drawing a string at (13,38): 'word".'
clearing (13,38): 6 cells
Drawing a string at (13,45): ':helpgrep'
clearing (13,45): 9 cells
Drawing a string at (13,80): ' '
clearing (13,80): 69 cells
Drawing a string at (14,80): ' '
clearing (14,80): 69 cells
Drawing a string at (15,0): 'VIM'
clearing (15,0): 3 cells
Drawing a string at (15,4): 'stands'
clearing (15,4): 6 cells
Drawing a string at (15,11): 'for'
clearing (15,11): 3 cells
Drawing a string at (15,15): 'Vi'
clearing (15,15): 2 cells
Drawing a string at (15,18): 'IMproved.'
clearing (15,18): 9 cells
Drawing a string at (15,29): 'Most'
clearing (15,29): 4 cells
Drawing a string at (15,34): 'of'
clearing (15,34): 2 cells
Drawing a string at (15,37): 'VIM'
clearing (15,37): 3 cells
Drawing a string at (15,41): 'was'
clearing (15,41): 3 cells
Drawing a string at (15,45): 'made'
clearing (15,45): 4 cells
Drawing a string at (15,50): 'by'
clearing (15,50): 2 cells
Drawing a string at (15,53): 'Bram'
clearing (15,53): 4 cells
Drawing a string at (15,58): 'Moolenaar,'
clearing (15,58): 10 cells
Drawing a string at (15,69): 'but'
clearing (15,69): 3 cells
Drawing a string at (15,73): 'only'
clearing (15,73): 4 cells
Drawing a string at (15,80): ' '
clearing (15,80): 69 cells
Drawing a string at (16,0): 'through'
clearing (16,0): 7 cells
Drawing a string at (16,8): 'the'
clearing (16,8): 3 cells
Drawing a string at (16,12): 'help'
clearing (16,12): 4 cells
Drawing a string at (16,17): 'of'
clearing (16,17): 2 cells
Drawing a string at (16,20): 'many'
clearing (16,20): 4 cells
Drawing a string at (16,25): 'others.'
clearing (16,25): 7 cells
Drawing a string at (16,34): 'See'
clearing (16,34): 3 cells
Drawing a string at (16,38): 'credits'
clearing (16,38): 7 cells
Drawing a string at (16,45): '.'
clearing (16,45): 1 cells
Drawing a string at (16,80): ' '
clearing (16,80): 26 cells
Drawing a string at (16,106): ' '
clearing (16,106): 43 cells
Drawing a string at (17,0): '------------------------------------------------------------------------------'
clearing (17,0): 78 cells
Drawing a string at (17,80): ' '
clearing (17,80): 69 cells
Drawing a string at (18,48): 'doc-file-list'
clearing (18,48): 13 cells
Drawing a string at (18,62): 'Q_ct'
clearing (18,62): 4 cells
Drawing a string at (18,80): ' '
clearing (18,80): 69 cells
Drawing a string at (19,0): 'BASIC:'
clearing (19,0): 6 cells
Drawing a string at (19,80): ' '
clearing (19,80): 69 cells
Drawing a string at (0,0): ' '
clearing (0,0): 1 cells
Drawing a string at (34,0): ' '
clearing (34,0): 1 cells
Drawing a string at (34,0): ' '
clearing (34,0): 1 cells
Drawing a string at (20,130): '21:1-8'
clearing (20,130): 6 cells
Drawing a string at (20,146): ' 8%'
clearing (20,146): 3 cells
Drawing a string at (21,0): ' '
clearing (21,0): 1 cells
Drawing a string at (21,0): ' '
clearing (21,0): 1 cells
Drawing a string at (2,7): ' '
clearing (2,7): 1 cells
Drawing a string at (2,7): ' '
clearing (2,7): 1 cells
Drawing a string at (2,7): ' '
clearing (2,7): 1 cells
Drawing a string at (35,138): ':'
clearing (35,138): 1 cells
Drawing a string at (34,0): ':'
clearing (34,0): 1 cells
Drawing a string at (2,7): ' '
clearing (2,7): 1 cells
Drawing a string at (34,1): ' '
clearing (34,1): 1 cells
Drawing a string at (34,1): 'q'
clearing (34,1): 1 cells
Drawing a string at (34,2): ' '
clearing (34,2): 1 cells
Drawing a string at (34,2): 'a'
clearing (34,2): 1 cells
Drawing a string at (34,3): ' '
clearing (34,3): 1 cells
Drawing a string at (34,3): ' '
clearing (34,3): 1 cells
Drawing a string at (34,0): ':'
clearing (34,0): 1 cells
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index 7d3f0d0..2aabb43 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -5667,6 +5667,7 @@ draw_glyph_string(int row, int col, int num_cells, int flags,
if (!(flags & DRAW_TRANSP))
{
#ifdef GDK_DISABLE_DEPRECATED
+ printf("clearing (%d,%d): %d cells\n", row, col, num_cells);
set_cairo_source_rgb_from_pixel(cr, gui.bgcolor->pixel);
cairo_set_line_width(cr, 1.0);
cairo_rectangle(cr,
@@ -5806,6 +5807,8 @@ gui_gtk2_draw_string(int row, int col, char_u *s, int len, int flags)
#endif
return len;
+ printf("Drawing a string at (%d,%d): '%.*s'\n", row, col, len, s);
+
if (output_conv.vc_type != CONV_NONE)
{
/*
"""
Visualize the way gvim draws text.
Loads a log of drawing calls from a file called draw.log (produced by running
'gvim -f > draw.log' after applying vim.patch and rebuilding). Lets you
single-step through them using <Left>/<Right> keys. Use 'q' to quit.
The last draw call is highlighted in blue.
"""
import re
import curses
import copy
from collections import defaultdict
screens = []
changes = []
screen = defaultdict(lambda: defaultdict(lambda: ' '))
def draw_string(row, col, text):
changes.append((row, col, text))
for col, c in enumerate(text, col):
screen[row][col] = c
screens.append(copy.deepcopy(screen))
def show(stdscr, screen):
for row, cells in sorted(screen.items()):
for col, cell in sorted(cells.items()):
stdscr.addstr(row, col, cell)
def showchange(stdscr, row, col, text):
stdscr.addstr(row, col, text, curses.color_pair(1))
def process_log_line(stdscr, line):
rx = re.compile(r"Drawing a string at \((\d+),(\d+)\): '(.*)'")
if line.startswith('\033[J'):
line = line[3:]
m = rx.match(line)
if m:
row, col, text = m.groups()
draw_string(int(row), int(col), text)
def main(stdscr):
curses.use_default_colors()
curses.init_pair(1, curses.COLOR_WHITE, curses.COLOR_BLUE)
stdscr.addstr(0, 0, "parsing log of gui_gtk2_draw_string() calls")
stdscr.refresh()
for n, line in enumerate(open('draw.log'), 1):
process_log_line(stdscr, line)
cur = 0
show(stdscr, screens[cur])
showchange(stdscr, *changes[cur])
stdscr.refresh()
while True:
c = stdscr.getch()
if c == ord('q'):
break
elif c == curses.KEY_LEFT and cur > 0:
cur -= 1
show(stdscr, screens[cur])
showchange(stdscr, *changes[cur])
stdscr.refresh()
elif c == curses.KEY_RIGHT and cur + 1 < len(screens):
cur += 1
show(stdscr, screens[cur])
showchange(stdscr, *changes[cur])
stdscr.refresh()
if __name__ == '__main__':
curses.wrapper(main)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment