Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions .continue/agents/new-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Local Config
version: 1.0.0
schema: v1

models:
- name: Qwen Coder 32B
provider: ollama
model: qwen2.5-coder:32b
apiBase: http://localhost:11434
roles:
- chat
- edit
- apply

- name: Qwen Coder Autocomplete
provider: ollama
model: qwen2.5-coder:1.5b-base
apiBase: http://localhost:11434
roles:
- autocomplete

- name: Nomic Embed
provider: ollama
model: nomic-embed-text:latest
apiBase: http://localhost:11434
roles:
- embed

context:
- provider: code
- provider: docs
- provider: diff
18 changes: 14 additions & 4 deletions src/main/java/MarkNote.java
Original file line number Diff line number Diff line change
Expand Up @@ -1034,8 +1034,9 @@ private void setupDocumentTab(DocumentTab tab) {
previewDebouncer.debounce(() -> {
Platform.runLater(() -> {
previewPanel.updatePreview(text);
// Realigner la preview avec la position actuelle de l'éditeur
if (editorSplit.getItems().contains(previewPanel)) {
// Realigner la preview sur l'éditeur, mais pas en reading mode
// (l'éditeur est hors-scène, getScrollFraction() peut être faux)
if (!readingModeActive && editorSplit.getItems().contains(previewPanel)) {
previewPanel.scrollToFraction(tab.getScrollFraction());
}
updateStatusBarForTab(tab);
Expand All @@ -1054,6 +1055,14 @@ private void setupDocumentTab(DocumentTab tab) {
// Mettre à jour la preview et la statusbar quand on change d'onglet
mainTabPane.getSelectionModel().selectedItemProperty().addListener((obs, oldTab, newTab) -> {
if (newTab instanceof DocumentTab docTab) {
if (readingModeActive) {
// En mode lecture : remettre la scrollbar à zéro sur le nouveau document
docTab.scrollToTop();
previewPanel.scrollToFractionAfterLoad(0.0);
} else {
// En mode normal : synchroniser la preview sur la position de l'éditeur
previewPanel.scrollToFractionAfterLoad(docTab.getScrollFraction());
}
previewPanel.updatePreview(docTab.getFullContent());
previewPanel.setCurrentFile(docTab.getFile());
updateStatusBarForTab(docTab);
Expand All @@ -1063,9 +1072,10 @@ private void setupDocumentTab(DocumentTab tab) {
}
});

// Synchroniser le défilement éditeur → preview
// Synchroniser le défilement éditeur → preview (pas en reading mode : éditeur hors-scène)
tab.setOnScrollFractionChanged(fraction -> {
if (mainTabPane.getSelectionModel().getSelectedItem() == tab
if (!readingModeActive
&& mainTabPane.getSelectionModel().getSelectedItem() == tab
&& editorSplit.getItems().contains(previewPanel)) {
previewPanel.scrollToFraction(fraction);
}
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/ui/DocumentTab.java
Original file line number Diff line number Diff line change
Expand Up @@ -606,6 +606,10 @@ public StyleClassedTextArea getEditor() {
return editor;
}

public void scrollToTop() {
scrollPane.scrollYToPixel(0);
}

/**
* Insère du texte à la ligne suivant la position courante du curseur.
* Si l'éditeur n'a pas de focus, le texte est ajouté à la fin du document.
Expand Down
30 changes: 27 additions & 3 deletions src/main/java/ui/PreviewPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ public class PreviewPanel extends BasePanel {
/** Fichier source Markdown courant (peut être null pour les documents non sauvegardés). */
private File currentFile;

/** Fraction de défilement à appliquer après le prochain chargement de page. */
private Double pendingScrollFraction = null;

/** Thème highlight.js courant, synchronisé avec le thème applicatif. */
private SyntaxTheme syntaxTheme = new SyntaxTheme("github", "#f6f8fa", "#24292e");

Expand Down Expand Up @@ -215,9 +218,19 @@ public PreviewPanel() {
}
}
}
} else if (newState == Worker.State.SUCCEEDED && !pendingLocalPumlBlocks.isEmpty()) {
// Page chargée : déclencher le rendu async des blocs PlantUML locaux
dispatchLocalPumlRendering();
} else if (newState == Worker.State.SUCCEEDED) {
// Page chargée : appliquer le scroll en attente si défini
if (pendingScrollFraction != null) {
double fraction = pendingScrollFraction;
pendingScrollFraction = null;
webView.getEngine().executeScript(
"window.scrollTo(0, (document.body.scrollHeight - window.innerHeight) * " + fraction + ")"
);
}
// Déclencher le rendu async des blocs PlantUML locaux
if (!pendingLocalPumlBlocks.isEmpty()) {
dispatchLocalPumlRendering();
}
}
});

Expand Down Expand Up @@ -1127,6 +1140,17 @@ public void scrollToFraction(double fraction) {
);
}
}

/**
* Planifie un défilement vers la fraction donnée après le prochain chargement de page.
* À utiliser juste avant ou juste après {@link #updatePreview(String)} lors d'un changement
* de document, quand le WebView n'a pas encore terminé de charger le nouveau contenu.
*
* @param fraction La fraction de défilement dans [0.0, 1.0]
*/
public void scrollToFractionAfterLoad(double fraction) {
this.pendingScrollFraction = Math.min(1.0, Math.max(0.0, fraction));
}

/**
* Définit le fichier Markdown source actuellement affiché.
Expand Down
Loading