Menu

xyzzy / mcalc

 先日のxyzzyの設定がさらに進み、完全に手になじんできた。Emacsとの互換性で言うと、以下も必要だった。特にヒストリの挙動はこうしないと使いづらいと思う。

; window stuff
(define-key ctl-x-map #\3 'split-window-vertically)
(define-key ctl-x-map '(#\5 #\f) 'find-file-other-window)
(define-key ctl-x-map '(#\5 #\2) 'new-pseudo-frame)
(define-key ctl-x-map '(#\5 #\0) 'delete-pseudo-frame)
(define-key ctl-x-map '(#\5 #\o) 'next-pseudo-frame)
(define-key ctl-x-map '(#\5 #\n) 'next-pseudo-frame)
(define-key ctl-x-map '(#\5 #\p) 'previous-pseudo-frame)
 
(defun kill-buffer-and-window ()
  (interactive)
  (and (kill-buffer (selected-buffer)) (delete-window)))
(define-key ctl-x-map '(#\4 #\0) 'kill-buffer-and-window)
 
; ミニバッファのヒストリの挙動
(define-key minibuffer-local-completion-map #\Up
	    'minibuffer-previous-line-or-history)
(define-key minibuffer-local-completion-map #\Down
	    'minibuffer-next-line-or-history)
(define-key minibuffer-local-completion-map #\C-p
	    'minibuffer-previous-line-or-history)
(define-key minibuffer-local-completion-map #\C-n
	    'minibuffer-next-line-or-history)
(define-key minibuffer-local-completion-map #\C-Up
	    'minibuffer-previous-line-or-search-history)
(define-key minibuffer-local-completion-map #\C-Down
	    'minibuffer-next-line-or-search-history)

 そしてRPN電卓!Emacsにはmcalcというのがあるが、xyzzyにも移植されていたので、持ってきて設定を追加してみた。演算子を簡単に追加できるのがいいね。以下でクリップボードやキルリングとの間で数値を相互にコピペできる。

; RPN calculator
(load-library "mcalc")
 
(defun mcalc-copy (arglist)
  (let ((arg (nth 0 arglist)))
    (ed::kill-new (mcalc-format-string arg))
    (message "Copied")
    (list arg)))
(mcalc-add-function "w" 'mcalc-copy 1)
 
(defun mcalc-paste (arglist)
  (let ((arg (parse-integer (nth 0 (ed::current-kill 0)))))
    (list arg)))
(mcalc-add-function "y" 'mcalc-paste 0)
 
(defun mcalc-copy-to-clipboard (arglist)
  (let ((arg (nth 0 arglist)))
    (copy-to-clipboard (mcalc-format-string arg))
    (message "Copied to clipboard")
    (list arg)))
(mcalc-add-function "c" 'mcalc-copy-to-clipboard 1)
 
(defun mcalc-paste-from-clipboard (arglist)
  (let ((arg (parse-integer (get-clipboard-data))))
    (list arg)))
(mcalc-add-function "v" 'mcalc-paste-from-clipboard 0)

 同じことをEmacsのmcalcでやるにはこうする。Xのクリップボードの操作は面倒なのでやっていない。(kill-newにあたるものがないようだ)

(require 'mcalc)
 
(defun mcalc-copy (arglist)
  (let ((arg (nth 0 arglist)))
    (kill-new (mcalc-format-string arg))
    (message "Copied")
    (list arg)))
(mcalc-add-function "w" 'mcalc-copy 1)
 
(defun mcalc-paste (arglist)
  (let ((arg (string-to-number (current-kill 0))))
    (list arg)))
(mcalc-add-function "y" 'mcalc-paste 0)

 んー、いい感じ。

コメントを残す

メールアドレスが公開されることはありません。