SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Downloaden Sie, um offline zu lesen
Pymacs 初體驗
PyConTW 2013
Superbil <superbil@gmail.com>
0.0.1
13年5月30⽇日星期四
About Me
•軟體⼯工程師、Mobile App 開發
•Emacs 使⽤用經驗⼤大約 1 年
•Python 使⽤用經驗⼤大約 1 年
•PyHUG 主持⼈人
•about.me/superbil
•freenode #python.tw #emacs.tw
on RPi
13年5月30⽇日星期四
什麼是 Emacs ?
13年5月30⽇日星期四
編輯器
13年5月30⽇日星期四
編輯器學習曲線
13年5月30⽇日星期四
為什麼要⽤用 Emacs ?!
13年5月30⽇日星期四
You can hack it !
你不⽤用把⼿手從鍵盤上移開
13年5月30⽇日星期四
What is a hacker ?
• hacker 是那些勇於挑戰既有體制,改變
系統讓世界更進步的玩家,決定⼀一個⼈人
是否為 hacker 的關鍵在於思維。hacker
其實是⼀一種思考模式
羅根.拉普蘭特:⽤用駭客思維學習
Logan LaPlante: Hackschooling Makes Me Happy
13年5月30⽇日星期四
Emacs 基本介紹
• Ctrl + h t // emacs tutorial
• Ctrl + {b,n,p,f} // h j k l
• Ctrl + x b // 切換 buffer
• Ctrl + x Ctrl + e // 執⾏行 ( ) 中的 elisp
• Ctrl + h m // 查詢當下 mode 的⽂文件
13年5月30⽇日星期四
Emacs 的熱鍵很難按
13年5月30⽇日星期四
更換你的 Ctrl 鍵位置
• 你記得你上次⽤用到 Caps Lock 是什麼時
候嗎?
• Ctrl 在下⾯面的位置其實是⾮非常難按的
巨⼈人出現了阿!!!
13年5月30⽇日星期四
Emacs vsVim
13年5月30⽇日星期四
Emacs vsVim
vs Sublime Text
13年5月30⽇日星期四
Emacs vsVim
vs Sublime Text
vs More...
13年5月30⽇日星期四
Emacs vsVim
• 其實這是個陳年⽼老問題…
• 沒有好或不好,只有合不合⽤用
13年5月30⽇日星期四
為何不同時使⽤用
Emacs 和Vim ?
by 程序员时髦值指南
同时⽤用 Vim 和
Emacs,这⼈人早
被烧死了
13年5月30⽇日星期四
Install Emacs
on Server ?
13年5月30⽇日星期四
為什麼要⽤用 Pymacs ?
13年5月30⽇日星期四
因為沒有⼈人會寫 lisp
emacs lisp
13年5月30⽇日星期四
因為沒有⼈人會寫 lisp
• 想要 hack Emacs ⼜又不想學 lisp
你就可以⽤用 Pymacs
13年5月30⽇日星期四
How to install Pymacs
• Python side
• make install
• Emacs side
• M-x package-install RET pymacs RET
Emacs 24.x +
13年5月30⽇日星期四
Pymacs Debug
要切換到 *Pymacs* 這個 Buffer
13年5月30⽇日星期四
Pymacs 運作原理
• 建⽴立 server process 跑到 loop 等待
• 當接收到指令之後執⾏行,並回傳到
emacs
• 實際上是遞迴
13年5月30⽇日星期四
Pymacs 的簡單應⽤用
• pymacs-exec
• (pymacs-exec "print 'Hello PyConTw'")
• 在 Python 的執⾏行環境裡⾯面執⾏行程式碼
執⾏行 python 的 statement,回傳值永遠都是 nil
13年5月30⽇日星期四
Hello World
Python side
from Pymacs import lisp
interactions = {}
def hello_world():
"Hello world' from Python."
lisp.insert("Hello from Python!")
interactions[hello_world] = ''
13年5月30⽇日星期四
Hello World
Emacs side
• 讀取⼀一個名為 helloEmacs 的套件,並使
⽤用 hm- 來當作前綴詞
(pymacs-load "helloEmacs" "hm-")
13年5月30⽇日星期四
產⽣生出 lisp function
• (hm-hello-world)
hm-hello-world is an interactive Lisp function.
(hm-hello-world &rest ARGUMENTS)
It interfaces to a Python function.
Hello world' from Python.
13年5月30⽇日星期四
M-x hm-hello-world
(hm-hello-world)Hello from Python!
13年5月30⽇日星期四
Sample - winkler
from Pymacs import lisp
interactions = {}
def break_on_whitespace():
start, end = lisp.point(), lisp.mark(True)
words = lisp.buffer_substring(start,
end).split()
lisp.delete_region(start, end)
lisp.insert('n'.join(words))
interactions[break_on_whitespace] = ''
13年5月30⽇日星期四
Sample - winkler result
Hello PyCon Taiwan
M-x winkler-break-on-whitespace
Hello
PyCon
Taiwan
Marked
from Pymacs import lisp
interactions = {}
def break_on_whitespace():
start, end = lisp.point(), lisp.mark(True)
words = lisp.buffer_substring(start, end).split()
lisp.delete_region(start, end)
lisp.insert('n'.join(words))
interactions[break_on_whitespace] = ''
13年5月30⽇日星期四
Live Demo
13年5月30⽇日星期四
到那邊問問題?
• Pymacs 0.25
• Emacswiki.org
• stackoverflow.com
• Emacs on Google Plus
• freenode#emacs.tw
• planet.emacsen.org
13年5月30⽇日星期四
13年5月30⽇日星期四
Happy Hacking
Keyboard
13年5月30⽇日星期四
Thank you
13年5月30⽇日星期四

Weitere ähnliche Inhalte

Ähnlich wie Pymacs 初體驗

Tainan.py, Experience about package
Tainan.py, Experience about packageTainan.py, Experience about package
Tainan.py, Experience about packageTim (文昌)
 
Practice: Refactor with Tests
Practice: Refactor with TestsPractice: Refactor with Tests
Practice: Refactor with TestsManic Chuang
 
快快樂樂學 Scrapy
快快樂樂學 Scrapy快快樂樂學 Scrapy
快快樂樂學 Scrapyrecast203
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)Max Lai
 
⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨Wen-Tien Chang
 
2013 輔大資工 暑期宅學營 Drupal 
基礎應用與模組實作
2013 輔大資工 暑期宅學營 Drupal 
基礎應用與模組實作2013 輔大資工 暑期宅學營 Drupal 
基礎應用與模組實作
2013 輔大資工 暑期宅學營 Drupal 
基礎應用與模組實作Huang-I Yang
 
初探 Elastic Observability 的實踐方法
初探 Elastic Observability 的實踐方法初探 Elastic Observability 的實踐方法
初探 Elastic Observability 的實踐方法Joe Wu
 
2013 輔大資工 暑期宅學營 PhoneGap 跨平台任我玩,HTML5 無痛開發 App
2013 輔大資工 暑期宅學營  PhoneGap  跨平台任我玩,HTML5 無痛開發 App2013 輔大資工 暑期宅學營  PhoneGap  跨平台任我玩,HTML5 無痛開發 App
2013 輔大資工 暑期宅學營 PhoneGap 跨平台任我玩,HTML5 無痛開發 AppHuang-I Yang
 
Python meetup 1
Python meetup 1Python meetup 1
Python meetup 1Vic Yang
 
An intro of web scaffolding tool using yeoman generator
An intro of web scaffolding tool using yeoman generatorAn intro of web scaffolding tool using yeoman generator
An intro of web scaffolding tool using yeoman generator貫銘 盛
 
Continuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CIContinuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CIChu-Siang Lai
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用勇浩 赖
 
用Octopus deploy做自動部署 - 快速上手
用Octopus deploy做自動部署 - 快速上手用Octopus deploy做自動部署 - 快速上手
用Octopus deploy做自動部署 - 快速上手Alan Tsai
 
Rails 炸機實務
Rails  炸機實務Rails  炸機實務
Rails 炸機實務Manic
 
該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?Andy Dai
 
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代scott liao
 
Concurrent programming in iOS
Concurrent programming in iOSConcurrent programming in iOS
Concurrent programming in iOSDongxu Yao
 

Ähnlich wie Pymacs 初體驗 (20)

Tainan.py, Experience about package
Tainan.py, Experience about packageTainan.py, Experience about package
Tainan.py, Experience about package
 
Practice: Refactor with Tests
Practice: Refactor with TestsPractice: Refactor with Tests
Practice: Refactor with Tests
 
快快樂樂學 Scrapy
快快樂樂學 Scrapy快快樂樂學 Scrapy
快快樂樂學 Scrapy
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
 
⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨
 
2013 輔大資工 暑期宅學營 Drupal 
基礎應用與模組實作
2013 輔大資工 暑期宅學營 Drupal 
基礎應用與模組實作2013 輔大資工 暑期宅學營 Drupal 
基礎應用與模組實作
2013 輔大資工 暑期宅學營 Drupal 
基礎應用與模組實作
 
初探 Elastic Observability 的實踐方法
初探 Elastic Observability 的實踐方法初探 Elastic Observability 的實踐方法
初探 Elastic Observability 的實踐方法
 
2013 輔大資工 暑期宅學營 PhoneGap 跨平台任我玩,HTML5 無痛開發 App
2013 輔大資工 暑期宅學營  PhoneGap  跨平台任我玩,HTML5 無痛開發 App2013 輔大資工 暑期宅學營  PhoneGap  跨平台任我玩,HTML5 無痛開發 App
2013 輔大資工 暑期宅學營 PhoneGap 跨平台任我玩,HTML5 無痛開發 App
 
Python meetup 1
Python meetup 1Python meetup 1
Python meetup 1
 
An intro of web scaffolding tool using yeoman generator
An intro of web scaffolding tool using yeoman generatorAn intro of web scaffolding tool using yeoman generator
An intro of web scaffolding tool using yeoman generator
 
Continuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CIContinuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CI
 
Git安裝
Git安裝Git安裝
Git安裝
 
Cocoapods
CocoapodsCocoapods
Cocoapods
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用
 
用Octopus deploy做自動部署 - 快速上手
用Octopus deploy做自動部署 - 快速上手用Octopus deploy做自動部署 - 快速上手
用Octopus deploy做自動部署 - 快速上手
 
Rails 炸機實務
Rails  炸機實務Rails  炸機實務
Rails 炸機實務
 
該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?
 
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
 
Pygments
PygmentsPygments
Pygments
 
Concurrent programming in iOS
Concurrent programming in iOSConcurrent programming in iOS
Concurrent programming in iOS
 

Pymacs 初體驗