HotkeyAssignment 모델 추가 (AppSettings.Models.cs):
- Hotkey, Target, Label, Type 필드 (app/url/folder/command)
- AppSettings.CustomHotkeys (List<HotkeyAssignment>) 추가
InputListener.cs 확장 (Core/):
- _customHotkeys 목록 (스레드 안전 lock)
- UpdateCustomHotkeys() 메서드 — 설정 저장 후 즉시 갱신
- CustomHotkeyTriggered 이벤트 (CustomHotkeyEventArgs: Target, Type)
- WH_KEYBOARD_LL 콜백에 전용 핫키 감지 분기 추가
HotkeyHandler.cs 신규 생성 (Handlers/, 140줄):
- prefix="hotkey" — 등록 목록 표시 / 설정 열기
- ExecuteHotkeyTarget() — app/url/folder/command 타입별 실행
App.xaml.cs + App.Settings.cs:
- HotkeyHandler 등록 (Phase L5 주석)
- OnCustomHotkeyTriggered 이벤트 핸들러 연결
- 설정 저장 시 UpdateCustomHotkeys() 호출
SettingsViewModel 3파일 업데이트:
- HotkeyRowModel (Properties.cs): Hotkey/Target/Label/Type + TypeSymbol
- CustomHotkeys ObservableCollection + New* 필드 (Properties.cs)
- AddCustomHotkey() / RemoveCustomHotkey() 메서드 (Methods.cs)
- HotkeyParser 형식 검증, 중복 핫키 방지
- Load/Save에 CustomHotkeys 매핑 (SettingsViewModel.cs, Methods.cs)
SettingsWindow.xaml + .xaml.cs:
- "전용 핫키" 탭 신규 추가 (배치 명령 탭 다음)
- 안내 배너, 입력 폼 (핫키 레코더 + 표시이름 + 타입 + 대상)
- 핫키 목록 (배지 + 타입아이콘 + 이름/경로 + 삭제 버튼)
- HotkeyRecord_Click: 클릭 후 키 입력 → 자동 핫키 감지 (PreviewKeyDown)
- AddHotkey_Click, RemoveHotkey_Click, BrowseHotkeyTarget_Click 핸들러
docs/LAUNCHER_ROADMAP.md:
- L5-1 ✅ 완료 표시, 구현 내용 업데이트
빌드: 경고 0, 오류 0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
L4-4 검색 히스토리 (↑/↓ 키 탐색):
- Services/SearchHistoryService.cs (신규 100줄): 50개 FIFO JSON 저장
Add() · GetAll() · Clear(). 2자 미만/중복 최상단 무시
- ViewModels/LauncherViewModel.cs:
_historyIndex·_isHistoryNavigation 필드 추가
NavigateHistoryPrev() / NavigateHistoryNext() / SetInputFromHistory()
InputText setter: 직접 입력 시 _historyIndex 초기화
ExecuteSelectedAsync: 실행 전 히스토리 저장 (2자 이상)
OnShown: _historyIndex = -1 초기화
- Views/LauncherWindow.Keyboard.cs:
Key.Up/Down — Results.Count==0 분기: 히스토리 탐색 / 목록 탐색 분기
L4-3 클립보드 핀/카테고리: 기존 완전 구현 확인 (IsPinned, Category,
TogglePin, Ctrl+P, #pin/#url/#코드/#경로 필터)
L4-6 계산기 단위 변환 단축 문법:
- Handlers/UnitConverter.cs:
AutoSuggest(): "20km", "100f", "5lb" 등 목표 없이 주요 단위 자동 제안
_suggestions 테이블: 길이/무게/속도/데이터/온도 40개 단위 매핑
DateShortcut: "today+30d", "today-7w" → = 접두어에서 날짜 계산
- Handlers/CalculatorHandler.cs:
DateShortcut.TryMatch 분기 추가 (통화 감지 전)
UnitConverter.AutoSuggest 분기 추가 (명시 변환 후)
- 힌트 텍스트: "20km · 100°F · today+30d" 추가
docs/LAUNCHER_ROADMAP.md: Phase L4 계획 테이블 추가
빌드: 경고 0, 오류 0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Models/QuickActionChip.cs (신규 12줄):
- Title, Symbol, Path, Background 레코드
Services/UsageRankingService.cs:
- GetTopItems(int n) 메서드 추가: 실행 횟수 상위 N개 (경로, 횟수) 반환
ViewModels/LauncherViewModel.cs:
- QuickActionItems (ObservableCollection<QuickActionChip>) 프로퍼티 추가
- ShowQuickActions: 입력 비었을 때 칩 표시 조건
- LoadQuickActions(): 상위 8개 경로 → 파일 존재 확인 → 타입별 아이콘/색상 칩 생성
- OnShown()에서 LoadQuickActions() 호출
- InputText 변경 시 ShowQuickActions 알림
Views/LauncherWindow.xaml:
- 입력 Grid를 2행 구조로 변환 (RowDefinitions 추가)
- Row 1: ItemsControl + WrapPanel + DataTemplate 칩 UI
- CornerRadius=10 Border, 아이콘+제목 StackPanel
- 호버 시 AccentColor 테두리, 최대 너비 100px 말줄임
Views/LauncherWindow.Shell.cs:
- QuickActionChip_Click 핸들러: 창 숨김 → 경로 실행 → 사용 통계 기록
빌드: 경고 0, 오류 0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
NotifHandler.cs (신규, 120줄):
- notif 프리픽스: 최근 알림 이력 목록 표시 (최대 12건)
- notif [검색어]: 제목·내용 기반 필터링
- notif clear: 전체 이력 초기화 (건수 표시 후 확인)
- Enter: 선택 알림 내용 클립보드 복사
- NotificationType(Error/Warning/Success/Info)별 심볼 자동 적용
- TimeAgo() 헬퍼: 방금 전/N분 전/N시간 전/N일 전
NotificationService.cs (정리, 24줄):
- 중복 정의된 NotificationEntry 레코드 제거 (CS0101 오류 해결)
- 이력 관리는 NotificationCenterService에 위임
- LogOnly(): NotificationCenterService.Show() 호출로 대체
App.xaml.cs:
- commandResolver.RegisterHandler(new NotifHandler()) 추가
LauncherViewModel.cs:
- PrefixMap에 notif 배지 추가 (알림, ReminderBell, #F59E0B)
docs/LAUNCHER_ROADMAP.md:
- L3-8 알림 센터 통합 ✅ 완료 표시
빌드: 경고 0, 오류 0