#1707๋ถํฐ ์ฌ๋ฐ๋ฅธ ์ ๋์ฝ๋ ์ฒ๋ฆฌ๊ฐ ์ด๋ชจํฐ์ฝ์ผ๋ก ์ธํด ์ฌ๋๋ค์๊ฒ ์ ์ ๋ ๋ฌธ์ ๊ฐ ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ฐ๋ฆฌ ๋ชจ๋๋ ์ด๋ชจํฐ์ฝ์ ์ข์ํ๊ธฐ ๋๋ฌธ์ ์ต๋ํ ๋นจ๋ฆฌ ์์ ํด์ผ ํฉ๋๋ค.์ค๋ง์ผ:
์ ์:
๋ฉ์ง API ๋ค์ ๋ฒ์ ๋ณ ๋ฐ์ดํฐ์ ๊ตฌํ์ ์จ๊ธธ ์ ์๋ ๋ค์ํ ์ ๋์ฝ๋ ๋ฒ์ ์ ๋ํ ๊ณต๊ธ์๋ฅผ ๋ง๋ญ๋๋ค. ํ์ฌ wcwidth์ ๋ํ ๋ฒ์ ์ข
์ ๊ตฌํ๋ง ํ์ํ๋ฏ๋ก ๋๋ต์ ์ธ ์ค์ผ์น๋ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค.
interface IUnicodeProvider {
supportedVersions(): string[];
getVersion(): string;
setVersion(version?: string); // version optional for fallback behavior
wcwidth(ucs: number): number;
getStringCellWidth(s: string): number;
... // more to come with support of other unicode features
}
์ด์์ ์ผ๋ก ๊ณต๊ธ์๋ ์์ฒด ํฌํจํ๋ฏ๋ก ํฐ๋ฏธ๋์ ์ธํฐํ์ด์ค ๋ฉ์๋๋ฅผ ์ฒ๋ฆฌํ๊ณ ํ์ํ ๋ ๋ฒ์ /๋ก์ผ์ผ์ ์
๋ฐ์ดํธํ๋ฉด ๋ฉ๋๋ค. ์ ๊ณต์๋ ์ฌ๋ฐ๋ฅธ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ๋ฎ์ ์์ค์ ํญ๋ชฉ์ ์ฒ๋ฆฌํด์ผ ํ๋ฏ๋ก ์ง์๋๋ ๋ฒ์ ์์ ๋ฉ์๋๊ฐ ์์๋๋ก ์๋ํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ๊ณต๊ธ์ ๋ด์์ ๋ฐ์ดํฐ๊ฐ ์ฝ๋ ๊ธฐ๋ฐ์์ ์ ์ ์ผ๋ก ์ ๊ณต๋๋์ง ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฆ์์์ ์์ฑํ๋ ค๊ณ ํ๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ xterm.js์ ํฌ๊ธฐ์ ์๋นํ ์ํฅ์ ๋ฏธ์น๊ณ ๋ ๋ฒ์งธ๋ ๋น๋๊ธฐ ์ง๋ฌธ์ ์ ๊ธฐํฉ๋๋ค(๊ธฐ์ตํ์ญ์์ค - ๋๋ถ๋ถ์ ํต์ฌ ๋ถ๋ถ์ ๋๊ธฐ์ atm์
๋๋ค). ์ ์ฒด ์ ๋์ฝ๋ ํญ๋ชฉ์ ๋ฒ์ XY์ฉ ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ์ผ๋ถ ์ ๋์จ์ ๋ฒ๋ค๋ก ํฌํจ๋ ์๋ ์์ต๋๋ค.
ํ ๋ก ์ ์์ํฉ๋๋ค.
/cc @Tyriar , @bgw , @mofux , @dnfield
๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด ๋ ์ ๊ทผํ๊ธฐ ์ฝ๋ค๊ณ ์๊ฐํฉ๋๋ค.
interface IUnicodeProvider {
getVersion(): string;
wcwidth(ucs: number): number;
getStringCellWidth(s: string): number;
... // more to come with support of other unicode features
}
UnicodeProviderFactory.v11
์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ๋ฉด ์ฝ๋ฉํ ๋ ์กฐ๊ธ ๋ ์ข์ ๊ฒ์ด์ง๋ง ์ด๋ ์ชฝ์ด๋ ๋์๊ฒ ์๋ฏธ๊ฐ ์์ต๋๋ค.
@dnfield ๋ค ์ด๋ ์ชฝ์ด๋ ์๋ํฉ๋๋ค. ๋ฒ์ ์์ค์์ ์ ํ ์ ๋ณด๊ฐ ํ์ํ์ง ํ์คํ์ง ์์ต๋๋ค.
๋ด ์์ด๋์ด๋ ๋ค์๊ณผ ๊ฐ์ด ๋ฐํ์์ ๋ฒ์ ์ ํ์ ํฌ๋ช ํ๊ฒ ์ํํ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋๋ ๊ฒ์ด์์ต๋๋ค.
// terminal ctor - create the provider
this.unicodeProvider = new UnicodeProvider();
...
// some code that knows whether to switch unicode versions
this.unicodeProvider.setVersion(xy);
...
// some unicode consumer - does not care about versions at all, just gets the right method
this.unicodeProvider.wcwidth(...)
์ด๋ฐ ์์ผ๋ก this.unicodeProvider
๋ ๋ฒ์ ๋ณ๊ฒฝ ํ ๋ค์ ์ฐ๊ฒฐํ๊ฑฐ๋ ํฐ๋ฏธ๋ ์ธ์คํด์ค์์ ๊ฐ๋น์ผ ์์ฑ์ ์ฌ์ฉํ์ง ์๊ณ ๋ ์ด๋ํ ์ ์์ต๋๋ค.
#1707์ ํ ๋ก ์์ ์ป์ ๊ฒ:
๊ทธ๊ฒ์ TS ์ฝ๋์ ๋ฃ์ ์ ์๋ ์ฌ๋์ด ์์ต๋๊น?
#1714์์ ์ต์ด์ ๊ฐ๋ฅํ ํ์ ์ ํ์ต๋๋ค. #1707์์ ์ ํ ์ด๋ธ์ ๋ณต์ฌํ์ต๋๋ค. ๊ด์ฐฎ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค(@dnfield).
๊ด์ฐฎ์์!
https://github.com/xtermjs/xterm.js/pull/1714 ๊ฐ ์ด์ ๋ํ ์ข์ ์ฐธ๊ณ ์๋ฃ์ด์ง๋ง ์๋ก์ด ์ ๋์จ ๋ชจ๋ธ ์ดํ ์ฌ๋ฌ ์ ๋์จ์ ์ถ์ํ ๊ณํ์ ๋๋ค(https://github.com/xtermjs/xterm. js/issues/1128)์ด ์๋ ๊ฒฝ์ฐ ์๋ฒ ๋๊ฐ ์ฌ๋ฐ๋ฅธ ๋ฒ์ ์ ์ ํํ๋๋ก ํ์ฉํฉ๋๋ค.
์ต๋ํ ๋นจ๋ฆฌ ์์ ํด ์ฃผ์ธ์. ์ต๊ทผ์ Windows๋ฅผ ์ ๋ฐ์ดํธํ๋ฉด ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ ์ํด ๋ก๊น ์ ์ผ๋ถ ์ธก๋ฉด์ ์ด๋ชจํฐ์ฝ์ผ๋ก ํ์ํ๋ Node.js ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ํ๋ ค๊ณ ํฉ๋๋ค.
https://github.com/xtermjs/xterm.js/pull/2568 ์ ์๋ก์ด ์๋ , ๋ค์ ๋ฆด๋ฆฌ์ค์์ ์ด ๊ธฐ๋ฅ์ ์ถ์ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@jerch #2568์ด ๋ณํฉ๋์ด ์ด๊ฒ์ ๋ซํ์ด๋ผ๊ณ ๋ถ๋ฅผ ์ ์์ต๋๊น?
@Tyriar Yepp, ํ์ ์กฐ์น๋ ์ด๋ฏธ ์์ต๋๋ค :smile_cat: --> #2668
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
https://github.com/xtermjs/xterm.js/pull/2568 ์ ์๋ก์ด ์๋ , ๋ค์ ๋ฆด๋ฆฌ์ค์์ ์ด ๊ธฐ๋ฅ์ ์ถ์ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.