/** * adjbacklight – Convient method for adjusting the backlight on your portable computer * * Copyright © 2012, 2013 Mattias Andrée (maandree@member.fsf.org) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ import java.io.*; import java.util.*; /** * Interactive backlight adjustment * * @author Mattias Andrée, maandree@member.fsf.org */ public class Adjbacklight { /** * The is the main entry point of the program * * @param args Expects the three values: terminal height, terminal width, backlight device * @throws IOException On error */ public static void main(final String... args) throws IOException { String dir = "/sys/class/backlight/" + args[2] + "/"; int width = Integer.parseInt(args[1]); int max = 0, min = 0, cur = 0; { InputStream is = null; try { is = new FileInputStream(dir + "brightness"); Scanner sc = new Scanner(is); cur = Integer.parseInt(sc.nextLine()); } finally { if (is != null) is.close(); } } { InputStream is = null; try { is = new FileInputStream(dir + "max_brightness"); Scanner sc = new Scanner(is); max = Integer.parseInt(sc.nextLine()); } finally { if (is != null) is.close(); } } if (max <= min) System.exit(127); int step = (max - min) / 200; int init = cur; if (step == 0) step = 1; System.out.print("\n\n\n\n\n\n"); print(min, max, init, cur, width); for (int d; (d = System.in.read()) != -1;) switch (d) { case 'q': case '\n': case 4: System.out.println(); return; case 'A': case 'C': cur += step << 1; case 'B': case 'D': cur -= step; if (cur < min) cur = min; if (cur > max) cur = max; { OutputStream os = null; try { os = new FileOutputStream(dir + "brightness"); os.write((cur + "\n").getBytes("UTF-8")); os.flush(); print(min, max, init, cur, width); } finally { if (os != null) os.close(); } } break; } } /** * Print the status * * @param min The minimum possible brightness * @param max The maximum possible brightness * @param init The brightness used when the program started * @param cur The current brightness * @param width The width of the terminal */ private static void print(int min, int max, int init, int cur, int width) { String line = "──────────────────────────────────"; while (line.length() < width - 2) line += line; line = line.substring(0, width - 2); String space = " "; while (space.length() < width - 2) space += space; space = space.substring(0, width - 2); int mid = (int)((cur - min) * (width - 2.) / (max - min) + 0.5); System.out.print("\033[1000D\033[6A"); System.out.println("\033[2K┌" + line + "┐"); System.out.println("\033[2K│\033[47m" + space.substring(0, mid) + "\033[49m" + space.substring(mid) + "│"); System.out.println("\033[2K└" + line + "┘"); System.out.println("\033[2KMaximum brightness: " + max); System.out.println("\033[2KInitial brightness: " + init); System.out.println("\033[2KCurrent brightness: " + cur); } }