Xterm.js: 이λͺ¨ν‹°μ½˜ / μœ λ‹ˆ μ½”λ“œ 문제 (두 λ°° λ„ˆλΉ„λ‘œ κ°€μ •?)

에 λ§Œλ“  2017λ…„ 10μ›” 12일  Β·  24μ½”λ©˜νŠΈ  Β·  좜처: xtermjs/xterm.js

ν˜„μž¬ v3μ—μ„œλŠ” 이λͺ¨ν‹°μ½˜μ΄ 두 개의 셀을 μ°¨μ§€ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. ν™”μ‚΄ν‘œ ν‚€λ₯Ό μ‚¬μš©ν•˜λ©΄ ν•˜λ‚˜κ°€ μ•„λ‹Œ 두 개의 셀이 μ ν”„λ©λ‹ˆλ‹€. μ‚­μ œν•˜λ©΄ 두 개의 셀도 μ§€μ›Œμ§‘λ‹ˆλ‹€.

kapture 2017-10-12 at 18 34 05

arerenderer duplicate typbug

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

Ubuntu 18.04의 VSCode 1.31.1μ—μ„œμ΄ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

ν™”μ‚΄ν‘œ ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ…λ Ή 기둝을 μœ„μ•„λž˜λ‘œ μŠ€ν¬λ‘€ν•˜λ©΄ μ‹€ν–‰ν•˜λ €λŠ” λͺ…령에 λ„λ‹¬ν•˜λ©΄ 읽을 μˆ˜μžˆλŠ” κ°€λŠ₯성이 없도둝 μ•„ν‹°νŒ©νŠΈκ°€ μ„ νƒλ©λ‹ˆλ‹€.

λ˜ν•œ μ•„ν‹°νŒ©νŠΈλ₯Ό μ„ νƒν•œ ν›„ ν‘œμ‹œλ˜λŠ” λ‚΄μš©μ΄ xterm의 λ©”λͺ¨λ¦¬μ—μžˆλŠ” λ‚΄μš©κ³Ό λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— λͺ…λ Ή νŽΈμ§‘μ΄ 버그가 μžˆμŠ΅λ‹ˆλ‹€.

단계 :

λ‚΄ ν”„λ‘¬ν”„νŠΈμ— 이λͺ¨ν‹°μ½˜μ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
screenshot from 2019-02-21 11-10-15
npm i λͺ…령을 내리렀면 μœ„μͺ½ ν™”μ‚΄ν‘œλ₯Ό ν•œ 번 λˆ„λ₯΄μ‹­μ‹œμ˜€.
screenshot from 2019-02-21 11-10-55

ν”„λ‘¬ν”„νŠΈμ— μΆ”κ°€ 된 λΆˆλŸ‰ n λ₯Ό ν™•μΈν•©λ‹ˆλ‹€.

.bashrc 의 ν”„λ‘¬ν”„νŠΈμ—μ„œ 이λͺ¨ν‹°μ½˜μ„ μ œκ±°ν•˜κ³  μš©μ–΄λ₯Ό λ‹€μ‹œλ‘œλ“œν•˜λ©΄ 버그가 μ‚¬λΌμ§‘λ‹ˆλ‹€.

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

macOS / bashμ—μ„œ μž¬ν˜„ ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 이λͺ¨ 지 λ„ˆλΉ„λ₯Ό μ‘°μ •ν•˜μ§€ μ•ŠμœΌλ©΄ (1이 μ•„λ‹Œ κ°’μœΌλ‘œ) 이런 일이 λ°œμƒν•  κ²ƒμœΌλ‘œ μ˜ˆμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μž¬ν˜„ 단계에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ μœ μš©ν•©λ‹ˆλ‹€.

μž¬ν˜„ (OSX, MacOS High Sierra)

  • v3 데λͺ¨ μ‹œμž‘
  • λΆ™μ—¬ λ„£κΈ° πŸ˜€ μ—¬λŸ¬ 번
  • μ™Όμͺ½ ν™”μ‚΄ν‘œ ν‚€λ₯Ό μ—¬λŸ¬ 번 눌러 맀번 두 셀을 μ ν”„ν•˜κ³  μ…€ κ²½κ³„λ‘œ μ΄λ™ν•˜λŠ” 방법을 ν™•μΈν•©λ‹ˆλ‹€.

당신은 이미 MacOS High Sierraλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? μ•„λ§ˆλ„ node-pty와 κ΄€λ ¨μ΄μžˆμ„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. Terminal.app 이λͺ¨ν‹°μ½˜μ„ μ‚½μž…ν•˜λ©΄ μžλ™μœΌλ‘œ 이λͺ¨ν‹°μ½˜ 뒀에 곡백이 μΆ”κ°€λ˜κ³  더 λ‚˜μ•„κ°€ ν•΄λ‹Ή 곡간을 선택할 수 μ—†μŠ΅λ‹ˆλ‹€. High Sierraκ°€ μœ„ν˜‘ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€. 이쀑 λ„ˆλΉ„ 문자둜 ...

MacOS High Sierra의 Terminal.app
kapture 2017-10-13 at 22 55 32

이것은 그듀이 ν„°λ―Έλ„μ—μ„œ 이λͺ¨ν‹°μ½˜μ„ 더 μ’‹κ²Œ λ§Œλ“€λ €κ³  μ‹œλ„ν•œ 높은 μ‹œμ—λΌ 일 수 μžˆμŠ΅λ‹ˆκΉŒ? Electron μ•±μ—μ„œ λ Œλ”λ§μ΄ μ—‰λ§μ΄μ–΄μ„œ ν˜„μž¬ μ—…λ°μ΄νŠΈ ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” μ—…κ·Έλ ˆμ΄λ“œν–ˆλ‹€κ³  λ§ν•˜λŠ” 것이 μ‹«κ³  μ§€κΈˆμ€ λͺ¨λ“  크둬 기반 μ•±μ—μ„œ μˆ˜λ§Žμ€ λ Œλ”λ§ 결함에 κ°‡ν˜€ μžˆμŠ΅λ‹ˆλ‹€ 😀

그래, λ‚˜λŠ” λ‚΄κ°€ μƒκ°ν•˜λŠ” Sierra와 λΉ„μŠ·ν•œ 일이 일어났기 λ•Œλ¬Έμ— μ—…λ°μ΄νŠΈν•˜κΈ° 전에 ν”Όλ“œλ°±μ„ μΆ”μ ν•˜κΈ° μœ„ν•΄ μ‹ μ€‘ν–ˆλ‹€.

λ‚˜λŠ” Terminal.app이 μ μ ˆν•œ μ™€μ΄λ“œ 문자둜 μ·¨κΈ‰λ˜λŠ” 멋진 이λͺ¨ν‹°μ½˜ κ²½ν—˜μ„ 가지고 μžˆμŒμ„ μ•Œμ•˜μŠ΅λ‹ˆλ‹€.

UAX # 11 λ™μ•„μ‹œμ•„ λ„ˆλΉ„, κ°œμ • 31 은 이λͺ¨ν‹°μ½˜ _ λ™μ•„μ‹œμ•„ λ„ˆλΉ„ _ (이쀑 λ„ˆλΉ„)λ₯Ό λ³€κ²½ν–ˆμœΌλ©° wchar.h의 wcswidth λŠ” λ¬Έμžμ—΄ λ„ˆλΉ„λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. macOS High Sierraκ°€ μ—…λ°μ΄νŠΈλ₯Ό μ§€μ›ν–ˆμ„ κ²ƒμž…λ‹ˆλ‹€.
xterm.js의 wcwidth μ—μ„œ src/CharWidth.ts 아직 μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@ mandel59 정보 κ°μ‚¬ν•©λ‹ˆλ‹€!

@ mandel59 이 λ¬Έμ œλŠ” 이λͺ¨ν‹°μ½˜μ—λ§Œ κ΅­ν•œλœ 것이라고 μƒκ°ν•©λ‹ˆλ‹€. CJK λ¬ΈμžλŠ” 이쀑 λ„ˆλΉ„ 문자둜 μ˜¬λ°”λ₯΄κ²Œ λΆ„λ₯˜λ˜μ–΄μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€ (https://github.com/xtermjs/xterm.js/issues/1387처럼 일뢀 ꡬ성 μš”μ†Œκ°€ 손상 될 수 있음).

μ°Έμ‘° : https://github.com/gnachman/iTerm2/blob/master/sources/NSCharacterSet+iTerm.m 에도 λͺ‡ 가지 맀핑 μ†”λ£¨μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€.

VS μ½”λ“œ 문제 : https://github.com/Microsoft/vscode/issues/59145

λΆ„λͺ…νžˆ flutter run이이 λ™μž‘μ„ λ³΄μ—¬μ€λ‹ˆλ‹€.

λ‹€μŒμ€ Flutterκ°€ ν•„μš”μ—†λŠ” μž‘μ€ Dart μž¬ν˜„μž…λ‹ˆλ‹€ (Dartκ°€ ν•„μš”ν•¨).

import 'dart:async';

import 'dart:io';

// Windows console font has a limited set of Unicode characters.
final _animation = Platform.isWindows
    ? <String>[r'-', r'\', r'|', r'/']
    : <String>['πŸŒ•', 'πŸŒ–', 'πŸŒ—', '🌘', 'πŸŒ‘', 'πŸŒ’', 'πŸŒ“', 'πŸŒ”'];
final _backspace = '\b' * _animation[0].length;

main() {
  int ticks = 0;
  void update(Timer timer) {
    if (ticks % 50 == 0) {
      stdout.write('\nDoing thing... ');
    }
    stdout.write('$_backspace${_animation[ticks++ % _animation.length]}');
  }

  new Timer.periodic(const Duration(milliseconds: 100), update);
}

.dart 파일둜 μ €μž₯ ν•œ λ‹€μŒ dart xxx.dart 둜 μ‹€ν–‰ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œμ΄ μ½”λ“œλŠ” ν‘œμ€€ macOS ν„°λ―Έλ„μ—μ„œ 문자λ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ œκ±°ν•˜λŠ”μ΄ λ¬Έμžμ— λŒ€ν•΄ 두 개의 λ°± 슀페이슀λ₯Ό λ°œν–‰ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ VS Code ν„°λ―Έλ„μ—μ„œλŠ” 이λͺ¨ν‹°μ½˜κ³Ό λ‹€λ₯Έ 문자λ₯Ό λ°± 슀페이슀둜 ν‘œμ‹œν•©λ‹ˆλ‹€. 이λͺ¨μ§€κ°€ μ€„μ˜ μ‹œμž‘ 뢀뢄에 있으면 아무 μž‘μ—…λ„ μˆ˜ν–‰ν•˜μ§€ μ•Šμ§€λ§Œ 그렇지 μ•Šμ€ 경우 λ Œλ”λ§μ€ λ¬Έμžμ— μ˜ν•΄ μ™Όμͺ½μœΌλ‘œ 천천히 μ΄λ™ν•©λ‹ˆλ‹€ (μ•„μ΄μ½˜μ˜ 였λ₯Έμͺ½ 절반이 κ·Έ 뒀에 λ‚¨μŠ΅λ‹ˆλ‹€).

λ°± μŠ€νŽ˜μ΄μŠ€μ—μ„œ * _animation[0].length λ₯Ό μ œκ±°ν•˜μ—¬ 항상 단일 λ°± 슀페이슀λ₯Ό μˆ˜ν–‰ν•˜λ©΄ VS Code ν„°λ―Έλ„μ—μ„œλŠ” μ œλŒ€λ‘œ μž‘λ™ν•˜μ§€λ§Œ macOS ν„°λ―Έλ„μ—μ„œλŠ” 더 이상 λ°± μŠ€νŽ˜μ΄μŠ€κ°€ μΆ©λΆ„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ (κ·ΈλŸ¬λ―€λ‘œ 달이 였λ₯Έμͺ½μœΌλ‘œ 이동 !).

https://github.com/Microsoft/vscode/issues/60470에 μ–ΈκΈ‰ 된 νžˆλΈŒλ¦¬μ–΄ / μ•„λžμ–΄μ—λ„ μ μš©λ©λ‹ˆλ‹€.

Ubuntu 18.04의 VSCode 1.31.1μ—μ„œμ΄ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

ν™”μ‚΄ν‘œ ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ…λ Ή 기둝을 μœ„μ•„λž˜λ‘œ μŠ€ν¬λ‘€ν•˜λ©΄ μ‹€ν–‰ν•˜λ €λŠ” λͺ…령에 λ„λ‹¬ν•˜λ©΄ 읽을 μˆ˜μžˆλŠ” κ°€λŠ₯성이 없도둝 μ•„ν‹°νŒ©νŠΈκ°€ μ„ νƒλ©λ‹ˆλ‹€.

λ˜ν•œ μ•„ν‹°νŒ©νŠΈλ₯Ό μ„ νƒν•œ ν›„ ν‘œμ‹œλ˜λŠ” λ‚΄μš©μ΄ xterm의 λ©”λͺ¨λ¦¬μ—μžˆλŠ” λ‚΄μš©κ³Ό λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— λͺ…λ Ή νŽΈμ§‘μ΄ 버그가 μžˆμŠ΅λ‹ˆλ‹€.

단계 :

λ‚΄ ν”„λ‘¬ν”„νŠΈμ— 이λͺ¨ν‹°μ½˜μ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
screenshot from 2019-02-21 11-10-15
npm i λͺ…령을 내리렀면 μœ„μͺ½ ν™”μ‚΄ν‘œλ₯Ό ν•œ 번 λˆ„λ₯΄μ‹­μ‹œμ˜€.
screenshot from 2019-02-21 11-10-55

ν”„λ‘¬ν”„νŠΈμ— μΆ”κ°€ 된 λΆˆλŸ‰ n λ₯Ό ν™•μΈν•©λ‹ˆλ‹€.

.bashrc 의 ν”„λ‘¬ν”„νŠΈμ—μ„œ 이λͺ¨ν‹°μ½˜μ„ μ œκ±°ν•˜κ³  μš©μ–΄λ₯Ό λ‹€μ‹œλ‘œλ“œν•˜λ©΄ 버그가 μ‚¬λΌμ§‘λ‹ˆλ‹€.

λ¨Όμ €, μ—¬λŸ¬λΆ„μ˜ λ†€λΌμš΄ μž‘μ—…μ— λŒ€ν•΄ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

macOS Mojave 10.14.3의 VSCode 1.31.1은 λ™μΌν•©λ‹ˆλ‹€. @juliusecker κ°€ μ–ΈκΈ‰ ν•œ n 일도 κ·Έκ°€ μ„€λͺ…ν•œλŒ€λ‘œ μ €μ—κ²Œλ„ λ°œμƒν•©λ‹ˆλ‹€.

@juliuseckerκ°€ μ–ΈκΈ‰ ν•œ 것과 λ™μΌν•œ 버그가 μžˆμŠ΅λ‹ˆλ‹€.
VSCode 버전 1.33.1 (1.33.1) 51b0b28134d51361cf996d2f0a1c698247aeabd8 2019-04-11T08 : 14 : 39.158Z
μ‹œμŠ€ν…œ 버전 : macOS 10.14.4 (18E226)
zsh 5.7.1 (x86_64-apple-darwin17.7.0)

VSCode 및 Powershellμ—μ„œ μž¬ν˜„ν•˜κΈ°κ°€ 맀우 κ°„λ‹¨ν•©λ‹ˆλ‹€.

emojiterminaltest.ps1

"Emoji Normal"
"😊1😊2😊3😊4"
"Emoji with Padding Spaces - What it should look like"
"😊  1😊  2😊  3😊  4"

image

이 ν•­λͺ©μ— ν• λ‹Ή 된 μžμ›μ΄ μžˆμŠ΅λ‹ˆκΉŒ? 이 문제 μŠ€λ ˆλ“œμ—μ„œ λ³Ό 수 μžˆλ“―μ΄ λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨ (Hyper λ“±)μ—μ„œ λ§Žμ€ νšŒκ·€κ°€ λ°œμƒν•œ 것 κ°™μŠ΅λ‹ˆλ‹€.

@jerch λŠ” https://github.com/xtermjs/xterm.js/issues/1709 의 볡제본

@Tyriar 예, ppl이 직면 ν•  κ°€λŠ₯성이 κ°€μž₯ 높은 μ˜ˆμž…λ‹ˆλ‹€-emojis : smile_cat :

λ‚˜λŠ” 이것이 문제λ₯Ό 잘 μ„€λͺ…ν•˜κ³  # 1709κ°€ 해결책을 더 많이 λ³΄μ΄λ―€λ‘œ λ‘˜ λ‹€ μ—΄μ–΄ λ‘˜ 것이라고 μƒκ°ν•©λ‹ˆλ‹€.

Windows 10, λ‹€μŒ λ²„μ „μ—μ„œ 볡제 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
image

image
μœ„λŠ” VS μ½”λ“œ λ‚΄μž₯ ν„°λ―Έλ„μ—μ„œ λ³Ό μˆ˜μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€.
image
μœ„μ˜ λ‚΄μš©μ€ ν…μŠ€νŠΈ 파일의 λ™μΌν•œ ν…μŠ€νŠΈκ°€ VS μ½”λ“œμ—μ„œ 열릴 λ•Œ ν‘œμ‹œλ˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ¬Έμ œκ°€ 거의 2 λ…„ μ •λ„λλŠ”λ° μ—…λ°μ΄νŠΈκ°€ μžˆλ‚˜μš”?

@jerch λŠ” 곧 λ„μ°©ν•˜κΈ°λ₯Ό μ›ν•˜μ§€λ§Œ atm을 계속 μ§„ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이것에 λŒ€ν•œ 큰 μ°¨λ‹¨μ œ 쀑 ν•˜λ‚˜λŠ” ν˜„μž¬ μΆœμ‹œ 된 μƒˆλ‘œμš΄ μ• λ“œμ˜¨ μ‹œμŠ€ν…œμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

https://github.com/xtermjs/xterm.js/issues/1709 λ₯Ό μ°¬μ„±ν•˜μ—¬ λ§ˆλ¬΄λ¦¬ν•˜λŠ” 것은 본질적으둜 λ™μΌν•œ 것이며 μš°λ¦¬λŠ” 문제λ₯Ό 카운트 λ‹€μš΄ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰