κ°λ¨ν λ§ν΄μ μ½λκ° λ³κ²½λ¨μ λ°λΌ μ€λ¨μ μ΄ μ΄λνλ©΄ μ’μ κ²μ λλ€.
λ μμΈν λ§νμλ©΄, λΌμΈμ λν΄ μ§μλλ λΌμΈ νΈλ€μ΄ μμΌλ©΄ μ’μ κ²μ λλ€. μ΄ κΈ°λ₯μ νΈμ§ κ²½νμ μμ΄ λ€μ ν΅μ¬μ μΈ κ²μΌλ‘ 보μ΄λ©° μ€λ¨μ κ³Ό μ€λ₯ λ©μμ§ λͺ¨λ λΌμΈ νΈλ€μ λ°μΈλ©λμ΄μΌ ν©λλ€.
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);
}
}
})
κ°μ₯ μ μ©ν λκΈ
ν΄κ²°μ± μ μ°Ύμμ§λ§ ν λ²μ νλμ μ€λ¨μ λ§ νμ©νκΈ° λλ¬Έμ μ κ²½μ°μλ§ μλν©λλ€. μ½κ°μ κ°μ μΌλ‘ μΌλ°μ μΈ κ²½μ°μλ μ ν©ν μ μμ΅λλ€.
μλν° μΈμ€ν΄μ€μμ on change 리μ€λλ₯Ό μ¬μ©νκ³ μ΄λ²€νΈλ₯Ό λ°μμν¨ μ‘μ μ μν΄ μμ λ λΌμΈ μλ₯Ό νμΈνμ΅λλ€. μ΄κ²μ΄ λ μ΄μμΈ κ²½μ° νλ μ΄μμ νμ΄ μΆκ°λκ±°λ μ κ±°λλ κ²½μ°μ λλ€. μ΄λ²€νΈμ action 맀κ°λ³μλ μ°λ¦¬κ° μ΄λ€ κ²½μ°μΈμ§ μ΄ν΄νλ λ° λμμ΄ λ©λλ€.
μ€λ¨μ μ μ΄λν΄μΌ νλμ§ νμΈνκΈ° μν΄ μμ μ μμ νκ³Ό λ ν μ¬μ΄μ μλμ§ νμΈν©λλ€. μ΄ λ²μμ μμΌλ©΄ μ΄λν΄μΌ ν©λλ€.
μ½λ(λΉ λ₯΄κ² μμ±λ¨)λ λ€μκ³Ό κ°μ΅λλ€.
λκ΅°κ°λ₯Ό λμκΈ°λ₯Ό λ°λλλ€!