[해결]emacs nxhtml-mode 에서 버퍼를 w3m으로 불러오는 방법이요.

Meleeis의 아바타

php 공부를 할라고 emacs를 꾸미다가 본 공부는 때려치고 emacs 공부를 하는 중입니다.

html-mode에선 C-c C-v 바인딩이 기본으로 w3m을 불러서 html을 읽게 되어있는데요.

nxhtml-mode에선 그런 키바인딩이 없어서 인터넷을 뒤져보니 키설정으로 걍 읽게는 할수 있는데...

php같은건 그렇게만 해선 안되잖습니까.

프로그래밍을 못하니까 구글신에게 열심히 물어봤지만 이틀째 해답은 안보이네요.

간단한 php예제같은걸
/home/meleeis/public_html/aaa.php 에 저장하고.

C-c C-v 키바인딩으로
http://localhost/~meleeis/aaa.php를 w3m으로 불러오도록 하는 방법을 알고 싶습니다.

사족: kldp 뒤지다가 nxhtml-mode에 관한것들을 읽어보니 nxhtml-mode가 데비안 squeeze에서 부족한것 같다고 있는데.
emacs 23버전대의 데비안 wheezy에 lunchpad nxhtml-mode베타 버전을 적용하면 최소한 별 경고나 에러없이 잘 됩니다.(2012년 2월 6일 현재)

emacs 24 sanpshot 버전은 또 다른 버그때문에
이맥스 23.3+1-4 에 nxhtml-mode 2.09beta 정도 궁합이면 php + html 코딩은 잘 될듯? 합니다.

(defvar

(defvar pathname-rewrite-url-table
  '(("\\`/home/\\([^/]+\\)/public_html/\\(.*\\)\\'" . 
     "http://localhost/~\\1/\\2")
    ("\\'/var/www/localhost/htdocs/\\(.*\\)\\'" . "http://localhost/\\1"))
  "Table for mapping pathname into HTTP URL")
 
(defun rewrite-url-from-pathname (pathname)
  "Return URL of PATHNAME if there is a rule.
 
This function uses `pathname-rewrite-url-table' to get the rewrite rule."
  (catch 'matched
    (dolist (ent pathname-rewrite-url-table)
      (let ((pattern (car ent))
            (replace (cdr ent))
            (matched nil)
            (result nil))
        (setq result (replace-regexp-in-string pattern
                                               (lambda (string)
                                                 (setq matched t)
                                                 replace)
                                               pathname))
        (if matched
            (throw 'matched result))))))
 
(defadvice browse-url-of-buffer (around browse-url-rewrite (&optional buffer))
  (let ((url (rewrite-url-from-pathname 
              (expand-file-name (buffer-file-name buffer)))))
    (if url
        (browse-url url)
      ad-do-it)))
 
(ad-activate 'browse-url-of-buffer)

를 등록해두고, browse-url-of-buffer를 C-c C-v로 binding하면 될 겁니다.

Emacs에 이미 있네요. -_-; 위에꺼 쓰지

Emacs에 이미 있네요. -_-;
위에꺼 쓰지 마시고,

(add-to-list 'browse-url-filename-alist
             '("\\`/home/\\([^/]+\\)/public_html/\\(.*\\)\\'" . 
               "http://localhost/~\\1/\\2"))
(add-to-list 'browse-url-filename-alist
             '("\\'/var/www/localhost/htdocs/\\(.*\\)\\'" . 
               "http://localhost/\\1"))

그냥 위만 추가하셔도 됩니다.

Meleeis의 아바타

우왁! emacs 마스터 cinsk님 답변이라니!

게다가 이렇게 빠른 답변이라니! 감사합니다.
집에가서 적용해보겠습니다.

Meleeis의 아바타

허접한 저의 설정입니다.

(load "~/.emacs.d/nxhtml/autostart.el"
;; browse url of buffer
(require 'browse-url)
(add-to-list 'browse-url-filename-alist
'("\\`/home/\\([^/]+\\)/public_html/\\(.*\\)\\'" .
"http://localhost/~\\1/\\2"))
(add-to-list 'browse-url-filename-alist
'("\\'/var/www/localhost/htdocs/\\(.*\\)\\'" .
"http://localhost/\\1"))
(global-set-key (kbd "C-c C-w") 'browse-url-of-buffer))

c-c c-v 바인딩이 nxhtml 모드의 마이너 모드 변경? 에 설정되어있기에
w로 변경했습니다.

Meleeis의 아바타

키 바인딩을 nxhtml-mode 에서만.

html-mode에선 예전대로 C-c C-v 로 그냥 브라우징만 하도록
nxhtml-mode에서만 키바인딩을 바꿉니다.

(load "~/.emacs.d/nxhtml/autostart.el"
;; browse url of buffer
(require 'browse-url)
(add-to-list 'browse-url-filename-alist
'("\\`/home/\\([^/]+\\)/public_html/\\(.*\\)\\'" .
"http://localhost/~\\1/\\2"))
(add-to-list 'browse-url-filename-alist
'("\\'/var/www/localhost/htdocs/\\(.*\\)\\'" .
"http://localhost/\\1"))
(add-hook 'nxhtml-mode-hook
(lambda ()
(local-set-key (kbd "C-c w") 'browse-url-of-buffer))
))
;; (global-set-key (kbd "C-c C-w") 'browse-url-of-buffer))

Meleeis의 아바타

근데... 드루팔에서 코드를 어떻게 보기좋게 올리는거죠?

...cinsk님처럼 어떻게 하는겁니까?

댓글 보기 옵션

원하시는 댓글 전시 방법을 선택한 다음 "설정 저장"을 누르셔서 적용하십시오.

댓글 쓰기

CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다. 아래 보이는 글자를 입력해 주세요.