À propos du projet

mTerm est un émulateur de terminal macOS natif écrit en Swift, utilisant AppKit pour la fenêtre et un moteur de rendu Metal pour la vue du terminal. Il se positionne comme une alternative à iTerm2 pour les développeurs qui recherchent une sensation Mac native, un rendu de classe GPU et un ensemble de fonctionnalités délibérément restreint plutôt qu'une vaste surface de préférences. Il évite explicitement les fonctionnalités d'IA, les comptes cloud et la refonte du shell. Rendu et émulation de terminal La vue du terminal est rendue par Metal avec un atlas de glyphes aligné au pixel, destiné à garder le texte net à toutes les tailles sans flou de filtrage GPU. Le gras et l'italique utilisent les vraies fontes de la police plutôt que des inclinaisons synthétisées, avec des largeurs d'avance identiques afin que les colonnes restent alignées. Les attributs souligné, atténué et inversé sont pris en charge, y compris les codes qui les désactivent. Le redimensionnement réorganise le tampon : les lignes enroulées se rejoignent et se redécoupent à la nouvelle largeur, et un affichage de la taille de la grille apparaît pendant le glissement. La compatibilité cible xterm-256color pour des outils tels que vim, neovim, htop, fzf, less et les pagers git. Il prend en charge la vraie couleur 24 bits, l'écran alternatif, les régions de défilement (DECSTBM), le dessin de lignes DEC et la sortie synchronisée (DEC 2026). Le rapport de souris couvre SGR (1006) et les encodages hérités pour le clic, le glissement, le mouvement et la molette, avec ⇧ maintenu pour sélectionner à la place. Le collage entre crochets, les événements de focus et les rapports de position de périphérique/curseur sont inclus. Les caractères d'Asie de l'Est et pleine largeur occupent deux colonnes, et les marques combinantes se composent dans le glyphe précédent. Onglets, navigation et hub de commandes La fenêtre AppKit dispose d'une barre latérale à onglets qui peut être glissée pour réorganiser, prend en charge le plein écran et restaure les sessions (onglets, leurs répertoires et profils). ⌘K ouvre un hub sur chaque onglet de chaque fenêtre et chaque commande de la barre de menus, classés dans une seule liste. Les lignes d'onglet affichent l'index, l'état d'exécution, le titre, le répertoire et le processus au premier plan. Une requête vide liste les onglets récents avec le précédent sélectionné, de sorte que ⌘K ⏎ revient en arrière ; ⌘⌫ ferme l'onglet en surbrillance. Les actions sont recherchables par les mots avec lesquels les utilisateurs arriveraient, tels que « cls » pour Clear Screen ou « blurry » pour l'épaisseur du trait, ce qui ouvre les Réglages avec l'anneau de focus sur ce contrôle. Intégration shell et tmux L'intégration shell pour zsh, bash et fish utilise OSC 133 pour ajouter des marqueurs d'invite dans la marge, codés par couleur selon le statut de sortie, et le saut d'invite ⌘↑ / ⌘↓. Il ne modifie pas les fichiers rc de l'utilisateur ; à la place, chaque shell reçoit un wrapper (ZDOTDIR pour zsh, --rcfile pour bash, un extrait vendor_conf.d pour fish) qui source d'abord les vrais fichiers de démarrage. Le mode contrôle tmux est pris en charge : exécuter tmux -CC transforme chaque fenêtre tmux en un véritable onglet mTerm, avec ⌘T et ⌘W mappés à la création et à la fermeture de fenêtre tmux, et les renommages et changements de fenêtre suivant tmux dans les deux sens. Un onglet affiche le volet actif de sa fenêtre. Une session à la fois ; le détachement met fin aux onglets. Liens, déclencheurs et profils ⌘-clic ouvre les liens : les URL vont au navigateur et les chemins de fichiers sont révélés dans le Finder. Les liens ne sont pas distingués visuellement tant que le pointeur n'est pas dessus avec ⌘ maintenu, moment où le lien prend la couleur d'accentuation du thème et un soulignement et le curseur devient une main. Seuls les chemins qui existent sur le disque sont proposés, et une URL qui s'étend sur plusieurs lignes est traitée comme une seule adresse. ⌘-clic peut aussi copier du texte distingué par la couleur, comme du code en ligne ou un brouillon cité, avec une confirmation montrant le texte et le nombre de caractères. Les déclencheurs combinent une regex avec une action : surligner, recolorer, souligner, ouvrir comme URL, révéler dans le Finder ou exécuter une commande avec $1 comme correspondance. Ils sont modifiés dans les Réglages avec un testeur en ligne et stockés dans triggers.json. Les règles utilisateur sont essayées avant deux règles intégrées pour les URL et les chemins de fichiers, qui peuvent être désactivées mais pas modifiées. Les profils définissent une commande nommée, un répertoire de départ, un environnement et un thème épinglé facultatif, stockés dans un fichier JSON chacun sous profiles/ afin qu'ils puissent être partagés ou versionnés. Ils s'ouvrent via Fichier > Nouvel onglet avec profil ou ⌘⌥1–9, et ⌘T utilise le profil par défaut. Réglages, thèmes et configuration La fenêtre Réglages comporte les panneaux Apparence, Profils, Déclencheurs, Général et Notifications, avec un champ de recherche qui trouve les contrôles par nom ou par description familière. Les thèmes incluent Tomorrow Night, Solarized (clair et sombre), Nord, Dracula, Gruvbox Dark et les thèmes clair et sombre propres à mTerm, avec import de fichiers .itermcolors d'iTerm2 et basculement automatique clair/sombre. La famille de police, la taille, l'épaisseur du trait et l'interligne (1,0×–2,0×, par défaut 1,15×) sont ajustables en direct. La profondeur d'historique est configurable de 1k à 100k lignes avec le coût par onglet affiché. Les notifications macOS couvrent les événements d'attention du terminal (cloche, OSC 9 / OSC 777). La confirmation de fermeture pour les processus au premier plan en cours d'exécution et la confirmation de Clear Screen sont activables. La configuration réside sous ~/Library/Application Support/mTerm/ dans settings.json, state.json, profiles/*.json et triggers.json ; il n'y a pas de fichier de configuration séparé en v1. Installation et état L'installation se fait via le cask Homebrew (brew install --cask d0x2a/tap/mterm), un DMG universel signé et notarié, ou en compilant depuis les sources avec macOS 14+ et Xcode 15+ (ou les outils en ligne de commande Swift 5.10+) via swift run -c release mTerm. Le projet est en v1.3.1 et déclare que tous les éléments de sa définition de terminé dans SPEC.md ont été livrés. Il indique que les objectifs de mémoire d'historique sont atteints avec de la marge, tandis que le débit reste en deçà du chiffre ambitieux de la spécification ; les mesures et le banc d'essai sont documentés dans docs/BENCHMARKS.md. La licence est MIT, copyright Dox2A Labs LLC.