basyura's blog

あしたになったらほんきだす。

iPad でキーカスタマイズができるようにならんかなぁ

Apple iPad スマートカバー/チャコールグレイ/MQ4L2FE/A

Apple iPad スマートカバー/チャコールグレイ/MQ4L2FE/A

主にテキスト編集している時。 <C-P> で上にカーソル移動したいし、<C+N> で下にカーソル移動したい。現状だと、<C+A> <C+B> を連打して上に移動するか、<C+E> <C+F> で下に移動するかっていう残念な状態になっている。iPad なんだからディスプレイ触って移動することも可能ではあるけど、いちいちそんなことしてたら肩とか肘とかやられそうだし、思考が飛ぶしでよろしくない。さらに <C+W> で直近の単語を削除したいし <C+D> 直後の文字を一つ消したい。もっと言えば <C+Enter> で予測変換を確定したい。それができるだけでキー入力の印象がだいぶ変わるのだけどなぁ。iOS が mac に寄って行くんだったらそこをまずどうにかして欲しいところ。mac のいいところは emacs キーバインディングがなんとなくデフォルトで使えるところもあるし。 Atok に期待したんだけど制限が多すぎて思ったように実装できないようでつらみ。結局標準のキー入力アプリに戻ったので残念感ある。

iPad Pro 10 inch + apple wireless keyboard (旧型) で入力しているのだけど、やっぱり SmartCover より入力しやすくてよい。SmartCover でも打てるといえば打てるのだけど打鍵感が微妙なのでどんどんテキストを打っていこうという気が削がれていくところがある。会社支給ノートPCのキーボードがショボすぎる問題 (何回も書いてるけど) もあって、キーボードって本当大事だなと今更ながら思うのであった。

ATOK 2017 for Mac [ベーシック] 通常版

ATOK 2017 for Mac [ベーシック] 通常版

Apple Wireless Keyboard (JIS) MC184J/B

Apple Wireless Keyboard (JIS) MC184J/B

xaml - ScrollViewer と ScrollBar を同期

諸事情による調査。非表示にした ScrollViewer の ScrollBar と、外側に配置して表示している ScrollBar のスクロール位置を同期する。

f:id:basyura:20180624165529p:plain:w300

<UserControl x:Class="VirtualScrollSample.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition Width="20" />
        </Grid.ColumnDefinitions>
        <ScrollViewer ScrollViewer.VerticalScrollBarVisibility="Hidden" Name="Container">
            <StackPanel>
                <Grid Background="Orange" Height="100" />
                <Grid Background="Blue" Height="100" />
                <Grid Background="Yellow" Height="100" />
                <Grid Background="Green" Height="100" />
                <Grid Background="AliceBlue" Height="100" />
                <Grid Background="Coral" Height="100" />
                <Grid Background="Beige" Height="100" />
                <Grid Background="Black" Height="100" />
                <Grid Background="BlanchedAlmond" Height="100" />
                <Grid Background="Red" Height="100" />
                <Grid Background="Blue" Height="100" />
                <Grid Background="Yellow" Height="100" />
                <Grid Background="Green" Height="100" />
                <Grid Background="AliceBlue" Height="100" />
                <Grid Background="Coral" Height="100" />
                <Grid Background="Beige" Height="100" />
                <Grid Background="Black" Height="100" />
                <Grid Background="BlanchedAlmond" Height="100" />
            </StackPanel>
        </ScrollViewer>
        <ScrollBar  Grid.Column="1" Grid.Row="1" Name="ContainerScrollBar" Scroll="ContainerScrollBar_Scroll"/>
    </Grid>
</UserControl>
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;

namespace VirtualScrollSample
{
    public partial class MainPage : UserControl
    {
        /// <summary>
        /// 
        /// </summary>
        public MainPage()
        {
            InitializeComponent();

            SetBinding(OffsetProperty, new Binding("VerticalOffset")
            {
                Source = Container,
                Mode = BindingMode.OneWay,
            });
        }
        /// <summary>
        /// ScrollViewer のスクロール位置を ScrollBar に反映する
        /// </summary>
        public static readonly DependencyProperty OffsetProperty = DependencyProperty.Register(
            "Offset", typeof(double), typeof(MainPage), new PropertyMetadata(0d, (d, e) =>
            {
                MainPage page = d as MainPage;
                double offset = (double)e.NewValue / page.Container.ScrollableHeight;
                page.ContainerScrollBar.Value = offset;

            }));
        /// <summary>
        /// ScrollViewer のスクロール位置
        /// </summary>
        private double Offset 
        {
            get { return (double)this.GetValue(OffsetProperty); }
            set { this.SetValue(OffsetProperty, value); }
        }
        /// <summary>
        /// ScrollBar のスクロール位置を ScrollViewer に反映する
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ContainerScrollBar_Scroll(object sender, ScrollEventArgs e)
        {
            double offset = Container.ScrollableHeight * e.NewValue;
            Container.ScrollToVerticalOffset(offset);
        }
    }
}

keyhac - windows10 on vmware fusion の Command + Tab でウインドウ切り替え

地味にウインドウ切り替えづらいので keyhac を使ってキーを入れ替え。

def configure(keymap):
    keymap.replaceKey( "LWin", "LAlt" )
    keymap.replaceKey( "LAlt", "LWin" )

ホストのショートカットキーを無効化にするのも必要だった気がするけどメモ。

某Hub が某大手へ

俺らが育てたのに結局金か。コントリビュートが多いってアピールなんなの。オープンソースみたいなたいそうな事じゃなくても地道にやってきた自分たちの活動・・・いやでも金がないことにはどうしようもないのだけど。なんかどっかいっちゃった・・・ぐぬぬ。

な感じかな。

今の某大手なら悪くはならないだろうという印象もまた複雑で、いっそのことめちゃくちゃにしてくれた方が感情をぶつけやすくていいわという感じかな。

拠り所みたいな感じだったので複雑な心境ではあるけどお金には勝てない。

inkdrop をちら見

inkdrop 良いのだけど、Bear の編集と表示(プレビュー)が一体化している強みがすごい。 Bear が無ければ飛びついてたのは間違いない。 Vim キーバインドはかなり惹かれるのだけど、プレビューでも Vim キーバインドが使えるとかなり良いんだけどなぁ。 js と css の知識があればできそうな気がするけど調べるのが若干面倒感がある。

分割していない場合の横幅が指定できると便利だけどなぁ。画面分割だと狭すぎるし、かといって分割していないと横長になるし。ウインドウサイズを変える (狭める) と分割したい場合に狭くなりすぎてしまう。

あと、ちょっとした違和感があったのは固定幅フォントか。Bear の場合はコードブロック内では固定幅になるのだけど、inkdrop は固定幅にならない。

編集と表示のモードを切り替えるのがしっくりこないのだけど、その割に vim の編集モードと入力モードの違いは思考の切り替えができて良いと思ったりするが・・・markdown から html への切り替えだと思考の切り替えの前に見た目が変わりすぎてスイッチコストが高いと思われる。

Bear が Vim キーバインディングをサポートしてくれると最強なのだけど、どちらにしろ Windows 環境でどうするかが解決しない。選択肢が無くて evernote を使い続ける。

Bear - 日本語と英語が混ざるとラインが上下するよと通報した

前から気になっていたのだけど、日本語と英語が混ざると編集ラインが上下する現象が直る気配が無いのでサポートフォームから問い合わせした。

"チームに連絡した。これは簡単に直ると思うよ。" の旨の返信をもらったので楽しみ。