Ace: μ½”λ“œκ°€ λ³€κ²½λ˜λ©΄ 쀑단점을 μ΄λ™ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2013λ…„ 03μ›” 06일  Β·  4μ½”λ©˜νŠΈ  Β·  좜처: ajaxorg/ace

κ°„λ‹¨νžˆ λ§ν•΄μ„œ μ½”λ“œκ°€ 변경됨에 따라 쀑단점이 μ΄λ™ν•˜λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€.

더 μžμ„Ένžˆ λ§ν•˜μžλ©΄, 라인에 λŒ€ν•΄ μ§€μ†λ˜λŠ” 라인 핸듀이 있으면 쒋을 κ²ƒμž…λ‹ˆλ‹€. 이 κΈ°λŠ₯은 νŽΈμ§‘ κ²½ν—˜μ— μžˆμ–΄ λ‹€μ†Œ 핡심적인 κ²ƒμœΌλ‘œ 보이며 쀑단점과 였λ₯˜ λ©”μ‹œμ§€ λͺ¨λ‘ 라인 핸듀에 λ°”μΈλ”©λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

해결책을 μ°Ύμ•˜μ§€λ§Œ ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μ€‘λ‹¨μ λ§Œ ν—ˆμš©ν•˜κΈ° λ•Œλ¬Έμ— 제 κ²½μš°μ—λ§Œ μž‘λ™ν•©λ‹ˆλ‹€. μ•½κ°„μ˜ κ°œμ„ μœΌλ‘œ 일반적인 κ²½μš°μ—λ„ 적합할 수 μžˆμŠ΅λ‹ˆλ‹€.
에디터 μΈμŠ€ν„΄μŠ€μ—μ„œ on change λ¦¬μŠ€λ„ˆλ₯Ό μ‚¬μš©ν•˜κ³  이벀트λ₯Ό λ°œμƒμ‹œν‚¨ μ•‘μ…˜μ— μ˜ν•΄ μˆ˜μ •λœ 라인 수λ₯Ό ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€. 이것이 λ‘˜ 이상인 경우 ν•˜λ‚˜ μ΄μƒμ˜ 행이 μΆ”κ°€λ˜κ±°λ‚˜ μ œκ±°λ˜λŠ” κ²½μš°μž…λ‹ˆλ‹€. 이벀트의 action λ§€κ°œλ³€μˆ˜λŠ” μš°λ¦¬κ°€ μ–΄λ–€ κ²½μš°μΈμ§€ μ΄ν•΄ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.
쀑단점을 이동해야 ν•˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ μˆ˜μ •μ˜ μ‹œμž‘ ν–‰κ³Ό 끝 ν–‰ 사이에 μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. 이 λ²”μœ„μ— 있으면 이동해야 ν•©λ‹ˆλ‹€.

μ½”λ“œ(λΉ λ₯΄κ²Œ μž‘μ„±λ¨)λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

aceEditor.on("change", function (e) {
                var breakpointsArray = aceEditor.session.getBreakpoints();
                if(Object.keys(aceEditor.session.getBreakpoints()).length>0){
                    if(e.lines.length>1){
                        var breakpoint = parseInt(Object.keys(breakpointsArray)[0]);
                        var lines = e.lines.length -1;
                        var start = e.start.row;
                        var end = e.end.row;
                        if(e.action==='insert'){
                            console.log('new lines',breakpoint, start , end );
                            if(breakpoint>start ){
                                console.log('breakpoint forward');
                                aceEditor.session.clearBreakpoint(breakpoint);
                                aceEditor.session.setBreakpoint(breakpoint + lines);
                            }
                        } else if(e.action==='remove'){
                            console.log('removed lines',breakpoint, start , end);
                            if(breakpoint>start && breakpoint<end ){
                                console.log('breakpoint remove');
                                aceEditor.session.clearBreakpoint(breakpoint);
                            }
                            if(breakpoint>=end ){
                                console.log('breakpoint behind');
                                aceEditor.session.clearBreakpoint(breakpoint);
                                aceEditor.session.setBreakpoint(breakpoint - lines);
                            }
                        }
                    }
                }
            });

λˆ„κ΅°κ°€λ₯Ό 도왔기λ₯Ό λ°”λžλ‹ˆλ‹€!

λͺ¨λ“  4 λŒ“κΈ€

Cloud9μ—μ„œλŠ” λ³€κ²½ μˆ˜μ‹ κΈ°λ₯Ό μ‚¬μš©ν•˜μ—¬ λ³„λ„μ˜ λ°°μ—΄μ—μ„œ 쀑단점을 μ—…λ°μ΄νŠΈν–ˆμŠ΅λ‹ˆλ‹€. https://github.com/ajaxorg/cloud9/blob/master/plugins-client/ext.debugger/breakpoints.js#L170

aceλŠ” λ¬Έμžμ—΄ 배열을 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— 라인 핸듀을 κ°€μž₯ 잘 κ΅¬ν˜„ν•˜λŠ” 방법, 라인과 λ™κΈ°ν™”λœ 객체의 전체 λ°°μ—΄ λ˜λŠ” edit_sessionμ—μ„œ μ ‘νžŒ 라인 μ²˜λ¦¬μ™€ μœ μ‚¬ν•œ λ²”μœ„λ₯Ό μ‚¬μš©ν•˜λŠ” 방법을 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ μœ ν˜•μ˜ 라인 μ£Όμ„μ—λŠ” λ‹€λ₯Έ λ™μž‘μ΄ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— κΉŒλ‹€λ‘œμš΄ 뢀뢄은 λΆ„ν• λ˜κ±°λ‚˜ λ³‘ν•©λ˜λŠ” 라인을 μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

쀑단점에 λŒ€ν•œ μ†”λ£¨μ…˜μ΄ 주석에 λŒ€ν•΄ 잘 μž‘λ™ν•  것이라고 μƒκ°ν•©λ‹ˆλ‹€.

λ‹€λ₯Έ μœ ν˜•μ˜ 라인 μ£Όμ„μ—λŠ” λ‹€λ₯Έ λ™μž‘μ΄ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— κΉŒλ‹€λ‘œμš΄ 뢀뢄은 λΆ„ν• λ˜κ±°λ‚˜ λ³‘ν•©λ˜λŠ” 라인을 μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

흠.. ν•˜λ‚˜μ˜ 예λ₯Ό λ§Œλ“€ 수 μ—†μŠ΅λ‹ˆλ‹€. μ‘°κΈˆμ΄λ‚˜λ§ˆ κ³΅μœ ν•΄μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€ :)

해결책을 μ°Ύμ•˜μ§€λ§Œ ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μ€‘λ‹¨μ λ§Œ ν—ˆμš©ν•˜κΈ° λ•Œλ¬Έμ— 제 κ²½μš°μ—λ§Œ μž‘λ™ν•©λ‹ˆλ‹€. μ•½κ°„μ˜ κ°œμ„ μœΌλ‘œ 일반적인 κ²½μš°μ—λ„ 적합할 수 μžˆμŠ΅λ‹ˆλ‹€.
에디터 μΈμŠ€ν„΄μŠ€μ—μ„œ on change λ¦¬μŠ€λ„ˆλ₯Ό μ‚¬μš©ν•˜κ³  이벀트λ₯Ό λ°œμƒμ‹œν‚¨ μ•‘μ…˜μ— μ˜ν•΄ μˆ˜μ •λœ 라인 수λ₯Ό ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€. 이것이 λ‘˜ 이상인 경우 ν•˜λ‚˜ μ΄μƒμ˜ 행이 μΆ”κ°€λ˜κ±°λ‚˜ μ œκ±°λ˜λŠ” κ²½μš°μž…λ‹ˆλ‹€. 이벀트의 action λ§€κ°œλ³€μˆ˜λŠ” μš°λ¦¬κ°€ μ–΄λ–€ κ²½μš°μΈμ§€ μ΄ν•΄ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.
쀑단점을 이동해야 ν•˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ μˆ˜μ •μ˜ μ‹œμž‘ ν–‰κ³Ό 끝 ν–‰ 사이에 μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. 이 λ²”μœ„μ— 있으면 이동해야 ν•©λ‹ˆλ‹€.

μ½”λ“œ(λΉ λ₯΄κ²Œ μž‘μ„±λ¨)λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

aceEditor.on("change", function (e) {
                var breakpointsArray = aceEditor.session.getBreakpoints();
                if(Object.keys(aceEditor.session.getBreakpoints()).length>0){
                    if(e.lines.length>1){
                        var breakpoint = parseInt(Object.keys(breakpointsArray)[0]);
                        var lines = e.lines.length -1;
                        var start = e.start.row;
                        var end = e.end.row;
                        if(e.action==='insert'){
                            console.log('new lines',breakpoint, start , end );
                            if(breakpoint>start ){
                                console.log('breakpoint forward');
                                aceEditor.session.clearBreakpoint(breakpoint);
                                aceEditor.session.setBreakpoint(breakpoint + lines);
                            }
                        } else if(e.action==='remove'){
                            console.log('removed lines',breakpoint, start , end);
                            if(breakpoint>start && breakpoint<end ){
                                console.log('breakpoint remove');
                                aceEditor.session.clearBreakpoint(breakpoint);
                            }
                            if(breakpoint>=end ){
                                console.log('breakpoint behind');
                                aceEditor.session.clearBreakpoint(breakpoint);
                                aceEditor.session.setBreakpoint(breakpoint - lines);
                            }
                        }
                    }
                }
            });

λˆ„κ΅°κ°€λ₯Ό 도왔기λ₯Ό λ°”λžλ‹ˆλ‹€!

μ—¬λŸ¬ μ€‘λ‹¨μ μ—μ„œ μž‘λ™ν•˜λ„λ‘ μœ„μ˜ alessandrocaprarelli의 μ†”λ£¨μ…˜μ„ μˆ˜μ •ν–ˆμœΌλ©° λ‹€λ₯Έ μ‚¬μš©μžμ—κ²Œ 도움이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

editor.on("change", function (e) {
    if (e.lines.length > 1 && (e.action==='insert' || e.action==='remove')){
        const breakpointsArrayOld = editor.session.getBreakpoints();
        let breakpointsArrayNew = [];

        const amountOfLinesAffected = e.lines.length - 1;
        const startRow = e.start.row;
        const endRow = e.end.row;

        for (const key of Object.keys(breakpointsArrayOld)) {
            let breakpointRow = parseInt(key)

            if (e.action==='insert') {  // new lines
                if (breakpointRow > startRow ){
                    // breakpoint forward
                    breakpointsArrayNew[breakpointRow + amountOfLinesAffected] = "ace_breakpoint"
                }
                else {
                    // unaffected by insert
                    breakpointsArrayNew[breakpointRow] = "ace_breakpoint"
                }
            }
            else if (e.action==='remove') {  // removed lines
                if (breakpointRow > startRow && breakpointRow <= endRow ){
                    // breakpoint removed
                }
                else if (breakpointRow >= endRow ){
                    // breakpoint behind
                    breakpointsArrayNew[breakpointRow - amountOfLinesAffected] = "ace_breakpoint"
                }
                else {
                    // unaffected by remove
                    breakpointsArrayNew[breakpointRow] = "ace_breakpoint"
                }
            }
        }

        // remove all old breakpoints
        for (const key of Object.keys(breakpointsArrayOld)) {
            let breakpointRow = parseInt(key)
            editor.session.clearBreakpoint(breakpointRow);
        }

        // add all new breakpoints
        for (const key of Object.keys(breakpointsArrayNew)) {
            let breakpointRow = parseInt(key)
            editor.session.setBreakpoint(breakpointRow);
        }
    }
})
이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰