76 lines
1.5 KiB
Markdown
76 lines
1.5 KiB
Markdown
# jlibghostty
|
|
|
|
Java FFM bindings for Ghostty's `libghostty-vt`.
|
|
|
|
This targets Java 22+ and uses `java.lang.foreign`, not JNI. The public API is intentionally small while Ghostty's C API is still marked unstable upstream.
|
|
|
|
## Build
|
|
|
|
```sh
|
|
nix build
|
|
```
|
|
|
|
The default Nix package builds:
|
|
|
|
- `share/java/jlibghostty-0.1.0-SNAPSHOT.jar`
|
|
- `maven/dev/jlibghostty/jlibghostty/0.1.0-SNAPSHOT/...`
|
|
|
|
The jar contains the host platform `libghostty-vt` under `dev/jlibghostty/native/<platform>/`.
|
|
|
|
## Gradle Consumer
|
|
|
|
After `nix build`, another Gradle project can consume the generated Maven repository:
|
|
|
|
```kotlin
|
|
repositories {
|
|
maven {
|
|
url = uri("/home/anon/Dev/jlibghostty/result/maven")
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation("dev.jlibghostty:jlibghostty:0.1.0-SNAPSHOT")
|
|
}
|
|
|
|
tasks.withType<JavaExec>().configureEach {
|
|
jvmArgs("--enable-native-access=ALL-UNNAMED")
|
|
}
|
|
```
|
|
|
|
If the app runs on the module path, use:
|
|
|
|
```sh
|
|
--enable-native-access=dev.jlibghostty
|
|
```
|
|
|
|
## External Native Library
|
|
|
|
The library normally loads the bundled native `libghostty-vt`. To override it:
|
|
|
|
```sh
|
|
java -Djlibghostty.library.path=/path/to/libghostty-vt.so ...
|
|
```
|
|
|
|
or set:
|
|
|
|
```sh
|
|
export JLIBGHOSTTY_LIBRARY=/path/to/libghostty-vt.so
|
|
```
|
|
|
|
## Example
|
|
|
|
```java
|
|
try (Terminal terminal = Ghostty.open(TerminalOptions.of(80, 24))) {
|
|
terminal.write("hello\r\n");
|
|
System.out.println(terminal.snapshot());
|
|
}
|
|
```
|
|
|
|
## Development Shell
|
|
|
|
```sh
|
|
nix develop
|
|
```
|
|
|
|
The shell provides Java, Gradle, and `JLIBGHOSTTY_LIBRARY` pointing at the Nix-built `libghostty-vt`.
|