From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Evgeny Zajcev Newsgroups: gmane.emacs.devel Subject: upower battery-status-function Date: Mon, 31 Oct 2016 23:59:59 +0300 Message-ID: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/alternative; boundary=94eb2c05b4e4b3e55b05402f7dd1 X-Trace: blaine.gmane.org 1477947635 11935 195.159.176.226 (31 Oct 2016 21:00:35 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Mon, 31 Oct 2016 21:00:35 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Oct 31 22:00:29 2016 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1c1Jgj-0000s7-96 for ged-emacs-devel@m.gmane.org; Mon, 31 Oct 2016 22:00:13 +0100 Original-Received: from localhost ([::1]:38565 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c1Jgl-0002l1-Vx for ged-emacs-devel@m.gmane.org; Mon, 31 Oct 2016 17:00:16 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:60137) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c1Jgc-0002ii-PV for emacs-devel@gnu.org; Mon, 31 Oct 2016 17:00:08 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c1JgY-0003cV-HH for emacs-devel@gnu.org; Mon, 31 Oct 2016 17:00:06 -0400 Original-Received: from mail-yw0-x22b.google.com ([2607:f8b0:4002:c05::22b]:33744) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1c1JgY-0003b5-7d for emacs-devel@gnu.org; Mon, 31 Oct 2016 17:00:02 -0400 Original-Received: by mail-yw0-x22b.google.com with SMTP id r204so48605104ywb.0 for ; Mon, 31 Oct 2016 14:00:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to; bh=ckudOeEDUsNbUpq7gOUmIv1W/CD5LOnxkRUZoXm8QLk=; b=zeLNDnw4W/a0JuYGG6zLNqk5xpIgi52GKLS2wONO/xBMWZdpvzB1ekoYDrZWR4/HGL gbZe6qcl+UpnRwfcTPRnNulINsul4Q0Yfav/cNeOXC7pKBM9ETnyd1C2mnAdG48KvtRl iJ0dRijmPBVM58fnvF22ljYc0XUdxY3xJBgxOS01AYGrPxOqrBI6zIfIjdqou1U7wkyX 7RoXv/+3CH9ONF0D2/RTO4IvxtY0Y7WPdiBNQ4/KYxQ3F+zfaXXT5/nosGNYTvQZTCUT Eg/Mab/uQyattkkKlGXYvQorNQQ5TAv0jeOGOxIlyyFfclF2scpqRK7m6EHv61OdCmWu gNtA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=ckudOeEDUsNbUpq7gOUmIv1W/CD5LOnxkRUZoXm8QLk=; b=EhQEBNsVbn9isaIHJPhu8fm2p6LSa/rm3XDIgtdfeMrYt6oP1E3KVN9XfhXopk5orm 7q7IfjuTShSW50a+42sMDxl9d/ZZi0/WE1SMFuFV/VFPYvgGcO7I0tLb79lJxyse+aKq WHXF3nHaYzUe/6ZsSEnrYCwX0IIrXBi6qLXX+BIjRjSzhXfzo4rMUvSj3kW5fxwh+85s EYp5HUg4rjKqTu2ov1OHEALFSsym52191pk5qOa/Fy0bQWHnpqU041Smdq5TG/0wY51l 0ynmZr+U8VOaXAKhCC+R2DWCRrOzvUltQeSzctiBAMOhH1ElCtRifQvKC2pb4bah+EpA pgCQ== X-Gm-Message-State: ABUngvfyBwzp7qeo+51tsgG2ePA35IxwzQwTYHXt3ltOule8qMWGRwvpi3r1Hnot1BtHoSGtxcLkXpNWPTXCgw== X-Received: by 10.107.143.132 with SMTP id r126mr20975615iod.121.1477947600133; Mon, 31 Oct 2016 14:00:00 -0700 (PDT) Original-Received: by 10.107.176.2 with HTTP; Mon, 31 Oct 2016 13:59:59 -0700 (PDT) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2607:f8b0:4002:c05::22b X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:209048 Archived-At: --94eb2c05b4e4b3e55b05402f7dd1 Content-Type: text/plain; charset=UTF-8 Hello, here is very fast dbus based battery status function, implemented using upower interface. Could you please include it in battery.el ? (defcustom battery-upower-device "battery_BAT1" "*Upower battery device name." :type 'string :group 'battery) (defsubst battery-upower-prop (pname &optional device) (dbus-get-property :system "org.freedesktop.UPower" (concat "/org/freedesktop/UPower/devices/" (or device battery-upower-device)) "org.freedesktop.UPower" pname)) (defun battery-upower () "Get battery status from dbus Upower interface. This function works only in systems with `upowerd' daemon running. The following %-sequences are provided: %c Current capacity (mWh) %p Battery load percentage %r Current rate %B Battery status (verbose) %L AC line status (verbose) %s Remaining time (to charge or discharge) in seconds %m Remaining time (to charge or discharge) in minutes %h Remaining time (to charge or discharge) in hours %t Remaining time (to charge or discharge) in the form `h:min'" (let ((percents (battery-upower-prop "Percentage")) (time-to-empty (battery-upower-prop "TimeToEmpty")) (time-to-full (battery-upower-prop "TimeToFull")) (state (battery-upower-prop "State")) (online (battery-upower-prop "Online" "line_power_ACAD")) (energy (battery-upower-prop "Energy")) (energy-rate (battery-upower-prop "EnergyRate")) (battery-states '((0 . "unknown") (1 . "charging") (2 . "discharging") (3 . "empty") (4 . "fully-charged") (5 . "pending-charge") (6 . "pending-discharge"))) seconds minutes hours remaining-time) (cond ((and online time-to-full) (setq seconds time-to-full)) ((and (not online) time-to-empty) (setq seconds time-to-empty))) (when seconds (setq minutes (/ seconds 60) hours (/ minutes 60) remaining-time (format "%d:%02d" (truncate hours) (- (truncate minutes) (* 60 (truncate hours)))))) (list (cons ?c (or (and energy (number-to-string (round (* 1000 energy)))) "N/A")) (cons ?p (or (and percents (number-to-string (round percents))) "N/A")) (cons ?r (or (and energy-rate (concat (number-to-string energy-rate) " W")) "N/A")) (cons ?B (or (and state (cdr (assoc state battery-states))) "unknown")) (cons ?L (or (and online "on-line") "off-line")) (cons ?s (or (and seconds (number-to-string seconds)) "N/A")) (cons ?m (or (and minutes (number-to-string minutes)) "N/A")) (cons ?h (or (and hours (number-to-string hours)) "N/A")) (cons ?t (or remaining-time "N/A"))))) thanks -- lg --94eb2c05b4e4b3e55b05402f7dd1 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdj5IZWxsbywgaGVyZSBpcyB2ZXJ5IGZhc3QgZGJ1cyBiYXNlZCBi YXR0ZXJ5IHN0YXR1cyBmdW5jdGlvbiwgaW1wbGVtZW50ZWQgdXNpbmcgdXBvd2VyIGludGVyZmFj ZS7CoCBDb3VsZCB5b3UgcGxlYXNlIGluY2x1ZGUgaXQgaW4gYmF0dGVyeS5lbCA/PGJyPjxicj7C oMKgwqAgKGRlZmN1c3RvbSBiYXR0ZXJ5LXVwb3dlci1kZXZpY2UgJnF1b3Q7YmF0dGVyeV9CQVQx JnF1b3Q7PGJyPsKgwqDCoMKgwqAgJnF1b3Q7KlVwb3dlciBiYXR0ZXJ5IGRldmljZSBuYW1lLiZx dW90Ozxicj7CoMKgwqDCoMKgIDp0eXBlICYjMzk7c3RyaW5nPGJyPsKgwqDCoMKgwqAgOmdyb3Vw ICYjMzk7YmF0dGVyeSk8YnI+wqDCoMKgIDxicj7CoMKgwqAgKGRlZnN1YnN0IGJhdHRlcnktdXBv d2VyLXByb3AgKHBuYW1lICZhbXA7b3B0aW9uYWwgZGV2aWNlKTxicj7CoMKgwqDCoMKgIChkYnVz LWdldC1wcm9wZXJ0eTxicj7CoMKgwqDCoMKgwqAgOnN5c3RlbTxicj7CoMKgwqDCoMKgwqAgJnF1 b3Q7b3JnLmZyZWVkZXNrdG9wLlVQb3dlciZxdW90Ozxicj7CoMKgwqDCoMKgwqAgKGNvbmNhdCAm cXVvdDsvb3JnL2ZyZWVkZXNrdG9wL1VQb3dlci9kZXZpY2VzLyZxdW90OyAob3IgZGV2aWNlIGJh dHRlcnktdXBvd2VyLWRldmljZSkpPGJyPsKgwqDCoMKgwqDCoCAmcXVvdDtvcmcuZnJlZWRlc2t0 b3AuVVBvd2VyJnF1b3Q7PGJyPsKgwqDCoMKgwqDCoCBwbmFtZSkpPGJyPsKgwqDCoCA8YnI+wqDC oMKgIChkZWZ1biBiYXR0ZXJ5LXVwb3dlciAoKTxicj7CoMKgwqDCoMKgICZxdW90O0dldCBiYXR0 ZXJ5IHN0YXR1cyBmcm9tIGRidXMgVXBvd2VyIGludGVyZmFjZS48YnI+wqDCoMKgIFRoaXMgZnVu Y3Rpb24gd29ya3Mgb25seSBpbiBzeXN0ZW1zIHdpdGggYHVwb3dlcmQmIzM5OyBkYWVtb248YnI+ wqDCoMKgIHJ1bm5pbmcuPGJyPsKgwqDCoCA8YnI+wqDCoMKgIFRoZSBmb2xsb3dpbmcgJS1zZXF1 ZW5jZXMgYXJlIHByb3ZpZGVkOjxicj7CoMKgwqAgJWMgQ3VycmVudCBjYXBhY2l0eSAobVdoKTxi cj7CoMKgwqAgJXAgQmF0dGVyeSBsb2FkIHBlcmNlbnRhZ2U8YnI+wqDCoMKgICVyIEN1cnJlbnQg cmF0ZTxicj7CoMKgwqAgJUIgQmF0dGVyeSBzdGF0dXMgKHZlcmJvc2UpPGJyPsKgwqDCoCAlTCBB QyBsaW5lIHN0YXR1cyAodmVyYm9zZSk8YnI+wqDCoMKgICVzIFJlbWFpbmluZyB0aW1lICh0byBj aGFyZ2Ugb3IgZGlzY2hhcmdlKSBpbiBzZWNvbmRzPGJyPsKgwqDCoCAlbSBSZW1haW5pbmcgdGlt ZSAodG8gY2hhcmdlIG9yIGRpc2NoYXJnZSkgaW4gbWludXRlczxicj7CoMKgwqAgJWggUmVtYWlu aW5nIHRpbWUgKHRvIGNoYXJnZSBvciBkaXNjaGFyZ2UpIGluIGhvdXJzPGJyPsKgwqDCoCAldCBS ZW1haW5pbmcgdGltZSAodG8gY2hhcmdlIG9yIGRpc2NoYXJnZSkgaW4gdGhlIGZvcm0gYGg6bWlu JiMzOTsmcXVvdDs8YnI+wqDCoMKgwqDCoCAobGV0ICgocGVyY2VudHMgKGJhdHRlcnktdXBvd2Vy LXByb3AgJnF1b3Q7UGVyY2VudGFnZSZxdW90OykpPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KHRpbWUtdG8tZW1wdHkgKGJhdHRlcnktdXBvd2VyLXByb3AgJnF1b3Q7VGltZVRvRW1wdHkmcXVv dDspKTxicj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh0aW1lLXRvLWZ1bGwgKGJhdHRlcnktdXBv d2VyLXByb3AgJnF1b3Q7VGltZVRvRnVsbCZxdW90OykpPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKHN0YXRlIChiYXR0ZXJ5LXVwb3dlci1wcm9wICZxdW90O1N0YXRlJnF1b3Q7KSk8YnI+wqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAob25saW5lIChiYXR0ZXJ5LXVwb3dlci1wcm9wICZxdW90O09u bGluZSZxdW90OyAmcXVvdDtsaW5lX3Bvd2VyX0FDQUQmcXVvdDspKTxicj7CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIChlbmVyZ3kgKGJhdHRlcnktdXBvd2VyLXByb3AgJnF1b3Q7RW5lcmd5JnF1b3Q7 KSk8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoZW5lcmd5LXJhdGUgKGJhdHRlcnktdXBvd2Vy LXByb3AgJnF1b3Q7RW5lcmd5UmF0ZSZxdW90OykpPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KGJhdHRlcnktc3RhdGVzICYjMzk7KCgwIC4gJnF1b3Q7dW5rbm93biZxdW90OykgKDEgLiAmcXVv dDtjaGFyZ2luZyZxdW90Oyk8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoMiAuICZxdW90O2Rpc2NoYXJnaW5nJnF1b3Q7KSAoMyAu ICZxdW90O2VtcHR5JnF1b3Q7KTxicj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICg0IC4gJnF1b3Q7ZnVsbHktY2hhcmdlZCZxdW90Oykg KDUgLiAmcXVvdDtwZW5kaW5nLWNoYXJnZSZxdW90Oyk8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoNiAuICZxdW90O3BlbmRpbmct ZGlzY2hhcmdlJnF1b3Q7KSkpPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2Vjb25kcyBtaW51 dGVzIGhvdXJzIHJlbWFpbmluZy10aW1lKTxicj7CoMKgwqDCoMKgwqDCoCAoY29uZCAoKGFuZCBv bmxpbmUgdGltZS10by1mdWxsKTxicj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChzZXRx IHNlY29uZHMgdGltZS10by1mdWxsKSk8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKChh bmQgKG5vdCBvbmxpbmUpIHRpbWUtdG8tZW1wdHkpPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKHNldHEgc2Vjb25kcyB0aW1lLXRvLWVtcHR5KSkpPGJyPsKgwqDCoMKgwqDCoMKgICh3 aGVuIHNlY29uZHM8YnI+wqDCoMKgwqDCoMKgwqDCoMKgIChzZXRxIG1pbnV0ZXMgKC8gc2Vjb25k cyA2MCk8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhvdXJzICgvIG1pbnV0ZXMg NjApPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZW1haW5pbmctdGltZTxicj7C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGZvcm1hdCAmcXVvdDslZDolMDJkJnF1b3Q7 ICh0cnVuY2F0ZSBob3Vycyk8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAoLSAodHJ1bmNhdGUgbWludXRlcykgKCogNjAgKHRydW5jYXRlIGhvdXJzKSkp KSkpPGJyPsKgwqDCoMKgwqDCoMKgIChsaXN0IChjb25zID9jIChvciAoYW5kIGVuZXJneTxicj7C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAobnVtYmVyLXRvLXN0cmluZyAocm91bmQgKCogMTAwMCBlbmVyZ3kpKSkpPGJyPsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnF1b3Q7Ti9B JnF1b3Q7KSk8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGNvbnMgP3AgKG9yIChhbmQg cGVyY2VudHMgKG51bWJlci10by1zdHJpbmcgKHJvdW5kIHBlcmNlbnRzKSkpPGJyPsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnF1b3Q7Ti9BJnF1 b3Q7KSk8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGNvbnMgP3IgKG9yIChhbmQgZW5l cmd5LXJhdGU8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKGNvbmNhdCAobnVtYmVyLXRvLXN0cmluZyBlbmVyZ3ktcmF0ZSkg JnF1b3Q7IFcmcXVvdDspKTxicj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICZxdW90O04vQSZxdW90OykpPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIChjb25zID9CIChvciAoYW5kIHN0YXRlIChjZHIgKGFzc29jIHN0YXRlIGJhdHRlcnkt c3RhdGVzKSkpPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJnF1b3Q7dW5rbm93biZxdW90OykpPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIChjb25zID9MIChvciAoYW5kIG9ubGluZSAmcXVvdDtvbi1saW5lJnF1b3Q7KSAmcXVvdDtv ZmYtbGluZSZxdW90OykpPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChjb25zID9zIChv ciAoYW5kIHNlY29uZHMgKG51bWJlci10by1zdHJpbmcgc2Vjb25kcykpICZxdW90O04vQSZxdW90 OykpPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChjb25zID9tIChvciAoYW5kIG1pbnV0 ZXMgKG51bWJlci10by1zdHJpbmcgbWludXRlcykpICZxdW90O04vQSZxdW90OykpPGJyPsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIChjb25zID9oIChvciAoYW5kIGhvdXJzIChudW1iZXItdG8t c3RyaW5nIGhvdXJzKSkgJnF1b3Q7Ti9BJnF1b3Q7KSk8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKGNvbnMgP3QgKG9yIHJlbWFpbmluZy10aW1lICZxdW90O04vQSZxdW90OykpKSkpPGJy Pjxicj48YnI+PC9kaXY+PGRpdj50aGFua3M8YnI+PGJyPjwvZGl2PjxkaXY+LS08YnI+PC9kaXY+ bGc8YnI+PC9kaXY+DQo= --94eb2c05b4e4b3e55b05402f7dd1--