@@ -35,13 +35,49 @@ export default class CodeEditor extends React.Component {
3535
3636 if ( this . props . onBlur ) this . props . onBlur ( e )
3737 }
38+
39+ this . killedBuffer = ''
40+ this . execHandler = ( e ) => {
41+ console . log ( e . command . name )
42+ switch ( e . command . name ) {
43+ case 'gotolineend' :
44+ e . preventDefault ( )
45+ let position = this . editor . getCursorPosition ( )
46+ this . editor . navigateTo ( position . row , this . editor . getSession ( ) . getLine ( position . row ) . length )
47+ break
48+ case 'removetolineend' :
49+ e . preventDefault ( )
50+ let range = this . editor . getSelectionRange ( )
51+ let session = this . editor . getSession ( )
52+ if ( range . isEmpty ( ) ) {
53+ range . setEnd ( range . start . row , session . getLine ( range . start . row ) . length )
54+ this . killedBuffer = session . getTextRange ( range )
55+ if ( this . killedBuffer . length > 0 ) {
56+ console . log ( 'remove to lineend' )
57+ session . remove ( range )
58+ } else {
59+ if ( session . getLength ( ) === range . start . row ) {
60+ return
61+ }
62+ range . setStart ( range . start . row , range . end . col )
63+ range . setEnd ( range . start . row + 1 , 0 )
64+ this . killedBuffer = '\n'
65+ session . remove ( range )
66+ }
67+ } else {
68+ this . killedBuffer = session . getTextRange ( range )
69+ session . remove ( range )
70+ }
71+ }
72+ }
3873 this . afterExecHandler = ( e ) => {
3974 switch ( e . command . name ) {
4075 case 'find' :
4176 Array . prototype . forEach . call ( ReactDOM . findDOMNode ( this ) . querySelectorAll ( '.ace_search_field, .ace_searchbtn, .ace_replacebtn, .ace_searchbtn_close' ) , el => {
4277 el . removeEventListener ( 'blur' , this . blurHandler )
4378 el . addEventListener ( 'blur' , this . blurHandler )
4479 } )
80+ break
4581 }
4682 }
4783
@@ -83,6 +119,14 @@ export default class CodeEditor extends React.Component {
83119 } ,
84120 readOnly : true
85121 } )
122+ editor . commands . addCommand ( {
123+ name : 'Emacs cursor up' ,
124+ bindKey : { mac : 'Ctrl-Y' } ,
125+ exec : function ( editor ) {
126+ editor . insert ( this . killedBuffer )
127+ } . bind ( this ) ,
128+ readOnly : true
129+ } )
86130 editor . commands . addCommand ( {
87131 name : 'Focus title' ,
88132 bindKey : { win : 'Esc' , mac : 'Esc' } ,
@@ -96,6 +140,7 @@ export default class CodeEditor extends React.Component {
96140 readOnly : true
97141 } )
98142
143+ editor . commands . on ( 'exec' , this . execHandler )
99144 editor . commands . on ( 'afterExec' , this . afterExecHandler )
100145
101146 var session = editor . getSession ( )
@@ -120,6 +165,7 @@ export default class CodeEditor extends React.Component {
120165 ipc . removeListener ( 'config-apply' , this . configApplyHandler )
121166 this . editor . getSession ( ) . removeListener ( 'change' , this . changeHandler )
122167 this . editor . removeListener ( 'blur' , this . blurHandler )
168+ this . editor . commands . removeListener ( 'exec' , this . execHandler )
123169 this . editor . commands . removeListener ( 'afterExec' , this . afterExecHandler )
124170 }
125171
0 commit comments