トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

Misc

Table of Contents

 help

Emacs っぽく M-?

(defun help ()
  (interactive)
  (message "Help - ")
  (let ((b_ime (get-ime-mode)) cmd)
    (toggle-ime nil)
    (setf cmd
          (case (read-char)
            ((#\a) #'apropos)
            ((#\b) #'describe-bindings)
            ((#\c) #'command-apropos)
            ((#\f) #'describe-function)
            ((#\i) #'info)
            ((#\k) #'describe-key)
            ((#\v) #'describe-variable)))
    (clear-message)
    (when cmd
      (call-interactively cmd))
    (toggle-ime b_ime)))

(define-key esc-map #\? 'help)

 vnt ファイルをバイナリファイルに変換

会社のおじさんが「ケータイ(Docomo)から赤外線通信で取り込んだ写真が見えない」とおっしゃるのでつくってみた。vnt とかいう拡張子のついたファイル(vNote 形式)をデコードして元のファイルに戻します(と思います)。[1]

vnt ファイルを読み込んでおいてから M-x vnt2bin します。

(defun vnt2bin ()
  (interactive)
  (when (no-or-yes-p "このVNTデータをバイナリに変換しますか?")
    (let (type dir file)
      (save-excursion
        (goto-char (point-min))
        (when (looking-for "BEGIN:VNOTE")
          (let ((f (get-buffer-file-name)))
            (scan-buffer "X-[A-Z]+-TYPE:" :regexp t :tail t)
            (setq type (buffer-substring (point)
                                         (progn
                                           (goto-eol)
                                           (point))))
            (setq file (read-file-name
                        "保存するファイル名: "
                        :default (make-temp-file-name
                                  (concat (pathname-name f) "_")
                                  (string-downcase type)
                                  (directory-namestring f))))
            (setq dir (directory-namestring file))
            (base64-decode-region-to-file (progn
                                            (scan-buffer "ENCODING=BASE64:" :tail t)
                                            (point))
                                          (progn
                                            (scan-buffer "^$" :regexp t)
                                            (point)))
            (filer dir t "vnt2bin" nil)))))))

 矩形セレクションの数値の合計を求める

矩形セレクションを作成しておき,M-x rsum する。CSV や TSV データを集計する場合は,C-u M-x rsum でセパレータを指定する。結果は,ステータスバーに表示されるとともに,クリップボードにコピーされる。

(defun rectangle-sum (&optional arg)
  (interactive "p")
  (when (eql (get-selection-type) 3)
    (copy-rectangle-selection)
    (let ((sum 0) (sep ""))
      (when arg (setf sep (read-string "Separator character: ")))
      (dolist (s *rectangle-kill-buffer*)
        (if (zerop (length sep))
            (let (i)
              (setf i (parse-double-float (substitute-string s "," "")))
              (when i
                (setf sum (+ sum i))))
          (let (i2 str lst)
            (setf str (substitute-string s sep (format nil "~C" #\TAB)))
            (setf lst (split-string str #\TAB))
            (dolist (s2 lst)
              (setf i2 (parse-double-float (substitute-string s2 "," "")))
              (when i2
                (setf sum (+ sum i2)))))))
      (let ((result (string-right-trim "." (string-right-trim "0" (format nil "~,10F" sum)))))
        (copy-to-clipboard result)
        (message "合計: ~A" result)))))
(setf (symbol-function 'rsum) #'rectangle-sum)

(defun parse-double-float (s)
  (let* ((l (split-string s #\.))
         (y (first l))
         (z (second l))
         i)
    (setf i (parse-integer (concat y z) :junk-allowed t))
    (when i
      (setf i (coerce (/ i (expt 10 (length z))) 'double-float)))
    i))

小数点の計算方法がよくわからないので,ややこしいことをしている。

  • [1]私の vodafone から送ったデータも変換できるようにしてみた。(2004-10-19)

最終更新時間:2005年01月09日 14時47分50秒 GMT