「拡張子の違うファイルを開く」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
MSY-07 (トーク | 投稿記録)
変更日の追加
MSY-07 (トーク | 投稿記録)
ソースコードの整形
13行目: 13行目:


var FS = new ActiveXObject("Scripting.FileSystemObject")
var FS = new ActiveXObject("Scripting.FileSystemObject")
function main()
{
    var path = document.Path
    var name = document.Name
    var next = calc_next_file(path, name)


    if (next)
function main() {
    {
var path = document.Path
        editor.OpenFile(next, 0, meOpenAllowNewWindow)
var name = document.Name
    }
var next = calc_next_file(path, name)
 
if (next) {
editor.OpenFile(next, 0, meOpenAllowNewWindow)
}
}
}


function calc_next_file(path, name)
function calc_next_file(path, name) {
{
name = name.toLocaleLowerCase()
    name = name.toLocaleLowerCase()
 
   
var name_dot_ext = split_at_dot(name)
    var name_dot_ext = split_at_dot(name)
if (!name_dot_ext) {
    if (!name_dot_ext) { return }
return
   
}
    var name_dot = name_dot_ext[0]
 
    var ext = name_dot_ext[1]
var name_dot = name_dot_ext[0]
   
var ext = name_dot_ext[1]
    var files = []
 
    each_file(path, function(filename)
var files = []
    {
each_file(path, function(filename) {
      var lower = filename.toLocaleLowerCase()
var lower = filename.toLocaleLowerCase()
      if (lower.length >= name_dot.length && lower.substr(0, name_dot.length) === name_dot)
if (lower.length >= name_dot.length && lower.substr(0, name_dot.length) === name_dot) {
      {
files.push(lower)
        files.push(lower)
}
      }
})
    })
 
   
if (files.length < 2) {
    if (files.length < 2) { return }
return
   
}
    files.sort()
 
   
files.sort()
    var curr = index_of(name, files)
 
   
var curr = index_of(name, files)
    if (curr < 0) { return files[0] }
 
   
if (curr < 0) {
    return path + files[(curr + 1) % files.length]
return files[0]
}
 
return path + files[(curr + 1) % files.length]
}
}


function split_at_dot(str)
function split_at_dot(str) {
{
var i = str.lastIndexOf('.')
    var i = str.lastIndexOf('.')
return i >= 0 && [str.substr(0, i + 1), str.substr(i + 1)]
    return i >= 0 && [str.substr(0, i + 1), str.substr(i + 1)]
}
}


function index_of(x, array)
function index_of(x, array) {
{
for (var i = 0; i < array.length; i++) {
    for (var i=0; i<array.length; i++)
if (array[i] === x) {
    {
return i
        if (array[i] === x) { return i }
}
    }
}
    return -1
return -1
}
}


function each_file(path, callback)
function each_file(path, callback) {
{
return enumerate(FS.GetFolder(path).Files, function(e) {
    return enumerate(FS.GetFolder(path).Files, function (e)
return callback(e.Name)
    {
})
      return callback(e.Name)
    })
}
}


function enumerate(collection, callback)
function enumerate(collection, callback) {
{
for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext()) {
  for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext())
var result = callback(e.item())
  {
if (result) {
    var result = callback(e.item())
return result
    if (result)
}
    {
}
      return result
    }
  }
}
}


main()
main()
</syntaxhighlight>
</syntaxhighlight>

2024年12月31日 (火) 07:14時点における版

同じフォルダにある拡張子以前が共通のファイルを順ぐりに開きます。たとえば現在Cファイルを開いていれば同じフォルダにあるHファイルを、Hファイルを開いていればCファイルを開きます。

変更履歴

  • r2 (2014-08-07)
    • 拡張子を限定せず何でも開くように
  • r1 (2012-06-22)
    • 失念

ソースコード

// 拡張子の違うファイルを開く.js r2 (2014-08-07)
// 同じフォルダにある拡張子以前が共通のファイルを順に開きます

var FS = new ActiveXObject("Scripting.FileSystemObject")

function main() {
	var path = document.Path
	var name = document.Name
	var next = calc_next_file(path, name)

	if (next) {
		editor.OpenFile(next, 0, meOpenAllowNewWindow)
	}
}

function calc_next_file(path, name) {
	name = name.toLocaleLowerCase()

	var name_dot_ext = split_at_dot(name)
	if (!name_dot_ext) {
		return
	}

	var name_dot = name_dot_ext[0]
	var ext = name_dot_ext[1]

	var files = []
	each_file(path, function(filename) {
		var lower = filename.toLocaleLowerCase()
		if (lower.length >= name_dot.length && lower.substr(0, name_dot.length) === name_dot) {
			files.push(lower)
		}
	})

	if (files.length < 2) {
		return
	}

	files.sort()

	var curr = index_of(name, files)

	if (curr < 0) {
		return files[0]
	}

	return path + files[(curr + 1) % files.length]
}

function split_at_dot(str) {
	var i = str.lastIndexOf('.')
	return i >= 0 && [str.substr(0, i + 1), str.substr(i + 1)]
}

function index_of(x, array) {
	for (var i = 0; i < array.length; i++) {
		if (array[i] === x) {
			return i
		}
	}
	return -1
}

function each_file(path, callback) {
	return enumerate(FS.GetFolder(path).Files, function(e) {
		return callback(e.Name)
	})
}

function enumerate(collection, callback) {
	for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext()) {
		var result = callback(e.item())
		if (result) {
			return result
		}
	}
}

main()
スポンサーリンク