browser: add a keybind to toggle render modes
This commit is contained in:
parent
4192c2a84d
commit
d42a294516
|
@ -228,6 +228,8 @@ class Browser:
|
|||
self.edit_page()
|
||||
elif char == ord("y"):
|
||||
self.open_history()
|
||||
elif char == ord("§"):
|
||||
self.toggle_render_mode()
|
||||
elif curses.ascii.isdigit(char):
|
||||
self.handle_digit_input(char)
|
||||
elif char == curses.KEY_MOUSE:
|
||||
|
@ -705,3 +707,21 @@ class Browser:
|
|||
self.capsule_prefs[url] = prefs
|
||||
save_capsule_prefs(self.capsule_prefs, get_capsule_prefs_path())
|
||||
self.reload_page()
|
||||
|
||||
def toggle_render_mode(self):
|
||||
"""Switch to the next render mode for the current page."""
|
||||
if not self.page_pad or not self.page_pad.current_page:
|
||||
return
|
||||
page = self.page_pad.current_page
|
||||
if page.render is None or page.render not in RENDER_MODES:
|
||||
next_mode = RENDER_MODES[0]
|
||||
else:
|
||||
cur_mod_index = RENDER_MODES.index(page.render)
|
||||
next_mode = RENDER_MODES[(cur_mod_index + 1) % len(RENDER_MODES)]
|
||||
new_page = Page.from_gemtext(
|
||||
page.source,
|
||||
wrap_at=self.config["text_width"],
|
||||
render=next_mode
|
||||
)
|
||||
self.load_page(new_page)
|
||||
self.set_status(f"Using render mode '{next_mode}'.")
|
||||
|
|
|
@ -37,6 +37,7 @@ Keybinds using the SHIFT key are written uppercase. Keybinds using the ALT (or M
|
|||
* y: open history
|
||||
* digits: go to the corresponding link ID
|
||||
* escape: reset status line text
|
||||
* section sign (§): toggle between render modes for the current page
|
||||
* C-c: cancel current operation
|
||||
|
||||
## Commands
|
||||
|
|
|
@ -21,6 +21,7 @@ class Page:
|
|||
- title: optional page title.
|
||||
- mime: optional MIME type received from the server.
|
||||
- encoding: optional encoding received from the server.
|
||||
- render: optional render mode used to create the page from Gemtext.
|
||||
"""
|
||||
source: str
|
||||
metalines: list = field(default_factory=list)
|
||||
|
@ -28,6 +29,7 @@ class Page:
|
|||
title: str = ""
|
||||
mime: Optional[MimeType] = None
|
||||
encoding: str = ""
|
||||
render: Optional[str] = None
|
||||
|
||||
@staticmethod
|
||||
def from_gemtext(gemtext: str, wrap_at: int, render: str ="fancy"):
|
||||
|
@ -35,7 +37,7 @@ class Page:
|
|||
dumb_mode = render == "dumb"
|
||||
elements, links, title = parse_gemtext(gemtext, dumb=dumb_mode)
|
||||
metalines = generate_metalines(elements, wrap_at, dumb=dumb_mode)
|
||||
return Page(gemtext, metalines, links, title)
|
||||
return Page(gemtext, metalines, links, title, render=render)
|
||||
|
||||
@staticmethod
|
||||
def from_text(text: str):
|
||||
|
|
Reference in a new issue