Terminal nativ macOS — shell local rapid, cu comportament PuTTY-style si tab-uri.
- Shell login local (zsh/bash din
$SHELL) - Tab-uri cu title dinamic primit prin OSC 0/1/2 — pe SSH remote arata automat
user@host:cwd - Copy on select + paste pe click-dreapta (stil PuTTY)
- Auto-scroll in timpul drag-ului de selectie (cursor sub/peste view → scroll continuu + extindere selectie)
- Blink cursor configurabil: Off / Slow / Medium / Fast
- Folder default de pornire (Settings → Pornire; gol = HOME)
- Teme integrate (Implicit, Solarized Dark/Light, Dracula, Nord, macOS Light, etc.)
- Font reglabil (Cmd+= / Cmd+- / slider in Settings)
- Shell integration auto-install in
~/.zshrc: hook pentru titleuser@host:cwd+ tab completion cu meniu interactiv (toggle on/off in Settings) - Bundle ID stabil
ro.local.term-mac
Necesar: Xcode 16+, XcodeGen (brew install xcodegen).
xcodegen generate
xcodebuild -project term-mac.xcodeproj -scheme term-mac -configuration Release \
-derivedDataPath .build-xcode build
cp -R .build-xcode/Build/Products/Release/term-mac.app /Applications/
open /Applications/term-mac.app- Swift / SwiftUI + AppKit
- Emulator: SwiftTerm (MIT)
- macOS 14+ (Sonoma)
- NON-sandboxed — shell-ul local are acces complet la disk (cum trebuie pentru un terminal real). De-asta NU e pe Mac App Store; pentru versiunea sandboxed/MAS-target vezi proiectul separat VTerm.
- Auto-scroll la selectie: SwiftTerm seteaza
autoScrollDeltainmouseDraggedcand cursorul iese din view, dar nu programeaza timer-ul (bug upstream). Suplim cu NSEvent monitor + Timer la 50ms care cheamascrollUp/scrollDown(lines:)si posteaza un drag sintetic la aceeasi pozitie ca selectia sa se extinda. - Blink cursor cu durata custom: SwiftTerm hardcodeaza 0.7s in
MacCaretView.updateAnimation.caretViewe internal — accesat prinMirror(reflecting:), suprascris cu CABasicAnimation propriu. Re-aplicat laNSWindow.didBecomeKeyNotificationfiindca SwiftTerm reseteaza animatia inbecomeFirstResponder. - Title tab fara loop:
TerminalCoordinatorseparat caprocessDelegate(nu PuttyTerminalView ca propriul delegate — MacLocalTerminalView forwardshostCurrentDirectoryUpdate/processTerminatedlaprocessDelegatecu aceeasi semnatura = recursie).
Build self-contained .dmg:
./build/package.sh v0.1.0-alpha
# → .dist/term-mac-v0.1.0-alpha.dmg
gh release create v0.1.0-alpha .dist/term-mac-v0.1.0-alpha.dmg \
--title "v0.1.0-alpha — Initial release" --notes-file CHANGELOG.mdGPL-2.0-or-later. Vezi LICENSE si NOTICE pentru atribuiri terte.