payload: {"action":"closed","number":197,"pull_request":{"url":"https://api.github.com/repos/connect-foundation/2019-14/pulls/197","id":349764959,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQ5NzY0OTU5","html_url":"https://github.com/connect-foundation/2019-14/pull/197","diff_url":"https://github.com/connect-foundation/2019-14/pull/197.diff","patch_url":"https://github.com/connect-foundation/2019-14/pull/197.patch","issue_url":"https://api.github.com/repos/connect-foundation/2019-14/issues/197","number":197,"state":"closed","locked":false,"title":"[김윤환]w4_리뷰요청_Terminal React component ","user":{"login":"DrizzlingCattus","id":4661295,"node_id":"MDQ6VXNlcjQ2NjEyOTU=","avatar_url":"https://avatars3.githubusercontent.com/u/4661295?v=4","gravatar_id":"","url":"https://api.github.com/users/DrizzlingCattus","html_url":"https://github.com/DrizzlingCattus","followers_url":"https://api.github.com/users/DrizzlingCattus/followers","following_url":"https://api.github.com/users/DrizzlingCattus/following{/other_user}","gists_url":"https://api.github.com/users/DrizzlingCattus/gists{/gist_id}","starred_url":"https://api.github.com/users/DrizzlingCattus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DrizzlingCattus/subscriptions","organizations_url":"https://api.github.com/users/DrizzlingCattus/orgs","repos_url":"https://api.github.com/users/DrizzlingCattus/repos","events_url":"https://api.github.com/users/DrizzlingCattus/events{/privacy}","received_events_url":"https://api.github.com/users/DrizzlingCattus/received_events","type":"User","site_admin":false},"body":"![boost-writer-0 2](https://user-images.githubusercontent.com/4661295/69839079-6d397600-1299-11ea-95ee-53fad81c43c6.gif)\r\n\r\n위 상황이 지금 master에 있는 결과물입니다.\r\n\r\n현재 저희 마크다운 문법 $$$를 입력하면 터미널 뷰가 생성되고 not-pending shell command는 입/출력이 됩니다.\r\n\r\n여기서 말하는 not-pending shell command는 ls, echo 처럼 입력을 하면 stdin으로 기다리지않고 바로 결과물을 출력할 수 있는 쉘 명령을 말합니다.\r\n\r\n반대로 cat >> hello.txt 같은 경우 사용자의 입력을 기다리게되므로 이런 명령들을 pending shell command라고 하고 지금은 이 기능은 구현되어있지않습니다.\r\n\r\n지금 gif에서 하는 동작 중에 키보드 arrow up 키로 이미 작성한 쉘 명령에 포커스를 변경하는 작업이 있습니다.\r\n\r\n포커스를 변경하면 다시 값을 평가해야해서 이전에 작성한 내역이 사라집니다.\r\n\r\n이 기능은 아직 버그가 있어서 보시는 것처럼 제대로 동작하지않습니다. \r\n- 포커스도 부분적으로 아직 동작하지않습니다.\r\n- 포커스를 이동한 다음 명령어를 입력하면 잘 동작하지않습니다.\r\n\r\n## 질문\r\n\r\n터미널 뷰의 랜더링 방식과 포커싱 방식이 괜찮은 방향으로 진행한것인지 질문드리고 싶습니다.\r\n\r\n지금 터미널 뷰는 repl cell들과 단 하나의 movable repl cell로 구성되어있습니다.\r\n\r\n여기서 말하는 cell은 react component인데 저희가 마크다운 컴포넌트들을 cell로 부르기로해서 이렇게 기술했습니다.\r\n\r\nrepl cell은 단지 출력하는 용도의 cell이어서 terminal store에 저장되어있는 데이터를 가져와서 출력합니다.\r\n\r\n실제로 데이터를 입력받는 부분은 movable repl cell이고, 포커스를 변경한다는 의미는 movable repl cell가 출력되는 위치를 변경한다는 의미입니다.\r\n\r\n예를 들어 다음과 같습니다.\r\n\r\nstore에 데이터가 다음과 같이 구성되어있습니다. (필요한 부분만 간단하게 기술하겠습니다)\r\n\r\n```\r\nstore =  \r\n  InputTexts: [ repl1, repl2, repl3 ],\r\n  outputTexts: [out1, out2, out3 ],\r\n  focusIndex: 3\r\n  currentText: \"\"\r\n```\r\n\r\n출력은 다음처럼됩니다.\r\n\r\n```\r\n===\r\nrepl1\r\nout1\r\n===\r\n\r\n===\r\nrepl2\r\nout2\r\n===\r\n\r\n===\r\nrepl3\r\nout3\r\n===\r\n\r\n// 사용자 입력을 받는 repl. (focus되어 있습니다)\r\n$ ->\r\n```\r\n\r\n이 상황에서 사용자가 movable repl cell에 `echo \"hello\"`을 입력하면 데이터는 다음과 같이 변합니다.\r\n\r\n```\r\nstore =  \r\n  InputTexts: [ repl1, repl2, repl3 ],\r\n  outputTexts: [out1, out2, out3 ],\r\n  focusIndex: 3\r\n  currentText: \"echo \"hello\"\"\r\n```\r\n\r\n그리고 엔터를 눌러 값을 평가하면 해당 값을 새로운 repl cell로 만들면서 맨 아래로 movable cell이 이동합니다.\r\n\r\n즉 다음과 같이 변합니다.\r\n\r\n```\r\nstore =  \r\n  InputTexts: [ repl1, repl2, repl3, echo \"hello\" ],\r\n  outputTexts: [out1, out2, out3, \"\" ],\r\n  focusIndex: 4\r\n  currentText: \"\"\r\n```\r\n\r\n출력(뷰)은 다음처럼 됩니다.\r\n\r\n\r\n```\r\n===\r\nrepl1\r\nout1\r\n===\r\n\r\n===\r\nrepl2\r\nout2\r\n===\r\n\r\n===\r\nrepl3\r\nout3\r\n===\r\n\r\n===\r\necho \"hello\"\r\n\"\"\r\n===\r\n\r\n// 사용자 입력을 받는 repl. (focus되어 있습니다)\r\n$ ->\r\n```\r\n\r\n`echo \"hello\"`는 서버 요청을 하기때문에 조금 기다리면 결과물이 출려되고 데이터는 다음처럼 바뀝니다.\r\n\r\n```\r\nstore =  \r\n  InputTexts: [ repl1, repl2, repl3, echo \"hello\" ],\r\n  outputTexts: [out1, out2, out3, \"hello\" ],\r\n  focusIndex: 4\r\n  currentText: \"\"\r\n```\r\n\r\n\r\n```\r\n===\r\nrepl1\r\nout1\r\n===\r\n\r\n===\r\nrepl2\r\nout2\r\n===\r\n\r\n===\r\nrepl3\r\nout3\r\n===\r\n\r\n===\r\necho \"hello\"\r\n\"hello\"\r\n===\r\n\r\n// 사용자 입력을 받는 repl. (focus되어 있습니다)\r\n$ ->\r\n```\r\n\r\n이 상황에서 키보드 arrow up키를 누르면 movable repl cell을 위로 이동시킵니다.\r\n\r\n방법은 focusIndex를 변경만하면 movable repl cell이 해당 위치에 출력되도록 변경하는 것입니다.\r\n\r\n```\r\nstore =  \r\n  InputTexts: [ repl1, repl2, repl3, \"\" ],\r\n  outputTexts: [out1, out2, out3, \"\" ],\r\n  focusIndex: 3\r\n  currentText: \"\"\r\n```\r\n\r\n\r\n```\r\n===\r\nrepl1\r\nout1\r\n===\r\n\r\n===\r\nrepl2\r\nout2\r\n===\r\n\r\n===\r\nrepl3\r\nout3\r\n===\r\n\r\n\r\n// 사용자 입력을 받는 repl. (focus되어 있습니다)\r\n$ -> echo \"hello\"\r\n\r\n===\r\n\"\"\r\n\"\"\r\n===\r\n\r\n```\r\n\r\n1. 이렇게 movable repl cell을 이동시키는 방식으로 포커스를 조절하는게 react 스러운 방법일까요?\r\n\r\n2. 이렇게 랜더링을 하면 문제는 없을까요?\r\n\r\n이상입니다.\r\n\r\n읽어주셔서 감사합니다!","created_at":"2019-12-06T04:56:37Z","updated_at":"2019-12-18T04:49:09Z","closed_at":"2019-12-18T04:49:09Z","merged_at":null,"merge_commit_sha":"659cf88587c5019b78bdb2ff3ecff0c867339506","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/connect-foundation/2019-14/pulls/197/commits","review_comments_url":"https://api.github.com/repos/connect-foundation/2019-14/pulls/197/comments","review_comment_url":"https://api.github.com/repos/connect-foundation/2019-14/pulls/comments{/number}","comments_url":"https://api.github.com/repos/connect-foundation/2019-14/issues/197/comments","statuses_url":"https://api.github.com/repos/connect-foundation/2019-14/statuses/ab5bf97fda486cc3c8384b4995d41c8861e11c5b","head":{"label":"DrizzlingCattus:review-2","ref":"review-2","sha":"ab5bf97fda486cc3c8384b4995d41c8861e11c5b","user":{"login":"DrizzlingCattus","id":4661295,"node_id":"MDQ6VXNlcjQ2NjEyOTU=","avatar_url":"https://avatars3.githubusercontent.com/u/4661295?v=4","gravatar_id":"","url":"https://api.github.com/users/DrizzlingCattus","html_url":"https://github.com/DrizzlingCattus","followers_url":"https://api.github.com/users/DrizzlingCattus/followers","following_url":"https://api.github.com/users/DrizzlingCattus/following{/other_user}","gists_url":"https://api.github.com/users/DrizzlingCattus/gists{/gist_id}","starred_url":"https://api.github.com/users/DrizzlingCattus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DrizzlingCattus/subscriptions","organizations_url":"https://api.github.com/users/DrizzlingCattus/orgs","repos_url":"https://api.github.com/users/DrizzlingCattus/repos","events_url":"https://api.github.com/users/DrizzlingCattus/events{/privacy}","received_events_url":"https://api.github.com/users/DrizzlingCattus/received_events","type":"User","site_admin":false},"repo":{"id":220471627,"node_id":"MDEwOlJlcG9zaXRvcnkyMjA0NzE2Mjc=","name":"2019-14","full_name":"DrizzlingCattus/2019-14","private":false,"owner":{"login":"DrizzlingCattus","id":4661295,"node_id":"MDQ6VXNlcjQ2NjEyOTU=","avatar_url":"https://avatars3.githubusercontent.com/u/4661295?v=4","gravatar_id":"","url":"https://api.github.com/users/DrizzlingCattus","html_url":"https://github.com/DrizzlingCattus","followers_url":"https://api.github.com/users/DrizzlingCattus/followers","following_url":"https://api.github.com/users/DrizzlingCattus/following{/other_user}","gists_url":"https://api.github.com/users/DrizzlingCattus/gists{/gist_id}","starred_url":"https://api.github.com/users/DrizzlingCattus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DrizzlingCattus/subscriptions","organizations_url":"https://api.github.com/users/DrizzlingCattus/orgs","repos_url":"https://api.github.com/users/DrizzlingCattus/repos","events_url":"https://api.github.com/users/DrizzlingCattus/events{/privacy}","received_events_url":"https://api.github.com/users/DrizzlingCattus/received_events","type":"User","site_admin":false},"html_url":"https://github.com/DrizzlingCattus/2019-14","description":null,"fork":true,"url":"https://api.github.com/repos/DrizzlingCattus/2019-14","forks_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/forks","keys_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/keys{/key_id}","collaborators_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/teams","hooks_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/hooks","issue_events_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/issues/events{/number}","events_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/events","assignees_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/assignees{/user}","branches_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/branches{/branch}","tags_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/tags","blobs_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/git/refs{/sha}","trees_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/git/trees{/sha}","statuses_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/statuses/{sha}","languages_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/languages","stargazers_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/stargazers","contributors_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/contributors","subscribers_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/subscribers","subscription_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/subscription","commits_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/commits{/sha}","git_commits_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/git/commits{/sha}","comments_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/comments{/number}","issue_comment_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/issues/comments{/number}","contents_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/contents/{+path}","compare_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/compare/{base}...{head}","merges_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/merges","archive_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/downloads","issues_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/issues{/number}","pulls_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/pulls{/number}","milestones_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/milestones{/number}","notifications_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/labels{/name}","releases_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/releases{/id}","deployments_url":"https://api.github.com/repos/DrizzlingCattus/2019-14/deployments","created_at":"2019-11-08T13:23:22Z","updated_at":"2019-11-22T10:01:08Z","pushed_at":"2019-12-18T04:48:27Z","git_url":"git://github.com/DrizzlingCattus/2019-14.git","ssh_url":"git@github.com:DrizzlingCattus/2019-14.git","clone_url":"https://github.com/DrizzlingCattus/2019-14.git","svn_url":"https://github.com/DrizzlingCattus/2019-14","homepage":null,"size":1152,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"connect-foundation:review","ref":"review","sha":"6e005bc6adc49581305e6ffddaa1505f259f9cac","user":{"login":"connect-foundation","id":51152324,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUxMTUyMzI0","avatar_url":"https://avatars2.githubusercontent.com/u/51152324?v=4","gravatar_id":"","url":"https://api.github.com/users/connect-foundation","html_url":"https://github.com/connect-foundation","followers_url":"https://api.github.com/users/connect-foundation/followers","following_url":"https://api.github.com/users/connect-foundation/following{/other_user}","gists_url":"https://api.github.com/users/connect-foundation/gists{/gist_id}","starred_url":"https://api.github.com/users/connect-foundation/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/connect-foundation/subscriptions","organizations_url":"https://api.github.com/users/connect-foundation/orgs","repos_url":"https://api.github.com/users/connect-foundation/repos","events_url":"https://api.github.com/users/connect-foundation/events{/privacy}","received_events_url":"https://api.github.com/users/connect-foundation/received_events","type":"Organization","site_admin":false},"repo":{"id":218952322,"node_id":"MDEwOlJlcG9zaXRvcnkyMTg5NTIzMjI=","name":"2019-14","full_name":"connect-foundation/2019-14","private":false,"owner":{"login":"connect-foundation","id":51152324,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUxMTUyMzI0","avatar_url":"https://avatars2.githubusercontent.com/u/51152324?v=4","gravatar_id":"","url":"https://api.github.com/users/connect-foundation","html_url":"https://github.com/connect-foundation","followers_url":"https://api.github.com/users/connect-foundation/followers","following_url":"https://api.github.com/users/connect-foundation/following{/other_user}","gists_url":"https://api.github.com/users/connect-foundation/gists{/gist_id}","starred_url":"https://api.github.com/users/connect-foundation/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/connect-foundation/subscriptions","organizations_url":"https://api.github.com/users/connect-foundation/orgs","repos_url":"https://api.github.com/users/connect-foundation/repos","events_url":"https://api.github.com/users/connect-foundation/events{/privacy}","received_events_url":"https://api.github.com/users/connect-foundation/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/connect-foundation/2019-14","description":"📒 마크다운 문서속에서 터미널을 사용할 수 있다!","fork":false,"url":"https://api.github.com/repos/connect-foundation/2019-14","forks_url":"https://api.github.com/repos/connect-foundation/2019-14/forks","keys_url":"https://api.github.com/repos/connect-foundation/2019-14/keys{/key_id}","collaborators_url":"https://api.github.com/repos/connect-foundation/2019-14/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/connect-foundation/2019-14/teams","hooks_url":"https://api.github.com/repos/connect-foundation/2019-14/hooks","issue_events_url":"https://api.github.com/repos/connect-foundation/2019-14/issues/events{/number}","events_url":"https://api.github.com/repos/connect-foundation/2019-14/events","assignees_url":"https://api.github.com/repos/connect-foundation/2019-14/assignees{/user}","branches_url":"https://api.github.com/repos/connect-foundation/2019-14/branches{/branch}","tags_url":"https://api.github.com/repos/connect-foundation/2019-14/tags","blobs_url":"https://api.github.com/repos/connect-foundation/2019-14/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/connect-foundation/2019-14/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/connect-foundation/2019-14/git/refs{/sha}","trees_url":"https://api.github.com/repos/connect-foundation/2019-14/git/trees{/sha}","statuses_url":"https://api.github.com/repos/connect-foundation/2019-14/statuses/{sha}","languages_url":"https://api.github.com/repos/connect-foundation/2019-14/languages","stargazers_url":"https://api.github.com/repos/connect-foundation/2019-14/stargazers","contributors_url":"https://api.github.com/repos/connect-foundation/2019-14/contributors","subscribers_url":"https://api.github.com/repos/connect-foundation/2019-14/subscribers","subscription_url":"https://api.github.com/repos/connect-foundation/2019-14/subscription","commits_url":"https://api.github.com/repos/connect-foundation/2019-14/commits{/sha}","git_commits_url":"https://api.github.com/repos/connect-foundation/2019-14/git/commits{/sha}","comments_url":"https://api.github.com/repos/connect-foundation/2019-14/comments{/number}","issue_comment_url":"https://api.github.com/repos/connect-foundation/2019-14/issues/comments{/number}","contents_url":"https://api.github.com/repos/connect-foundation/2019-14/contents/{+path}","compare_url":"https://api.github.com/repos/connect-foundation/2019-14/compare/{base}...{head}","merges_url":"https://api.github.com/repos/connect-foundation/2019-14/merges","archive_url":"https://api.github.com/repos/connect-foundation/2019-14/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/connect-foundation/2019-14/downloads","issues_url":"https://api.github.com/repos/connect-foundation/2019-14/issues{/number}","pulls_url":"https://api.github.com/repos/connect-foundation/2019-14/pulls{/number}","milestones_url":"https://api.github.com/repos/connect-foundation/2019-14/milestones{/number}","notifications_url":"https://api.github.com/repos/connect-foundation/2019-14/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/connect-foundation/2019-14/labels{/name}","releases_url":"https://api.github.com/repos/connect-foundation/2019-14/releases{/id}","deployments_url":"https://api.github.com/repos/connect-foundation/2019-14/deployments","created_at":"2019-11-01T09:11:40Z","updated_at":"2019-12-18T03:05:50Z","pushed_at":"2019-12-17T11:59:55Z","git_url":"git://github.com/connect-foundation/2019-14.git","ssh_url":"git@github.com:connect-foundation/2019-14.git","clone_url":"https://github.com/connect-foundation/2019-14.git","svn_url":"https://github.com/connect-foundation/2019-14","homepage":"https://boostwriter.stenrine.com","size":1149,"stargazers_count":3,"watchers_count":3,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":36,"license":null,"forks":4,"open_issues":36,"watchers":3,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/connect-foundation/2019-14/pulls/197"},"html":{"href":"https://github.com/connect-foundation/2019-14/pull/197"},"issue":{"href":"https://api.github.com/repos/connect-foundation/2019-14/issues/197"},"comments":{"href":"https://api.github.com/repos/connect-foundation/2019-14/issues/197/comments"},"review_comments":{"href":"https://api.github.com/repos/connect-foundation/2019-14/pulls/197/comments"},"review_comment":{"href":"https://api.github.com/repos/connect-foundation/2019-14/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/connect-foundation/2019-14/pulls/197/commits"},"statuses":{"href":"https://api.github.com/repos/connect-foundation/2019-14/statuses/ab5bf97fda486cc3c8384b4995d41c8861e11c5b"}},"author_association":"COLLABORATOR","merged":false,"mergeable":true,"rebaseable":true,"mergeable_state":"clean","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":459,"deletions":0,"changed_files":2}}
other: {"actor":{"display_login":"DrizzlingCattus"}}