# Get all folded sections start & end line numbers

**URL:** https://discuss.codemirror.net/t/get-all-folded-sections-start-end-line-numbers/2864
**Category:** Uncategorized
**Created:** [January 29, 2021, 4:59pm UTC](https://discuss.codemirror.net/t/get-all-folded-sections-start-end-line-numbers/2864 "2021-01-29T16:59:52Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![mattpass](https://discuss.codemirror.net/user_avatar/discuss.codemirror.net/mattpass/32/34_2.png) [@mattpass](https://discuss.codemirror.net/u/mattpass)
#### Post date: [January 29, 2021, 4:59pm UTC](https://discuss.codemirror.net/t/get-all-folded-sections-start-end-line-numbers/2864/1 "2021-01-29T16:59:52Z")

</div>

Is there a good way to get the start and end line numbers for all folded ranges? ie, if I have lines 27 - 29 and 324 - 382 folded, I’d be able to get those 4 numbers out somehow?

Have tried a few things but markers disappear if out of viewport.

---

<div class="post-metadata">

### Author: ![marijn](https://discuss.codemirror.net/user_avatar/discuss.codemirror.net/marijn/32/136_2.png) [@marijn](https://discuss.codemirror.net/u/marijn)
#### Post date: [January 29, 2021, 6:20pm UTC](https://discuss.codemirror.net/t/get-all-folded-sections-start-end-line-numbers/2864/2 "2021-01-29T18:20:04Z")

</div>

Well, definitely don’t query the DOM. You could use [`getAllMarks`](http://cm/doc/manual.html#getAllMarks) and check for those with an `__isFold` property (not documented but unlikely to change at this point). That’s not super cheap when there’s a lot of marks, though.

---

<div class="post-metadata">

### Author: ![mattpass](https://discuss.codemirror.net/user_avatar/discuss.codemirror.net/mattpass/32/34_2.png) [@mattpass](https://discuss.codemirror.net/u/mattpass)
#### Post date: [January 31, 2021, 11:33am UTC](https://discuss.codemirror.net/t/get-all-folded-sections-start-end-line-numbers/2864/3 "2021-01-31T11:33:43Z")

</div>

Thanks - that’s what I’m aiming for if I also grab line info from `lineInfo`. Re cheapness, this is as efficient as I can make it?

```
const allMarks = cm.getAllMarks()
if (allMarks && allMarks[0]) {
    for (let i = 0; i < allMarks.length; i++) {
        if (allMarks[i].__isFold === true) {
            const firstLine = thisCM.lineInfo(allMarks[i].lines[0]).line
            console.log((firstLine + 1) + " to " + (firstLine + allMarks[i].lines.length));
        }
    }
}

```

UPDATE: I assume it’s a cheaper to use `getLineNumber` than `lineInfo` if I simply want the line number?

---

<div class="post-metadata">

### Author: ![marijn](https://discuss.codemirror.net/user_avatar/discuss.codemirror.net/marijn/32/136_2.png) [@marijn](https://discuss.codemirror.net/u/marijn)
#### Post date: [January 31, 2021, 12:56pm UTC](https://discuss.codemirror.net/t/get-all-folded-sections-start-end-line-numbers/2864/4 "2021-01-31T12:56:14Z")

</div>

You can just call `.find` on the marks, no need to mess with undocumented properties like `lineInfo`.

---

<div class="post-metadata">

### Author: ![mattpass](https://discuss.codemirror.net/user_avatar/discuss.codemirror.net/mattpass/32/34_2.png) [@mattpass](https://discuss.codemirror.net/u/mattpass)
#### Post date: [January 31, 2021, 1:02pm UTC](https://discuss.codemirror.net/t/get-all-folded-sections-start-end-line-numbers/2864/5 "2021-01-31T13:02:16Z")

</div>

Thank you, much appreciated.
