# SumatraPDF 검색 입력 자동 실행 제어 옵션 추가 계획
## 목표
검색 입력창(`Find`)에서 타이핑할 때마다 자동 검색이 실행되는 현재 동작을 옵션화하여,
옵션이 꺼져 있을 때는 **Enter(또는 F3/Shift+F3)** 로만 검색이 실행되게 한다.
- 기본 문제: 한글 IME 조합 중간 상태에서도 `EN_UPDATE`가 발생하여 무의미한 검색 스레드가 반복 실행됨
- 기대 효과: 불필요한 검색 요청 감소, IME 사용자(특히 한글) 사용성 개선
---
## 현재 코드 동작 분석
### 1) 타이핑 시 자동 검색 트리거 위치
- `src/Toolbar.cpp:546` 부근 `WndProcToolbar()`
- `WM_COMMAND` + `EN_UPDATE` + `hEdit == win->hwndFindEdit` 조건에서:
- `Edit_GetModify()`가 true이면
- `FindTextOnThread(win, TextSearch::Direction::Forward, false)` 호출
- 핵심 라인: `src/Toolbar.cpp:550`, `src/Toolbar.cpp:553`
즉, 자동 검색은 툴바 Edit 컨트롤의 `EN_UPDATE` 처리로 구현되어 있음.
### 2) Enter/F3 검색 경로
- Enter 처리: `src/Toolbar.cpp:606` (`WndProcEditSearch`, `WM_CHAR`, `VK_RETURN`)
- Shift+Enter → `FindPrev(win)`
- Enter → `FindNext(win)`
- F3 처리: `src/Toolbar.cpp:632` (`WM_KEYDOWN`, `VK_F3`)
- 최종 검색 실행은 `src/SearchAndDDE.cpp:467` 오버로드 `FindTextOnThread(win, direction, showProgress)` 경유
- 여기서 `Edit_GetModify()` 기반으로 신규 검색/다음 검색 구분
즉, 자동검색을 끄더라도 Enter/F3 기반 검색은 기존 구조로 자연스럽게 유지 가능.
### 3) 설정(Advanced options) 정의 위치
- 이 코드베이스는 설정을 직접 `Settings.h`에 추가하지 않고 생성 스크립트에서 정의:
- `cmd/gen-settings.ts` (프로젝트 규칙: `agents.md:19-24`)
- 현재 `ShowToolbar` 등 GlobalPrefs 필드가 `cmd/gen-settings.ts:660+` 영역에서 정의됨
- 생성 결과물:
- `src/Settings.h`
- 문서(고급 설정 관련 마크다운/웹 문서 일부)
---
## 구현 계획
## 1. 새 고급 설정 추가
`cmd/gen-settings.ts`의 GlobalPrefs 필드 목록에 bool 설정 추가:
- 제안 이름: `FindAsYouType`
- 타입/기본값: `Bool`, `true` (기존 동작 유지)
- 설명 코멘트(예시):
- `"if true, typing in find box triggers search automatically; if false, search runs only on Enter/F3"`
왜 기본값 `true`인가:
- 기존 사용자 동작을 깨지 않음 (하위 호환)
- IME 사용자/원하는 사용자만 명시적으로 끌 수 있음
> 대안: 기본값을 `false`로 둘 수도 있으나 기존 UX 변화 폭이 크므로 비권장.
---
## 2. 설정 코드 생성 반영
아래를 실행해 생성물 갱신:
- `bun cmd/gen-settings.ts`
예상 반영 파일:
- `src/Settings.h` (GlobalPrefs struct + metadata)
- 고급 설정 문서 파일(생성 스크립트가 관리하는 문서)
주의:
- 생성 파일을 수동 편집하지 않고 스크립트로 갱신해야 일관성 유지.
---
## 3. 자동 검색 분기 조건에 옵션 반영
`src/Toolbar.cpp`의 자동검색 조건(`EN_UPDATE`)에 새 옵션 체크 추가:
현재(개념):
- `... && gGlobalPrefs->showToolbar`
변경 후(개념):
- `... && gGlobalPrefs->showToolbar && gGlobalPrefs->findAsYouType`
실제 적용 위치:
- `src/Toolbar.cpp:550` 조건문
- 검색 실행 호출부는 그대로 유지 (`FindTextOnThread(..., false)`)
효과:
- `FindAsYouType = false`일 때 IME 조합 중 `EN_UPDATE`가 와도 자동 검색 미실행
- Enter/F3 검색 경로는 그대로 동작
---
## 4. 동작 검증 계획
### 기능 검증
1. `FindAsYouType = true`
- 영어 입력 시 기존처럼 자동 검색되는지
- Enter/F3도 정상 동작하는지
2. `FindAsYouType = false`
- 타이핑 중 검색이 실행되지 않는지
- Enter로 검색 실행되는지
- Shift+Enter, F3/Shift+F3로 다음/이전 검색 정상인지
3. 한글 IME 테스트
- 조합 중(미완성) 입력에서 불필요 검색이 발생하지 않는지
- 조합 완료 후 Enter 시 정상 검색되는지
### 회귀 검증
- `Ctrl+F` 후 포커스 이동/찾기 박스 동작 회귀 여부
- 탭 전환 후 검색어 유지 및 수정 플래그 처리(`SearchAndDDE.cpp:471+`) 이상 여부
### 빌드 검증
- `bun ./cmd/build.ts` 로 컴파일 확인
---
## 5. 문서/릴리즈 노트 반영(권장)
옵션이 사용자 노출되는 고급 설정이므로 다음 반영 권장:
- `docs/md/Version-history.md`의 next 섹션에 항목 추가
- 예: “add `FindAsYouType` advanced setting to disable auto-search while typing in find box”
(고급 설정 본문 문서는 `gen-settings.ts` 생성물로 자동 반영될 가능성이 큼)
---
## 변경 파일 예상 목록
- `cmd/gen-settings.ts` (새 설정 정의)
- `src/Toolbar.cpp` (자동 검색 조건 분기)
- `src/Settings.h` (생성 결과)
- (생성 스크립트가 갱신하는 설정 문서 파일들)
- `docs/md/Version-history.md` (수동 반영 시)
---
## 리스크 및 대응
- 리스크: 옵션 기본값을 false로 두면 기존 UX가 크게 바뀜
- 대응: 기본값 true 유지
- 리스크: 생성 파일 수동 편집 시 추후 재생성에서 충돌
- 대응: 반드시 `cmd/gen-settings.ts`에서 원천 정의 후 생성
- 리스크: Enter 전용 검색에서 일부 사용자가 “반응 없음”으로 오해 가능
- 대응: 설정 설명 문구를 명확히 작성
---
## 완료 기준 (Definition of Done)
- `FindAsYouType` 고급 설정이 설정 파일/문서에 노출됨
- `FindAsYouType=false`에서 타이핑 자동 검색이 발생하지 않음
- Enter/F3 기반 검색은 기존처럼 정상 작동
- 빌드 성공 및 기본 검색 기능 회귀 없음