diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4e2ff4d796..16aac2d9e5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,22 @@
Change Log
==========================
+develop
+--------------------------
+
+### Additions/Changes
+
+- Revert find panel behavior to select always whole text in find field when the panel is called.
+
+
+### Fixes
+
+- Fix line number drawing with large line numbers.
+- Fix an issue where the external modification notification did not work.
+- Improve general stability.
+
+
+
2.1.2
--------------------------
diff --git a/CotEditor/CotEditor.help/Contents/Resources/en.lproj/pgs/releasenotes.html b/CotEditor/CotEditor.help/Contents/Resources/en.lproj/pgs/releasenotes.html
index 77c1479912..8077046bd4 100644
--- a/CotEditor/CotEditor.help/Contents/Resources/en.lproj/pgs/releasenotes.html
+++ b/CotEditor/CotEditor.help/Contents/Resources/en.lproj/pgs/releasenotes.html
@@ -23,6 +23,35 @@
Release Notes
+
+
+ CotEditor 2.1.3
+ release: 2015-03-26
+
+
+
+
+Additions/Changes
+
+
+ Revert find panel behavior to select always whole text in find field when the panel is called.
+
+
+
+
+
+Fixes
+
+
+ Fix line number drawing with large line numbers.
+ Fix an issue where the external modification notification did not work.
+ Improve general stability.
+
+
+
+
+
+
CotEditor 2.1.2
diff --git a/CotEditor/CotEditor.help/Contents/Resources/ja.lproj/pgs/releasenotes.html b/CotEditor/CotEditor.help/Contents/Resources/ja.lproj/pgs/releasenotes.html
index 67b95bfa99..fd67ba51e4 100644
--- a/CotEditor/CotEditor.help/Contents/Resources/ja.lproj/pgs/releasenotes.html
+++ b/CotEditor/CotEditor.help/Contents/Resources/ja.lproj/pgs/releasenotes.html
@@ -23,6 +23,35 @@ リリースノート
+
+
+ CotEditor 2.1.3
+ リリース: 2015-03-26
+
+
+
+
+機能改善/仕様変更
+
+
+ 検索パネルを呼び出した時に検索文字列を全選択する仕様を復帰
+
+
+
+
+
+バグフィックス
+
+
+ 行番号の桁数が大きいときの行番号描画を修正
+ 外部プロセスによる編集の通知が機能していなかった不具合を修正
+ 安定性の向上
+
+
+
+
+
+
CotEditor 2.1.2
@@ -41,7 +70,7 @@ 機能改善/仕様変更
環境設定の「“¥”と“\”のキーを入れ替える」オプションが検索パネルのテキストフィールドにも適用されるように改良
正規表現検索の「エスケープ文字」オプションを削除
- 取り扱えるエンコーディングに「キリル文字 (Windows)」を追加<
+ 取り扱えるエンコーディングに「キリル文字 (Windows)」を追加
cot
コマンドの呼び出しパフォーマンスを改善
@@ -95,7 +124,7 @@ 新機能
この機能は実際のファイルを自動で変更するものではありません。変更をファイルに反映させるには引き続き手動で「保存」を実行する必要があります。
- AppleScript の documment オブジェクトに tab width
プロパティを追加
+ AppleScript の document オブジェクトに tab width
プロパティを追加
CotEditor スクリプトが最前面書類の絶対パスを引数として受け取るように
OS X のサービス機能 “選択範囲を含む新規書類を CotEditor で開く” と “ファイルを CotEditor で開く” を追加
“Erlang”と “Julia” シンタックス定義を追加
diff --git a/CotEditor/CotEditor.xcodeproj/project.pbxproj b/CotEditor/CotEditor.xcodeproj/project.pbxproj
index d67e08e037..9ef38c398b 100644
--- a/CotEditor/CotEditor.xcodeproj/project.pbxproj
+++ b/CotEditor/CotEditor.xcodeproj/project.pbxproj
@@ -101,6 +101,7 @@
2A7CF2401A573CEB00D09249 /* FindPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A7CF23E1A573CEB00D09249 /* FindPanel.xib */; };
2A7CF2431A5747EC00D09249 /* CEFindPanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7CF2421A5747EC00D09249 /* CEFindPanelController.m */; };
2A84C7C21A48F3150013EE83 /* CEPreferencesWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A84C7C11A48F3150013EE83 /* CEPreferencesWindow.m */; };
+ 2A8663DD18C9F6B700A6F9CC /* NSData+MD5.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8663DC18C9F6B700A6F9CC /* NSData+MD5.m */; };
2A8711681986DAEC009FA1C0 /* NSString+MD5.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8711671986DAEC009FA1C0 /* NSString+MD5.m */; };
2A94A45A18D08D52009FA90D /* NSWindow+ScriptingSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A94A45918D08D52009FA90D /* NSWindow+ScriptingSupport.m */; };
2A94A45E18D0B562009FA90D /* CEOpacityPanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A94A45C18D0B562009FA90D /* CEOpacityPanelController.m */; };
@@ -358,6 +359,8 @@
2A7CF2421A5747EC00D09249 /* CEFindPanelController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CEFindPanelController.m; sourceTree = ""; };
2A84C7C01A48F3150013EE83 /* CEPreferencesWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CEPreferencesWindow.h; sourceTree = ""; };
2A84C7C11A48F3150013EE83 /* CEPreferencesWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CEPreferencesWindow.m; sourceTree = ""; };
+ 2A8663DB18C9F6B600A6F9CC /* NSData+MD5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+MD5.h"; sourceTree = ""; };
+ 2A8663DC18C9F6B700A6F9CC /* NSData+MD5.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+MD5.m"; sourceTree = ""; };
2A8711661986DAEC009FA1C0 /* NSString+MD5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MD5.h"; sourceTree = ""; };
2A8711671986DAEC009FA1C0 /* NSString+MD5.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MD5.m"; sourceTree = ""; };
2A94A45818D08D51009FA90D /* NSWindow+ScriptingSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSWindow+ScriptingSupport.h"; sourceTree = ""; };
@@ -757,6 +760,8 @@
2A63122919C25CF80088C5C6 /* CEHexColorTransformer.m */,
2AD5322819779FD000A925CA /* CELineHeightTransformer.h */,
2AD5322919779FD000A925CA /* CELineHeightTransformer.m */,
+ 2A8663DB18C9F6B600A6F9CC /* NSData+MD5.h */,
+ 2A8663DC18C9F6B700A6F9CC /* NSData+MD5.m */,
2A8711661986DAEC009FA1C0 /* NSString+MD5.h */,
2A8711671986DAEC009FA1C0 /* NSString+MD5.m */,
2AC75C061A2AF47E00C7DB0A /* NSString+CENewLine.h */,
@@ -1480,6 +1485,7 @@
2AB432741915D6AA00835004 /* NSString+ComposedCharacter.m in Sources */,
2A2BDF0D198A899E0029848B /* NSString+JapaneseTransform.m in Sources */,
2A8711681986DAEC009FA1C0 /* NSString+MD5.m in Sources */,
+ 2A8663DD18C9F6B700A6F9CC /* NSData+MD5.m in Sources */,
2AC75C081A2AF47F00C7DB0A /* NSString+CENewLine.m in Sources */,
2A1068C31A745FCE001DB9AA /* NSURL+AppleTextEncoding.m in Sources */,
2A40D7CD1A23FBE200721EB4 /* openDictionary.applescript in Sources */,
diff --git a/CotEditor/CotEditor.xcodeproj/xcshareddata/xcschemes/CotEditor.xcscheme b/CotEditor/CotEditor.xcodeproj/xcshareddata/xcschemes/CotEditor.xcscheme
index f1e5933c9d..726cf1effa 100644
--- a/CotEditor/CotEditor.xcodeproj/xcshareddata/xcschemes/CotEditor.xcscheme
+++ b/CotEditor/CotEditor.xcodeproj/xcshareddata/xcschemes/CotEditor.xcscheme
@@ -1,6 +1,6 @@
-
+
-
+
CFBundlePackageType
APPL
CFBundleShortVersionString
- 2.1.2
+ 2.1.3
CFBundleSignature
cEd1
CFBundleVersion
- 2.1.2
+ 2.1.3
LSApplicationCategoryType
public.app-category.productivity
NSAppleScriptEnabled
diff --git a/CotEditor/Sources/CEAppDelegate.m b/CotEditor/Sources/CEAppDelegate.m
index cd370d0da3..c9bcd97103 100644
--- a/CotEditor/Sources/CEAppDelegate.m
+++ b/CotEditor/Sources/CEAppDelegate.m
@@ -211,6 +211,7 @@ + (void)initialize
CEDefaultNotifyEditByAnotherKey: @YES,
CEDefaultColoringRangeBufferLengthKey: @5000,
CEDefaultLargeFileAlertThresholdKey: @(100 * pow(1024, 2)), // 100 MB
+ CEDefaultAutosavingDelayKey: @5.0,
};
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
diff --git a/CotEditor/Sources/CEDocument.m b/CotEditor/Sources/CEDocument.m
index ee689bd712..a0cf1496f4 100644
--- a/CotEditor/Sources/CEDocument.m
+++ b/CotEditor/Sources/CEDocument.m
@@ -38,6 +38,7 @@
#import "CESyntaxManager.h"
#import "CEUtils.h"
#import "NSURL+AppleTextEncoding.h"
+#import "NSData+MD5.h"
#import "constants.h"
@@ -58,6 +59,7 @@ @interface CEDocument ()
@property (nonatomic) BOOL needsShowUpdateAlertWithBecomeKey;
@property (nonatomic, getter=isRevertingForExternalFileUpdate) BOOL revertingForExternalFileUpdate;
@property (nonatomic) BOOL didAlertNotWritable; // 文書が読み込み専用のときにその警告を表示したかどうか
+@property (nonatomic, copy) NSString *fileMD5;
@property (nonatomic, copy) NSString *fileContentString; // string that is read from the document file
@property (nonatomic) CEODBEventSender *ODBEventSender;
@property (nonatomic) BOOL shouldSaveXattr;
@@ -265,12 +267,12 @@ - (BOOL)writeSafelyToURL:(NSURL *)url ofType:(NSString *)typeName forSaveOperati
if (saveOperation == NSSaveAsOperation) {
[self setSyntaxStyleWithFileName:[url lastPathComponent] coloring:YES];
}
-
- // 保持しているファイル情報/表示する文書情報を更新
- [self getFileAttributes];
- // 外部エディタプロトコル(ODB Editor Suite)のファイル更新通知送信
if (saveOperation != NSAutosaveElsewhereOperation) {
+ // 保持しているファイル情報/表示する文書情報を更新
+ [self getFileAttributes];
+
+ // 外部エディタプロトコル(ODB Editor Suite)のファイル更新通知送信
[[self ODBEventSender] sendModifiedEventWithURL:url operation:saveOperation];
}
@@ -543,17 +545,31 @@ -(BOOL)validateToolbarItem:(NSToolbarItem *)item
- (void)presentedItemDidChange
// ------------------------------------------------------
{
- // check modification date of represented file
- __block NSDate *contentModificationDate;
+ // ファイルのmodificationDateがドキュメントのmodificationDateと同じ場合は無視
NSFileCoordinator *coordinator = [[NSFileCoordinator alloc] initWithFilePresenter:self];
+ __block NSDate *fileModificationDate;
[coordinator coordinateReadingItemAtURL:[self fileURL] options:NSFileCoordinatorReadingWithoutChanges
error:nil byAccessor:^(NSURL *newURL)
{
- [newURL getResourceValue:&contentModificationDate forKey:NSURLContentModificationDateKey error:nil];
+ NSDictionary *fileAttrs = [[NSFileManager defaultManager] attributesOfItemAtPath:[newURL path] error:nil];
+ fileModificationDate = [fileAttrs fileModificationDate];
}];
+ if ([fileModificationDate isEqualToDate:[self fileModificationDate]]) { return; }
- // ignore if contents wasn't changed.
- if ([contentModificationDate isEqualToDate:[self fileModificationDate]]) { return; }
+ // ファイルのMD5ハッシュが保持しているものと同じ場合は編集されていないと認識させた上で無視
+ __block NSString *MD5;
+ [coordinator coordinateReadingItemAtURL:[self fileURL] options:NSFileCoordinatorReadingWithoutChanges
+ error:nil byAccessor:^(NSURL *newURL)
+ {
+ MD5 = [[NSData dataWithContentsOfURL:newURL] MD5];
+ }];
+ if ([MD5 isEqualToString:[self fileMD5]]) {
+ // documentの保持しているfileModificationDateを書き換える (2014-03 by 1024jp)
+ // ここだけで無視してもファイル保存時にアラートが出るのことへの対策
+ [self setFileModificationDate:fileModificationDate];
+
+ return;
+ }
// notify about external file update
[self setNeedsShowUpdateAlertWithBecomeKey:YES];
@@ -1148,6 +1164,9 @@ - (BOOL)readFromURL:(NSURL *)url encoding:(NSStringEncoding)encoding
return NO;
}
+ // presentedItemDidChangeにて内容の同一性を比較するためにファイルのMD5を保存する
+ [self setFileMD5:[data MD5]];
+
// try reading the `com.apple.TextEncoding` extended attribute
NSStringEncoding xattrEncoding = [url getAppleTextEncoding];
@@ -1454,6 +1473,11 @@ - (BOOL)forceWriteToURL:(NSURL *)url ofType:(NSString *)typeName forSaveOperatio
}];
if (success) {
+ if (saveOperation != NSAutosaveElsewhereOperation) {
+ // presentedItemDidChange にて内容の同一性を比較するためにファイルの MD5 を保存する
+ [self setFileMD5:[data MD5]];
+ }
+
// クリエータなどを設定
[coordinator coordinateWritingItemAtURL:url options:0
error:nil
diff --git a/CotEditor/Sources/CEDocumentController.m b/CotEditor/Sources/CEDocumentController.m
index aacf1be1ed..78ff3d075e 100644
--- a/CotEditor/Sources/CEDocumentController.m
+++ b/CotEditor/Sources/CEDocumentController.m
@@ -33,10 +33,6 @@
#import "constants.h"
-// constant
-static const NSTimeInterval kAutosavingDelay = 5.0;
-
-
@interface CEDocumentController ()
@property (nonatomic) BOOL showsHiddenFiles;
@@ -68,7 +64,7 @@ - (instancetype)init
if (self) {
_accessorySelectedEncoding = (NSStringEncoding)[[NSUserDefaults standardUserDefaults] integerForKey:CEDefaultEncodingInOpenKey];
- [self setAutosavingDelay:kAutosavingDelay];
+ [self setAutosavingDelay:(NSTimeInterval)[[NSUserDefaults standardUserDefaults] doubleForKey:CEDefaultAutosavingDelayKey]];
}
return self;
}
diff --git a/CotEditor/Sources/CEFindPanelController.m b/CotEditor/Sources/CEFindPanelController.m
index 22c74cc86e..3b3135b050 100644
--- a/CotEditor/Sources/CEFindPanelController.m
+++ b/CotEditor/Sources/CEFindPanelController.m
@@ -313,6 +313,11 @@ - (IBAction)showFindPanel:(id)sender
}
// select text in find text field
+ if ([[self findPanel] firstResponder] == [[self findPanel] initialFirstResponder]) {
+ // force reset firstResponder to invoke becomeFirstResponder in CEFindPanelTextView every time
+ // -> `becomeFirstResponder` will not be called on `makeFirstResponder:` if it given object is alrady set as first responder.
+ [[self findPanel] makeFirstResponder:nil];
+ }
[[self findPanel] makeFirstResponder:[[self findPanel] initialFirstResponder]];
[super showFindPanel:sender];
diff --git a/CotEditor/Sources/CEFindPanelLayoutManager.m b/CotEditor/Sources/CEFindPanelLayoutManager.m
index c1f5cd4102..4c66cfa9c1 100644
--- a/CotEditor/Sources/CEFindPanelLayoutManager.m
+++ b/CotEditor/Sources/CEFindPanelLayoutManager.m
@@ -67,9 +67,8 @@ - (void)drawGlyphsForGlyphRange:(NSRange)glyphsToShow atPoint:(NSPoint)origin
// ------------------------------------------------------
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- BOOL showInvisibles = [defaults boolForKey:CEDefaultShowInvisiblesKey];
- if (showInvisibles) {
+ if ([defaults boolForKey:CEDefaultShowInvisiblesKey]) {
NSTextView *textView = [self firstTextView];
NSString *completeStr = [[self textStorage] string];
NSUInteger lengthToRedraw = NSMaxRange(glyphsToShow);
diff --git a/CotEditor/Sources/CELineNumberView.m b/CotEditor/Sources/CELineNumberView.m
index c1ef44e197..d536d8a1e1 100644
--- a/CotEditor/Sources/CELineNumberView.m
+++ b/CotEditor/Sources/CELineNumberView.m
@@ -34,7 +34,8 @@
#import "constants.h"
-const CGFloat kMinVerticalThickness = 32.0;
+static const CGFloat kMinVerticalThickness = 32.0;
+static const NSUInteger kMinNumberOfDigits = 3;
@interface CELineNumberView ()
@@ -86,6 +87,17 @@ - (instancetype)initWithScrollView:(NSScrollView *)scrollView orientation:(NSRul
}
+// ------------------------------------------------------
+/// setup initial size
+- (void)viewDidMoveToSuperview
+// ------------------------------------------------------
+{
+ [super viewDidMoveToSuperview];
+
+ [self setRuleThickness:kMinVerticalThickness];
+}
+
+
// ------------------------------------------------------
/// clean up
- (void)dealloc
@@ -158,7 +170,7 @@ - (void)drawHashMarksAndLabelsInRect:(NSRect)rect
CGFloat charWidth = advance.width;
// prepare frame width
- CGFloat width = kMinVerticalThickness;
+ CGFloat width = [self ruleThickness];
// adjust drawing coordinate
NSPoint relativePoint = [self convertPoint:NSZeroPoint fromView:[self textView]];
@@ -237,11 +249,12 @@ - (void)drawHashMarksAndLabelsInRect:(NSRect)rect
CGContextShowGlyphsAtPositions(context, glyphs, positions, digit); // draw line number
}
+ CGContextRestoreGState(context);
+
// adjust thickness
- CGFloat requiredWidth = MAX(numberOfDigits(lineNum) * charWidth + 3 * kLineNumPadding, kMinVerticalThickness);
+ NSUInteger length = MAX(numberOfDigits(lineNum), kMinNumberOfDigits);
+ CGFloat requiredWidth = MAX(length * charWidth + 3 * kLineNumPadding, kMinVerticalThickness);
[self setRuleThickness:ceil(requiredWidth)];
-
- CGContextRestoreGState(context);
}
diff --git a/CotEditor/Sources/NSData+MD5.h b/CotEditor/Sources/NSData+MD5.h
new file mode 100644
index 0000000000..f7e442df2d
--- /dev/null
+++ b/CotEditor/Sources/NSData+MD5.h
@@ -0,0 +1,43 @@
+/*
+ ==============================================================================
+ NSData+MD5
+
+ CotEditor
+ http://coteditor.com
+
+ Created on 2014-03-07 by 1024jp
+ encoding="UTF-8"
+
+ ------------
+ This category is from the following blog article by iOS Developer Tips.
+ We would like to thank for sharing this helpful tip.
+ http://iosdevelopertips.com/core-services/create-md5-hash-from-nsstring-nsdata-or-file.html
+ Copyright iOSDeveloperTips.com All rights reserved.
+ ------------------------------------------------------------------------------
+
+ © 2014 CotEditor Project
+
+ This program is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 2 of the License, or (at your option) any later
+ version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ ==============================================================================
+ */
+
+@import Foundation;
+
+
+@interface NSData (MD5)
+
+- (NSString *)MD5;
+
+@end
diff --git a/CotEditor/Sources/NSData+MD5.m b/CotEditor/Sources/NSData+MD5.m
new file mode 100644
index 0000000000..9157b96d49
--- /dev/null
+++ b/CotEditor/Sources/NSData+MD5.m
@@ -0,0 +1,58 @@
+/*
+ ==============================================================================
+ NSData+MD5
+
+ CotEditor
+ http://coteditor.com
+
+ Created on 2014-03-07 by 1024jp
+ encoding="UTF-8"
+
+ ------------
+ This category is from the following blog article by iOS Developer Tips.
+ We would like to thank for sharing this helpful tip.
+ http://iosdevelopertips.com/core-services/create-md5-hash-from-nsstring-nsdata-or-file.html
+ Copyright iOSDeveloperTips.com All rights reserved.
+ ------------------------------------------------------------------------------
+
+ © 2014 CotEditor Project
+
+ This program is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 2 of the License, or (at your option) any later
+ version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ ==============================================================================
+ */
+
+#import "NSData+MD5.h"
+#import
+
+
+@implementation NSData (MD5)
+
+- (NSString*)MD5
+{
+ // Create byte array of unsigned chars
+ unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];
+
+ // Create 16 byte MD5 hash value, store in buffer
+ CC_MD5(self.bytes, self.length, md5Buffer);
+
+ // Convert unsigned char buffer to NSString of hex values
+ NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
+ for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
+ [output appendFormat:@"%02x",md5Buffer[i]];
+
+ return output;
+}
+
+@end
diff --git a/CotEditor/Sources/constants.h b/CotEditor/Sources/constants.h
index 9f8df5758e..634fc3fd07 100644
--- a/CotEditor/Sources/constants.h
+++ b/CotEditor/Sources/constants.h
@@ -230,6 +230,7 @@ extern NSString *const CEDefaultShowAlertForNotWritableKey;
extern NSString *const CEDefaultNotifyEditByAnotherKey;
extern NSString *const CEDefaultColoringRangeBufferLengthKey;
extern NSString *const CEDefaultLargeFileAlertThresholdKey;
+extern NSString *const CEDefaultAutosavingDelayKey;
diff --git a/CotEditor/Sources/constants.m b/CotEditor/Sources/constants.m
index 6c80301379..b7c837fdb8 100644
--- a/CotEditor/Sources/constants.m
+++ b/CotEditor/Sources/constants.m
@@ -234,6 +234,7 @@ BOOL CEIsAlmostEqualCGFloats(CGFloat float1, CGFloat float2) {
NSString *const CEDefaultNotifyEditByAnotherKey = @"notifyEditByAnother";
NSString *const CEDefaultColoringRangeBufferLengthKey = @"coloringRangeBufferLength";
NSString *const CEDefaultLargeFileAlertThresholdKey = @"largeFileAlertThreshold";
+NSString *const CEDefaultAutosavingDelayKey = @"autosavingDelay";
diff --git a/CotEditor/en.lproj/Acknowledgements.rtf b/CotEditor/en.lproj/Acknowledgements.rtf
index 1f6f7425f3..b3a88576f2 100644
--- a/CotEditor/en.lproj/Acknowledgements.rtf
+++ b/CotEditor/en.lproj/Acknowledgements.rtf
@@ -377,7 +377,7 @@ THE SOFTWARE.\
- Thanks to the web site Cocoabuilder ({\field{\*\fldinst{HYPERLINK "http://www.cocoabuilder.com/"}}{\fldrslt http://www.cocoabuilder.com/}}) for a lot of useful information.\
- Thanks to mi by Daisuke Kamiyama ({\field{\*\fldinst{HYPERLINK "http://www.mimikaki.net/"}}{\fldrslt http://www.mimikaki.net/}}) on which the pre-formatted strings of CotEditor's File Drop function are based.\
- Thanks to hetima ({\field{\*\fldinst{HYPERLINK "http://hetima.com/"}}{\fldrslt http://hetima.com/}}) for providing the method for getting modifier key presses (\cf2 http://hetima.com/pblog/article.php?id=48\cf0 ).\
-- Thanks to NSString+MD5 categories by iOS Developer Tip, which are distributed on the blog article "Create MD5 Hash from NSString, NSData or a File" ({\field{\*\fldinst{HYPERLINK "http://iosdevelopertips.com/core-services/create-md5-hash-from-nsstring-nsdata-or-file.html"}}{\fldrslt http://iosdevelopertips.com/core-services/create-md5-hash-from-nsstring-nsdata-or-file.html}}).\
+- Thanks to NSData+MD5 and NSString+MD5 categories by iOS Developer Tip, which are distributed on the blog article "Create MD5 Hash from NSString, NSData or a File" ({\field{\*\fldinst{HYPERLINK "http://iosdevelopertips.com/core-services/create-md5-hash-from-nsstring-nsdata-or-file.html"}}{\fldrslt http://iosdevelopertips.com/core-services/create-md5-hash-from-nsstring-nsdata-or-file.html}}).\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\sl264\slmult1
\cf0 \
\
diff --git a/CotEditor/ja.lproj/Acknowledgements.rtf b/CotEditor/ja.lproj/Acknowledgements.rtf
index 5a2ab11d39..60a333ddb3 100644
--- a/CotEditor/ja.lproj/Acknowledgements.rtf
+++ b/CotEditor/ja.lproj/Acknowledgements.rtf
@@ -414,7 +414,7 @@ THE SOFTWARE.
- \'83\'45\'83\'46\'83\'75\'83\'54\'83\'43\'83\'67 [Cocoabuilder]({\field{\*\fldinst{HYPERLINK "http://www.cocoabuilder.com/"}}{\fldrslt http://www.cocoabuilder.com/}}) \'82\'c5\'82\'cc\'8f\'ee\'95\'f1\'82\'f0\'95\'9d\'8d\'4c\'82\'ad\'8e\'51\'8d\'6c\'82\'c9\'82\'b3\'82\'b9\'82\'c4\'82\'a2\'82\'bd\'82\'be\'82\'ab\'82\'dc\'82\'b5\'82\'bd\'81\'42\
- \'83\'74\'83\'40\'83\'43\'83\'8b\'83\'68\'83\'8d\'83\'62\'83\'76\'82\'c5\'82\'cc\'95\'b6\'8e\'9a\'97\'f1\'91\'7d\'93\'fc\'8b\'40\'94\'5c\'82\'cc\'81\'41\'90\'b6\'90\'ac\'92\'e8\'8b\'60\'95\'b6\'8e\'9a\'97\'f1\'82\'cd mi (written by Daisuke Kamiyama \uc0\u8211 {\field{\*\fldinst{HYPERLINK "http://www.mimikaki.net/"}}{\fldrslt http://www.mimikaki.net/}}) \'82\'cc\'91\'7d\'93\'fc\'95\'b6\'8e\'9a\'97\'f1\'92\'e8\'8b\'60\'83\'74\'83\'48\'81\'5b\'83\'7d\'83\'62\'83\'67\'82\'f0\'8e\'51\'8d\'6c\'82\'c9\'82\'b3\'82\'b9\'82\'c4\'82\'a2\'82\'bd\'82\'be\'82\'a2\'82\'c4\'82\'dc\'82\'b7\'81\'42\
- [\'83\'77\'83\'60\'83\'7d\'83\'52\'83\'93\'83\'73\'83\'85\'81\'5b\'83\'5e]({\field{\*\fldinst{HYPERLINK "http://hetima.com/"}}{\fldrslt http://hetima.com/}}) \'82\'c5\'8c\'f6\'8a\'4a\'82\'b3\'82\'ea\'82\'c4\'82\'a2\'82\'e9\'83\'81\'83\'6a\'83\'85\'81\'5b\'83\'4e\'83\'8a\'83\'62\'83\'4e\'8e\'9e\'82\'cc\'83\'82\'83\'66\'83\'42\'83\'74\'83\'40\'83\'43\'83\'41\'83\'4c\'81\'5b\'8e\'e6\'93\'be\'8b\'40\'94\'5c (\cf2 http://hetima.com/pblog/article.php?id=48\cf0 ) \'82\'f0\'8e\'67\'97\'70\'82\'b3\'82\'b9\'82\'c4\'82\'a2\'82\'bd\'82\'be\'82\'a2\'82\'c4\'82\'dc\'82\'b7\'81\'42\
-- MD5 \'83\'6e\'83\'62\'83\'56\'83\'85\'94\'e4\'8a\'72\'82\'c9 iOS Developer Tips \'82\'cc\'83\'75\'83\'8d\'83\'4f\'8b\'4c\'8e\'96 [Create MD5 Hash from NSString, NSData or a File]({\field{\*\fldinst{HYPERLINK "http://iosdevelopertips.com/core-services/create-md5-hash-from-nsstring-nsdata-or-file.html"}}{\fldrslt http://iosdevelopertips.com/core-services/create-md5-hash-from-nsstring-nsdata-or-file.html}}) \'82\'c9\'8c\'66\'8d\'da\'82\'b3\'82\'ea\'82\'c4\'82\'a2\'82\'e9 NSString+MD5 \'83\'4a\'83\'65\'83\'53\'83\'8a\'82\'cc\'83\'52\'81\'5b\'83\'68\'82\'f0\'8e\'67\'97\'70\'82\'b3\'82\'b9\'82\'c4\'92\'b8\'82\'ab\'82\'dc\'82\'b5\'82\'bd\'81\'42\
+- \'83\'74\'83\'40\'83\'43\'83\'8b\'82\'cc MD5 \'83\'6e\'83\'62\'83\'56\'83\'85\'94\'e4\'8a\'72\'82\'c9 iOS Developer Tips \'82\'cc\'83\'75\'83\'8d\'83\'4f\'8b\'4c\'8e\'96 [Create MD5 Hash from NSString, NSData or a File]({\field{\*\fldinst{HYPERLINK "http://iosdevelopertips.com/core-services/create-md5-hash-from-nsstring-nsdata-or-file.html"}}{\fldrslt http://iosdevelopertips.com/core-services/create-md5-hash-from-nsstring-nsdata-or-file.html}}) \'82\'c9\'8c\'66\'8d\'da\'82\'b3\'82\'ea\'82\'c4\'82\'a2\'82\'e9 NSData+MD5 \'82\'a8\'82\'e6\'82\'d1 NSString+MD5 \'83\'4a\'83\'65\'83\'53\'83\'8a\'82\'cc\'83\'52\'81\'5b\'83\'68\'82\'f0\'8e\'67\'97\'70\'82\'b3\'82\'b9\'82\'c4\'92\'b8\'82\'ab\'82\'dc\'82\'b5\'82\'bd\'81\'42\
\
\
diff --git a/CotEditor/zh-Hans.lproj/Acknowledgements.rtf b/CotEditor/zh-Hans.lproj/Acknowledgements.rtf
index ae75d39be3..4b74135063 100644
--- a/CotEditor/zh-Hans.lproj/Acknowledgements.rtf
+++ b/CotEditor/zh-Hans.lproj/Acknowledgements.rtf
@@ -1,4 +1,4 @@
-{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
+{\rtf1\ansi\ansicpg936\cocoartf1343\cocoasubrtf160
\readonlydoc1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;\f1\fnil\fcharset134 STHeitiSC-Light;\f2\fswiss\fcharset0 Helvetica;
}
{\colortbl;\red255\green255\blue255;\red103\green103\blue103;\red77\green77\blue77;}
@@ -227,7 +227,8 @@ Redistribution and use in source and binary forms, with or without modification,
\f1 \'d6\'a4\'b7\'a2
\f0 \'95\'7a\'93\'49\'81\'46
\f2 \
-\CocoaLigature0 \
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\sl264\slmult1
+\cf0 \CocoaLigature0 \
\pard\tx529\pardeftab529\sl264\slmult1\pardirnatural
\fs22 \cf3 \'a9 2006-2013 Andy Matuschak\
@@ -656,6 +657,8 @@ THE SOFTWARE.\
\f1 \'d0\'bb
\f2 iOS Developer Tip
\f0 \'93\'49
+\f2 NSData+MD5
+\f0 \'98\'61
\f2 NSString+MD5
\f0 \'81\'43\'9b\'80
\f1 \'c3\'c7
diff --git a/Podfile.lock b/Podfile.lock
index ed381d5b1e..2606a6d871 100644
--- a/Podfile.lock
+++ b/Podfile.lock
@@ -34,11 +34,11 @@ CHECKOUT OPTIONS:
SPEC CHECKSUMS:
LibYAML: d447960375d9114187bfddba6e6c24d69bff11f8
- OgreKit: 024f7ae1c59c99b6791c608ac871be6cd1bec00c
+ OgreKit: 99288b3b72a008619c6230fe5329de60e8b5a4b7
RegexKitLite: c0e4c12e6e7de0769f3a3ed679f0f61604170661
Sparkle: be4244aef7860f8d2abdc9c4e4d8e9629d27feb6
SWFSemanticVersion: b5bb8c03abb6081478fd9ad853adf74b96c2beea
WFColorCode: bee0f69bcdd330ddfad65973a311762624b5abc1
- YAML-Framework: 8ac087fa5dad49246f5e7c0894759dacb3644dfe
+ YAML-Framework: 6fe698e19d39d778829f5937e39d1e6bc12afd7b
-COCOAPODS: 0.35.0
+COCOAPODS: 0.36.0