;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; デフォルトパスの指定
(set-default-directory "D:/home/username/work/src/CURRENT")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ctags
(load-library "ctags")
; ctags.exe へのパス
(setf *ctags-command-path* (merge-pathnames "bin/ctags.exe" (si:system-root)))
; ctags.exe へのその他のオプション
;(setf *ctags-command-option* "")
(global-set-key #\M-. 'ctags-jump-tag)
(global-set-key #\M-\, 'ctags-back-tag-jump)
(global-set-key #\M-/ 'ctags-make-tags-file)
;(global-set-key #\M-/ 'ctags-make-tags-file-recursive)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; CSCOPE関連の設定
;; ctagsの方が使い易いので無効化
;(define-key editor::*c-mode-map* '(#\M-.) 'cscope-find-global-definition)
;(define-key editor::*c-mode-map* '(#\M-\,) 'cscope-back-tag-jump)
;(define-key editor::*c-mode-map* '(#\M-/) 'cscope-rebuild-db)
;(define-key cscope::*cscope-result-mode-keymap* '(#\C-n) 'cscope-next-symbol)
;(define-key cscope::*cscope-result-mode-keymap* '(#\C-p) 'cscope-prev-symbol)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; shc.exeを使用してカレントバッファのファイルをコンパイル
;; オプションは別途"#default.sub"を作って定義しておく。
;; 当然だがshc.exeのパスを通しておくこと。
(defun shc-compile () (interactive)
;(execute-subprocess (concat "shc -OBjectfile=temp.obj -sub=default.sub " (get-buffer-file-name)) nil "*SHC*" )
(pipe-command (concat "shc -OBjectfile=temp.obj -sub=#default.sub " (get-buffer-file-name)))
(delete-file "temp.obj" :if-does-not-exist :skip :if-access-denied :force))
(define-key spec-map #\C-b 'shc-compile)
(defun shc-compile-msg () (interactive)
(pipe-command (concat "shc -OBjectfile=temp.obj -sub=#default.sub -message " (get-buffer-file-name)))
(delete-file "temp.obj" :if-does-not-exist :skip :if-access-denied :force))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Artistic StyleでCソース整形 (Artistic Style 1.21専用)
;;
(defun astyle () (interactive)
(execute-subprocess (concat (merge-pathnames "bin/AStyle.exe" (si:system-root)) " -t4Slpy " (get-buffer-file-name)) nil "*A-Style*" )
(revert-buffer))
(define-key spec-map #\C-a 'astyle)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; C言語関連のコーディングスタイル設定
(setq *c-indent-tabs-mode* t) ; インデントはタブを使う
;(setq *c-indent-tabs-mode* nil) ; インデントはスペースを使う
(setq c-indent-level 4) ; インデントレベル
(setq c-continued-statement-offset 4) ;
(setq c-argdecl-indent 4) ;
(setq c-brace-offset -4) ;
(setq c-label-offset -0) ;
(setq c-comment-indent 0) ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SKK-IME使用時にCtrl+BackSlashで入力方法が変更されてしまうので、
;; Ctrl+Slashをundoに割当てておく。
(global-set-key #\C-/ 'undo)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Copy & Paste はクリップボード経由でないと他アプリとの連携が面倒
;(global-set-key #\C-w 'kill-region-to-clipboard)
;(global-set-key #\M-w 'copy-region-to-clipboard)
;(global-set-key #\C-y 'paste-from-clipboard)
siteinit.l
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; IMEの状態をモードラインに表示
(setq-default mode-line-format "[%i] --%*- %b (%M) [%k:%l] %P %f")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; C-x C-wでemacs風の処理をさせる
(defun emacs-write-file (filename)
(interactive "FWrite file: " :title0 "Write File")
(and (rename filename)
(save-buffer)))
(define-key ctl-x-map #\C-w 'emacs-write-file)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; .xyzzy を lisp-mode で編集する
(pushnew '("\\.xyzzy$" . lisp-mode) *auto-mode-alist*)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Tabキーから常にタブを入力.
(let ((keymap (make-sparse-keymap)))
(define-key keymap #\TAB 'self-insert-command)
(add-hook '*create-buffer-hook*
#'(lambda (buffer)
(set-minor-mode-map keymap buffer))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Netinstaller
(require "ni/setup")
;; 自動設定を利用する
(ni-autoload)
;; PROXYを通す
(setq ni::*http-proxy-host* "XXXXXXXXXXXXXXXXXXX") ; PROXY のホスト
(setq ni::*http-proxy-port* 8080) ; PROXY のポート
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; xyzzy WIKIからNetinstallに使用するsiteを追加する
(defun ni::add-site-from-wiki ()
(interactive)
(let ((s (ni::http-get-url "http://xyzzy.s53.xrea.com/wiki/index.php?cmd=source&page=NetInstaller%2F%C7%DB%C9%DB%A5%D1%A5%C3%A5%B1%A1%BC%A5%B8%B0%EC%CD%F7")))
(ni::load-site-data)
(mapcar
(lambda (x) (ignore-errors (ni::site-add x)))
(set-difference
(remove-if
'null
(mapcar (lambda (i)
(and (string-match "^:[^|]+|\\(http:.*\\)$" i)
(apply #'concat
(mapcar (lambda (x)
(let ((tmp (split-string x #\;)))
(if (equal (car tmp) "amp")
(apply #'concat "&" (cdr tmp))
(car tmp))))
(split-string (match-string 1) #\&)))))
(let (out)
(while
(handler-case
(progn
(push (read-line s) out)
t)
(quit (c)
(return-from ni::add-site-from-wiki))
(error (c)
nil)))
(nreverse out))))
(mapcar (lambda (x) (cdr (assoc "src" x :test 'equal))) ni::*site-data*)
:test 'equal))) t)
;;ここがキーバインド
(define-key ni::*site-map* #\N 'ni::add-site-from-wiki)