Commit graph

259 commits

Author SHA1 Message Date
db9ee02d8d yoda: attenuation des panneaux non focalises, a la Ghostty
Avec Claude Code et Modjo cote a cote, rien ne distinguait le panneau ou
l'on tape, hors le curseur creux. L'amont assombrissait le fond de 8 %
(aussi quand la fenetre perdait le focus) et l'a retire en juillet
(a43b5ae).

Reprise de unfocused-split-opacity de Ghostty : un voile de la couleur du
fond, texte compris, sur chaque panneau non focalise, seulement quand il y
en a plusieurs ; la perte de focus de la fenetre ne change rien.

- Config unfocused_pane_dim (pourcentage, defaut 30 = opacite 0,7 de
  Ghostty, 0 desactive, plafond 85 = opacite minimale 0,15 de Ghostty).
- Reglages > Panneaux : curseur « Attenuation des panneaux inactifs ».
- terminal_box : voile trace dans un calque a part en fin de rendu (dans
  le meme calque, la primitive de texte passerait par-dessus), aux coins
  du fond du panneau.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:40:47 +02:00
52b37cc2f8 yoda: protocole clavier kitty, Shift+Entree pour Claude Code et Modjo
Claude Code (>= 2.1.269) n'active Shift+Entree que si le terminal repond
a CSI ? u. alacritty_terminal sait tenir la pile des modes et repondre,
mais seulement avec kitty_keyboard, et n'encode aucune touche : Shift+
Entree partait en \r, identique a Entree.

- term::Config : kitty_keyboard active.
- kitty_keyboard : encodeur du frontal (spec kitty, decoupe de l'encodeur
  d'Alacritty), utilise seulement quand l'application au premier plan a
  pousse le drapeau 1 ou 8 ; sinon l'encodage legacy reste seul. Gere
  desambiguisation, types d'evenements (repetition, relachement),
  touches alternatives, toutes les touches, texte associe, pave
  numerique, F1-F24, touches de modification. Shift+Entree -> CSI 13;2u.
- terminal_box : raccourcis de l'appli toujours prioritaires ;
  Shift+PageUp/PageDown/Home/End et Echap sur selection gardent leur
  comportement local ; relachements envoyes si le drapeau 2 est pose.
- Legacy : Shift+Entree envoie LF (comme Ctrl+J) au lieu de CR. rustyline
  le lit comme Ctrl+J, la touche de saut de ligne de Modjo/Goose ; pour
  un shell c'est toujours Entree.

Connu, non corrige ici : alacritty_terminal 0.25.1 push_keyboard_mode vide
title_stack au lieu de la pile des modes au-dela de 4096 empilements
(panique du fil PTY de l'onglet seulement, panic=unwind).

10 tests, dont la reponse a CSI ? u et l'application de CSI > 5 u.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:32:23 +02:00
2414aaece3 yoda: notifications de bureau OSC 9/777 et cloche utile, a la Ghostty
vte 0.15 jette les OSC 9 et 777 : Claude Code (canal « ghostty ») ou tout
programme qui veut signaler « j'attends » ne pouvait rien faire remonter,
et la cloche etait un TODO. Avec plusieurs sessions en onglets, rien ne
disait laquelle attendait une reponse.

- osc_tap : le Pty est enveloppe, son lecteur passe chaque lecture a un
  petit automate qui repere OSC 777;notify;titre;corps et OSC 9;texte
  (les commandes ConEmu 9;N, dont la progression 9;4, sont ecartees comme
  dans Ghostty). Ni alacritty_terminal ni vte ne sont forkes.
- desktop_notify : org.freedesktop.Notifications en direct (zbus), pour
  recuperer le jeton ActivationToken au clic : la notification ramene la
  fenetre au premier plan, sur le bon panneau et le bon onglet. Une
  notification par onglet au plus (replaces_id), anti-rafale de Ghostty
  (1/s, identique toutes les 5 s), titre suivi du nom de l'onglet.
- Rien n'est envoye pour l'onglet qu'on a sous les yeux. Sinon l'onglet
  porte une icone d'attention (cloche ou notification), eteinte quand il
  reprend le focus.
- Cloche : indicateur d'onglet seulement. Pas de demande d'attention
  xdg-activation : cosmic-comp donne un jeton valide a toute application
  non sandboxee, la fenetre volerait le focus.
- Focus 1004 : l'onglet quitte recoit enfin son focus-out (seul l'onglet
  actif de chaque panneau etait mis a jour) ; un agent en arriere-plan ne
  croit plus qu'on le regarde.
- Chevrons du corps remplaces par ‹ › : cosmic-notifications lit le corps
  en HTML sans decoder les entites.

7 tests, dont un de bout en bout dans un vrai PTY.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:12:28 +02:00
083e09f97e merge: epoch-1.9.0 d'upstream
# Conflicts:
#	Cargo.lock
#	src/main.rs
#	src/menu.rs
2026-09-24 20:52:15 +02:00
Hojjat
120b4fdb12 feat: use libcosmic's context_menu widget for the terminal context menu 2026-09-15 19:09:43 -04:00
eda2fb1d58 Merge remote-tracking branch 'upstream/master' into local/yoda-main
# Conflicts:
#	Cargo.lock
#	Cargo.toml
#	src/main.rs
#	src/menu.rs
#	src/terminal.rs
#	src/terminal_box.rs
2026-08-19 22:02:40 +02:00
abd415723c fix(tabs): renommer l'onglet du bon panneau en multi-panneaux
Le renommage d'onglet visait le panneau actif au moment de la validation
et non celui ou le renommage avait ete ouvert. L'ouverture appelle
unfocus_all_terminals(), si bien que `pane_model.active()` pouvait
designer un autre panneau au moment du commit : en configuration
scindee, le nouveau titre atterrissait sur l'onglet d'un panneau voisin.

`rename_tab` memorise desormais le panneau : (Pane, Entity, String) au
lieu de (Entity, String). L'ouverture le capture via focused(), et
commit, annulation et remise a zero le retrouvent par
panes.get(pane) au lieu de active_mut(). Le focus est rendu au panneau
d'origine via set_focus(pane) plutot que par update_terminal_focus(),
qui le laissait au petit bonheur.

Reprend le stash de 2026-06-13, fait sur 39d3d01. Le seul conflit
portait sur dialog(), ou la branche a gagne depuis le dialogue de
chargement de disposition : les deux sont conserves.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-07 19:39:48 +02:00
Nitin Gurram
6bf0c65ca9
feat: allow configuring terminal pane borders 2026-07-29 18:21:03 +02:00
Ben Gubler
5db18f3fac feat: allow configuring terminal pane borders 2026-07-27 15:58:51 -04:00
RipleyTom
44d042f45d fix: only PaneClicked events change focus 2026-07-14 13:32:02 -06:00
d7cc5aaac1 feat: Konsole parity phase 1b (layout save/load, SSH bookmarks)
- Serialize pane grid splits and per-tab state to RON
- Save/load layout via cosmic-files dialogs with confirmation
- SSH submenu from ~/.ssh/config Host entries (no wildcards)
- i18n en/fr for layout and SSH menu entries
2026-07-09 14:18:02 +02:00
Ashley Wulber
6bd07a6363 feat: blur 2026-07-06 09:28:54 -04:00
43d38aed8a feat: Konsole parity phase 1 (save output, search options, monitors, profile CLI)
Implements the first batch of COSMIC_TERMINAL_KONSOLE_PARITY.md:

Save output as text:
- New SaveOutput action in the Edit menu, terminal context menu and
  keyboard shortcuts (Ctrl+Shift+S, Konsole parity, rebindable).
- Terminal::scrollback_text() extracts history plus visible screen via
  alacritty bounds_to_string, trimming trailing empty lines.
- Save-file dialog through cosmic-files; the file is written in a
  spawn_blocking task so large scrollbacks never stall the UI.

Search options:
- Case-sensitive and regex checkboxes in the find bar.
- App::find_pattern() escapes the pattern when regex mode is off and
  prefixes (?i) when case-insensitive (same approach as Alacritty).

Per-tab monitors (activity / silence / process finished):
- Toggles in the View menu and terminal context menu, state stored in
  Terminal (monitor_* fields).
- Activity alerts on PTY output (Wakeup) for non-active tabs; silence
  alerts after 10 s without output (Konsole default); process-finished
  compares the shell pgrp with the tty tpgid via /proc/<pid>/stat and
  alerts when the foreground job exits.
- Silence and process checks run on a 1 s iced::time subscription that
  is only active while at least one tab needs it.
- Tab bar shows an armed icon (view-reveal-symbolic) and per-kind alert
  icons; activating the tab acknowledges the alert.

Profile CLI:
- --profile/-p <name-or-id> applies a profile to the first tab only,
  unknown profiles exit(1) with the available list on stderr.
- --list-profiles prints "id<TAB>name" and exits.
- Config is now loaded before the daemonize fork so CLI output reaches
  the launching terminal.
- --help now documents -e/--command, --no-daemon and the new flags
  (-e already worked; audit confirmed everything after it becomes the
  command and its arguments).

i18n: new en/fr strings (save-output, monitor-*, find-case-sensitive,
find-regex).

Validated with ./check_cosmic_local.sh terminal, cargo fmt, and a debug
build exercising the CLI flags and a 6 s live run. The shutdown panic
in iced_winit ("async fn resumed after completion") pre-exists and is
reproducible with the installed binary.

Leyoda 2026 – GPLv3
2026-07-06 09:50:58 +02:00
d5eb4b8308 fix: absorb libcosmic theme-v2 API + reqwest stream feature
Leyoda 2026 – GPLv3
2026-07-04 11:23:11 +02:00
f9f329d85f feat: align terminal with local cosmic stack 2026-07-04 11:21:51 +02:00
Igor Matuszewski
18d45bc88f fix: report effective OSC 11 background 2026-06-26 09:44:58 -04:00
James Feister
18b4450c0f
fix: avoid re-reading system theme from disk on every menu bar render 2026-06-12 14:47:00 -06:00
Gene Wood
ee25528ad9
Set scrolling_history to 100,000
Relates to #684
2026-05-29 11:02:10 -07:00
Hojjat
91fd140ae3 feat: option to open new windows in the current directory 2026-05-27 23:58:24 -04:00
Ashley Wulber
512cc0d250 fix: libcosmic updates 2026-05-26 15:40:59 -04:00
Michael Murphy
3bd221e3e1
Revert "bound the event channel to prevent unbounded RSS growth" 2026-05-18 16:30:51 +02:00
Marshall Humble
ac436abac6 docs: explain backpressure rationale for PTY event channel in 2026-05-14 17:29:31 -05:00
Jacob Kauffmann
f16dc74a7a chore: cargo fmt 2026-05-14 15:39:59 -06:00
Marshall Humble
21682acfae bound the event channel to prevent unbounded RSS growth 2026-05-14 15:27:46 -06:00
Levi Portenier
f5e21f2c98
Merge branch 'master' into new-tab-current-dir-with-config 2026-04-27 16:15:19 -06:00
obeme-qq
f689040c9c fix: change zoom reset scope to active tab
fixed inconsistencies with zoom. Added a separate function for resetting the zoom for the current tab, used it for the ctrl 0 shortcut.
2026-04-27 21:05:31 +03:00
Nicolas Danelon
f3af51df61
Merge branch 'master' into new-tab-current-dir-with-config 2026-04-27 12:37:40 +02:00
Chris Glass
a747b03c17 Bonus: reduce size of Message further
Turns out we can reduce the size of Message even further by also boxing
the Config variant.

The size of the Message enum has now dropped from 900+ bytes to 64
bytes.
2026-04-10 19:00:25 +02:00
Chris Glass
eca9421e87 We don't need to match for only one case
Instead, let's use a simple if statement. If in the future we need to
care about other cases, we can introduce a match statement again.
2026-04-10 18:36:16 +02:00
Chris Glass
72a27129e3 Don't pass the large DialogMessage on the stack
Instead, since the size of DialogMessage is allocated in the Message
enum, pass it as a box, so that only the size of a pointer is allocated
on the stack instead.
2026-04-10 18:32:09 +02:00
Chris Glass
f50ece41eb Fix all auto-fix from clippy 2026-04-10 18:09:25 +02:00
Hojjat
c8b18c2827 chore: update to the latest libcosmic
applies iced re-export changes
2026-04-09 12:47:22 -04:00
Hojjat
1d86974682 fix: keep the url in state for menu actions and underline 2026-04-09 12:47:22 -04:00
Hojjat
8b95675c9b fix: gate wayland features and add inline popover fallback 2026-04-09 12:47:22 -04:00
Hojjat
467998433c chore: cargo fmt 2026-04-09 12:47:22 -04:00
Hojjat
133c526acd fix: dismiss context menu when clicking in any pane 2026-04-09 12:47:22 -04:00
Hojjat
0575680860 feat: Convert context menu from widget::popover to Wayland popup surface 2026-04-09 12:47:22 -04:00
Hojjat
8203b1e233 fix(style): add the background color to that tab bar 2026-03-24 10:48:58 -06:00
Ashley Wulber
f62abcea4e
feat: rebase libcosmic onto iced 0.14 2026-03-18 17:21:57 +01:00
Nicolas Danelon
75714dedee New tab opens on current directory
This patch add a new feature, now tab behavior now inherits the
active tab’s current directory on Linux controlled by a settings
toggle, and default is off
2026-03-06 13:53:46 +01:00
Chris Glass
8781276c3f Fix "Copy link" lingering highlight bug
Previously introduced "Copy Link" seems to have missed some changes
added top "Open Link" which results in a lingering "underline" when
copying links.

For some reason the file was not properly formatted acoring to rust-fmt,
so some unrelated formatting changes snuck in.
2026-02-28 22:12:57 +01:00
Josh Megnauth
108ba0dfe3 Activate nearest tab only if closing focused tab
Closes: #719

The nearest tab should only be focused if the currently focused tab is
closed.
2026-02-19 15:18:05 -05:00
Jeremy Soller
b9062e47d5
Merge pull request #662 from adil192/feat/add-working-dir-arg
feat: add `--working-directory` arg
2026-02-19 12:40:37 -07:00
Adil Hanney
7848e64bab
tweak: make options and tab_title_override not mut 2026-02-16 23:48:14 +00:00
Adil Hanney
75cfa52673
fix: merge profile and startup options 2026-02-16 23:36:40 +00:00
Jacob Kauffmann
773c3719a1 Merge branch 'master' into feat/add-working-dir-arg 2026-02-16 12:41:51 -07:00
Chris Glass
a6522c4816 Add "Copy link" to context menu 2026-02-15 11:15:12 +01:00
Jeremy Soller
51454564cc Generate translated desktop and metainfo files with xdgen 2026-02-12 15:23:04 -07:00
Jeremy Soller
16fe126138
Merge branch 'master' into feat/tab-dnd 2026-02-12 14:37:17 -07:00
Jeremy Soller
f6f8772f5d Change Unbind action to Disable to match cosmic-settings 2026-02-05 13:49:05 -07:00