Refactor vim into a library - minsuk-jang/teamproject GitHub Wiki
λ€μμ Vimμ΄ λͺ¨λκ°μ μ λ ₯ λ° μ νμ μ½λ λ°©λ²μ λν μμ΄λμ΄μ λλ€. μ€μ μ½λλ ν¨μ¬ λ 볡μ‘νμ§λ§ λ€μκ³Ό κ°μ κΈ°λ³Έ νλ¦μ λ°λ¦ λλ€.
while (1) {
normal_mode_process_byte(getc());
}
void normal_mode_process_byte(char c) {
if (c == 'i') // enter insert mode
while (1) {
insert_mode_process_byte(getc());
}
}
μνν΄μΌ ν μΌμ μ
λ ₯μ λ²νΌλ§νκ³ , λͺ¨λ νΉμ μ
λ ₯ μ²λ¦¬ ν¨μμ μμνκ±°λ, νμν κ²½μ° λ³ν νΈμ§κΈ° μνλ₯Ό μ λ¬νλ ν¨μ (μ :process_byte (char c)
)λ‘ λͺ¨λ μ½κΈ° 루νλ₯Ό μ κ±°νκ³ λ체νλ κ²μ
λλ€.
λ΄μ©μ λ€μκ³Ό κ°μ΅λλ€ :
void process_byte(char c) {
if (mode == NORMAL)
normal_mode_process_byte(c);
else if (mode == INSERT)
insert_mode_process_byte(c);
...
}
void normal_mode_process_byte(char c) {
if (c == 'i') {
mode = INSERT;
return;
}
...
}
νΈμ§κΈ°λ₯Ό μν κΈ°κ³λΌκ³ μκ°νμμμ€. μ λ ₯μ μ½κ³ κΈ°κ³μ μ λ ₯νλ©΄ νμ± λ²νΌ, μ ν λͺ¨λ λ±μ΄ λ³κ²½ λ μ μμ΅λλ€. μμ μ : κΈ°κ³κ° IO κΈ°λ₯μ μ§μ νΈμΆν΄μλ μλλ€λ κ²μ λλ€.