Created
December 2, 2022 17:24
-
-
Save dmlloyd/2a613c64b0e1321449701540e4db1a39 to your computer and use it in GitHub Desktop.
Using a pager from Java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.IOException; | |
import java.io.OutputStream; | |
import java.io.OutputStreamWriter; | |
import java.nio.charset.StandardCharsets; | |
import java.util.List; | |
class Scratch { | |
// Pager example | |
public static void main(String[] args) { | |
String myBigString = """ | |
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam lobortis vestibulum lectus, ac ornare urna euismod quis. Pellentesque feugiat mauris mauris, et dapibus turpis volutpat ac. Proin mollis consequat ullamcorper. Donec volutpat iaculis vestibulum. Sed lacinia rutrum dolor non vestibulum. Suspendisse mollis urna enim, ultrices fermentum massa eleifend ut. Quisque porta erat vitae scelerisque imperdiet. Sed ut condimentum augue, a pretium orci. Duis fermentum, urna sed imperdiet consectetur, nibh libero porttitor eros, vitae sollicitudin arcu velit quis nibh. Aliquam hendrerit diam nibh, non volutpat ligula dapibus sit amet. Sed tincidunt quis lacus vitae gravida. Donec elementum nisl non ultrices scelerisque. | |
Mauris posuere vitae libero a ornare. Curabitur hendrerit venenatis lacinia. Praesent quam mauris, laoreet nec vulputate nec, fermentum a diam. In eget nibh ornare, feugiat dolor eget, vestibulum dolor. Proin vehicula nibh quis dignissim iaculis. Sed interdum cursus laoreet. Morbi risus ipsum, accumsan eu accumsan id, accumsan in nisl. Quisque tincidunt tincidunt interdum. Aenean quis urna nisi. Praesent sed sem quis ligula auctor luctus. Donec lobortis tortor a libero lacinia, id vulputate dui ornare. Nunc at tortor dictum, pharetra diam vitae, efficitur elit. Duis finibus odio nec massa dapibus, sit amet placerat ex sollicitudin. Donec vitae tellus vitae ipsum hendrerit lacinia ornare vitae odio. Suspendisse tristique diam sit amet consequat tempor. | |
Phasellus cursus eleifend mollis. Suspendisse potenti. Maecenas aliquet diam non augue condimentum commodo. Nam at blandit purus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nam molestie faucibus ipsum eget maximus. Vestibulum pulvinar mollis neque, id ultricies dolor auctor sed. Quisque tincidunt ligula a lacus fringilla, ut tristique mi euismod. Maecenas ullamcorper id risus vel tempus. Phasellus feugiat dolor sed justo efficitur maximus. | |
Aliquam ut aliquet sem, vel vestibulum tortor. Aliquam cursus maximus lectus, ac pharetra ex sodales sed. Nulla quis tortor condimentum, laoreet sem sit amet, placerat mauris. Nam consequat est eros, vel sagittis neque ullamcorper ac. Fusce bibendum ultrices erat sed scelerisque. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce augue dui, placerat ac condimentum in, tempus eu diam. Etiam viverra interdum tincidunt. Mauris suscipit magna est, ac vehicula odio ultrices non. Cras dignissim fringilla facilisis. Morbi maximus libero justo, id consequat massa mollis ac. | |
Cras non tristique nisl. Phasellus bibendum nec risus at venenatis. Quisque aliquet lacus massa. Integer mollis scelerisque urna, eget malesuada justo mollis eu. Duis tincidunt mattis nunc, nec dapibus erat mollis ac. Pellentesque eros neque, tempus a ultricies et, tincidunt et diam. Etiam id convallis felis. Sed elementum vehicula diam, ac vestibulum nisl bibendum suscipit. | |
"""; | |
ProcessBuilder bp = new ProcessBuilder(); | |
bp.command(List.of("/usr/bin/less")); | |
// output from the program should go to our output, but we should control the input | |
bp.redirectError(ProcessBuilder.Redirect.INHERIT); | |
bp.redirectOutput(ProcessBuilder.Redirect.INHERIT); | |
bp.redirectInput(ProcessBuilder.Redirect.PIPE); | |
try { | |
Process process = bp.start(); | |
try (OutputStream os = process.getOutputStream()) { | |
try (OutputStreamWriter w = new OutputStreamWriter(os, StandardCharsets.UTF_8)) { | |
w.write(myBigString); | |
} | |
} | |
// all done! | |
return; | |
} catch (IOException ignored) { | |
// oops, the pager didn't work! just do it the normal way | |
System.out.print(myBigString); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment