The name box names a selection only on the sheet its range is on, and repointing a named range shows its sheet first. Adding a sheet while pointing into another keeps the reference pointed at.
- commit
- 2ec17a7702bf1b119e3853b2c5b1edc85c158cfa
- parent
- 38ce725b97ac0e526429cbad96c47dc606e7d7f4
- author
- Dami <dami.etoile@gmail.com>
| M | internal/ | 5 | ++++- |
| M | internal/ | 6 | ++++-- |
| M | internal/ | 25 | +++++++++++++++++++++++++ |
@@ -151,6 +151,9 @@ func (m *Model) editName(n sheet.Name, sel sheet.Rect) {
151151 return nil152152 }153153 r := n.Range154+ if n.Sheet.Live() {155+ m.showSheet(n.Sheet) // the range is pointed at on its own sheet156+ }154157 m.openRange("Range for "+text+":", func(m *Model, r sheet.Rect) tea.Cmd {155158 if err := m.sheet.EditName(n.Name, text, r); err != nil {156159 m.fail(err.Error())@@ -171,7 +174,7 @@ func (m *Model) editName(n sheet.Name, sel sheet.Rect) {
171174 func (m *Model) namedSelection() (string, bool) {172175 r := m.selection()173176 for _, n := range m.sheet.Names() {174- if !n.Lost && n.Range == r {177+ if !n.Gone() && n.Sheet == m.sheet && n.Range == r {175178 return n.Name, true176179 }177180 }@@ -432,8 +432,7 @@ func (m *Model) tabStrip(room int) (string, []tabSpan) {
432432 switch {433433 case i == active:434434 style = m.th.tabActive435- case m.drag == dragTab && m.hover.kind == hitTab && m.hover.addr.Col == i,436- m.drag == dragNone && m.hover.kind == hitTab && m.hover.addr.Col == i:435+ case m.hover.kind == hitTab && m.hover.addr.Col == i && (m.drag == dragNone || m.drag == dragTab):437436 style = m.th.tabHover438437 }439438 label := tabLabel(sheets[i])@@ -474,6 +473,9 @@ func (m *Model) tabPress(h hit, double bool) tea.Cmd {
474473 case hitTabNext:475474 m.stepEntrySheet(1)476475 case hitTabAdd:476+ if m.mode == modePoint {477+ m.resumeEntry(m.pointRef())478+ }477479 if m.editing() && !m.commit() {478480 return nil479481 }@@ -323,6 +323,31 @@ func TestFindAllSheets(t *testing.T) {
323323 }324324 }325325 326+func TestNamedRangeOnAnotherSheet(t *testing.T) {327+ m := newModel()328+ press(t, m, "<shift+f11>", "3", "<enter>", "4", "<enter>")329+ m.sheet.DefineName("Costs", sheet.NewRect(addr("A1"), addr("A2")))330+ press(t, m, "<ctrl+pgup>", "=SUM(Costs)", "<enter>")331+ if v := m.sheet.Value(addr("A1")); v.Num != 7 {332+ t.Errorf("SUM(Costs) = %v", v)333+ }334+ m.runCommand("data.named_ranges")335+ if !strings.Contains(screen(m), "Sheet2!A1:A2") {336+ t.Errorf("names list doesn't say the sheet:\n%s", screen(m))337+ }338+ press(t, m, "cos", "<enter>")339+ if m.sheet.Name() != "Sheet2" || m.selection() != sheet.NewRect(addr("A1"), addr("A2")) {340+ t.Errorf("go to name: on %s, %v", m.sheet.Name(), m.selection())341+ }342+ if name := strings.TrimSpace(ansi.Cut(line(m, formulaLine), 0, nameBoxW)); name != "Costs" {343+ t.Errorf("name box %q", name)344+ }345+ press(t, m, "<ctrl+pgup>", "<ctrl+home>", "<shift+down>")346+ if name := strings.TrimSpace(ansi.Cut(line(m, formulaLine), 0, nameBoxW)); name != "A1:A2" {347+ t.Errorf("name box on Sheet1 %q", name)348+ }349+}350+326351 func TestTraceIntoOtherSheet(t *testing.T) {327352 m := newModel()328353 press(t, m, "<shift+f11>", "7", "<enter>", "<ctrl+pgup>", "=Sheet2!A1*2", "<enter>", "<up>")