2011-04-06 70 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

相關問題