[emacs] Emacs Lispã§WebAppã®éçºã«å¿ è¦ãªNåã®ãã¨
æ±ãããã¦ããæ°ãããã®ã§ãEmacsLispã«ã¤ãã¦ç¥ã£ã¦ãããã¨ãæ¸ãã¦ãããã¨æã£ãã
ããã±ã¼ã¸ããã¼ã¸ã£
Cask ã使ãã®ãä»é¢¨ãå æ¥Cartonã¨ããPerlã®ããã±ã¼ã¸ããã¼ã¸ã£ã¨ååããã¶ã£ã¦ããã®ã§ãæ¹åãããã
ã¡ãªã¿ã«ãæ®æ®µä½¿ãã§ããã°ãEmacs24.xããæ¨æºã§å ¥ã£ã¦ããpackage.elã使ãããel-getã使ãã
ã¢ããªã±ã¼ã·ã§ã³ãµã¼ã
ã¤ãã³ãããªãã³ãªElnodeã¨ãhttpd.elãpure Emacsã§æ¸ããªããã simple-httpd.el ãããã
- http://elnode.org/
- http://www.emacswiki.org/emacs/Elnode
- https://github.com/skeeto/emacs-http-server
ä»ã«ãElservããããå ¥æå°é£ã
ãªã¯ã¨ã¹ããã©ã¡ã¼ã¿ã®å¦ç
Elnodeã§ããã°ãelnode-http-paramé¢æ°ããassoc listã§åããã
simple-httpd.elã¯ãå¾æã®æ£è¦è¡¨ç¾ã§é å¼µãã
ã«ã¼ãã£ã³ã°
Elnodeã§ããã°ãelnode-hostpath-dispatcherã¨ããããè¦ããããªãã£ã¹ãããã£ã¼ãããã
ãã以å¤ã¯ã¡ãã£ã¨ãããããã¾ããã
ãã¼ã¿ãã¼ã¹
å¼·å¼ã«CLIçµç±ã§ã¢ã¯ã»ã¹ãã mysql.el ã¨ãTCPã§é å¼µã£ã¦ãã©ã¤ããæ¸ãã pg.el ãããã
NoSQLãªMongoDBãpure Emacsã§ã¢ã¯ã»ã¹ã§ããã
æä½ã® edbi.el ã使ãã°ãPerl DBI ã§ã¢ã¯ã»ã¹ã§ãããã®ãªã大æµã®DBã«ã¢ã¯ã»ã¹ã§ãããã
ORMã®ãããªãã®ã¯ãä»ã®ã¨ããè¦ããã¨ç¡ãã
ãã¥ã¼ã®ã¬ã³ããªã³ã°
ããããEmacsãªã®ã§ããã¹ãå¦çã¯å¾æãªã¯ããorgmodeã®æ©è½ã使ã£ã¦å¤æããã®ããããããããªãã
Mustacheã¨ããæ¨æºçãã³ãã¬ã¼ãå½¢å¼ã®ãã³ãã¬ã¼ãã¨ã³ã¸ã³ããPerlã®Text::MicroTemplateçãªãã®ããããï¼2013/09/11 追è¨ãkitokitokiãããã³ã¡ããï¼
- https://github.com/Wilfred/mustache.el
- 70行で emacs に Text::MicroTemplate like なテンプレートを実装する - IMAKADO::BLOG
JSONã§ããã°json.elããããå¤å°é ãã®ã§ãLispãããprincãã¦Så¼ã§è¿ãã®ãéãã
HTTPã¯ã©ã¤ã¢ã³ã
æ¨æºã®url.elããããã@tkfããã®request.elã使ããããã¦ããããã
ãã¹ããã¬ã¼ã ã¯ã¼ã¯
æ¨æºã§ ert ã¨ãããã¬ã¼ã ã¯ã¼ã¯ãããã®ã§ãEmacs24æ代ã¯ããã使ãã®ãæ®éã¿ããã
Ecukes ã¨ããã Cucumber çãªæ¯ãèãè¨è¿°å¼ã®ãã¹ããã¬ã¼ã ã¯ã¼ã¯ãããã
GUIã®æä½ãè¨è¿°ãã¦ãã¹ãããå ´åã¯ããã¡ãã使ãã¨å¤§å¤ä¾¿å©ã
Caskã¨çµã¿åããã¦githubã¨Travis-CIã§ãã¹ããåãã®ãã¯ã¼ã«ã
ã¢ããªã±ã¼ã·ã§ã³ãã¬ã¼ã ã¯ã¼ã¯
ãã¿ã¾ãããã¡ãã£ã¨ãããããã¾ããã
ã¨ãã£ã¿ã®ä¸ã§åãMVCãã¬ã¼ã ã¯ã¼ã¯ã§ããã°ãä» Widget MVC ã¨ãããã®ãä½ã£ã¦ãã¾ãããå¤åæ±ãããã¦ãããã®ã¨éãæ°ããã¾ãã
以ä¸ã
CSSã¬ã¤ãã©ã¤ã³ã翻訳ãã¦ã¿ã
Harry Robertsæ°ã«ããCSSガイドライン(High-level guidelines from writing manageable, maintainable CSS)ã®ããã¥ã¡ã³ããç´ æ´ãããããã®ã§ãå¢ãã§ç¿»è¨³ãã¦ã¿ã¾ãããï¼ãã·ã¢èªãä¸å½èªããã©ã³ã¹èªã«å¼ãç¶ãã¦4çªç®...ï¼
å人çãªä¸»è¦³ã§è¦æãé¸ãã§ã¿ãã¨ã以ä¸ã®ãããªæãã§ãã
- ã¯ã©ã¹ã®ååä»ãæ¹æ³ï¼ãã¼ãã³ã°ã«ã¼ã«ï¼
- ã»ã¬ã¯ã¿ã¼ã®è¨è¨ãèãæ¹
- !importantã®ä½¿ãæ
æè¿è¦ãããã«ãªã£ã¦æ¥ãBEMå½åæ³ã«ã¤ãã¦ã説æãã¦ããã¾ãã
ããããWebã®ãã¶ã¤ã³ãã©ããããã¨ããåé¡ã¯ç½®ãã¦ããã¨ãCSSãæ¸ãã¨ããäºã¯ãã©ããã£ã¦ãã®ãã¶ã¤ã³ãå®ç¾ãããã¨ããHowToçãªãã®ã¨ãã©ãã®ããã«ååä»ããã¨ã¬ã¡ã³ãã®è¨è¨ãè¡ãªã£ã¦ã¡ã³ããã³ã¹å¯è½ã«ãããã¨ãããã¦ãã¦çãªãã®ã¨ããæè¡ãå¿ è¦ã¨ãããã¨æã£ã¦ãã¾ãã
åè ã®ã³ã¼ãã£ã³ã°HowToçãªãã®ã¯å±±ã®ããã«è¨äºãæ¬ãããã®ã§ãããå¾è ã®ããã¥ã¡ã³ãã¯ãã¾ãè¦ããã¨ãããã¾ãããæèçãªCSSã®ã³ã¼ãã£ã³ã°è¦ç´ã ã¨ã以ä¸ã®ãããªãã®ãããã¾ãã
- http://www.cyberagent.co.jp/recruit/techreport/report/id=7926
- 「Google HTML/CSS Style Guide」を適当に和訳してみた | REFLECTDESIGN
ããããããããã£ã¨è¨è¨ã¬ãã«ã®ãã¦ãã¦ããã£ã¨æ¢ãã¦ããã®ã§ãããèåãªãã¶ã¤ãã¼ããçãã¿ãããªæãã§ãããªãã£ãã®ã§ï¼èªåãCSSã³ãã¥ããã£ã«ãã¾ã詳ãããªãã£ãã¨ããã®ãããããããã¾ããï¼ãCSSã®è¨è¨ã¯ç¢ºç«ããã¦ãªãã¿ãããªã®ã§é£ãããªã¨æã£ã¦ãã¾ããã
ãããªæããã®ããã¥ã¡ã³ãã¨SMACSSãè¦ã¦å¤§å¤æåãã¾ããã
- åè : SMACSS 読んだ - CHROMA (2013/09/05 追è¨)
ã¾ãã«ããã欲ããã£ããã®ã§ãããå¾ ã£ã¦ãããã®ãã¡ãã¿å¸³ã¿ãããªäººã翻訳ãã¦ãããããªã¨æå¾ ãã¦ããã®ã§ãããBEMã«ã¤ãã¦ãä¸åã«åºã¾ãæ°é ããªãã£ãã®ã§ãåºå¼µã®ç§»åæéãªã©ã§é©å½ã«ç¿»è¨³ãã¦ã¿ã¾ããã
low specificity ãªã©é©å½ãªæ¥æ¬èªãè¦ã¤ãããªããã®ããã£ãããæ¥æ¬èªã®å¤ãªã¨ãããããã¨æãã¾ãã®ã§ããæè¦ããã«ãªã¯ãããã ããã¨å¤§å¤å¬ããã§ããï¼åæãã§ãã¯ç¨ã«日本語・英語併記ã®ãã®ãããã¾ãï¼
ã³ã¡ã³ãã§specificityã«ã¤ãã¦æãã¦ãããã¾ããã (2013/09/05 追è¨)
2013å¹´ä¸åæãè¿æ³ãªã©
å»å¹´ããããããããã¼ã¸ã¡ã³ããããµã¼ãã¹éçºã«ä»äºãã·ãããã¦ããããããã£ããã¯ã¦ãªãæ¸ãã¢ããã¼ã·ã§ã³ãä¸ãã£ã¦ãã¾ãã¾ãããã³ã¼ãæ¸ããããµã¼ãã¼æ§ç¯ä½æ¥ã§æ¥ã æºè¶³ãã¦ãã¾ã£ã¦ããã®ãåå ã¨æããã¾ãã
ååè¨äºããåå¹´ãããçµã¤ã®ã§ãè¿æ³ãã¢ãããã¼ããªã©ãã
æè¿ã®ææ
githubã«ã¦ãããã¥ã¡ã³ããä¸åãªããã¨ãããã°ãç«ã¦ããã¦ãã¾ã£ã¦ãããã¼ã£ã¦ãªã£ã¦ããã¥ã¡ã³ããæ¸ãã¾ããã
- Emacsç¨éåæRPCã¹ã¿ã㯠epc
- æ±ç¨ãã¼ãã«ã³ã³ãã¼ãã³ã ctable
- widgetç¨MVCãã¬ã¼ã ã¯ã¼ã¯ widget-mvcï¼ã¾ã ããªãéä¸ï¼
ã¨ã¯ãããã¾ã éä¸ã§ãã
epcã¯ããã¤ããä¸è©±ã«ãªã£ã¦ããã¾ã @tkf ããã® jedi.el ã§æ¾ã£ã¦é ãã¾ãã¦ãä¸çä¸ã®ãã¤ã½ãã¹ã¿ããã®å ã§ã²ã£ããã¨åãã¦ããããã§ããæå³éãã«ä½¿ã£ã¦ããã ãã¦å¬ããæã£ã¦ããã¾ãã
edbi, ctable ã§ããã¤ããã°ä¿®æ£è¡ãªã£ã¦ãã¾ãã
JavaScriptã®ã¨ãã£ã¿æ¯æ´ç°å¢ Tern ããããããã®ã§ãé¢è¥¿Emacsã§ç´¹ä»ããããVimãEmacsã®ããããã³ãããããããã¾ããã
- Tern 本家サイト
- ブラウザ上で動くデモ
- è£å®ãããã¥ã¡ã³ãã»å¼æ°ã»ååç §ãã·ã³ãã«åå¤æ´ãªã©
- Ternの型再構築のしくみなどの記事
- ブラウザ上で動くデモ
- 第7回 関西Emacs
- 資料ï¼æ³¨ï¼ã¤ã³ã¹ãã¼ã«æ¹æ³ãªã©ã¯ãä»ã¯å¤ãã£ã¦ã¾ãï¼
é¢è¥¿Emacsã®ææ³ããTernã®ç´¹ä»ãªã©ãæ¸ããã¨æãã¤ã¥ãã¦ãããªãçµéãã¦ãã¾ãã¾ãããããã¾ãããããã¾ããã
widget-mvcãctableã®éåæåãç®ä¸åçµä¸ã®æ¡ä»¶ã§ãã
Emacsã³ãã¥ããã£
Emacs JP ã¨ãããµã¤ããåºæ¥ã¾ããã
ããã®Issuesã¨ããããã¸ã§ã¯ãã«ã¦ãIssueã¨ãã¦è³ªåããã©ãã«ãªã©ãç»é²ããã¨ãæ¥æ¬èªã®åããEmacsã¨ã³ã¸ãã¢ããã£ã¦ããã£ã¦çãã¦ãããã¨æãã¾ãã
RubyMagazineãåèã«ãã¦ãEmacsã«ã¤ãã¦ã®éæ¨çãªè¨äºãæ¸ãã¾ãããEmacsãã£ã¦ã¿ãããã©ã¤ã³ã¹ãã¼ã«ã¯ã©ããããããããæ å ±ã¯ã©ãè¦ãã°ããããªã©ã®çåã«çãããããããªãã¨ããããã«ãªãæ å ±ãèªåãç¥ã£ã¦ãç¯å²ã§ã¾ã¨ãã¦ã¿ã¾ããã
ãã®ãµã¤ããã http://vim-jp.org/ ããããã£ãããã¦ä¾¿å©ãªãµã¤ãã«ãã¦ããããã¨æã£ã¦ããã¨ããã§ãã
ãã¨ãLingrã«Emacsé¨å±ãããã¾ãã
ããã¾ã常é§ãã¦ãã人ãå± ãªãã¦éçã£ã¦ããã®ã§ãããlingrã§ã®çºè¨ãæ¾ã£ã¦é©å½ã«ãã¤ã¼ããã¦ããããããã¨ãlingrå ã§elispãè©ä¾¡ãã¦è¿ãããããæ¸ãã¦ã¿ã¾ããã
以åããã¯å¤å°äººãéã¾ãããã«ãªã£ãããã«æãã¾ãããããããããã°ããã¡ãã«ããã²ã©ããã
ä»å¹´ã®Emacs/Vim温æ³äºå®
æ¨å¹´ããã¾ããEmacs/Lisp温泉ã§ãããä»å¹´ããããããªã¨èãã¦ããã¾ããå ´æã¯ä¹éä»è¿ã®æ¸©æ³ä»ã貸åå¥èãªã©ãäºå®ãã¦ããã¾ãã®ã§ãèå³ãããæ¹ã¯ã以ä¸ã®ç»é²ç»é¢ããå¸æã®æ¥ç¨ãªã©ãæãã¦ããã ããã°ã¨æã£ã¦ããã¾ããVimãªäººãã¨ãã£ã¿ãæãã仲éã¨ãã¦å¤§æè¿ã§ãããã¾ãã
ãã¡ãããã¯ä»¥ä¸ã§ãã
æå ã® init.el ãæ·¡ã ã¨ç´¹ä»ãã
Emacs Advent Calendar 2012ã®è¨äºã§ããæ¨æ¥ã¯ @syohex ããã®Emacsでポモドーロテクニック - Qiitaã§ããã
ãã¦ãä»åã¯æå
ã® init.el ã®ãã¿ãæ·¡ã
ã¨ç´¹ä»ãã¦ã¿ã¾ãã
ã¿ããªç¥ã£ã¦ããããã¨ãããã¿ã°ããã ã¨ã¯æãã¾ãããéã«çããã£ãããããã®ããããããããªãã®ã§ããããã§ããå½¹ã«ç«ã¦ãã°å¹¸ãã§ãã
æ§é å
ã¾ããè¨å®ãã¡ã¤ã«ã®æ§é åã§ããããããã試ããçµæ以ä¸ã®ãããªæãã§åãããã¨ã§å®çãã¾ããã
- init.el 以ä¸ã®ãã¡ã¤ã«ãèªã¿è¾¼ã¿
- base å¤é¨ã©ã¤ãã©ãªã«ä¾åããªãæ¨æºEmacsã®è¨å®
- frame GUIãªã©è¦ãç®å¨ãã®è¨å®
- utils 便å©ãã¼ã«ã®èªã¿è¾¼ã¿ãè¨å®
- modes å種modeã®èªã¿è¾¼ã¿ãè¨å®
- keybinds ã°ãã¼ãã«ãã¼ãã¤ã³ãã®è¨å®
- completions, e2wm, howm, org, wl, ... å種æ©è½ãã¨ã®å¤§ã¾ããªè¨å®
ã¡ã¤ã³ã®ç°å¢ãWindowsãLinuxãªã©ãè¡ã£ããæ¥ãããã¦ããã®ã§ã移è¡ã®æéããªãã¹ã楽ã«ãªãããã«ãã¦ãã¾ãã
base ã ãã¯OSããã¼ã¸ã§ã³ã«ãã¾ãä¾åããªãããã«ãã¦ããã¦ãæä½éã®åãã確ä¿ããä¸ã§ãä»ã®ãã¡ã¤ã«ããããã¦ããæãã§ãã
Emacsãåããã®ã¯ã¡ã¤ã³ã®ç°å¢ã ããªã®ã§ãç°å¢ãè¦ã¦åå²ãããã¨ã¯ãããªããªãã¾ããã(ã¡ã¤ã³ä»¥å¤ã¯Vimãå¤ãã§ããWindowsã ã¨sakuraã¨ãã)
ãã¼ãã¤ã³ãã®è¨å®ãä¸ç®æã§è¡ãããã«ãã¦ãã¾ããããã§ããã¼ãã¤ã³ãããã¶ã£ã¦ãã¾ã£ã¦ãã©ãã§è¨å®ãã¦ããã®ãè¿·ããªããªãå¿é ããªããªãã¾ããã
ãã®å½¢ã§å®å ¨ã«ç´å¾ãã¦ããããã§ã¯ãªãããã£ã¨ããæ¹æ³ã¯ãªãããªã¨æ¨¡ç´¢ãã¦ãã¾ãã
便å©ãã¼ã«è²ã
ãã®å ´ã®ãã¡ã¤ã«åãURLãéã ffap
ç´°ããã§ãããå¿ é ã§ãã
èªåç¹°ãè¿ã dmacro
ã©ãèãã¦ããã¼ãã¼ããã¯ãã®æ¹ãæ£ç¢ºã§ç¢ºå®ã ã£ããããã®ã§ããã
ã¡ãã£ã¨ãããã¯ãã¯ãã£ã¨ãã£ã¡ãå¤ç¨ãã¦ãã¾ãã
ãã£ã±ããã¢ã¼ãï¼ç¶æ ï¼ããç¡ãè¨è¨ãããã®ããããã¾ããã
ã¦ã¤ã³ãã¦åãæ¿ã elscreen
ãã®æã®ãã®ã§ããã°ã windows.el ã elscreen ã ã¨æãã¾ãããelscreenã使ã£ã¦ãã¾ãã
æ®éã ã¨ãããã¡ã®ãããã¼è¡ã«ã¿ãã表示ãããã®ã§ããããããã¼è¡ãå é ãã¦ã»ãããªãã®ã§ããã¬ã¼ã ã®ã¿ã¤ãã«ã«ä¸è¦§ã表示ããã¦ãã¾ãã以ä¸ãã®è¨å®ã³ã¼ãã§ãã
(defvar elscreen-my-title-maps '()) ; ã¿ã¤ãã«ã®å¤æããã (defun my-elscreen-truncate-screen-name (screen-name truncate-length &optional padding) (let ((truncate-length (max truncate-length 4))) (cond ((> (string-width screen-name) truncate-length) (concat (truncate-string-to-width screen-name truncate-length nil) "~")) (padding (truncate-string-to-width screen-name truncate-length nil ?\ )) (t screen-name)))) (defun elscreen-frame-title-update () (when (elscreen-screen-modified-p 'elscreen-frame-title-update) (let* ((screen-list (sort (elscreen-get-screen-list) '<)) (screen-to-name-alist (elscreen-get-screen-to-name-alist)) (tab-width (elscreen-e21-tab-width)) (title (mapconcat (lambda (screen) (format "%s" (let ((label (elscreen-e21-tab-escape-% (my-elscreen-truncate-screen-name (reduce (lambda (x f) (funcall f x)) elscreen-my-title-maps :initial-value (get-alist screen screen-to-name-alist)) tab-width t)))) (if (eq screen (elscreen-get-current-screen)) (concat "ã" label "ã") label)))) screen-list " "))) (if (fboundp 'set-frame-name) (set-frame-name title) (setq frame-title-format title))))) (eval-after-load "elscreen" '(add-hook 'elscreen-screen-update-hook 'elscreen-frame-title-update)) ;; elscreen-my-title-maps ã®ä½¿ãæ¹ä¾ (defun skype--elscreen-title-name-map (x) (if (string-match "Skype\\(Chat\\|Message\\):\\[\\(.*\\)\\]$" x) (let* ((title (match-string 2 x)) (buf (get-buffer x)) (missed (if buf (skype--chat-missed-p (buffer-local-value 'skype-chat-handle buf)) nil))) (concat (if missed "â " "â") title)) x)) (add-to-list 'elscreen-my-title-maps 'skype--elscreen-title-name-map)
ããã¾ãè¦ããã¨ãç¡ãã®ã§ããã¾ã«ç¢ºèªããããããªãããã§ååããªã¨ããæãã§ãã
C-w ã§åèªåé¤ã
ã·ã§ã«ã¨åæ§ã®æä½ã¯ããªãå¿«é©ã§ããã¾ãããã¨ãã¨ã®æ©è½ãç¡é§ã«ãªã£ã¦ãã¾ããã
(defun kill-region-or-backward-kill-word () (interactive) (if (region-active-p) (kill-region (point) (mark)) (backward-kill-word 1))) ; (global-set-key (kbd "C-w") 'kill-region-or-backward-kill-word)
ã¯ãªã¼ãã®åãæã
", ', ` ããã°ã«ãã¾ããRubyãJSã§ã¯ãªã¼ãå¤ãããã¨ãããããã®ã§ã
transpose-chars-or-swap-quotes ã C-t ã«å²ãå½ã¦ã¦ãã¾ãã
(defvar swap-quotes-list '((?\" ?\') (?\' ?\`) (?\` ?\"))) (defun transpose-chars-or-swap-quotes (arg) (interactive "p") (or (swap-quotes) (transpose-chars arg))) (defun swap-quotes () (interactive) (catch 'break (dolist (i swap-quotes-list) (let ((target-char (car i)) (replaced-char (cadr i)) (prev-pos (point))) (if (= (char-after (point)) target-char) (save-excursion (forward-char 1) (let ((next-pos (re-search-forward (char-to-string target-char)))) (if next-pos (subst-char-in-region prev-pos next-pos target-char replaced-char) (message "The corresponding quote is not found."))) (throw 'break t))))) nil))
ã¹ãã¼ã¹ãä¸æ°ã«åé¤
ã³ã¼ããã³ãããããè¡ãã¤ãªãããããã¨ãã¹ãã¼ã¹ã大éã«ä½ã¨ãããå¿ è¦ããã£ã¦ããããªæã«ãã使ã£ã¦ã¾ããã«ã¼ã½ã¼ã«ã®å ´æãã¹ãã¼ã¹æåãããã§ãªããã§åããå¤ããã¾ãã
kill-word-or-delete-horizontal-space ã M-d ã«å²ãå½ã¦ã¦ãã¾ãã
(defun kill-word-or-delete-horizontal-space (arg) (interactive "p") (let ((pos (point))) (if (and (not (eobp)) (= (char-syntax (char-after pos)) 32) (= (char-syntax (char-after (1+ pos))) 32)) (prog1 (delete-horizontal-space) (unless (memq (char-after pos) '(?( ?) ?{ ?} ?[ ?])) (insert " "))) (kill-word arg))))
let ã«ã¢ã¹ã¿ã¼ãå¾ã§ä»ãã
ã¢ã¹ã¿ã¼ãªãã¹ãä»ããªãã»ããããã®ããªã¨æã£ã¦ãã¦ãããããã¨å¾ã§å¿ è¦ã«ãªã£ãæã«ã«ã¼ã½ã¼ã«ã移åããã®ãé¢åãªã®ã§ããã使ã£ã¦ã¾ãã
æ¥æ¬èªéå¤æ
ééãã¦ç¢ºå®ãã¦éå¤æããããã¨ããã¾ã«ããã®ã§ãããIMã«ãã£ã¦ã¯ãµãã¼ããã¦ãªãã£ããããã®ã§Emacså ã§éå¤æãå®ç¾ããã¦ã¿ã¾ãããå½¢æ ç´ è§£æãªã©ã使ã£ã¦å¼·å¼ã«æ¼¢åãããã¼ãåã«å¤æãã¦ããã¼å ¥åã¨ãã¥ã¬ã¼ããã¦å¤æããã¾ãã
mozcã¨atokã¨anthyã¨ãã®é£æç¯å¤æãä»®å®ãã¦ãã¾ããMeCabãChaSenãå¿ è¦ã§ãã
ä¸ã¯IIIMECFã§ããããå®é¨ãã¦ãæã®åç»ã§ãããéå¤æã®åããããã¾ãã
js2-mode
moozããã®ã¨ããã®js2ã使ã£ã¦ãã¾ããæé«ã§ãã
JSã«ã¯æ±ºã¾ã£ãã¯ã©ã¹ã®æ¸ãæ¹ããã¾ããªãã¦ãåã¨ãã£ã¿ãæ¯æ´ãã¼ã«ã解æã«è¦å´ãã¦ããã¨ããã§ãã
js2ã§ãããããã¾ãèãã¦è¨è¨ãã¦ãããäºãã¡ã¸ã£ã¼ãªã¯ã©ã¹ã·ã¹ãã ã®ãã¿ã¼ã³ãç»é²ãã¦ããã®ã§ãããASTã®ãã¿ã¼ã³ã使ã£ã¦ç¬èªã®ã¯ã©ã¹ã·ã¹ãã ãç»é²ã§ããããã«ãªã£ã¦ãã¾ãã
ä¾ãã°ã以ä¸ã®ãããªãããã¿ã¤ãæåãªã¯ã©ã¹ã·ã¹ãã ããã£ãæã
// Class1ãã¯ãã¼ã³ãã¦ä¸æ¸ã var Class2 = clone(Class1, { method1: function() { ... }, field1: 123 });
以ä¸ã®ãããªã³ã¼ãã§ãã®ãã¿ã¼ã³ãç»é²ã§ãã¾ãã
(eval-after-load 'js2-mode '(progn (require 'js2-imenu-extras) (push `(:framework object-clone :call-re ,(concat "\\_<clone(" js2-mode-identifier-re "\\s-*,\\s-*") :recorder js2-imenu-record-object-clone-extend) js2-imenu-extension-styles) (js2-imenu-extras-setup))) (defun js2-imenu-record-object-clone-extend () (let* ((node (js2-node-at-point (1- (point))))) (when (js2-call-node-p node) (let* ((args (js2-call-node-args node)) (methods (second args)) (super-class (first args)) (parent (js2-node-parent node))) (when (js2-object-node-p methods) (let ((subject (cond ((js2-var-init-node-p parent) (js2-var-init-node-target parent)) ((js2-assign-node-p parent) (js2-assign-node-left parent))))) (when subject (js2-record-object-literal methods (js2-compute-nested-prop-get subject) (js2-node-abs-pos methods)))))))))
å¤å°èªèã®çãã¨ãããããã®ã§ãããã ããããã¾ããã£ã¦ãã¾ãã
Mochikitã¨ãEXT.jsãªã©ã®ã¯ã©ã¹ã·ã¹ãã ã¨ãã§ãããã¾ãèªèããããã¨ãã§ãããã§ãã
smartchr ã§PHPã®é »åºæåãå ¥å
ãããªã®ãå¤ç¨ããã®ãã©ããã¨ã¯æãã¾ãããããããä»äºãå¤ãã®ã§ã以ä¸ã®ãããªæãã§ä½¿ã£ã¦ãã¾ãã
(eval-after-load "php-mode" '(progn (define-key php-mode-map (kbd "F") (smartchr '("F" "$" "$this->"))) (define-key php-mode-map (kbd ">") (smartchr '(">" " => "))) (define-key php-mode-map (kbd "?") (smartchr '("?" "<?php `!!' ?>" "<?php echo `!!' ?>"))) (define-key php-mode-map (kbd "a") (smartchr '("a" "array(`!!')"))) (define-key php-mode-map (kbd "[") (smartchr '("[" "[`!!']" "[\'`!!'\']"))) )) (eval-after-load "sgml-mode" '(progn (define-key sgml-mode-map (kbd "\"") (smartchr '("\"" "\"`!!'\"" ""`!!'"))) (define-key sgml-mode-map (kbd ">") (smartchr '(">" ">"))) (define-key html-mode-map (kbd "=") (smartchr '("=" "<%= `!!' %>"))) (define-key html-mode-map (kbd "%") (smartchr '("%" "<% `!!' %>"))) ))
smartchr ã«ããã yasnippet ã«ãããã¯ãæ©ã¿ã©ããã§ãã
ãã¼å ¥åæ°ã¨è¨ãããã¯ããªãºã ã¨ãæ°æã¡ããã®åé¡ãªã®ããªã¨æã£ã¦ãã¾ãã
以ä¸ã§ãã
ææ¥ï¼ããã¾ãããä»æ¥ã§ãããããï¼ã¯ id:uhiaha888 ããã§ãããããããé¡ããããã¾ãã
Emacs/Lisp温æ³ããã¾ãã
çæ¬ã¨ããå ´æã¨Emacs/Lispã¨ãããã¿ã§ã温æ³å宿ãæç«ããã®ãã¨ã¦ãä¸å®ã§ããããèãéãããäºæ³ä»¥ä¸ã«äººãéã¾ãã¾ãããã¾ãã温æ³å½æ¥ãããªãçãä¸ããã¾ãã¦ãååã¨ãã¦ã¯ããªãæåããã®ã§ã¯ãªããã¨æã£ã¦ãã¾ããèªåãã¨ã¦ã楽ããã£ãã§ãã
åå ãã¦é ãã¾ããçæ§ããååãããã¨ããããã¾ãããã¾ããæ®å¿µãªããé½åã«ããåå åºæ¥ãªãã£ãçæ§ãã¾ã次åã©ããã§æ¸©æ³ããã¨æãã¾ãã®ã§ãã²ãã®æãã¾ãæ¤è¨ãã¦ã¿ã¦ãã ããã
æºåã»éå¶ã¡ã¢
人æ°ã®é»å·ã»ä¹ ä½ã»æ¹¯å¸é¢ããããæ¢ãã¦ããã®ã§ãããå年以ä¸åããäºç´ããªãã¨é£ããã£ãããã§ãããã¨ãè»ã§ããè¡ããªããããªå ´æãããããã温æ³ãåãã交éã®ä¾¿ãåããã§è¿·ãã¾ãããçµå±ã人æ°ã«ãä½è£ããã£ã¦äº¤éã®ä¾¿ãããçå温æ³ã«ãã¾ãããä»åã®ãã®é¸æã¯å²ã¨è¯ãã£ãã¨æãã¾ãããã¹ããã£ã¼ã¿ã¼ããã¨ãã¯ã´ã³ã調éãã¦ãããå°ã輸éã®ãã¨ãèããä½è£ãããã°ãç§å¢ã®ã°ã¬ã¼ãã®é«ã温æ³ãè¡ããããããã¾ããã
ããã¾ã§ã«åå ãã¦ããEmacsã®ä¼ã®çµé¨ããã温æ³ã«éã¾ã£ã¦ãã¼ãPCåºããã ãã§é¢ç½ããªãã¯ãã¨ãã確信ãæã£ã¦ããã®ã§ãããã¿ããªé»ã ã¨PCã«æã¡è¾¼ããããªãã¨ãããã¨ã¾ããã¨æããOSTãæºåãã¦ãã¾ãããçµæãå ¨ãåºçªããªããããã¿ããªæã¡ãã¿ãçºè¡¨ãã¦çãä¸ããã¾ãããEmacsã®åå¼·ä¼ã§ã¯ã誰ãã®PCãããã¸ã§ã¯ã¿ã¼ã«åãã¦æä½ãçºããã ãã§çãä¸ãããã¨ãããããã§ããã
é£äºã»æ¸©æ³å¾ã®ãã«ã½ã³ã¯ãã¼ã ã¨ãä½ããããªäºãèãã¦ããã®ã§ãããèªåãå«ãã¦ç ãããªäººãå°ãªããªãã£ãã®ã§ãããããèªç±ã«æ´»åããããã«ãã¾ãããåå2æãããã¾ã§ã¯ã¿ããªèµ·ãã¦ããã®ã§ããããã®å¾ã¯2/3ãããã®äººã¯å¯ã¦ããã¨æãã¾ããã¨ãããã¨ã§ããã«ã½ã³ã®æéã¨ããã®ã¯å®è³ªãã¾ããªãã£ãã®ã§ããã«ã½ã³ç®çã®æ¸©æ³å宿ã«ãããªãã2æ³ãããããã¨ããã®ããªã¨æãã¾ããã
ä»äºãå°ãå¿ããã¦ã人æ°ã®ç¢ºèªããããçãã£ãã¨ãããè¯ããªãã£ãã§ãããã ãATNDç»é²ã®åå ç100%ã ã£ãã®ã§ãå¹¹äºã¨ãã¦ã¯å¤§å¤å©ããã¾ããã
å½æ¥ã®ã¿ã¤ã ã¹ã±ã¸ã¥ã¼ã«ãä½ã£ã¦ããã®ã§ããããããç´ã«å°å·ãã¦æ²ç¤ºãã¦ããã¨è¯ãã£ãããªã¨æãã¾ããã次ã«ä½ãããã®ãåãããªãã¦ä¸å®ã«ãªããªãããã«åªããã¤ããã§ãããããä¸æéãããã¾ããããã¿ã¾ããã次åæ¹åãããã¨æãã¾ãã
åå è ã®å 訳ã¯ã大éªã»äº¬é½5人ã岡山1人ãç¦å²¡2人ãä½è³1人ãçæ¬5人ã§ãããé¢è¥¿Emacsã®çãããé ãããæ¥ã¦ããã ãã¦ãããã¨ããããã¾ãããçæ¬ã»ä½è³ã®çããã«ã¯ãç¾å°ã®äººã®è¼¸éãªã©ã§å¤§å¤å©ãã¦é ãã¾ããããããã¨ããããã¾ããã
å 容ãªã©
twitterã§ããããæ¸ããã®ã§ãããã·ã¥ã¿ã° #Emacsæ¸©æ³ ã追ããããã¨ãªãã¨ãªãé°å²æ°ãã¤ãããã®ã§ã¯ãªãããªã¨æãã¾ãã
Vim使ã人ãããªããã¦ã仲è¯ããã£ããã£ã¦ãããã¦ããã®ã§ãå®æ ã¯Emacs/Vim温æ³ã§ããã
æã®é¢¨æ¯ãå¾¹å¤çµã¯ãã£ããã
æºã®ä¸ã®é¢¨æ¯ãããã¸ã§ã¯ã¿ã¼ã§æå½±ã
èªåã¯ãctable.elãwidget-mvc.elãªã©ãç´¹ä»ãããä½ã£ãããã¦ãã¾ãããwidget-mvc.elã«ã¤ãã¦ã¯ãã®ãã¡ç´¹ä»ã§ããããããã¾ããããã ãæè¿ã¯ä¹ ã ã«ã³ã¼ãæ¸ãä»äºã§è©°ã¾ã£ã¦ãã¦ããªããªãæéãåãã¦ãªãã§ãããã«ãªã¯ã¨ã¹ããæºã¾ã£ã¦ãã¦ãã¿ã¾ããã
ä»åé¢ç½ãå 容ã¯ãããããã£ãã®ã§ããããã¯ã@nom4476ããã®orgæä½ãã¨ã¦ãæåã§ãããèªåã®Emacsåã¯é ãåã°ãªãã¨èªèãã¾ããã
次å温æ³
ä¹å·ã¨å¤§éªã®éã®å²¡å±±ã§ãããã¨ããã話ãããã¾ãããç¦å²¡ã ã¨äºæ¥å¸æ¸©æ³ã¨ã交éã便å©ã§ããããããã¾ãããä¼ç¤¾ãç¥äººã®ãã©ã¤ãã¼ã温æ³ä»ãå¥èãé¿èãç±å¸é¢ã«ããã¤ãããã®ã§ãè»ããã£ã¼ã¿ã¼ãã¦ããããæã«è¡ãã¨ããã®ããããªãã¨æã£ã¦ãã¾ããã¨ãããã¨ã§ãããã¾ãéã¾ããããªé°å²æ°ãããã¾ããã次å温æ³ãããã¨æãã¾ãã
ã¬ãã¼ããªã³ã¯
ãããæ¸ãããã¨ãã人ããããã¾ãããããã©ãã¯ããã¯ããé£çµ¡ããã ãããããã¡ãã«ã¾ã¨ãããã¨æãã¾ãã
Emacs/Lisp温æ³ããã¾ã
温æ³ã¨Lispã®å°ã§ããçæ¬ã§ãEmacsã¨Lispããã¿ã«æ³ã¾ããã¿ã§éã¾ãã¤ãã³ããè¡ãã¾ãã
- æ¥ç¨ 2012/08/25 1æ³2æ¥
- å ´æ çæ¬çå ç½é·ºèå¥é¤¨
- Emacs / Lisp 温泉 : ATND
ååãªã®ã§ãã¾ã ã©ããªé¢¨ã«ãªãã決ã¾ã£ã¦ãã¾ããããææå楽ã®ãããªã¯ãªã¨ã¤ãã£ããªã¤ãã³ãã«ãªãã¨ãããªã¨æã£ã¦ãã¾ãã
- åè: 明星和楽2012
å®å¡ã¯16人ã¨ãã¦ãã¾ãããã¾ã 宿ã«ä½è£ããããããªã®ã§ãè£æ¬ ã®äººã§ãããç¨åº¦ï¼20人ãããï¼ï¼åãå ¥ãããããã§ãã8æ5æ¥ããã«äººæ°ã®ç¢ºå®ãããäºå®ã§ãã
EmacsãLispã好ããªäººããã²ãããããé¡ããããã¾ãã