Skip to content

feat: add visual prompt rendering for code blocks #2

Description

@keytech42

기능 제안: 코드 블록 내 프롬프트(기호) 시각화 지원

🧩 제안 배경

문서 내 쉘 명령어나 디버깅 예제를 코드 블록으로 작성할 때, 프롬프트($, #, (gdb) 등)를 시각적으로 함께 보여줄 필요가 있다.
하지만 프롬프트를 코드 블록 본문에 직접 포함하면 복사 시 불필요한 문자열이 함께 복사돼 사용성을 해친다.
프롬프트는 시각적으로는 노출되되, 실제 복사되는 텍스트에는 포함되지 않도록 분리 렌더링할 수 있어야 한다.

💡 제안 내용

프롬프트 기호를 코드 블록의 속성(prop)으로 지정하고, 렌더링 결과에만 반영되도록 처리한다.
본문에는 명령어만 작성하고, 프롬프트는 메타 정보로 분리해 전달한다.

요구 사항:

  • $, #, (gdb) 등 프롬프트 기호를 코드 블록 좌측 또는 인라인으로 시각적 표시
  • 복사 시에는 명령어 본문만 클립보드에 포함되도록 처리
  • 프롬프트 종류를 마크다운 코드 블록의 속성으로 지정 가능
  • 접근성을 고려해 aria-hidden 등 사용

예시 입력

```shell prompt="$"
echo "Hello"
apt update
```

기대 렌더링 결과

$ echo "Hello"
$ apt update

복사 시:

echo "Hello"
apt update

🔧 구현 접근

Starlight는 코드 블록 렌더링에 Expressive Code를 사용하므로, 해당 기능은 Expressive Code의 커스텀 플러그인으로 구현하는 것이 적절해 보인다.

플러그인은 다음을 수행한다:

  • 코드 블록 속성에서 프롬프트 기호를 읽어 각 줄에 시각적으로 표시
  • 렌더링 시 프롬프트를 별도 레이어로 분리
  • 복사 시 프롬프트가 제외되도록 DOM 구조 또는 클립보드 핸들링을 조작
  • 접근성과 유연성을 위해 aria-hidden, data-* 속성 등을 활용

🔠 prop 명칭에 대한 고려

현재 제안하는 속성명은 prompt이다.

  • prompt는 직관적이고 간결하지만, 일반적인 용례(예: window.prompt)와의 혼동 가능성 있음
  • 대안으로 promptSymbol, promptPrefix, shellPrompt, uiPrompt 등을 고려할 수 있음
  • 단일 타입 프롬프트 지원이 기본이라면 prompt가 적절하며, 확장이 필요할 경우 더 구체적인 이름이 바람직함

✨ 기대 효과

  • 문서 내 예제 코드의 시각적 명확성 향상
  • 사용자는 별도 편집 없이 명령어를 바로 복사해 사용할 수 있음
  • 다양한 환경(쉘, 루트, 디버거 등)에 유연하게 대응 가능
  • 유지보수 측면에서도 Expressive Code의 확장 방식과 잘 맞음

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions