diff --git a/README.md b/README.md index c8c3893..13093a7 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ CodingTestKit was built to **replicate the real exam environment inside your IDE - **Exam Mode**: Disable autocomplete & inspections, block external paste, detect focus loss — practice under real test conditions - **Performance Metrics**: Show execution time (ms) and memory usage per test case -- **Timer**: Stopwatch, circular dial countdown timer, progress bar, digital clock +- **Timer**: Stopwatch, circular dial countdown timer, progress bar, digital clock — plus an always-visible mini bar in the Problems tab and the IDE status bar - **All-in-One**: Fetch, code, test, and submit without leaving the IDE - **Problem Translation**: One-click Korean ↔ English translation with caching and rate limit protection - **GitHub Push**: Auto-push accepted solutions to GitHub @@ -92,7 +92,7 @@ CodingTestKit was built to **replicate the real exam environment inside your IDE | 7 | **My Solved** | List your solved problems on LeetCode & Codeforces | | 8 | [**Code Editor**](#code-editor) | Auto-generated boilerplate code per platform & language | | 9 | [**Code Templates**](docs/features/templates.md) | Save & reuse frequently used code snippets | -| 10 | [**Timer**](docs/features/timer.md) | Stopwatch with laps + countdown with circular dial, progress bar, digital clock | +| 10 | [**Timer**](docs/features/timer.md) | Stopwatch with laps + countdown with circular dial, progress bar, digital clock; mini bar in the Problems tab & status bar | | 11 | [**Settings & Exam Mode**](docs/features/exam-mode.md) | One-click exam mode: block paste, disable autocomplete, focus alert | | 12 | [**GitHub Integration**](docs/features/github.md) | Auto-push accepted solutions to GitHub | | 13 | [**Internationalization**](#internationalization-i18n) | Full Korean / English UI support | @@ -285,6 +285,8 @@ Provides a **Stopwatch** and a **Countdown Timer**. - **Progress Bar**: Linear progress indicator - Preset buttons for 30min, 1hr, 2hr, 3hr - Notification when time's up +- **Problems tab bottom bar**: timer and stopwatch (start/pause/reset) with a thin remaining-time progress bar, always visible at the bottom of the Problems tab — check the clock while reading the problem +- **Status bar**: remaining time also appears next to `CTK: ...` in the IDE status bar, visible from any tab or layout
@@ -351,7 +353,7 @@ Switch between **Korean / English** in settings. All UI text is displayed in the
## Quick Start
-1. Open **CodingTestKit** from the right sidebar
+1. Open **CodingTestKit** from the left sidebar (docked alongside the Project view — the two toggle; drag to another side if you prefer)
2. Select platform and language
3. Enter problem ID and click **Fetch**
4. Write code, click **Run All**
@@ -363,6 +365,8 @@ Switch between **Korean / English** in settings. All UI text is displayed in the
- JDK 17+ (for Java execution) — building the plugin from source requires JDK 21
- Language compilers (for respective language tests)
+> **Windows + C++**: install MinGW-w64 (or MSYS2), add its `bin` folder to PATH, then **fully restart the IDE** — a running IDE does not pick up PATH changes (restart JetBrains Toolbox too if you use it).
+
## Build
```bash
@@ -389,7 +393,7 @@ CodingTestKit은 **실제 시험 환경을 IDE 안에서 그대로 재현**하
- **시험 모드**: 자동완성과 코드 검사를 끄고, 외부 붙여넣기 차단과 포커스 이탈 감지까지 실전과 동일한 환경에서 연습
- **실행 시간 & 메모리 측정**: 테스트 케이스별 실행 시간(ms)과 메모리 사용량(KB/MB)을 표시
-- **타이머**: 스톱워치, 원형 다이얼 카운트다운 타이머, 프로그레스 바, 디지털 시계
+- **타이머**: 스톱워치, 원형 다이얼 카운트다운 타이머, 프로그레스 바, 디지털 시계 — 문제 탭 하단 미니 바와 IDE 상태바에도 항상 표시
- **올인원**: 문제 읽기, 코드 작성, 테스트, 제출까지 IDE를 벗어나지 않고 전부 해결
- **문제 번역**: 한 클릭으로 한국어 ↔ 영어 번역 (캐싱 및 rate limit 보호 내장)
- **GitHub 연동**: 채점 통과 시 자동으로 GitHub에 푸시
@@ -435,7 +439,7 @@ CodingTestKit은 **실제 시험 환경을 IDE 안에서 그대로 재현**하
| 7 | **내 풀이** | LeetCode & Codeforces에서 내가 푼 문제 목록 확인 |
| 8 | [**코드 에디터**](#코드-에디터) | 플랫폼 & 언어별 보일러플레이트 코드 자동 생성 |
| 9 | [**코드 템플릿**](docs/features/templates.md) | 자주 쓰는 코드 스니펫 저장 & 재사용 |
-| 10 | [**타이머**](docs/features/timer.md) | 스톱워치 + 원형 다이얼/프로그레스 바/디지털 시계 카운트다운 |
+| 10 | [**타이머**](docs/features/timer.md) | 스톱워치 + 원형 다이얼/프로그레스 바/디지털 시계 카운트다운, 문제 탭 하단 미니 바 & 상태바 표시 |
| 11 | [**설정 & 시험 모드**](docs/features/exam-mode.md) | 원클릭 시험 모드: 붙여넣기 차단, 자동완성 끄기, 포커스 감지 |
| 12 | [**GitHub 연동**](docs/features/github.md) | 맞은 문제 자동 GitHub 푸시 |
| 13 | [**다국어 지원**](#다국어-지원-i18n) | 한국어 / English UI 완전 지원 |
@@ -628,6 +632,8 @@ FAIL인 케이스는 빨간색으로 표시되어 한눈에 확인할 수 있습
- **프로그레스 바**: 막대형 진행률 표시
- 30분, 1시간, 2시간, 3시간 프리셋 버튼
- 시간 종료 시 알림
+- **문제 탭 하단 바**: 타이머와 스톱워치(시작/일시정지/초기화), 남은 시간 프로그레스 바가 문제 탭 하단에 항상 표시 — 문제를 읽으면서 시간 확인 가능
+- **상태바 표시**: IDE 하단 상태바의 `CTK: ...` 옆에도 남은 시간이 표시되어 어떤 탭·레이아웃에서든 보임
@@ -694,7 +700,7 @@ FAIL인 케이스는 빨간색으로 표시되어 한눈에 확인할 수 있습
## 빠른 시작
-1. 우측 사이드바에서 **CodingTestKit** 열기
+1. 좌측 사이드바에서 **CodingTestKit** 열기 (프로젝트 뷰와 같은 자리에서 토글되며, 원하면 드래그로 다른 쪽에 배치 가능)
2. 플랫폼과 언어 선택
3. 문제 번호 입력 후 **가져오기** 클릭
4. 코드 작성 후 **전체 실행** 클릭
@@ -706,6 +712,8 @@ FAIL인 케이스는 빨간색으로 표시되어 한눈에 확인할 수 있습
- JDK 17 이상 (Java 실행용) — 플러그인을 소스에서 직접 빌드하려면 JDK 21 필요
- 각 언어 컴파일러 (해당 언어 테스트 시)
+> **Windows + C++**: MinGW-w64(또는 MSYS2)를 설치하고 `bin` 폴더를 PATH에 등록한 뒤 **IDE를 완전히 재시작**하세요 — 실행 중인 IDE에는 PATH 변경이 반영되지 않습니다 (JetBrains Toolbox 사용 시 Toolbox도 재시작).
+
## 빌드
```bash
diff --git a/docs/README_en.md b/docs/README_en.md
index cfe952e..6f1f1c9 100644
--- a/docs/README_en.md
+++ b/docs/README_en.md
@@ -66,7 +66,7 @@ Select the platform and language, enter a problem number, and the problem descri
- **LeetCode**: Enter number, slug, or URL (e.g., `1`, `two-sum`, full URL)
- **Codeforces**: contestId+letter (e.g., `1234A`) or URL
-> Codeforces: if Cloudflare blocks the request, fetching automatically falls back to the built-in JCEF browser (may take ~5–20 seconds longer).
+> Codeforces: if Cloudflare blocks the request, fetching automatically falls back to a built-in browser (invisible, no window appears). Only the first problem takes ~5–20 seconds longer — once the challenge is passed, its cookies are reused and subsequent fetches are fast.
@@ -295,7 +295,7 @@ Setup: Settings > GitHub Integration > Click "GitHub Login" and select your repo
## Usage
### 1. Fetch a Problem
-1. Open **CodingTestKit** from the right sidebar
+1. Open **CodingTestKit** from the left sidebar (docked alongside the Project view — the two toggle)
2. Select platform and language
3. Enter problem ID and click **Fetch**
- Programmers: `12947`
@@ -330,6 +330,8 @@ Setup: Settings > GitHub Integration > Click "GitHub Login" and select your repo
- JDK 17+ (for Java execution) — building the plugin from source requires JDK 21
- Language compilers (for respective language tests)
+> **Windows + C++**: install MinGW-w64 (or MSYS2), add its `bin` folder to PATH, then **fully restart the IDE** — a running IDE does not pick up PATH changes.
+
## Build
```bash
diff --git a/docs/README_ko.md b/docs/README_ko.md
index 7a87f89..e768374 100644
--- a/docs/README_ko.md
+++ b/docs/README_ko.md
@@ -68,7 +68,7 @@ CodingTestKit은 이런 **실제 시험 환경을 IDE 안에서 그대로 재현
- **LeetCode**: 문제 번호, slug, 또는 URL 입력 (예: `1`, `two-sum`, URL)
- **Codeforces**: 콘테스트번호+문제번호 (예: `1234A`) 또는 URL
-> Codeforces: Cloudflare가 요청을 차단하면 내장 JCEF 브라우저로 자동 폴백합니다 (약 5~20초 더 걸릴 수 있음).
+> Codeforces: Cloudflare가 요청을 차단하면 내장 브라우저(화면에 보이지 않음)로 자동 폴백합니다. 첫 문제만 약 5~20초 더 걸리고, 챌린지를 한 번 통과하면 쿠키를 재사용해 다음 문제부터는 빠르게 가져옵니다.
@@ -297,7 +297,7 @@ FAIL인 케이스는 빨간색으로 표시되어 한눈에 확인할 수 있습
## 사용법
### 1. 문제 가져오기
-1. 우측 사이드바에서 **CodingTestKit** 열기
+1. 좌측 사이드바에서 **CodingTestKit** 열기 (프로젝트 뷰와 같은 자리에서 토글)
2. 플랫폼과 언어 선택
3. 문제 번호 입력 후 **가져오기** 클릭
- 프로그래머스: `12947` (URL의 `/lessons/` 뒤 숫자)
@@ -332,6 +332,8 @@ FAIL인 케이스는 빨간색으로 표시되어 한눈에 확인할 수 있습
- JDK 17 이상 (Java 실행용) — 플러그인을 소스에서 직접 빌드하려면 JDK 21 필요
- 각 언어 컴파일러 (해당 언어 테스트 시)
+> **Windows + C++**: MinGW-w64(또는 MSYS2)를 설치하고 `bin` 폴더를 PATH에 등록한 뒤 **IDE를 완전히 재시작**하세요 — 실행 중인 IDE에는 PATH 변경이 반영되지 않습니다.
+
## 빌드
```bash
diff --git a/docs/features/fetch.md b/docs/features/fetch.md
index 2115b64..dcce2f8 100644
--- a/docs/features/fetch.md
+++ b/docs/features/fetch.md
@@ -56,7 +56,8 @@ Select the platform and language, enter a problem number, and the problem descri
- Supports number (`1`), slug (`two-sum`), and full URL input
#### Codeforces
-- Fetches via HTTP crawling first; if Cloudflare blocks the request (e.g., 403), automatically falls back to the built-in offscreen JCEF browser, which passes the challenge and extracts the page
+- Fetches via HTTP crawling first; if Cloudflare blocks the request (e.g., 403), automatically falls back to the built-in offscreen JCEF browser (rendered off-screen — no window appears on any OS), which passes the challenge and extracts the page
+- Once the challenge is passed, its cookies (`cf_clearance`) are reused so subsequent fetches take the fast HTTP path (~1s)
- When the fallback engages, fetching may take about 5–20 seconds longer
- Requires an IDE with JCEF support (all recent IntelliJ versions)
@@ -100,6 +101,7 @@ Select the platform and language, enter a problem number, and the problem descri
- 번호(`1`), slug(`two-sum`), 전체 URL 입력 지원
#### Codeforces
-- HTTP 크롤링으로 먼저 가져오고, Cloudflare에 차단(403 등)되면 내장 오프스크린 JCEF 브라우저로 자동 폴백하여 챌린지를 통과한 뒤 페이지를 추출
+- HTTP 크롤링으로 먼저 가져오고, Cloudflare에 차단(403 등)되면 내장 오프스크린 JCEF 브라우저로 자동 폴백하여 챌린지를 통과한 뒤 페이지를 추출 (오프스크린 렌더링이라 어떤 OS에서도 창이 나타나지 않음)
+- 챌린지를 한 번 통과하면 그 쿠키(`cf_clearance`)를 재사용해 다음 문제부터는 빠른 HTTP 경로(~1초)로 가져옴
- 폴백이 동작하면 가져오기가 약 5~20초 더 걸릴 수 있음
- JCEF를 지원하는 IDE 필요 (최근 IntelliJ 버전은 모두 지원)
diff --git a/docs/features/timer.md b/docs/features/timer.md
index 8d80d2e..ba7eb0c 100644
--- a/docs/features/timer.md
+++ b/docs/features/timer.md
@@ -33,6 +33,14 @@ Provides a **Stopwatch** and a **Countdown Timer** to help you practice under ti
- Preset buttons: 30min, 1hr, 2hr, 3hr
- Notification alert when time's up
+### Problems Tab Mini Bar & Status Bar
+
+The timer is not locked inside the Timer tab:
+
+- **Problems tab bottom bar**: countdown (left) and stopwatch (right), each with start/pause and reset buttons, plus a thin remaining-time progress bar on top — always visible while reading the problem
+- **IDE status bar**: remaining time appears next to `CTK: ...`, visible from any tab or layout
+- All three views (Timer tab, mini bar, status bar) share the same timer — controlling it from any one of them keeps the others in sync
+