在我們寫完第乙個包之後,讓我們看一看我們能寫出來的其它包的例子。這一節會引導你建立乙個簡單的命令來將選中的文字替換為字元畫(ascii art)。在你在單詞「cool」選中的時候執行我們的命令,它會被替換為:
o888
ooooooo ooooooo ooooooo 888
888 888 888 888 888 888 888
888 888 888 888 888 888
88ooo888 88ooo88 88ooo88 o888o
這個例子應該展示了如何在當前的文字緩衝區做基本的文字操作,以及如何處理選擇。
最後的包在 中檢視。
首先按下cmd-shift-p
來彈出命令面板。然後輸入「generate package」並且選擇「package generator: generate package」命令,就像我們在「包生成器」一節中做的那樣。輸入ascii-art
作為包的名字。
現在讓我們編輯包中的檔案,來讓我們的字元畫包做一些有意思的事情。由於這個包並不需要任何ui,我們可以把所有檢視相關的移除,所以可以放心刪除lib/ascii-art-view.coffee
、spec/ascii-art-view-spec.coffee
和styles/
。
接下來,開啟lib/ascii-art.coffee
並刪除所有檢視**,所以它看起來像這樣:
= require
'atom'
module.exports =
subscriptions: null
activate:->
@subscriptions = new compositedisposable
@subscriptions.add atom.commands.add 'atom-workspace',
'ascii-art:convert':=>
@convert()
deactivate:->
@subscriptions.dispose()
convert:->
console.log 'convert text!'
現在讓我們新增乙個命令。強烈建議你為你的命令取乙個命名空間,使用包名後面帶著乙個:
。所以你可以看到在**中,我們把命令叫做ascii-art:convert
,並且當它呼叫時會呼叫convert()
方法。
到目前為止,它只會在控制台中記錄。讓我們使它向文字緩衝區插入一些字元來開始。
convert: ->
ifeditor = atom.workspace.getactivetexteditor()
editor.inserttext('hello, world!')
就像在「字數統計」中那樣,我們使用atom.workspace.getactivetexteditor()
來獲取表示當前活動編輯器的物件。如果convert()
方法在沒有編輯器獲取焦點時呼叫,它會簡單地返回乙個空白的字串,所以我們可以跳過下一行。
接下來我們使用inserttext()
方法,向當前的文字編輯器插入乙個字串。無論游標當前在編輯器的**,都會在游標處插入文字。如果有文字被選中,會把選中文字替換成「hello, world!」文字。
現在可以開啟命令面板並搜尋「ascii art: convert」命令了。但是根本找不到。要修正它,開啟package.json
並找到activationcommands
屬性。活動命令通過在命令不使用時延遲它們的載入,來加快atom的啟動。所以把現有的命令移除,並在activationcommands
中新增ascii-art:convert
:
"activationcommands":
現在我們來新增用於觸發「ascii-art:convert」命令的快捷鍵。開啟keymaps/ascii-art.cson
,新增乙個鍵繫結來將ctrl-alt-a
鏈結到ascii-art:convert
命令上。由於你不需要預設的鍵繫結,你可以刪除它們。
完成之後它應該像這樣:
'atom-text-editor':
'ctrl-alt-a': 'ascii-art:convert'
現在我們需要將被選字元轉換為字元畫。為了完成它我們使用npm中的figlet
node模組。開啟package.json
,新增figlet的最新版本到dependencies
中:
"dependencies":
儲存檔案之後從命令面板執行「update package dependencies: update」。這會自動安裝包的node模組依賴,在這個例子中只有figlet。無論什麼時候你更新了package.json
檔案中的dependencies
字段,你都要需要執行「update package dependencies: update」命令。
如果由於某種原因沒有生效,你會看到「failed to update package dependencies」這樣的訊息,並且會找到乙個你的目錄下有個新的npm-debug.log
檔案。這個檔案會告訴你具體**有錯誤。
現在在lib/ascii-art.coffee
中請求(require)figlet
node模組,並且將被選文字轉換成字元畫來代替插入「hello, world!」。
convert: ->
ifeditor = atom.workspace.getactivetexteditor()
selection = editor.getselectedtext()
figlet = require 'figlet'
font = "o8"
figlet selection, , (error, art) ->
iferror
console.error(error)
else
editor.inserttext("\n#\n")
在這個例子中,我們需要快速檢視一些新的東西。首先是editor.getselectedtext()
,像你猜的那樣,返回當前選中的文字。
之後我們呼叫figlet的**,來將它轉換成別的東西,並使用editor.inserttext()
用它替換當前選中的文字。
在這一節中,我們編寫了乙個無ui的包,用於獲取選中文字並替換為處理過的版本。它可能會對建立文字提示和檢查工具有幫助。
Atom飛行手冊翻譯 2 3 文字選擇
atom中的文字選擇支援很多操作,比如區域選擇 縮排和一些查詢操作,以及用引號或者括號把文字括起來之類的標記操作。選擇命令借鑑了很多查詢命令。他們實際上具有相同的快捷鍵,只不過加了個shift。ctrl shift p 選擇當前位置到上一行的相同列 ctrl shift n 選擇當前位置到下一行的相...
Atom飛行手冊翻譯 4 5 4 8
atom中的一些包是node模組,而不是atom的包。如果你想要修改這些node模組,例如atom keymap,你需要把它們鏈結到不同於普通atom包的開發環境中。下面是執行node模組的本地版本的步驟,而不是atom中的apm。我們使用atom keymap作為乙個例子 git clone cd...
Atom飛行手冊翻譯 2 4 編輯和刪除文字
到目前為止,我們介紹了一些用於在檔案中移動和選擇區域的方法,現在讓我們真正來修改一些文字吧。很顯然你可以通過打字的方式來輸入字元,但是有另一些方法使刪除和處理字元變得更簡捷易用。基本操作 有一些用於基本操作的很酷的快捷鍵,他們十分易用。這些操作包括整行移動文字,整行複製,以及改變大小寫。ctrl t...