※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

myShortInput.ahk


/*
myShortInput.ahk 2007-12-02 版
カーソル位置指定と定型文位置指定挿入

・クリップボードに url だけの場合は、はてなダイアリー・@Wiki の
 リンクの書式。カーソル位置ははてなの場合だけエイリアス入力位置。
 クリップボード内の url の整形は Refo を使用。
 (http://www.beyond-boundaries.info/)
・それ以外は定型文リストから選択後、貼り付け位置指定メニュー。
 リストは migemo によるローマ字インクリメンタルサーチ。
  migemo.ahk を使用(http://lukewarm.s101.xrea.com/myscripts/index.html)
 必要なファイルは migemo.ahk を参照のこと。
・リスト上では、Tab でコントロールを移動、↑↓キーでリスト移動、
 Enter で決定、ESC でキャンセル。マウス操作もオッケー。
・貼り付け位置はニーズに応じてメニューに登録
・定型文リスト書式:短縮語 | 定型文
・Windows 標準のショートカットキーをサポートするエディットでしか
 正しく動作しない。
 ToDo:定型文とクリップボード文字列の同時挿入(できないかも^^;)
   :エディタによって送信キーを使い分ける。
    Shift + Insert(コピー)
    Ctrl + Delete(切り取り)
    Ctrl + Insert(貼り付け)
*/

#Persistent
#SingleInstance
#Include %A_ScriptDir%\migemo.ahk

; 短縮語・定型文のリストファイルを指定
abbrev = E:\etc\static-abbrev.ini
; refo.exe のパスを指定
refo = D:\Application\Text_Editor\util\Refo\refo.exe

V = ^v
C = ^C
X = ^x
L = {HOME}
R = {End}
L1 = {Left}
R1 = {Right}

; マウスの下のコントロールの ClassNN を取得して変数に格納
MouseGetPos,,,,ctrl,2

; url の取り出し
path = http
StringGetPos, pos, Clipboard, %path%, 
; クリップボードの文字列が url で始まる場合のみ
if pos = 0
{
Menu, link, Add, はてな(&D), hatena
Menu, link, Add, @Wiki(&W), wiki
Menu, link, Add, (&U)そのまま, url
Menu, link, Show
Menu, link, Delete
Return

hatena:
	active()
	Runwait, %refo% /RE "s/^/[/g" "s/$/:title=]/g"
	Send, %V%%L1%
	ExitApp
wiki:
	RunWait, %refo% /RE "s/^/[[>/g" "s/$/]]/g"
	;RunWait, %refo% /RE "s/$/]]/g" "s/^/[[>/g"
	active()
	Send, %V%
	ExitApp
url:
	active()
	Send, %V%
	ExitApp
}

else ; url 以外は定型文選択

{
GUI, Margin, 1, 1
Gui, add, Edit, vEdit gMatch w200
Gui, Add, ListView, r15 w200 -Multi Grid vAbbrevList gAbbrevList, 短縮語|定型文
Gui, -Caption +Resize
; デフォルトボタン非表示で Enter に動作割り当て
Gui, Add, Button, xm+10 Hidden Default gButtonCopy, Copy
; Gui, Add, Button, x+20 Hidden gButtonCancel, Cancel
MigemoOpen(A_ScriptDir "\dict\migemo-dict")
Loop, read, %abbrev%
	{
		lists()
	}
Gui, Show, , Shortinput
Return
}

; Edit, ListView リサイズ
GuiSize: 
	width:=A_GuiWidth-1
	height:=A_GuiHeight-22
	GuiControl, Move, AbbrevList, w%width% h%height%
	GuiControl, Move, Edit, w%width%
	Return

Match:
	GuiControlGet,Ed,,Edit
	len := StrLen(Ed)
	LV_Delete()
	GUIControl, -Redraw, AbbrevList
	MigemoSet(Ed)
	Loop,read, %abbrev%
	{
		name := A_LoopReadLine
		Loop, Parse, name, "`n"
		{
			StringSplit, compi, name, |
			if(len > 0)
			{
				ifInString, A_LoopField, %Ed%
				{
					LV_Add(" ", compi1, compi2)
				}
				else if(MigemoMatch(compi1) && len > 1)
				{
					LV_Add(" ", compi1, compi2)
				}
			}
			if(len = 0)
			lists()
		}
	}
	LV_Modify(1,"Select Focus")
	GUIControl, +Redraw, AbbrevList
	Return

AbbrevList:
	if A_GuiEvent = DoubleClick
	selection()
	if A_GuiEvent = ColClick ; 列見出しだったら何もしない
	Return
	
ButtonCopy:
	selection()

menu:

Menu, pattern, Add, a:カーソル位置に挿入, past
Menu, pattern, Add, b:挿入後1文字左に, past_left
Menu, pattern, Add, c:挿入後1文字右に, past_right
Menu, pattern, Add, d:行頭に挿入, past_top  ; カーソールは行末
Menu, pattern, Add, e:行末に挿入して改行, past_end
Menu, pattern, Add, f:前行末に挿入, past_prev  ;
Menu, pattern, Add, g:改行して挿入, past_next
Menu, pattern, Show
Menu, pattern, Delete

past:
	active()
	Send, %V%
	ExitApp
past_left:
	active()
	Send, %V%%L1%
	ExitApp
past_right:
	active()
	Send, %V%%R1%
	ExitApp
past_top:
	active()
	Send, %X%%L%%V%%R%
	ExitApp
past_end:
	active()
	Send, %R%%V%`n
	ExitApp
past_prev:
	active()
	Send, %X%%L%%L1%%V%%R%
	ExitApp
past_next:
	active()
	Send, %R%`n%V%
	ExitApp

; ------ 関数 -----
lists()
{
	global
	StringSplit, compi, A_LoopReadLine, |
	LV_Add(" ", compi1, compi2)
	LV_ModifyCol(1, "Sort Auto") ; 1列目でソート、列幅調節して表示
	LV_Modify(1,"Select Focus") ; 1行目を選択状態・フォーカス
}

selection()
{
	global
	; 選択されている(フォーカスがある)項目番号を取得
	Selected := LV_GetNext(0, "F")
		; LV_GetText(OutputVar, RowNumber [, ColumnNumber])
	LV_GetText(Name, Selected, 1)
	LV_GetText(ID, Selected, 2)
	Clipboard = %ID%
	Gosub, menu
	Return
}

active()
{
	global
	WinActivate, ahk_id %ctrl%
	sleep, 500
}

GuiEscape:
GuiClose:
ButtonCancel:
MigemoClose()
ExitApp


-