<!-- 譯者:Github@wizadforcel -->
在我們編寫了一些主題和包之后,讓我們花一些時間來深入了解一些Atom的工作方式。在這一章中,我們會更進一步了解Atom中獨特的內部API和系統,甚至查看一些源碼來看一看它們是如何很好地工作的。
# 配置API #
## 讀取配置 ##
如果你想要編寫一個可配置的包,你需要通過`atom.config`來整體讀取配置,或者通過`atom.config.get`來讀取一個具有命名空間的配置鍵的當前值。
```
# read a value with `config.get`
@showInvisibles() if atom.config.get "editor.showInvisibles"
```
或者通過`atom.config.observe`來跟蹤任何視圖對象產生的修改。
```
{View} = require 'space-pen'
class MyView extends View
attached: ->
@fontSizeObserveSubscription =
atom.config.observe 'editor.fontSize', (newValue, {previous}) =>
@adjustFontSize()
detached: ->
@fontSizeObserveSubscription.dispose()
```
`atom.config.observe`方法會使用特定鍵路徑的當前值立即調用提供的回調函數,并且以后當這個值發生改變時也會調用。如果你只希望在下次這個值改變的時候調用回調,使用`atom.config.onDidChange`來代替它。
訂閱(Subscription)方法會返回一個一次性的訂閱對象。注意上面的例子中,我們如何將訂閱保存在`@fontSizeObserveSubscription`實例變量中,以及視圖被分離的時候如何處理它。你可以添加多個訂閱到`[CompositeDisposable](https://atom.io/docs/api/latest/CompositeDisposable)`中來將它們組合到一起。當視圖被分離的時候你可以把它處理掉。
## 寫入配置 ##
雖然`atom.config`的數據在啟動時才從`~/.atom/config.cson`加載,但你可以通過`atom.config.set`用編程的方式對其寫入。
```
# basic key update
atom.config.set("core.showInvisibles", true)
```
如果你通過特定鍵路徑來訪問包的配置,你也可能像將它們和你包里面的主模塊的schema關聯起來。更多schema的細節請閱讀[配置API文檔](https://atom.io/docs/api/latest/Config)。