Docs |  A-  |  A*  |  A+  | -/-

# 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 기반 검색은 기존처럼 정상 작동 - 빌드 성공 및 기본 검색 기능 회귀 없음