@@ -52,25 +52,35 @@ define([
5252 * @private
5353 */
5454 CodeMirror . commands . delSpaceToPrevTabStop = function ( cm ) {
55- var from = cm . getCursor ( true ) , to = cm . getCursor ( false ) , sel = ! posEq ( from , to ) ;
56- if ( sel ) {
57- var ranges = cm . listSelections ( ) ;
58- for ( var i = ranges . length - 1 ; i >= 0 ; i -- ) {
59- var head = ranges [ i ] . head ;
60- var anchor = ranges [ i ] . anchor ;
61- cm . replaceRange ( "" , CodeMirror . Pos ( head . line , head . ch ) , CodeMirror . Pos ( anchor . line , anchor . ch ) ) ;
55+ var tabSize = cm . getOption ( 'tabSize' ) ;
56+ var ranges = cm . listSelections ( ) ; // handle multicursor
57+ for ( var i = ranges . length - 1 ; i >= 0 ; i -- ) { // iterate reverse so any deletions don't overlap
58+ var head = ranges [ i ] . head ;
59+ var anchor = ranges [ i ] . anchor ;
60+ var sel = ! posEq ( head , anchor ) ;
61+ if ( sel ) {
62+ // range is selection
63+ cm . replaceRange ( "" , anchor , head ) ;
64+ } else {
65+ // range is cursor
66+ var line = cm . getLine ( head . line ) . substring ( 0 , head . ch ) ;
67+ if ( line . match ( / ^ \ + $ / ) !== null ) {
68+ // delete tabs
69+ var prevTabStop = ( Math . ceil ( head . ch / tabSize ) - 1 ) * tabSize ;
70+ var from = {
71+ ch : prevTabStop ,
72+ line : head . line
73+ } ;
74+ cm . replaceRange ( "" , from , head ) ;
75+ } else {
76+ // delete non-tabs
77+ var from = {
78+ ch : head . ch - 1 ,
79+ line : head . line
80+ } ;
81+ cm . replaceRange ( "" , from , head ) ;
82+ }
6283 }
63- return ;
64- }
65- var cur = cm . getCursor ( ) , line = cm . getLine ( cur . line ) ;
66- var tabsize = cm . getOption ( 'tabSize' ) ;
67- var chToPrevTabStop = cur . ch - ( Math . ceil ( cur . ch / tabsize ) - 1 ) * tabsize ;
68- from = { ch :cur . ch - chToPrevTabStop , line :cur . line } ;
69- var select = cm . getRange ( from , cur ) ;
70- if ( select . match ( / ^ \ + $ / ) !== null ) {
71- cm . replaceRange ( "" , from , cur ) ;
72- } else {
73- cm . deleteH ( - 1 , "char" ) ;
7484 }
7585 } ;
7686
0 commit comments