@@ -21,6 +21,45 @@ define(function (require, exports) {
2121 editorsWithGutters = [ ] ,
2222 openWidgets = [ ] ;
2323
24+ /**
25+ * Checks if there's already a gutter marker on the given line;
26+ * if not, inserts a blank <div> to prevent an empty gutter spot.
27+ */
28+ function _addDummyGutterMarkerIfNotExist ( cm , line ) {
29+ var lineInfo = cm . lineInfo ( line ) ;
30+ if ( ! lineInfo ) {
31+ return ; // If line is out of range or doc is empty
32+ }
33+ var gutters = cm . getOption ( "gutters" ) . slice ( 0 ) ,
34+ gutterEnabled = gutters . indexOf ( gutterName ) ;
35+ if ( gutterEnabled === - 1 ) {
36+ return ;
37+ }
38+ var gutterMarkers = lineInfo . gutterMarkers ;
39+ var existingMarker = gutterMarkers && gutterMarkers [ gutterName ] ;
40+ if ( ! existingMarker ) {
41+ var dummy = document . createElement ( "div" ) ;
42+ dummy . className = "CodeMirror-gitGutter-none" ;
43+ cm . setGutterMarker ( line , gutterName , dummy ) ;
44+ }
45+ }
46+
47+ function _cursorActivity ( _evt , editor ) {
48+ // this is to prevent a gutter gap in the active line if there is no color on this line.
49+ _addDummyGutterMarkerIfNotExist ( editor . _codeMirror , editor . getCursorPos ( ) . line ) ;
50+ }
51+
52+ EditorManager . on ( "activeEditorChange" , function ( event , newEditor , oldEditor ) {
53+ if ( newEditor ) {
54+ newEditor . off ( "cursorActivity.gitGutter" ) ;
55+ newEditor . on ( "cursorActivity.gitGutter" , _cursorActivity ) ;
56+ _cursorActivity ( null , newEditor ) ;
57+ }
58+ if ( oldEditor ) {
59+ oldEditor . off ( "cursorActivity.gitGutter" ) ;
60+ }
61+ } ) ;
62+
2463 function clearWidgets ( ) {
2564 var lines = openWidgets . map ( function ( mark ) {
2665 var w = mark . lineWidget ;
@@ -102,7 +141,7 @@ define(function (require, exports) {
102141 . html ( " " ) ;
103142 cm . setGutterMarker ( obj . line , gutterName , $marker [ 0 ] ) ;
104143 } ) ;
105-
144+ _cursorActivity ( null , editor ) ;
106145 // reopen widgets that were opened before refresh
107146 openBefore . forEach ( function ( obj ) {
108147 gutterClick ( obj . cm , obj . line , gutterName ) ;
@@ -373,7 +412,18 @@ define(function (require, exports) {
373412 }
374413 } ) ;
375414
415+ function init ( ) {
416+ const editor = EditorManager . getActiveEditor ( ) ;
417+ if ( ! editor ) {
418+ return ;
419+ }
420+ editor . off ( "cursorActivity.gitGutter" ) ;
421+ editor . on ( "cursorActivity.gitGutter" , _cursorActivity ) ;
422+ _cursorActivity ( null , editor ) ;
423+ }
424+
376425 // API
426+ exports . init = init ;
377427 exports . goToPrev = goToPrev ;
378428 exports . goToNext = goToNext ;
379429} ) ;
0 commit comments