diff --git a/doc/history/2026-09-10-4차.md b/doc/history/2026-09-10-4차.md index 97a1cfd..1dd0fb5 100644 --- a/doc/history/2026-09-10-4차.md +++ b/doc/history/2026-09-10-4차.md @@ -293,4 +293,31 @@ D:\work\branch\src\a.cpp → branch\src\a.cpp 검사 11건 추가(`PathTest` 43 → 54). 전체 **571건 통과**. **남길 것** - 화면을 줄이는 일은 무엇이 남아야 하는지부터 정하고 줄여야 한다. -여기서는 "경로가 길다"만 보고 줄였는데, 정작 그 경로가 두 칸을 가르는 유일한 정보였다. \ No newline at end of file +여기서는 "경로가 길다"만 보고 줄였는데, 정작 그 경로가 두 칸을 가르는 유일한 정보였다. +### C-1 또 한 번 — 경로를 읽으라고 적는다 (2026-09-10) + +**사용자 지적** - "경로를 좀 잘 보이게 해볼까." + +머리글의 위아래가 뒤집혀 있었다. **늘 똑같은 `BASE` 는 크고 파란데, +정작 이 칸이 무엇인지 말하는 경로는 회색 작은 글씨였다.** 정보를 담은 쪽이 뒤로 물러나 있었다. + +세 가지를 바꿨다. + +- 경로 줄에서 `BASE ·` `LOCAL ·` 접두사를 뺐다. **위 제목이 이미 그 말을 하고 있다.** +- 회색(Muted) 을 걷고 본문 색으로, 11 → 12px, 글꼴은 코드와 같은 Consolas 로. + 경로는 기호가 많아 고정폭이 읽기 쉽다. +- **갈리는 첫 칸만 굵은 강조색**으로 칠한다(`left\` · `right\`). 나머지는 양쪽이 같은 글자라 + 읽을 값이 없다. 어디가 다른지 눈이 바로 간다. + +``` +BASE LOCAL +left\WeldController.cpp right\WeldController.cpp +^^^^ ^^^^^ (굵은 강조색) +``` + +Git 모드도 같이 정리됐다 - `BASE / 9c9e0bb · StartWeld.cs`, `LOCAL / master`. + +**걸린 것 하나** - `SplitLead` 의 튜플 요소 이름을 `Rest` 로 뒀다가 CS8126 이 났다. +`Rest` 는 `ValueTuple` 이 제 필드 이름으로 쓰는 예약어다. `Tail` 로 바꿨다. + +검사 571건 통과 · 빌드 경고 0 · 오류 0. \ No newline at end of file diff --git a/src/MergeHub/ViewModels/HomeViewModel.cs b/src/MergeHub/ViewModels/HomeViewModel.cs index c05b051..984130e 100644 --- a/src/MergeHub/ViewModels/HomeViewModel.cs +++ b/src/MergeHub/ViewModels/HomeViewModel.cs @@ -785,12 +785,16 @@ namespace MergeHub.ViewModels // BASE 가 비어 있으면 그 파일이 공통 조상에 없었다는 뜻이다 - 양쪽 브랜치가 // 각자 새로 만든 파일이라 견줄 조상이 없다. 그냥 두면 빈 칸이 고장으로 보인다. + // 큰 제목이 이미 BASE/LOCAL 이라고 말하므로 여기서는 되풀이하지 않는다(4차 C-1). + BaseHeaderLead = string.Empty; + LocalHeaderLead = string.Empty; + BaseHeader = threeWay ? string.IsNullOrEmpty(baseText) - ? $"BASE ({baseOrigin}) · 이 파일 없음 - 양쪽에서 새로 만든 파일입니다" - : $"BASE ({baseOrigin}) · {path}" - : $"BASE · {commit.ShortSha} · {path}"; - LocalHeader = $"LOCAL · {_workspace.CurrentBranch}"; + ? $"({baseOrigin}) 이 파일 없음 - 양쪽에서 새로 만든 파일입니다" + : $"({baseOrigin}) {path}" + : $"{commit.ShortSha} · {path}"; + LocalHeader = _workspace.CurrentBranch; RemoteHeader = isConflict ? "REMOTE · THEIRS" : $"REMOTE · {branch}"; @@ -1883,10 +1887,38 @@ namespace MergeHub.ViewModels { var (left, right) = PathUtil.DistinctTail(LeftFile, RightFile); - BaseHeader = $"BASE · {left}"; - LocalHeader = $"LOCAL · {right}"; + // 큰 제목이 이미 BASE/LOCAL 이라고 말한다. 여기에 또 적으면 자리만 먹는다. + var l = SplitLead(left); + BaseHeaderLead = l.Lead; + BaseHeader = l.Tail; + + var r = SplitLead(right); + LocalHeaderLead = r.Lead; + LocalHeader = r.Tail; } + /// + /// 경로에서 실제로 갈리는 첫 칸만 떼어 낸다. + /// + /// 이 같은 앞부분을 이미 뗐으므로, 남은 것의 첫 칸이 + /// 두 쪽을 가르는 자리다(left\ · branch\). 그 칸만 굵게 칠하면 + /// 어디가 다른지 눈이 바로 간다 - 나머지는 양쪽이 같은 글자라 읽을 값이 없다. + /// 칸이 하나뿐이면(파일 이름만 남은 경우) 뗄 것이 없다. + /// + // 'Rest' 는 ValueTuple 이 제 필드 이름으로 쓰는 예약어라 튜플 요소 이름으로 못 쓴다. + private static (string Lead, string Tail) SplitLead(string path) + { + if (string.IsNullOrEmpty(path)) return (string.Empty, string.Empty); + + var at = path.IndexOfAny(new[] { '\\', '/' }); + return at < 0 ? (string.Empty, path) : (path.Substring(0, at + 1), path.Substring(at + 1)); + } + + /// 머리글에서 굵게 칠할 앞부분. 없으면 빈 글자. + [ObservableProperty] private string _baseHeaderLead = string.Empty; + + [ObservableProperty] private string _localHeaderLead = string.Empty; + // ================= 저장 안 한 편집 지키기 ================= /// diff --git a/src/MergeHub/Views/HomeView.xaml b/src/MergeHub/Views/HomeView.xaml index 6190e4e..57e21be 100644 --- a/src/MergeHub/Views/HomeView.xaml +++ b/src/MergeHub/Views/HomeView.xaml @@ -949,9 +949,17 @@ 패널마다 세로 40px 남짓을 먹었다. 전체 경로는 툴팁으로 옮기고 복사는 우클릭 메뉴로 지켰다 - 읽기전용 TextBox 를 뒀던 까닭이 복사였다. --> - 회색 작은 글씨가 아니라 읽으라고 적는다. + 갈리는 첫 칸만 굵게 칠해 어디가 다른지 눈이 바로 가게 한다. + --> + + @@ -1048,9 +1056,12 @@ - +