auto-fill を on にし、行カーソルを表示する。
(add-hook '*text-mode-hook* #'(lambda () (auto-fill-mode t) (set-local-window-flags (selected-buffer) *window-flag-cursor-line* t) ))
[xyzzy:02447](山本 真二さん)とかを参考に。キーワード色付け、 キーワード補完用キーバインドの追加など。 lisp のキーワードを補完するには、ふつう ESC TAB (lisp-complete-symbol) するらしい。 このコマンドを長らく知り得なかったため、苦労を強いられた(私だけ?)。 でもちょっと押しにくいので、C-. にもバインドしてみた。
(in-package "editor") (defvar *lisp-keyword-hash-table* nil) (defun use-lisp-keyword () "キーワード色付け" (if (null *lisp-keyword-hash-table*) (setq *lisp-keyword-hash-table* (load-keyword-file "lisp"))) (when *lisp-keyword-hash-table* (make-local-variable 'keyword-hash-table) (setq keyword-hash-table *lisp-keyword-hash-table*))) (add-hook '*lisp-mode-hook* #'(lambda () (use-lisp-keyword) (define-key *lisp-mode-map* #\C-. 'lisp-complete-symbol))) (add-hook '*lisp-interaction-mode-hook* #'(lambda () (use-lisp-keyword) (define-key *lisp-interaction-mode-map* #\C-. 'lisp-complete-symbol))) (in-package "user")
ただし、[xyzzy:02450](亀井さん)によると、
| Lisp モードでもキーワードの色づけが出来てもいいんじゃないかと思い、 んー、Lisp の場合は普通の言語と違って予約語というわけではないで すからねぇ。 (setq setq 'setq) こんなのとか出来ちゃうし(^^;
とのこと。
その他、こんなのも便利 → 「TAB で indent と同時に補完」
css-mode 強化版。インデントを上手くしてくれます。
xyzzyでタグ打ってる人の数 → 339, 340 より。(酔いを醒ましていただけたようです。感謝。)
補完用キーバインドだけ追加した。
;;; css-enhance ; library (load-library "css-mode") ; indent (お好みでどうぞ) (defvar *css-indent-level* 4) (defvar *css-continued-statement-offset* 4) (defvar *css-brace-offset* -4) (defvar *css-brace-imaginary-offset* 0) (defvar *css-argdecl-indent* 0) (defvar *css-label-offset* 0) ; keymap (お好みでどうぞ) (define-key *css-mode-map* #\{ 'c-electric-insert) (define-key *css-mode-map* #\: 'c-electric-insert) (define-key *css-mode-map* #\} 'c-electric-close) (define-key *css-mode-map* #\C-h 'backward-delete-char-untabify-or-selection) (define-key *css-mode-map* #\TAB 'c-indent-line) (define-key *css-mode-map* #\C-M-q 'indent-sexp) (define-key *css-mode-map* #\RET 'c-newline-and-indent) (define-key *css-mode-map* #\C-. 'ed::css-completion) ; function for hook (defun css-enhance () ;; indent command (make-local-variable 'mode-specific-indent-command) (make-local-variable 'c-comment-indent-variable) (setq c-comment-indent-variable 'c-comment-indent) (setq mode-specific-indent-command 'c-indent-line) ; indent (make-local-variable 'c-indent-level) (make-local-variable 'c-continued-statement-offset) (make-local-variable 'c-brace-offset) (make-local-variable 'c-brace-imaginary-offset) (make-local-variable 'c-argdecl-indent) (make-local-variable 'c-label-offset) (setq c-indent-level *css-indent-level*) (setq c-continued-statement-offset *css-continued-statement-offset*) (setq c-brace-offset *css-brace-offset*) (setq c-brace-imaginary-offset *css-brace-imaginary-offset*) (setq c-argdecl-indent *css-argdecl-indent*) (setq c-label-offset *css-label-offset*) ; comment (setq comment-indent-function 'c-comment-indent) (setq comment-start "/* " comment-end " */") (setq comment-start-skip "/\\(\\*+\\|/\\)[ \t]*")) ; hook (add-hook '*css-mode-hook* 'css-enhance)
背景色を変更する。
paren を off にするも追加した。 OHKUBO Hiroshi さんのぺーじより。
(in-package "editor") (add-hook '*diff-mode-hook* #'(lambda () ;paren off (turn-off-paren) ;背景色 (setq *diff-old-file-background* 3) (setq *diff-new-file-background* 6))) (in-package "user")
info-mode 用のバッファ構成にする。
(add-hook '*info-mode-hook* #'(lambda () (set-local-window-flags (selected-buffer) *window-flag-line-number* nil) (set-local-window-flags (selected-buffer) *window-flag-ruler* nil) (set-local-window-flags (selected-buffer) *window-flag-newline* nil) (set-local-window-flags (selected-buffer) *window-flag-tab* nil) (set-local-window-flags (selected-buffer) *window-flag-zenkaku-space* nil) (set-local-window-flags (selected-buffer) *window-flag-eof* nil) (set-local-window-flags (selected-buffer) *window-flag-cursor-line* t)))
より。M-x shell したときに別のフレームにする。
(require "shell") ; or (require "shell3") (defun shell () (interactive) (let (pframe (pframe-name "Shell")) (if (setq pframe (find-pseudo-frame pframe-name)) (select-pseudo-frame pframe) (new-pseudo-frame pframe-name))) (set-buffer (get-buffer-create "*Shell*")) (let ((proc (buffer-process (selected-buffer)))) (and proc (eq (process-status proc) ':run) (return-from shell t))) (goto-char (point-max)) (ed::shell-mode) (make-process *eshell* :output (selected-buffer)))
calc-mode で割算結果を小数表記にする。xyzzy Part7 750 より。
(setq ed::*calc-ratio* 'float)
自分は、ウィンドウを分割して使っている。
(defun my-calc () (interactive)(split-window 4)(calc))
-- で始まる行をコメント文にする。
(in-package "editor") (add-hook '*sql-mode-hook* #'(lambda () (set-syntax-start-c++-comment *sql-mode-syntax-table* #\-) (set-syntax-end-c++-comment *sql-mode-syntax-table* #\LFD))) (in-package "user")
モード一覧をポップアップメニューで表示し,切替える。 C-x F3 に割り当てている。
(defun mode-selecter () (interactive) (let ((menu1 (create-popup-menu nil)) (menu2 (create-popup-menu nil)) l ol) (continue-pre-selection) (dolist (m *auto-mode-alist*) (pushnew (cdr m) l :test 'equal)) (dolist (sym (ed::apropos-find-matches "-mode$" #'commandp)) (unless (or (member sym l) (member sym ;[その他(O)...] にも表示しないモード '(latex-mode clickable-url-set-attribute-any-mode life-mode changelogmemo-mode buffer-menu-mode edit-abbrevs-mode tterm-char-mode fortran-auto-fill-mode info-modoki-mode extlib-mode instant-toggle-tab-mode qanda-mode ese-fortune-mode imm-search-mode))) (pushnew sym ol))) (flet ((add-menu (li mn) (dolist (i li) (let ((m i)) (add-menu-item mn nil (format nil "~S" m) #'(lambda () (interactive) (funcall m)) #'(lambda () (when (eq buffer-mode m) :check))))))) (add-menu (sort l #'string-lessp) menu1) (add-menu (sort ol #'string-lessp) menu2)) (add-menu-separator menu1) (add-popup-menu menu1 menu2 "その他(&O)...") (track-popup-menu menu1))) (define-key ctl-x-map #\F3 'mode-selecter)