文字コードを指定してファイルを開く --- C-u C-x C-f
文字コードを指定してファイルを開きなおす --- C-u C-x C-v
Encoding: と聞かれたら、TAB 押してそれらしきものを探す。
ファイルの先頭に、こんな感じで書いておく。
-*- Mode: HOGE -*-
「HOGE」の部分は、そのモードの mode-name で、 モード行の左の方に表示されている (xxx) の部分のことと思う。 こういうのを File Variables と呼ぶらしい。 Emacs のマニュアルによると、そのファイルに対応したローカル変数とその値を指定することができるそう。
リファレンス、xyzzy Part7 350、xyzzy Part7 351 より。
第一引数:作成/追加 する書庫ファイル名(存在すれば追加/なければ新規作成)
第二引数:アーカイブするファイルのリスト(必ずフルパスで)
第三引数:基準ディレクトリ
書庫ファイルを作成するフォルダを指定する場合は、第一引数をフルパスで指定する。
第三引数の意味は例えば、
(create-archive "D:/hoge.lzh" '("D:/foo/foo.txt" "d:/foo/bar.txt") "D:/")
なら書庫ファイルには、
foo/foo.txt
foo/bar.txt
に。
(create-archive "D:/hoge.lzh" '("D:/foo/foo.txt" "d:/foo/bar.txt") "D:/foo")
なら書庫ファイルには、
foo.txt
bar.txt
になるみたいね。
xyzzy Part7 436 より。
(file-length (get-buffer-file-name (selected-buffer)))
[xyzzy:07422](サイトウさん)より。
(defun open-cursor-path () (interactive) (let (path (skip-words "-a-zA-Z0-9_/~.#@%?&=+(),'$!*:")) (save-excursion (skip-chars-backward skip-words) (setq path (buffer-substring (point) (progn (skip-chars-forward skip-words) (point)))) ) (if (file-exist-p path) (find-file path nil t) (message "~A はファイルなのか?" path) ) ) )
xyzzy Part6 332 より。abbreviate-display-string の引数を 40 から 68 にしたら、 「ファイル」→「最近使ったファイル」で、C:/... となって見えなかったファイルも表示されるようになって、 ちょっとうれしい。
(defun list-recents () (interactive) (let (hlist filename) (setq hlist (mapcar #'(lambda (x) (list (abbreviate-display-string x 60 t) x)) *minibuffer-file-name-history*)) (multiple-value-bind (result data) (dialog-box '(dialog 0 0 286 162 (:caption "最近使ったファイル") (:font 9 "MS Pゴシック") (:control (:listbox flist nil #x50b10111 7 7 216 148) (:button IDOK "OK" #x50010001 229 7 50 14) (:button IDCANCEL "キャンセル" #x50010000 229 24 50 14))) (list (cons 'flist hlist)) `((flist :must-match t :enable (IDOK)))) (when result (setq filename (car (cddr (assoc 'flist data)))) (find-file filename) (add-history filename '*minibuffer-file-name-history*)))))
xyzzy Part5 230 より。open-writable と open-writable-with-change-attribute に分けた。 しかし、open-writable-with-change-attribute は、.xyzzy に書かないと、 file-error がエラーになる。何故?
;; 読み取り専用のバッファを読み書き両用に (defun open-writable () (interactive) (toggle-read-only nil)) ;; 開いたファイルが読み取り専用の場合に一発で読み書き両用に ;(add-hook '*find-file-hooks* 'open-writable) ;; 読み取り専用のバッファを読み書き両用に(ファイル属性まで変更) ;; return-from が siteinit.l コンパイル時にエラーをおこす。 (defun open-writable-with-change-attribute () (interactive) (let ((filename (get-buffer-file-name (selected-buffer)))) (when filename (handler-case (modify-file-attributes filename (logand (+ #x800 #x20 #x10 4 2) (get-file-attributes filename)) 1) (file-error (c) (message "書き込み禁止だ") ;(return-from open-writable nil) (return-from open-writable-with-change-attribute nil)) (:no-error (v) (when v (message "読み取り属性外したYO")))))) (toggle-read-only nil))
(defun make-directory-unless-directory-exists (filename) (unless (valid-path-p filename) (let ((d (directory-namestring filename))) (when (yes-or-no-p "~a~%ディレクトリがないけど作る?" d) (create-directory d)))) nil) ; ファイルを開く前に実行 (add-hook '*before-find-file-hook* #'make-directory-unless-directory-exists)
どこかから、いただいたもの。
C-x C-f C-s で、xyzzy/site-lisp/siteinit.l を挿入する。
(define-key minibuffer-local-completion-map #\C-s #'(lambda () (interactive) (delete-region (point-min) (point-max)) (insert (concat (merge-pathnames "site-lisp/siteinit.l" (si:system-root)) ""))))
C-x C-f C-x で、xyzzy/.xyzzy を挿入する。
(define-key minibuffer-local-completion-map #\C-x #'(lambda () (interactive) (delete-region (point-min) (point-max)) (insert (concat (merge-pathnames ".xyzzy" (si:system-root)) ""))))
emacs-write-file でファイル保存後に、ファイル名に対応するモードに変更する。 emacs-write-file と find-file-process-params をくっつけたもの。 xyzzy Part7 510 より。
(defun emacs-write-file (filename) (interactive "FWrite file: " :title0 "Write File" :default0 *default-write-file-directory*) (and (rename filename) (save-buffer) (dolist (x (reverse *auto-mode-alist*)) (when (string-matchp (car x) filename) (if (get (cdr x) 'decode-auto-mode) (funcall (cdr x) last-buffer) (funcall (cdr x)))))))
[xyzzy:04312]、[xyzzy:04313]、[xyzzy:04314]より。 write-file より emacs-write-file の方が使いやすい気もした。
(defun save-file-apart () (interactive) (if (get-buffer-file-name) (save-buffer) (call-interactively 'emacs-write-file)))