My slstatus configuration
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 
 

57 рядки
1.2 KiB

  1. /* See LICENSE file for copyright and license details. */
  2. #include <limits.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include "../util.h"
  6. const char *
  7. battery_perc(const char *bat)
  8. {
  9. int perc;
  10. char path[PATH_MAX];
  11. snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/capacity");
  12. return (pscanf(path, "%i", &perc) == 1) ?
  13. bprintf("%d", perc) : NULL;
  14. }
  15. const char *
  16. battery_power(const char *bat)
  17. {
  18. int watts;
  19. char path[PATH_MAX];
  20. snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/power_now");
  21. return (pscanf(path, "%i", &watts) == 1) ?
  22. bprintf("%d", (watts + 500000) / 1000000) : NULL;
  23. }
  24. const char *
  25. battery_state(const char *bat)
  26. {
  27. struct {
  28. char *state;
  29. char *symbol;
  30. } map[] = {
  31. { "Charging", "+" },
  32. { "Discharging", "-" },
  33. { "Full", "=" },
  34. { "Unknown", "/" },
  35. };
  36. size_t i;
  37. char path[PATH_MAX], state[12];
  38. snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/status");
  39. if (pscanf(path, "%12s", state) != 1) {
  40. return NULL;
  41. }
  42. for (i = 0; i < LEN(map); i++) {
  43. if (!strcmp(map[i].state, state)) {
  44. break;
  45. }
  46. }
  47. return (i == LEN(map)) ? "?" : map[i].symbol;
  48. }