본문 바로가기
C.W.K.
Stream
Lesson 03 of 05 · published

탭은 옮길 수 있는 트리아

~12 min · tab, drag, tear-off, tree, identity

Level 0불씨
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

그림이 아니라 트리를 옮겨

탭은 판 스크린샷에 붙인 제목 줄이 아니야. 트리지. 판 컨트롤러, PTY 부착, 제목, 색, 포커스된 판. 창 안에서 끌어 순서를 바꾸고, 새 창으로 떼고, 다른 창에 놓기. 트리가 그 이동을 살아남아야 해. 드래그가 픽셀을 복사하고 새 프로세스를 띄우면, 탭을 옮긴 게 아니야. 모습을 복제하고 일을 고아로 만든 거야.

그래서 지난 레슨이 판은 객체라고 고집했어. 객체는 부모를 바꿀 수 있어. 그림은 처음부터 다시 그려야 하고, 그건 새 PTY 고, 그건 자리 메우기 셸이고, 그건 한창이던 컴파일러는 옛 창에 남아 있고 새 창에서는 신선한 zsh 가 깜빡인다는 뜻이야. 터미널에서 산다는 건 일을 옮기는 거야. 옮기기가 복제면 옮기기를 그만두고, 첫 트랙의 기준이 날짜 있는 줄을 모으기 시작해.

자리 메우기 셸도, 합성 Enter 도 없어

PTY 를 데려가지 못하는 이동은 속이고 싶어져. 목적지에 셸을 띄우고, 옛 디렉터리로 cd 하고, 준비된 척하려고 Enter 를 합성하고. 그 속임수는 드래그 제스처를 입은 모델 모양 쓰기다. 새 판은 옛 일이 아니야. 닮은꼴이야. Smolder 는 닮은꼴을 거절해. 트리가 못 움직이면 드래그는 실패해. 프로세스를 지어내고 거기에 치지 않아.

합성 Enter 는 문 트랙이 Anvil 초안이랑 피파 제안에 붙일 죄랑 같아. 운영자가 안 누른 줄바꿈은 엉뚱한 것에 엉뚱한 뇌를 제출하는 길이야. 드래그는 운영자가 Enter 를 누른 게 아니야. 옮긴 탭의 목적지는 이미 있던 일 위에서 켜져야 해. 놀고, 기다리고, 지어낸 프롬프트와 경주하지 않고.

창을 건너도 주인은 하나

창 둘은 같은 데몬의 투영 둘이야. 그 사이로 탭을 옮기는 건 한 투영에서 다른 투영으로 트리를 다시 부모 맺는 거지, 프로세스를 새 주인에게 보내는 게 아니야. 데몬이 이미 PTY 를 소유했어. 앱은 어느 유리가 그걸 보여줄지를 다시 놓는 중이야. 두 번째 데몬을 시작하는 떼어내기는 두 번째 공장이고, 어느 창을 꺼도 모호해져. 누구의 일, 누구의 저널, 누구의 복원.

창 안 순서 바꾸기는 같은 사실의 작은 경우야. 탭 띠는 트리의 목록이야. 띠를 따라 제목을 끄는 건 목록 순서를 바꾸지, 프로세스 정체성을 바꾸지 않아. 순서가 픽셀로만 저장되면 복원은 어느 트리가 어느 것인지 몰라. 정체성은 객체를 타고 가서, 점심 먹고 돌아와도 옮긴 탭은 아직 자기 자신이야.

탭은 드래그할 수 있는 트리아. 일은 살아남아. 자리 메우기 셸이랑 합성 Enter 는 이동이 복제가 되는 길이고, 복제는 옮겼다고 생각한 일을 잃는 길이야.

Code

드래그와 함께 여행해야 하는 것·text
drag payload = the tab tree, not a screenshot
  - each leaf's pane controller
  - each leaf's PTY attachment (same daemon, same process)
  - title, color, focused leaf
  - split ratios

# Legal destinations
  reorder in this window's tab strip
  tear-off -> new window, same daemon
  drop onto another window, same daemon

# Illegal compensations when a move cannot take the PTY
  spawn a placeholder shell
  cd to the old directory and hope
  synthesize Enter so the prompt looks "ready"
  copy pixels into a new emulator and call it the same tab

# If the tree cannot move, the drag fails.
# Failure is honest. A lookalike is not.

External links

Exercise

두 번째 모니터로 떼어낼 세 판 탭을 설명해. 새 창에서 아직 참이어야 하는 것 다섯을 적어 (프로세스, 포커스, 제목, 비율, 저널). 그다음 PTY 를 못 옮길 때 겁난 구현이 시도할 속임수 둘과, 속임수마다 거절에 쓸 문장 하나를 적어.
Hint
컴파일러 PID 가 바뀌었으면 복제한 거야. 아무도 안 누른 줄바꿈이 나타났으면 제출한 거야. 스크린샷이 같아도 둘 다 실패한 이동이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.