コードリーディング用の設定
こんな感じの状況
コードリーディングをしたい。
1つのファイルをみるだけだとview-modeを使えばいいかも。
複数のファイルを楽にたどりたい。
そうなると、どうやって読みたいファイルを開くかが問題。
その上、anythingで探せるほどファイル名なども覚えていない。
実際に作ってみた。
(require 'elscreen) ;;for code reading (defvar dw-target nil) ;;(<frame> . <buffer>) (defun dw-target-set () (setq dw-target (cons (selected-frame) (current-buffer)))) (defun dw-dired () (interactive) (dw-target-set) (call-interactively 'dired-other-frame) (directory-walking-mode t) ) (defun dw-find-file-with-target-buffer () (interactive) (let ((file (dired-get-file-for-visit))) (let ((frame (car dw-target)) (buf (cdr dw-target))) (progn (select-frame-set-input-focus frame) (elscreen-kill buf) (elscreen-find-file file) (view-mode-enable) ;view-mode (dw-target-set))))) (defun dw-find-file-wrapper () (interactive) (if (file-directory-p (dired-get-file-for-visit)) (progn (dired-find-file) (directory-walking-mode t)) (dw-find-file-with-target-buffer))) (defmacro defun-dw (name action) `(defun ,name () (interactive) ,action)) ;→、← (defun-dw dw-forward (dw-find-file-wrapper)) (defun-dw dw-backward (progn (dired-up-directory) (directory-walking-mode t))) ;↓,↑ (defun-dw dw-next-line (dired-next-line 1)) (defun-dw dw-previous-line (dired-previous-line 1)) ;],[ (defun-dw dw-next-dirline (dired-next-dirline 1)) (defun-dw dw-previous-driline (dired-prev-dirline 1)) ;;toggle frame(file <-> dired) (defun-dw dw-next-frame (other-frame 1)) (defun-dw dw-previous-frame (other-frame -1)) (easy-mmode-define-minor-mode directory-walking-mode "minor-mode for walking directory (when code-reading, it is convenient.)" nil " <λ..>" '(;emacs-style ("\C-f" . dw-forward) ("\C-b" . dw-backward) ("\C-n" . dw-next-line) ("\C-p" . dw-previous-line) ;vi-style ("h" . dw-backward) ("j" . dw-next-line) ("k" . dw-previous-line) ("l" . dw-forward) ("[" . dw-previous-driline) ("]" . dw-next-dirline) ("\C-c\C-o" . dw-find-file-with-target-buffer) ("\C-c\C-n" . dw-next-frame) ("\C-c\C-p" . dw-previous-frame) ("o" . dw-next-frame) ("i" . dw-previous-frame) )) (add-hook 'view-mode-hook (lambda () (define-key view-mode-map "\C-c\C-n" 'dw-next-frame) (define-key view-mode-map "\C-c\C-p" 'dw-previous-frame) (define-key view-mode-map "o" 'dw-next-frame) (define-key view-mode-map "i" 'dw-previous-frame) )) ;;==setting=== ;; (global-set-key "\C-cd" 'dw-dired) ;; (autoload 'dw-dired "directory-walker-mode" "DW-start λ..." t) (provide 'directory-walker-mode)