My slstatus configuration
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

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