2026-04-06 15:25:53 +02:00

65 lines
2.3 KiB
Python

import streamlit as st
import streamlit_ace as st_ace
from pathlib import Path
from backend.managers.file_manager import FileManager
def render_editor():
LANG_MAP = {
".py": "python", ".tex": "latex", ".js": "javascript",
".html": "html", ".css": "css", ".sh": "bash",
".json": "json", ".yaml": "yaml", ".yml": "yaml"
}
st.subheader("Code Editor")
if not st.session_state.open_files:
st.info("Please select a file to edit.")
return
fm = FileManager()
tab_names = [Path(f).name for f in st.session_state.open_files]
tabs = st.tabs(tab_names)
for idx, file_path in enumerate(st.session_state.open_files):
with tabs[idx]:
st.session_state.active_file = file_path
if file_path not in st.session_state.files_content:
st.session_state.files_content[file_path] = fm.read_file(file_path)
file_language = LANG_MAP.get(file_path.suffix, "text")
code = st_ace(
value=st.session_state.files_content[file_path],
language=file_language,
theme="monokai",
key=f"code_editor_{file_path}"
)
st.session_state.files_content[file_path] = code
col1, col2 = st.columns([1, 1])
with col1:
if st.button("Save Changes", key=f"save_{file_path}"):
fm.save_file(file_path, st.session_state.files_content[file_path])
st.success("File saved successfully!")
with col2:
if st.button("Close File", key=f"close_{file_path}"):
st.session_state.open_files.remove(file_path)
del st.session_state.files_content[file_path]
st.success("File closed successfully!")
if st.session_state.active_file == file_path:
st.session_state.active_file = (
st.session_state.open_files[0]
if st.session_state.open_files
else None
)
st.rerun() # Refresh the page to update the UI
if __name__ == "__main__":
render_editor()