Select sjis if the characters are not shown properly. Internet Expolorer is the targetted browser.

kh-xyzzyfunc.l

 $Filename: kh-xyzzyfunc.l $
 $Lastupdate: 2018-09-19 10:02:26 $

ファイル、フォルダー、URL を処理する xyzzy 用の関数を定義しています。

ODR 文書の中で使用することだけが目的の関数もあります。そういうものは、kh-odr.l に移動した方がいい。[2017-12-31] 作業中です。

[TopHdngList] [BodyStart] [Top] [End]

CONTENTS   CONTENTS が閉じられているときでも [Contents] ボタンは有効です。
CONTENTS が閉じられているときに、アウトライン見出しのところに表示 されている [Contents] ボタンをクリックすると、 CONTENTS を表示して、 そのアウトライン見出しに対応している CONTENTS の中の見出しにジャンプします。
この後、CONTENTS は表示されたままになります。
CONTENTS 内の各行の最後に示されている数字は、 そのアウトライン見出し行が文書ファイルの何行目にあるかを表しています。

[ContentsTop]
TOP HDNG LIST ALL HEADING LIST NOTE LIST

[Close TOP HEADING LIST]

ALL HEADING LIST ■はアウトライン見出しのタイトル □はそれ以外
24*1 ■概要
70*2 ■利用方法
79*3 ■require 文
88*4 ■Start
252*5 ■View
289*6 ■Filesdir
307*7 ■filer-open-dual-window
329*8 ■reopen-file
389*9 ■files-dir
403*10 ■sl
423*11 ■google-url
451*12 ■search-google
489*13 ■Explorer
514*14 ■Folder
610*15 ■Console
649*16 ■Net
677*17 ■File
861*18 ■Xv
966*19 ■Start-current-file
982*20 ■vfile
1005*21 ■vFile
1057*22 ■lnk-dir
1085*23 ■Href
1267*24 ■search-google-selection
1296*25 ■google-search
1321*26 ■ie-url
1348*27 ■open-url
1369*28 ■lf -- 引数列からファイル名を生成して返します。
1462*29 ■bfl -- 引数のショートカットファイルからファイル名を生成して返します。
1531*30 ■scrf -- C:/scriptfile からマシン用のスクリプトファイルを選択
1594*31 ■pl
1644*32 ■provide 文

[Close ALL HEADING LIST]

NOTE LIST
Note の一覧: Note はありません。

[Close NOTE LIST]

[Top] [End] [ContentsTop]

[CTop] [Contents][TopHdngList][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

1 概要

重要な注意

このファイルで定義されている関数

   Folder, File, Xv, Start, vFile,

では、C:/dirlink というディレクトリがあって、

   foo.lnk, foobar.lnk, ...

のような名前の、ディレクトリへのショートカットとが置いてあるという前提に立っています。

   (File "sitelisp.lnk" "kh-base.l")

のように書くと、C:/dirlink/sitelisp.lnk が指すディレクトリにある kh-base.l を開きます。このようにすることで、良くアクセスするディレクトリへのアクセスを簡単にします。

C:/dirlink というディレクトリがあるという前提に立っている関数では、 C:/dirlink というディレクトリがあるか検査して、無ければその旨をメッセージボックスに表示して、関数の実行を停止します。

expand-file-name は siteinit.l で定義されています。

(defun expand-file-name 
  (file &optional (dir (default-directory)))
  (merge-pathnames file dir))

lisp プログラムの中で定義されている *my-home* のようなスペシャル変数は、C:/tools/xyzzy の下 (直下とは限らない) の starvariable.l の中や .xyzzy の中で、例えば

  (setq *my-home* "C:/home/me/")

のように定義するものとします。

この lisp プログラムの中では、つぎのスペシャル変数が参照されています。

スペシャル変数名 内容
*my-sitelisp* site-lisp ディレクトリ
*my-images* イメージファイルを置いているディレクトリ

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

2 利用方法

kh-xyzzyfunc.l をバイトコンパイルして、.xyzzy に

(load-libary "kh-xyzzyfunc")

と書いてください。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

3 require 文

001: (require "kh-base")

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

4 Start

引数で指定するファイルを開きます。

 (Start "~/orchisManualLink.jpg")
 (Start "~/work/foo.html")
 (Start "~/work/kh-odr.l.html")

存在しないファイルを引数に指定したときは、Clipboard とかで始まるメニューが表示されます。

 (Start "~/work/foo.html")
 (EsExt "~/work/foo.html")

つぎのような形でもいい。

 cmd.exe /c start c:¥home¥me¥temp¥foo.html
 (sfind "Start" *my-sitelisp* "kh-xyzzyfunc.l")
;作業フォルダーを指定できないのか。基本的には shell-execute にはその仕組があります。しかし、このコマンドでは、引数はすべて接続して、全体としてバスを指定するものとして処理するので、パス以外に何かを指定することができません。


002: (defun Start (arg &rest z)
003:   "引数で指定するファイルを開く"
004:   (interactive)
005:   ; @begin{Cmnted out at 20180919 10:02}--------------------
006:   ; (if (string= arg "")
007:   ;     (return-from Start))
008:   ; @end{Cmnted out at 20180919 10:02}----------------------
009:   ; 
010:   ; @begin{Inserted at 20180919 10:02}----------------------
011:   (if (string= arg "")
012:       (setq arg "."))
013:   ; @end{Inserted at 20180919 10:02}------------------------
014: 
015:   (if (not (file-directory-p "C:/dirlink"))
016:       (progn
017:         (message-box 
018:          (concat "C:/dirlink が存在しません。¥n¥n"
019:                  "C:/dirlink を作成して、ディレクトリへの¥n"
020:                  "ショートカットを置いてください。¥n"
021:                  ))
022:         (call-process (concat (si:system-root) "xyzzycli.exe"))
023:         (return-from Start)))
024:   
025:   (let (fname buffer wl fcname extension binlist 
026:               compname basename)
027:     (setq fname arg)
028:     (if (not
029:          (string=
030:           (concat (directory-namestring fname)
031:                   (file-namestring fname))
032:           fname))
033:         (if (string= (pathname-type fname) "lnk")
034:             (progn
035:               (setq fname (concat "C:/dirlink/" fname))
036:               
037:               (if (not (file-exist-p fname))
038:                   (progn
039:                     (message-box 
040:                      (concat fname " は存在しません。")
041:                      "File"
042:                      )
043:                     (call-process 
044:                      (concat (si:system-root) "xyzzycli.exe"))
045:                     (return-from Start)))
046:               
047:               ; マシンの名前のリンクがないかチェックしたい
048:               (setq compname (si::getenv "COMPUTERNAME"))
049:               (setq fcname 
050:                     (concat "C:/dirlink/" basename
051:                             ".For" compname ".lnk"))
052:               (if (file-exist-p fcname)
053:                   (setq fname fcname))
054:               
055:               (setq fname (resolve-shortcut fname))
056:               )
057:           )
058:       )
059:     (if (and z (string= (pathname-type arg) "lnk"))
060:       (setq fname
061:               (merge-pathnames 
062:                (apply #'concat z) fname)))
063:     (setq fname (standard-filename-expression fname))
064:     ; 拡張子が .lnk かどうか検査し、拡張子が .lnk なら、ショ
065:     ; ートカットが指す先のファイルを fname にセットし直しま
066:     ; す。
067:     ;
068:     ; resolve-shortcut は xyzzy の内部関数です。
069:     ; 
070:     (setq extension (pathname-type fname))
071:     (if (string= extension "lnk")
072:       (progn
073:         (setq fname (resolve-shortcut fname))
074:         (setq extension (pathname-type fname))))
075:     ; 拡張子が binlist に登録しているのもののどれかなら、
076:     ; 直接起動します。
077:     (setq binlist 
078:           '("ai" "doc" "docx" "eps" "html" "jpg" "te1"
079:             "pdf" "png" "xls" "xlsx" "gif"))
080:     (if (member extension binlist :test #'equal)
081:         (progn
082:           (shell-execute fname)
083:           (return-from Start)))
084:     
085:     ; 2013-08-07
086:     ; つぎの行は何してる?
087:     (ed::kill-new fname)
088:     ;
089:     ; ファイルが無ければここで止めたらいいのかも。
090:     (if (not (file-exist-p fname))
091:         (progn
092:           (message-box 
093:            (concat fname " は存在しません。")
094:            "File"
095:            )
096:           (call-process 
097:                      (concat (si:system-root) "xyzzycli.exe"))
098:           (return-from Start)))
099:     
100:     ; fcname は現在のバッファに対応するファイル名
101:     (setq fcname (get-buffer-file-name (selected-buffer)))
102:     ; (message-box (concat "You are going to open " fname))
103:     (if (string= fname fcname)
104:         (progn
105:           ; (message-box "You are going to open the same file")
106:           (return-from Start)
107:           ))
108:     ;
109:     ; つぎの行は、nil を返すかも知れません。
110:     (setq buffer (get-file-buffer fname))
111:     ;
112:     ; list-buffer-window は、引数で指定したバッファを持つ窓
113:     ; のリストを返します。そういう窓が無ければ nil を返しま
114:     ; す。
115:     ; 引数が nil なら nil を返します。cbar の自作です。
116:     ; (sfind "list-buffer-window" *my-sitelisp* "kh-base.l")
117:     (setq wl (list-buffer-window buffer))
118:     (if wl
119:       (progn
120:           (set-window (car wl))
121:           (refresh-screen)
122:           (return-from Start)
123:           )
124:       (progn
125:         (if (file-directory-p fname)
126:           (run-explorer fname)
127:           (call-process
128:            (concat "xyzzycli.exe " (concat "¥"" (map-slash-to-backslash fname) "¥"")) :wait t)
129:           ))
130:       )
131:     )
132:   )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5 View

引数で指定する画像ファイルを開きます。

 (View *my-images* "nonokusa/070509_1242~0001.jpg")
 (File *my-images* "nonokusa/070509_1242~0001.jpg.txt")

画像ファイルを開くソフトが、例えば、C:¥tools¥IrfanView¥i_view32.exe のときは、.xyzzy で

  (setq ViewProgram "C:¥¥tools¥¥IrfanView¥¥i_view32.exe")

と定義しておきます。

133: (defvar ViewProgram nil "View program path")
134: 
135: (defun View (arg &rest z)
136:   (interactive)
137:   (let (fname)
138:     (setq fname arg)
139:     (if z
140:         (setq fname (concat fname (apply #'concat z))))
141:     (setq fname 
142:           (map-slash-to-backslash 
143:            (standard-filename-expression fname)))
144:     (if ViewProgram
145:         (call-process (concat ViewProgram " " fname))
146:       (shell-execute fname t))
147:     )
148:   )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6 Filesdir

現在編集中のファイルの名前に .fiels を付加した名前のディレクトリの名前を返します。

 (Filesdir)

149: (defun Filesdir ()
150:   (interactive)
151:   (concat (get-buffer-file-name) ".files/"))

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7 filer-open-dual-window

一画面ファイラで開いているディレクトリを,二画面ファイラで開きます。

HIE さんの「ファイラ」のページ
http://hie.s64.xrea.com/xyzzy/note/filer.html#filer-open-dual-window

152: (defun filer-open-dual-window ()
153:   (interactive)
154:   (unless (filer-dual-window-p)
155:     (let ((*filer-primary-directory* (filer-get-directory))
156:           (*filer-secondary-directory* (filer-get-directory)))
157:       (filer-cancel)
158:       (open-filer))))

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

8 reopen-file

howm-mode にした後で、howm-mode を解消したいのですが、うまく行かないので、バッファを kill して、再度開くという方法をとるために定義しました。

  1. まず、後で、今いるカーソル位置に移動するために、カーソル位置を *lastpos* に記憶しています。

  2. バッファが変更されていたら、バッファを対応するファイルに書き出して、バッファは変更されていないことにします。

    普通は、save-buffer でこの作業をするのですが、save-buffer を呼び出すと、なにか、作業をしてちかちかします。

  3. 現在のバッファを kill して、ファイルを再度読み込みます。このときに、howm-mode が消えます。

    記憶していたカーソル位置に移動します。

  4. 変更されてはいないのですが、変更されているというフラグを立てて、save-buffer を呼び出します。

    save-buffer にくっついてすることになっている fook の動作をさせるため。

159: (defun reopen-file ()
160:   (interactive)
161:   (setq *lastpos* (point))
162:   (let (fname)
163:     (setq fname (get-buffer-file-name))
164:     (if fname
165:         (progn
166:           (if (buffer-modified-p (selected-buffer))
167:               (progn
168:                 (write-file (get-buffer-file-name))
169:                 (set-buffer-modified-p nil))
170:             )
171:           (kill-buffer (selected-buffer))
172:           (File fname)
173:           (goto-char *lastpos*)
174:           (set-buffer-modified-p t)
175:           (save-buffer)
176:           )
177:       (message-box 
178:        (concat "このバッファはファイルに対応していない¥n"
179:                "ので何もしません。")
180:        "reopen-file"
181:        '(:information))
182:       ))
183:     )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

9 files-dir

現在編集中のファイルの名前の後に ".files/" を付加した文字列を返します。

184: (defun files-dir ()
185:   (concat (get-buffer-file-name) ".files/"))

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

10 sl

sitelispe の下のファイルを指定。ちょっと特殊。

186: (defun sl ()
187:   (interactive)
188:   (let (fname)
189:     (setq fname 
190:        (read-file-name "filename: "
191:                        :default *my-sitelisp*))
192:     ; (leave-howm-frame)
193:     (find-file fname)))

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

11 google-url

M-x google-url として、カーソル行の url を開きます。

ここで、M-x google-url として見て。"http://rfri.org"

194: (defun google-url ()
195:   (interactive)
196:   (let (url beg end)
197:     (beginning-of-line)
198:     (re-search-forward "¥¥(https¥¥|ftp¥¥|http¥¥):" nil)
199:     (setq beg (match-beginning 0))
200:     (re-search-forward "[ ¥t¥n¥">]" nil)
201:     ; (backward-char)
202:     (setq end (point))
203:     (goto-char beg)
204:     (setq url (buffer-substring beg end))
205:     (shell-execute url t)
206:     )
207:   )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

12 search-google

2010-05-24 に

http://sonic64.com/cat_xyzzy.html

から取得しました。

(search-google "流出予測研究所")

のように使用します。

208: (defun search-google (&optional str)
209:   (interactive)
210:   (unless str
211:     (setq str (read-string "Google: ")))
212:   (long-operation
213:     (let ((url (concat
214:                                  "http://www.google.co.jp/search?hl=ja&lr=lang_ja&num=50&ie=shift_jis&oe=euc-jp&q="
215:                       (si:www-url-encode str))))
216:       ;─────────────────────
217:       ; 標準ブラウザを使う場合
218:       (shell-execute url t)
219:       ; 2. browser.dll & browserex.l を使う場合
220:       ; (bx::navigate url)
221:       ; 3. www-mode を使う場合
222:       ; (www-open-url url)
223:       ; 4. 指定したブラウザを使う場合
224:       ; (call-process (concat "mychrome.exe " url))
225:       ;─────────────────────
226:       )))

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

13 Explorer

ディレクトリ名を引数にして、Explorer を開きます。そのディレクトリを Explorer で開きます。

使用例
(Explorer ".")
(Explorer (directory-namestring (get-buffer-file-name)))
227: (defun Explorer (arg &rest z)
228:   (interactive)
229:   (open-filer)
230:   (let (dir)
231:     (setq dir arg)
232:     (if z
233:         (setq dir (concat dir (apply #'concat z))))
234:     (shell-execute (expand-file-name dir)))
235: )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

14 Folder

ディレクトリを引数にして、呼び出します。xyzzy のファイラーにそのディレクトリを表示します。

引数の拡張子が .lnk だったときには、そのショートカットが指しているディレクトリを表示します。

使用例

  (Folder (si::system-root))
  (Folder "c:/home/" "me/work/")
  (Folder "C:/home/me/bat")
  (Folder "~/bat")
  (Folder "~/doesnotexist")
  (Folder "sitelisp.lnk")
  (Folder "saloon.lnk" "openpage")

expand-file-name は siteinit.l で定義されています。

236: (defun Folder (arg &rest z)
237:   (interactive)
238:   
239:   (if (not (file-directory-p "c:/dirlink"))
240:       (progn
241:         (message-box 
242:          (concat "C:/dirlink が存在しません。¥n¥n"
243:                  "C:/dirlink を作成して、ディレクトリへの¥n"
244:                  "ショートカットを置いてください。¥n"
245:                  ))
246:         (call-process (concat (si:system-root) "xyzzycli.exe"))
247:         (return-from Folder)))
248:   
249:   (open-filer)
250:   (let (dir extension basename fcname)
251:     (setq dir arg)
252:     (if (not
253:          (string=
254:           (concat (directory-namestring dir)
255:                   (file-namestring dir))
256:           dir))
257:         (if (string= (pathname-type dir) "lnk")
258:             (progn
259:               (setq dir (concat "C:/dirlink/" dir))
260:               (setq basename (pathname-name dir))
261:               (if (not (file-exist-p dir))
262:                   (progn
263:                     (message-box 
264:                      (concat dir " は存在しません。")
265:                      "Folder"
266:                      )
267:                     (call-process 
268:                      (concat (si:system-root) "xyzzycli.exe"))
269:                     (return-from Folder)))
270:               
271:               ; マシンの名前のリンクがないかチェックしたい
272:               (setq compname (si::getenv "COMPUTERNAME"))
273:               (setq fcname 
274:                     (concat "C:/dirlink/" basename
275:                             ".For" compname ".lnk"))
276:               (if (file-exist-p fcname)
277:                   (setq dir fcname))
278:               
279:               (setq dir (resolve-shortcut dir))
280:               )
281:           )
282:       )
283:     
284:     (if z
285:         (setq dir
286:               (merge-pathnames 
287:                (apply #'concat z) dir)))
288: 
289:     (setq dir (expand-file-name dir))
290:     (setq extension (pathname-type dir))
291:     (if (string= extension "lnk")
292:         (progn
293:           (setq dir (resolve-shortcut dir))
294:           (setq extension (pathname-type dir))))
295:     
296:     (if (file-directory-p dir)
297:         (filer-chdir dir)
298:       (progn 
299:         (message-box (concat dir " is not a directory."))
300:         (call-process 
301:          (concat (si:system-root) "xyzzycli.exe"))
302:         ))
303:     )
304:   )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

15 Console

引数で指定したディレクトリをルートディレクトリにして、コンソールを開きます。

 (Console "C:/home/me")
 (Console "C:/home/" "me")
 (Console)

引数を指定しない場合は、現在アクティブなバッファに対応するファイルがあるディレクトリをルートディレクトリとしてコンソールを開きます。

cmdini.exe を起動しているのではないことに注意する必要があります。

紛らわしいですが、小文字の c で始まる console 関数を
(File "sitelisp.lnk" "kh-local.l") 

で定義しています。

305: (defun Console (&optional arg &rest z)
306:   (interactive)
307:   (let (wdir dir)
308:     (setq dir (default-directory))
309:     (if arg
310:         (progn
311:           (setq wdir arg)
312:           (if z
313:               (setq wdir (concat wdir (apply #'concat z))))
314:          (set-default-directory wdir)))
315:     (run-console)
316:     (set-default-directory dir)
317:     )
318:   )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

16 Net

第1引数が url であれば、デフォールトのウェブブラウザで開きます。第1引数が url でなければ、ローカルのファイルが指定されていると想定して、Start 関数で開きます。

使用例
  (Net "http://rfri.saloon.jp/openpage/")
  (Start "~/work/foo.html")

319: (defun Net (arg &rest z)
320:   "引数で指定するURLを表示する"
321:   (interactive)
322:   (let (url)
323:     (setq url arg)
324:     (if (string-match "^¥¥(http:¥¥|https:¥¥)" url)
325:         (shell-execute 
326:          (concat "¥"" url "¥"") t)
327:       (Start url)
328:       )
329:     )
330:   )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

17 File

引数で指定するファイルを xyzzy で開きます。

使用例
 (File "c:/home/me/000readme.txt")
 (File "winnote.lnk" "win-xyzzy.txt")

2013-07-24
  (call-process ... :wait t)
のように、:wait t を追加したところ、都合よく動くようになったように思います。

2014-03-03 howm フレームで呼ばれたら、home フレームに移動して開くようにしました。これがいいかどうか。howm モードかどうか調べた方がいいかも。

ファイルを開くのではなくて、ファイルのフルパスを取得したい場合は、lf の使用も検討してください。

関数 lf は、kh-base.l で定義されています。

331: (defun File (arg &rest z)
332:   "引数で指定するファイルを開く"
333:   (interactive)
334:   (if (string= arg "")
335:       (return-from File))
336:   
337:   (if (not (file-directory-p "c:/dirlink"))
338:       (progn
339:         (message-box 
340:          (concat "C:/dirlink が存在しません。¥n¥n"
341:                  "C:/dirlink を作成して、ディレクトリへの¥n"
342:                  "ショートカットを置いてください。¥n"
343:                  ))
344:         (call-process (concat (si:system-root) "xyzzycli.exe"))
345:         (return-from File)))
346:   
347:   ;
348:   ; 本来は、つぎのように書けばよいはずなのに、
349:   ; (find-file fname)
350:   ; これでは、fname のファイルを開いたバッファに移動しません。
351:   ; そこで、xyzzycli.exe の力を借ります。
352:   ;
353:   ; 2010-09-17 fname の中に半角空白が入っているとうまく行か
354:   ; ないので、"¥"" と "¥"" で囲むように変更しました。
355:   ;
356:   ; 2011-09-21 複数の引き数を与えたときに、それを接続して、
357:   ; そのファイルを与えたように動作するように変更しました。
358:   ; (File "C:/home/me/" "000readme.txt")
359:   ; のようにできます。
360:   ; (File "sitelisp.lnk" "kh-xyzzyfunc.l")
361:   ;
362:   ; 2012-05-12 別の窓で表示されているファイルが指定された場
363:   ; 合は、その窓に jump するように変更しました。ただし、C-c 
364:   ; C-e で実行する必要があります。
365:   ; (sfind "my-eval-last-sexp" *my-sitelisp* "kh-base.l")
366:   (let (fname buffer wl fcname extension binlist compname basename)
367:   ;
368:   ; しばらくの間、howm モードのときに、File が呼ばれると、
369:   ; Frame 1 にしてから編集するようにしましたが、そうする必要も
370:   ; ないと感じるようになったので、とりやめます。
371:   ;    (if (string= (ed::pseudo-frame-name (selected-pseudo-frame))
372:   ;               "howm")
373:   ;      (switch-pseudo-frame "Frame 1"))
374:   ;
375:     (setq fname arg)
376:     ; @begin{Cmnted out at 20160806 07:34}------------------
377:     ; (if z
378:     ;     (setq fname (concat fname (apply #'concat z))))
379:     ; @end{Cmnted out at 20160806 07:34}--------------------
380:     ; 
381:     ; @begin{Inserted at 20160806 07:34}--------------------
382:     (if (not
383:          (string=
384:           (concat (directory-namestring fname)
385:                   (file-namestring fname))
386:           fname))
387:         (if (string= (pathname-type fname) "lnk")
388:             (progn
389:               (setq fname (concat "C:/dirlink/" fname))
390:               (setq basename (pathname-name fname))
391:               (if (not (file-exist-p fname))
392:                   (progn
393:                     (message-box 
394:                      (concat fname " は存在しません。")
395:                      "File"
396:                      )
397:                     (return-from File)))
398:               
399:               ; マシンの名前のリンクがないかチェックしたい
400:               (setq compname (si::getenv "COMPUTERNAME"))
401:               (setq fcname 
402:                     (concat "C:/dirlink/" basename
403:                             ".For" compname ".lnk"))
404:               (if (file-exist-p fcname)
405:                   (setq fname fcname))
406:               
407:               (setq fname (resolve-shortcut fname))
408:               )
409:           )
410:       )
411:     (if z
412:         (setq fname
413:               (merge-pathnames 
414:                (apply #'concat z) fname)))
415:     ; (message-box fname)
416:     ; @end{Inserted at 20160806 07:34}----------------------
417:     ; standard-filename-expression は、ファイル名の標準的な
418:     ; 表記法を返します。
419:     ; ~ は展開します。ドライブレターは大文字に変換します。
420:     (setq fname (standard-filename-expression fname))
421:     
422:     ; 拡張子が .lnk かどうか検査し、拡張子が .lnk なら、ショ
423:     ; ートカットが指す先のファイルを fname にセットし直しま
424:     ; す。
425:     ;
426:     ; resolve-shortcut は xyzzy の内部関数です。
427:     ; 
428:     (setq extension (pathname-type fname))
429:     (if (string= extension "lnk")
430:         (progn
431:           (setq fname (resolve-shortcut fname))
432:           (setq extension (pathname-type fname))))
433:     ; 拡張子が binlist に登録しているのもののどれかなら、
434:     ; 直接起動します。
435:     (setq binlist 
436:           '("ai" "doc" "docx" "eps" "gif" "jpg" "te1"
437:             "odt" "pdf" "png" "xls" "xlsx" "xltx"))
438:     (if (member extension binlist :test #'equal)
439:         (progn
440:           (shell-execute fname)
441:           (return-from File)))
442:     
443:     ; 2013-08-07
444:     ; つぎの行は何してる?
445:     (ed::kill-new fname)
446:     ;
447:     ; ファイルが無ければここで止めたらいいのかも。
448:     (if (not (file-exist-p fname))
449:         (progn
450:           (message-box 
451:            (concat fname " は存在しません。")
452:            "File"
453:            )
454:           (return-from File)))
455:     
456:     ; fcname は現在のバッファに対応するファイル名
457:     (setq fcname (get-buffer-file-name (selected-buffer)))
458:     ; (message-box (concat "You are going to open " fname))
459:     (if (string= fname fcname)
460:         (progn
461:           ; (message-box "You are going to open the same file")
462:           (return-from File)
463:           ))
464:     ;
465:     ; つぎの行は、nil を返すかも知れません。
466:     (setq buffer (get-file-buffer fname))
467:     ;
468:     ; list-buffer-window は、引数で指定したバッファを持つ窓
469:     ; のリストを返します。そういう窓が無ければ nil を返しま
470:     ; す。
471:     ; 引数が nil なら nil を返します。cbar の自作です。
472:     ; (sfind "list-buffer-window" *my-sitelisp* "kh-base.l")
473:     (setq wl (list-buffer-window buffer))
474:     (if wl
475:         (progn
476:           (set-window (car wl))
477:           (refresh-screen)
478:           (return-from File)
479:           )
480:       (call-process
481:        (concat (si:system-root) "xyzzycli.exe " (concat "¥"" (map-slash-to-backslash fname) "¥"")) :wait t)
482:       )
483:     )
484: )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

18 Xv

(Xv 引数1 引数2 ...)

の形ですが、最初の引数1をファイル名のフルパスとして、

表示します。

 (Xv "c:/home/me/001me.txt")
 (Xv "C:/Users/me/Dropbox/DropboxData/images/nengaSample.png")
 (Xv (lf "dropboxdata.lnk" "images/nengaSample.png"))

 (copy-to-clipboard 
   (lf "dropboxdata.lnk" "image/nengaSample.png"))

Xv 関数が第1引数だけを見て動作を決めるようになっているのは、 ODR 文書での Xv 関数の解釈と合わせるためです。2番目以降の引数は、 o2h.rb がその ODR 文書を html ファイルに変換するときに利用します。

(Xv (lf "dropboxdata.lnk" "images/nengaSample.png"))

ODR 文書では、Xv 関数の2番目以降の引数は、画像のサイズを指定するために使用されます。

485: (defun Xv (arg &rest z)
486:   "引数で指定するファイルを開く"
487:   (interactive)
488:   (if (string= arg "")
489:       (return-from Xv))
490:   
491:   (let (fname extension fcname buffer)
492:     (setq fname arg)
493:     (setq fname (standard-filename-expression fname))
494:     ; フルパス名の形に変更します。
495:     
496:     (setq extension (pathname-type fname))
497:     ; ファイルが無ければここで止めます。
498:     (if (not (file-exist-p fname))
499:         (progn
500:           (message-box 
501:            (concat fname " は存在しません。")
502:            "Xv"
503:            )
504:           (return-from Xv)))
505:     ; ファイルは画像ファイルのはずなんですが。
506:     ; 
507:     ; 拡張子が binlist に登録しているのもののどれかなら、
508:     ; 直接起動します。
509:     (setq binlist 
510:           '("ai" "doc" "docx" "eps" "gif" "jpg" "te1"
511:             "pdf" "png" "xls" "xlsx"))
512:     (if (member 
513:          (string-downcase extension)
514:          binlist :test #'equal)
515:         (progn
516:           (shell-execute fname)
517:           (return-from Xv)))
518:     
519:     ; 2013-08-07
520:     ; つぎの行は何してる?
521:     (ed::kill-new fname)
522:     
523:     ; fcname は現在のバッファに対応するファイル名
524:     (setq fcname (get-buffer-file-name (selected-buffer)))
525:     ; (message-box (concat "You are going to open " fname))
526:     (if (string= fname fcname)
527:         (progn
528:           ; (message-box "You are going to open the same file")
529:           (return-from Xv)
530:           ))
531:     ;
532:     ; つぎの行は、nil を返すかも知れません。
533:     (setq buffer (get-file-buffer fname))
534:     ;
535:     ; list-buffer-window は、引数で指定したバッファを持つ窓
536:     ; のリストを返します。そういう窓が無ければ nil を返しま
537:     ; す。
538:     ; 引数が nil なら nil を返します。cbar の自作です。
539:     ; (sfind "list-buffer-window" *my-sitelisp* "kh-base.l")
540:     (setq wl (list-buffer-window buffer))
541:     (if wl
542:       (progn
543:           (set-window (car wl))
544:           (refresh-screen)
545:           (return-from Xv)
546:           )
547:       (progn
548:         ; (other-window)
549:         (call-process
550:          (concat "notepad.exe " (concat "¥"" (map-slash-to-backslash fname) "¥"")) :wait t))
551:       )
552:     )
553:   )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

19 Start-current-file

現在編集中のファイルを引数にして start コマンドを実行します。

554: (defun Start-current-file ()
555:   (interactive)
556:   (shell-execute (get-buffer-file-name (selected-buffer)))
557:   )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

20 vfile

引数で指定するファイルを view-minor-mode で開く。

558: (defun vfile (fname)
559:   (interactive "fFile: ")
560:   ;(find-file fname)
561:   (File fname)
562:   (toggle-read-only)
563:    ; 既に、ファイル fname を読み込んでいて、それが read-only に
564:    ; なっている場合、これで、read-only でなくなっているので、
565:    ; read-only にします。
566:    (if (not buffer-read-only)
567:        (toggle-read-only))
568:    )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

21 vFile

引数で指定するファイルを read-only モードで開きます。

read-only モードは、M-x toggle-read-only (C-x C-q) で切り替えられます。

569: (defun vFile (arg &rest z)
570:   (let (fname)
571:     (setq fname arg)
572:     (if (not
573:          (string=
574:           (concat (directory-namestring fname)
575:                   (file-namestring fname))
576:           fname))
577:         (if (string= (pathname-type fname) "lnk")
578:             (progn
579:               (setq fname (concat "C:/dirlink/" fname))
580:               (if (not (file-exist-p fname))
581:                   (progn
582:                     (message-box 
583:                      (concat fname " は存在しません。")
584:                      "vFile"
585:                      )
586:                     (call-process 
587:                      (concat (si:system-root) "xyzzycli.exe"))
588:                     (return-from vFile)))
589:               (setq fname (resolve-shortcut fname))
590:               )
591:           )
592:       )
593:     (if z
594:         (setq fname
595:               (merge-pathnames 
596:                (apply #'concat z) fname)))
597:     (setq fname (standard-filename-expression fname))
598:     (message-box 
599:      (concat fname "¥n¥nをread-only-modeで表示します。"
600:              "¥n¥n編集するには、C-x C-q をタイプしてください。"
601:              )
602:      )
603:     (call-process 
604:                      (concat (si:system-root) "xyzzycli.exe"))
605:     (vfile fname)))

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

22 lnk-dir

引数に指定しているショートカットが指すディレクトリを返します。最後に / が付加されます。

例えば、./foo.lnk が c:/home/foo を指していたら、 (lnk-dir "./foo.lnk") は、"c:/home/foo/" を返します。

引数にショートカットを指定していなかった場合は、"" を返します。

606: (defun lnk-dir (arg)
607:   (let (dir extension)
608:     (setq dir (expand-file-name arg))
609:     (setq extension (pathname-type dir))
610:     (if (string= extension "lnk")
611:         (setq dir (concat (resolve-shortcut dir) "/"))
612:       (progn
613:         (message-box (concat arg " is not a shortcut."))
614:         (return-from lnk-dir "")))
615:     dir))

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

23 Href

使用例
 (File "c:/home/me/000readme.txt")
 (File "winnote.lnk" "win-xyzzy.txt")

2013-07-24
  (call-process ... :wait t)
のように、:wait t を追加したところ、都合よく動くようになったように思います。

2014-03-03 howm フレームで呼ばれたら、home フレームに移動して開くようにしました。これがいいかどうか。howm モードかどうか調べた方がいいかも。

ファイルを開くのではなくて、ファイルのフルパスを取得したい場合は、lf の使用も検討してください。

関数 lf は、kh-base.l で定義されています。

616: (defun Href (arg &rest z)
617:   "引数で指定するファイルを開く"
618:   (interactive)
619:   (if (string= arg "")
620:       (return-from Href))
621:   
622:   (if (not (file-directory-p "c:/dirlink"))
623:       (progn
624:         (message-box 
625:          (concat "C:/dirlink が存在しません。¥n¥n"
626:                  "C:/dirlink を作成して、ディレクトリへの¥n"
627:                  "ショートカットを置いてください。¥n"
628:                  ))
629:         (call-process (concat (si:system-root) "xyzzycli.exe"))
630:         (return-from Href)))
631:   
632:   ;
633:   ; 本来は、つぎのように書けばよいはずなのに、
634:   ; (find-file fname)
635:   ; これでは、fname のファイルを開いたバッファに移動しません。
636:   ; そこで、xyzzycli.exe の力を借ります。
637:   ;
638:   ; 2010-09-17 fname の中に半角空白が入っているとうまく行か
639:   ; ないので、"¥"" と "¥"" で囲むように変更しました。
640:   ;
641:   ; 2011-09-21 複数の引き数を与えたときに、それを接続して、
642:   ; そのファイルを与えたように動作するように変更しました。
643:   ; (File "C:/home/me/" "000readme.txt")
644:   ; のようにできます。
645:   ; (File "sitelisp.lnk" "kh-xyzzyfunc.l")
646:   ;
647:   ; 2012-05-12 別の窓で表示されているファイルが指定された場
648:   ; 合は、その窓に jump するように変更しました。ただし、C-c 
649:   ; C-e で実行する必要があります。
650:   ; (sfind "my-eval-last-sexp" *my-sitelisp* "kh-base.l")
651:   (let (fname buffer wl fcname extension binlist compname basename)
652:   ;
653:   ; しばらくの間、howm モードのときに、File が呼ばれると、
654:   ; Frame 1 にしてから編集するようにしましたが、そうする必要も
655:   ; ないと感じるようになったので、とりやめます。
656:   ;    (if (string= (ed::pseudo-frame-name (selected-pseudo-frame))
657:   ;               "howm")
658:   ;      (switch-pseudo-frame "Frame 1"))
659:   ;
660:     (setq fname arg)
661:     ; @begin{Cmnted out at 20160806 07:34}------------------
662:     ; (if z
663:     ;     (setq fname (concat fname (apply #'concat z))))
664:     ; @end{Cmnted out at 20160806 07:34}--------------------
665:     ; 
666:     ; @begin{Inserted at 20160806 07:34}--------------------
667:     (if (not
668:          (string=
669:           (concat (directory-namestring fname)
670:                   (file-namestring fname))
671:           fname))
672:         (if (string= (pathname-type fname) "lnk")
673:             (progn
674:               (setq fname (concat "C:/dirlink/" fname))
675:               (setq basename (pathname-name fname))
676:               (if (not (file-exist-p fname))
677:                   (progn
678:                     (message-box 
679:                      (concat fname " は存在しません。")
680:                      "Href"
681:                      )
682:                     (return-from Href)))
683:               
684:               ; マシンの名前のリンクがないかチェックしたい
685:               (setq compname (si::getenv "COMPUTERNAME"))
686:               (setq fcname 
687:                     (concat "C:/dirlink/" basename
688:                             ".For" compname ".lnk"))
689:               (if (file-exist-p fcname)
690:                   (setq fname fcname))
691:               
692:               (setq fname (resolve-shortcut fname))
693:               )
694:           )
695:       )
696:     (if z
697:         (setq fname
698:               (merge-pathnames 
699:                (apply #'concat z) fname)))
700:     ; (message-box fname)
701:     ; @end{Inserted at 20160806 07:34}----------------------
702:     ; standard-filename-expression は、ファイル名の標準的な
703:     ; 表記法を返します。
704:     ; ~ は展開します。ドライブレターは大文字に変換します。
705:     (setq fname (standard-filename-expression fname))
706:     
707:     ; 拡張子が .lnk かどうか検査し、拡張子が .lnk なら、ショ
708:     ; ートカットが指す先のファイルを fname にセットし直しま
709:     ; す。
710:     ;
711:     ; resolve-shortcut は xyzzy の内部関数です。
712:     ; 
713:     (setq extension (pathname-type fname))
714:     (if (string= extension "lnk")
715:         (progn
716:           (setq fname (resolve-shortcut fname))
717:           (setq extension (pathname-type fname))))
718:     ; 拡張子が binlist に登録しているのもののどれかなら、
719:     ; 直接起動します。
720:     (setq binlist 
721:           '("ai" "doc" "docx" "eps" "gif" "jpg" "te1"
722:             "odt" "pdf" "png" "xls" "xlsx" "xltx"))
723:     (if (member extension binlist :test #'equal)
724:         (progn
725:           (shell-execute fname)
726:           (return-from Href)))
727:     
728:     ; 2013-08-07
729:     ; つぎの行は何してる?
730:     (ed::kill-new fname)
731:     ;
732:     ; ファイルが無ければここで止めたらいいのかも。
733:     (if (not (file-exist-p fname))
734:         (progn
735:           (message-box 
736:            (concat fname " は存在しません。")
737:            "File"
738:            )
739:           (return-from Href)))
740:     
741:     ; fcname は現在のバッファに対応するファイル名
742:     (setq fcname (get-buffer-file-name (selected-buffer)))
743:     ; (message-box (concat "You are going to open " fname))
744:     (if (string= fname fcname)
745:         (progn
746:           ; (message-box "You are going to open the same file")
747:           (return-from Href)
748:           ))
749:     ;
750:     ; つぎの行は、nil を返すかも知れません。
751:     (setq buffer (get-file-buffer fname))
752:     ;
753:     ; list-buffer-window は、引数で指定したバッファを持つ窓
754:     ; のリストを返します。そういう窓が無ければ nil を返しま
755:     ; す。
756:     ; 引数が nil なら nil を返します。cbar の自作です。
757:     ; (sfind "list-buffer-window" *my-sitelisp* "kh-base.l")
758:     (setq wl (list-buffer-window buffer))
759:     (if wl
760:         (progn
761:           (set-window (car wl))
762:           (refresh-screen)
763:           (return-from Href)
764:           )
765:       (call-process
766:        (concat (si:system-root) "xyzzycli.exe " (concat "¥"" (map-slash-to-backslash fname) "¥"")) :wait t)
767:       )
768:     )
769: )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

24 search-google-selection

セレクションの文字列を Google 検索 します。セレクションが指定されていなければ、リージョンに指定された範囲を Google 検索します。

検索したい言葉を「セレクション」に指定してから、 search-google-selection を実行してください。

セレクションはリージョンとは違うので指定の仕方に注意してください。セレクションに指定したい文字列の先頭にカーソルを移動して、shift キーを押しながら、文字列の最後にカーソルを移動します。マウスでドラッグして指定することができます。

770: (defun search-google-selection ()
771:   (interactive)
772:   (let (start end)
773:     (if (not (get-selection-type))
774:         (exchange-region-and-selection))
775:     (setq start (selection-mark))
776:     (setq end (selection-point))
777:     (search-google (buffer-substring start end))))

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

25 google-search

指定したリージョンをgoogleで検索します。検索結果は、標準のブラウザで表示します。

「流出予測研究所」を範囲指定して、M-x google-search してみてください。

778: (defun google-search (from to)
779:   (interactive "r")
780:   (let (searchword url)
781:     (setq searchword (buffer-substring from to))
782:     (setq 
783:      url 
784:      (concat 
785:       "http://www.google.com/search?q=" 
786:       "¥"" searchword "¥""))
787:     (shell-execute url t)
788:     )
789:   )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

26 ie-url

M-x ie-url として、カーソル行の url に Chrome.exe を使用してジャンプします。

使用例
この行の先頭で、M-x ie-url として: "http://rfri.org"

790: (defun ie-url ()
791:   (interactive)
792:   (let (url beg end)
793:     (beginning-of-line)
794:     (re-search-forward "¥¥(https¥¥|ftp¥¥|http¥¥):" nil)
795:     (setq beg (match-beginning 0))
796:     (re-search-forward "[ ¥t¥n¥">]" nil)
797:     ; (backward-char)
798:     (setq end (point))
799:     (goto-char beg)
800:     (setq url (buffer-substring beg end))
801:     (shell-execute url t)
802:     ))

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

27 open-url

(open-url "http://rfri.org")

の形で、引数に指定された url を開きます。

803: ;; 引数 url をブラウザで開きます。
804: ;;
805: ;; (open-url "http://_
806: ;;            rfri.org")
807: (defun open-url (url)
808:   (interactive)
809:   (shell-execute url t)
810:   )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

28 lf -- 引数列からファイル名を生成して返します。

ファイル名を返します。ファイルが開くわけではないので注意してください。

  (lf "sitelisp.lnk" "kh-xyzzyfunc.l")

C:/dirlink に foo.lnk と foo.ForKUMANO.lnk があるときには、

  (lf "foo.lnk" "foobarstring")

は、KUMANO では、(lf "foo.ForKUMANO.lnk" "foobarstring")であったように動作します。これでマシンごとの違いを吸収できます。

使用例
(lf "sitelisp.lnk") は、"C:/tools/xyzzy/site-lisp" を返します。

※ eval-to-clipboard を使うと、(lf "sitelisp.lnk") が返す文字列をクリップボードに格納できます。

  (call-process (lf "programfilesx86.lnk" 
   "Kifu for Windows V7/KifuW.exe"))

  (call-process (lf "KifuW.lnk"))

この場合、KifuW.lnk はファイルへのショートカットです。あまりこういう使い方はしないようにします。C:/dirlink に登録するのは、ディレクトリへのショートカットにします。

811: (defun lf (arg &rest z)
812:   "リンクファイルも使用してファイルのフルパスを指定"
813:   (interactive)
814:   
815:   (if (not (file-directory-p "c:/dirlink"))
816:       (progn
817:         (message-box 
818:          (concat "C:/dirlink が存在しません。¥n¥n"
819:                  "C:/dirlink を作成して、ディレクトリへの¥n"
820:                  "ショートカットを置いてください。¥n"
821:                  ))
822:         (call-process (concat (si:system-root) "xyzzycli.exe"))
823:         (return-from lf)))
824:   
825:   (if (string= arg "")
826:       (return-from lf))
827:   (let (fname buffer wl fcname extension binlist compname basename)
828:     (setq fname arg)
829:     (if (not
830:          (string=
831:           (concat (directory-namestring fname)
832:                   (file-namestring fname))
833:           fname))
834:         (if (string= (pathname-type fname) "lnk")
835:             (progn
836:               (setq fname (concat "C:/dirlink/" fname))
837:               
838:               (setq basename (pathname-name fname))
839:               (if (not (file-exist-p fname))
840:                   (progn
841:                     (my-message-box 
842:                      (concat fname " は存在しません。")
843:                      "lf"
844:                      )
845:                     (return-from lf)))
846:               
847:               ; マシンの名前のリンクがないかチェックしたい
848:               (setq compname (si::getenv "COMPUTERNAME"))
849:               (setq fcname 
850:                     (concat "C:/dirlink/" basename
851:                             ".For" compname ".lnk"))
852:               (if (file-exist-p fcname)
853:                   (setq fname fcname))
854:               
855:               (setq fname (resolve-shortcut fname))
856:               )
857:           )
858:       )
859:     (if z
860:         (setq fname
861:               (merge-pathnames 
862:                (apply #'concat z) fname)))
863:     (setq fname (standard-filename-expression fname))
864:     (setq extension (pathname-type fname))
865:     (if (string= extension "lnk")
866:         (progn
867:           (setq fname (resolve-shortcut fname))
868:           (setq extension (pathname-type fname))))
869:     fname))

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

29 bfl -- 引数のショートカットファイルからファイル名を生成して返します。

引数で指定するショートカットファイルが指す先のファイルのパスを返します。ショートカットファイルは、ディレクトリ C:/binfilelink にあると仮定します。

ファイルが開くわけではないので注意してください。

  (bfl "KifuW.lnk")

とすると、C:/binfilelink にある KifuW.lnk が指すファイルのパスを返します。

ただし、もし、使用中のコンピュータの名前が BANJYO であって、C:/binfilelink に、KifuW.ForBANJYO.lnk もある場合は、KifuW.ForBANJYO.lnk が指すファイルのパスを返します。

  (call-process (bfl "KifuW.lnk"))

のようにすると、使用中のマシンが BANJYO だとすると、 C:/binfilelink/KifuW.ForBANJYO.lnk があれば、そのショートカットファイルが指すファイルを、C:/binfilelink/KifuW.ForBANJYO.lnk が無ければ、C:/binfilelink/KifuW.lnk が指すファイルを実行します。

  (bfl "KifuW")

のように拡張子 .lnk を省略することもできます。

870: (defun bfl (basename)
871:   "リンクファイルも使用してファイルのフルパスを指定"
872:   (interactive)
873:   
874:   (if (not (file-directory-p "c:/binfilelink"))
875:       (progn
876:         (message-box 
877:          (concat 
878:           "C:/binfilelink が存在しません。¥n¥n"
879:           "C:/binfilelink を作成して、バイナリファイルへの¥n"
880:           "ショートカットを置いてください。¥n"
881:           ))
882:         (call-process (concat (si:system-root) "xyzzycli.exe"))
883:         (return-from bfl)))
884:   
885:   (if (string= basename "")
886:       (return-from bfl))
887:   (let (fname fcname compname)
888:     (if (string= (pathname-type basename) "lnk")
889:         (setq basename (pathname-name basename)))
890:     (setq fname (concat basename ".lnk"))
891:     (setq fname (concat "C:/binfilelink/" fname))
892:     (if (not (file-exist-p fname))
893:         (progn
894:           (my-message-box 
895:            (concat fname " は存在しません。")
896:            )
897:           (return-from bfl)))
898:               
899:     ; マシンの名前のリンクがないかチェックしたい
900:     (setq compname (si::getenv "COMPUTERNAME"))
901:     (setq fcname 
902:           (concat "C:/binfilelink/" basename
903:                   ".For" compname ".lnk"))
904:     (if (file-exist-p fcname)
905:         (setq fname fcname))
906:     
907:     (setq fname (resolve-shortcut fname))
908:     (setq fname (standard-filename-expression fname))
909:     fname))

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

30 scrf -- C:/scriptfile からマシン用のスクリプトファイルを選択

scrf は、SCRipt File の略。

(scrf "basename" ".rb") のように呼び出します。そうすると、標準では、

  (concat "C:/scriptfile/" "basename" ".rb") 

を返しますが、

  (concat "C:/scriptfile/basefname." 
        "For" (si::getenv "COMPUTERNAME")
        ".rb")

があれば、それを返します。

(scrf "mkkeywords" ".rb")

910: (defun scrf (basename extention)
911:   "マシン用のスクリプトファイルを返す"
912:   (if (not (file-directory-p "c:/scriptfile"))
913:       (progn
914:         (message-box 
915:          (concat 
916:           "C:/scriptfile が存在しません。¥n¥n"
917:           "C:/scriptfile を作成して、スクリプトファイルを¥n"
918:           "置いてください。¥n"
919:           ))
920:         (call-process (concat (si:system-root) "xyzzycli.exe"))
921:         (return-from scrf)))
922:   
923:   (if (string= basename "")
924:       (return-from scrf))
925:   (let (fname compname)
926:     (setq compname (si::getenv "COMPUTERNAME"))
927:     (setq fname 
928:           (concat "C:/scriptfile/" 
929:                   basename
930:                   ".For"
931:                   compname
932:                   extention))
933:     (if (not (file-exist-p fname))
934:         (progn
935:           (setq fname 
936:                 (concat "C:/scriptfile/" basename extention))
937:           (setq basename (pathname-name basename))
938:           (if (not (file-exist-p fname))
939:             (progn
940:               (my-message-box 
941:                (concat fname " は存在しません。")
942:                )
943:               (return-from scrf)))))
944:     fname))

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

31 pl

入力した文字列をファイル名の基幹部分とし、拡張子が .lnk のファイルを C:/dirlink から探し、あれば、そのショートカットファイルが指すディレクトリを xyzzy のファイラーに示します。

cmd.exe や powershell のコンソールで、

  pl foo

とするのと同様な動作を xyzzy で実行して、foo.lnk の指すディレクトリに移動できるようにします。

945: (defun pl ()
946:   (interactive)
947:   (let (dir flnk extname)
948:     (if (not (file-directory-p "c:/dirlink"))
949:         (progn
950:           (message-box 
951:            (concat "C:/dirlink が存在しません。¥n¥n"
952:                    "C:/dirlink を作成して、ディレクトリへの¥n"
953:                    "ショートカットを置いてください。¥n"
954:                    ))
955:           (call-process (concat (si:system-root) "xyzzycli.exe"))
956:           (return-from pl)))
957:     (setq flnk
958:        (read-file-name 
959:         "dirlink file: "
960:         :default "c:/dirlink/"))
961:     (setq extname (pathname-type flnk))
962:     (if (file-exist-p flnk)
963:         (progn
964:           (if (string= extname "lnk")
965:               (progn
966:                 (setq extname flnk)
967:                 (open-filer)
968:                 (setq dir (resolve-shortcut flnk))
969:                 (filer-activate-toplevel)
970:                 (filer-chdir dir)
971:                 (open-filer))
972:             (message 
973:              (concat flnk " is not a shortcut file."))))
974:       (message (concat flnk " does not exist.")))
975:     )
976:   )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

32 provide 文

977: (provide "kh-xyzzyfunc")

 

Produced by the use of o2h version 13.04.
[CTop] [Top] [Prev] [Body] [BodyStart] .