2011-04-06 69 views
4

我在我的.emacs中有这样的设置,如 (display-battery-mode 1)。它在模式行上显示我的电池状态。这可以帮助我,当我在全屏笔记本电脑上。但是当我在桌面上工作时,它会变得很难看[N/A%][N/A C]emacs,它是在笔记本电脑上还是在桌面上运行?

所以我想只有在笔记本电脑上工作时才能使用它。


(if OnLaptop
(display-battery-mode 1))

感谢。

UPDATE: 它们都运行的是Linux(Ubuntu的)

回答

5

我会使用battery包的内部来确定电池信息是否可用。这段代码应该为你做的伎俩:

(require 'battery) 
(when (and battery-status-function 
     (not (string-match-p "N/A" 
       (battery-format "%B" 
         (funcall battery-status-function))))) 
    (display-battery-mode 1)) 
+0

谢谢..干净和工作..! – kindahero 2011-04-07 03:27:09

0

你还没有说什么操作系统,他们俩都上运行。我会建议做一些与主机名关键的东西。无论是通过getenv函数(虽然不是所有发行版出口主机名)或通过类似

(with-output-to-string 
    (call-process "/bin/hostname" nil standard-output nil)) 

如果你是在UNIX虽然,我会考虑类似的东西在你的.bashrc加入“出口LAPTOP = 1”并检查这一点。

+0

由于在两个系统上的Linux操作系统。所以这似乎很容易实现。我一直在考虑根据主机名来分割.emacs。感谢您的建议。 – kindahero 2011-04-06 09:40:06

+1

变量'system-name'已包含主机名。 – slowdog 2011-04-06 11:40:59

0

我想不出一种直截了当的方式,但我认为你可以偷看/proc中的一些文件并作出有根据的猜测。如果你有一台笔记本电脑和一台台式机来区分,应该有一些你可以用CPU创建的签名。

+0

谢谢,我看到battery.el也在研究'/ proc'和'/ sys'。我会尝试编写一个函数来检查与battery.el中相同的方法。谢谢你对我的另一个问题的回答。我试图让gnus工作,我从.gnus中拿了一些函数。 – kindahero 2011-04-06 09:35:55

+0

如果这对你有用,习惯于“接受”答案。 – 2011-04-06 10:08:39

0

试试这个。不幸的是,我没有任何非笔记本电脑尝试一下在:(

(require 'battery) 
(setq have-battery-status-p 
     (let ((perc-charged (assoc ?p (funcall battery-status-function)))) 
    (and perc-charged 
     (not (zerop (string-to-number (cdr perc-charged))))))) 
(if have-battery-status-p 
    (display-battery-mode 1)) 

编辑

要由内而外,(funcall battery-status-function)返回alist,为此,打破它我们希望'p'(作为字符)元素,因为这包含剩余电池电量的百分比。

所以perc-charged将类似于nil如果没有'p'el如果电池电量97%已充电,或者(我猜测)(112 . "N/A")如果电池状态不可用,则为(112 . "97")

最后,如果perc-charged是非零并且该值的cdr当转换为一个数字(如“N/A”使用string-to-number转换时会)是非零的,我们假设一个电池存在。

我已经充实了这个例子,现在应该是一个完全有效的例子。

+0

你能解释一下这个应该做什么吗? – kindahero 2011-04-06 16:00:58

+0

感谢您的解释。似乎我不能接受多个答案 – kindahero 2011-04-07 03:28:24

2

我用

;; If not on AC power line, then display battery status on the mode line 
(and (require 'battery nil t) 
    (functionp battery-status-function) 
    (or (equal (cdr (assoc ?L (funcall battery-status-function))) "on-line") 
     (display-battery-mode 1))) 
0

我用:

;; load these only if using GUI emacs 
(when (display-graphic-p) 
+0

很好的选择知道,虽然在这种情况下它不是真正想要的答案,因为我在这两种情况下都使用带有X的emacs。 – kindahero 2011-05-02 09:50:34

相关问题