Created
December 23, 2010 05:32
-
-
Save youz/752609 to your computer and use it in GitHub Desktop.
xyzzyを侵略 (要api.l)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;;; -*- mode:lisp; package:shinryaku! -*- | |
(eval-when (:compile-toplevel :load-toplevel :execute) | |
(require "api")) | |
(provide "shinryaku!") | |
(defpackage "shinryaku!" | |
(:use :lisp :editor)) | |
(in-package "shinryaku!") | |
(defvar *ika-mode-on* nil) | |
(defvar *ika-cmds* nil) | |
(defvar *original-mode-line* nil) | |
(defvar *original-title-bar* nil) | |
(defvar *icon-path* "~/etc/shokushu.ico") | |
(defvar *shokushu-icon* | |
"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 | |
ykrLkBcqKD9RxcDAgIqv/j946l96++IKNhUAAA== | |
") | |
(defun set-shokushu-icon () | |
(with-open-file (os *icon-path* :direction :output | |
:if-exists :supersede | |
:encoding :binary) | |
(princ (si:inflate-stream (si:base64-decode *shokushu-icon*)) os)) | |
(winapi::SendMessage | |
(ed::get-window-handle) winapi::WM_SETICON 1 | |
(winapi::LoadImage | |
0 (si:make-string-chunk | |
(map-slash-to-backslash | |
(namestring *icon-path*))) | |
winapi::IMAGE_ICON 0 0 winapi::LR_LOADFROMFILE))) | |
(defun revert-app-icon () | |
(winapi::SendMessage | |
(ed::get-window-handle) winapi::WM_SETICON 1 | |
(winapi::LoadImage | |
(winapi::GetModuleHandle 0) | |
(si:make-string-chunk "IDI_XYZZY") | |
winapi::IMAGE_ICON 0 0 winapi::LR_DEFAULTCOLOR))) | |
(defun user::shinryaku! () | |
(interactive) | |
(unless *ika-mode-on* | |
(setq *ika-cmds* nil | |
*original-mode-line* mode-line-format | |
*original-title-bar* title-bar-format) | |
(do-external-symbols (s :editor) | |
#1=(when (fboundp s) | |
(let ((f (symbol-function s))) | |
(when (commandp f) | |
(let ((is (intern (format nil "~A-shinaIka?" s) "shinryaku!"))) | |
(push is *ika-cmds*) | |
(setf (symbol-function is) f)))))) | |
(do-symbols (s :user) #1#) | |
(push 'chizuru *ika-cmds*) | |
(setf (symbol-function 'chizuru) #'quit-ika-mode) | |
(define-history-variable *ika-cmd-history* nil) | |
(setf (get 'ika-execute 'ed::minibuffer-history-variable) '*ika-cmd-history*) | |
(global-set-key #\M-x 'ika-execute) | |
(setq mode-line-format (format nil "侵略! ~A" *original-mode-line*) | |
title-bar-format "海の家れもん - %b") | |
(set-shokushu-icon) | |
(refresh-title-bar) | |
(setq *ika-mode-on* t))) | |
(defun ika-execute (&optional raw arg) | |
(interactive "0P\np") | |
(let ((*prefix-args* raw) | |
(*prefix-value* arg) | |
(cmd (completing-read "M-x: " *ika-cmds* :history 'ika-execute))) | |
(setq *last-complex-command* nil) | |
(call-interactively (find-symbol cmd "shinryaku!")))) | |
(defun quit-ika-mode () | |
(interactive) | |
(global-set-key #\M-x 'execute-extended-command) | |
(unregister-history-variable '*ika-cmd-history*) | |
(setq mode-line-format *original-mode-line* | |
title-bar-format *original-title-bar* | |
*ika-mode-on* nil) | |
(revert-app-icon) | |
(refresh-title-bar)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
M-x shinryaku!
で侵略開始M-x chizuru
で終了screenshot: http://gyazo.com/52a223033d218a5d1c03affac81b9ec5.png