Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add emulation of word motion in Vim(e.g. w, b, e) #75

Merged
merged 30 commits into from
Feb 24, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
244c0ed
add files for word-based motion
pit-ray Feb 12, 2022
0a7a53d
Merge branch 'master' into add-57
pit-ray Feb 16, 2022
0d759cd
add ICU-based codepoint analysis function
pit-ray Feb 19, 2022
9eae937
add unicode cluster breaking test
pit-ray Feb 19, 2022
f789065
explicity link WindowsSDK
pit-ray Feb 19, 2022
0594fae
Fixed deprecated variable.
pit-ray Feb 19, 2022
f83b9cb
add a path for icu.dll into env
pit-ray Feb 19, 2022
9997050
copy icu.dll to test directory
pit-ray Feb 19, 2022
e2c5450
try to download icu.dll
pit-ray Feb 19, 2022
6fe8727
download dll and export path
pit-ray Feb 19, 2022
0ed167a
fix path export in powershell
pit-ray Feb 19, 2022
7933876
use icuuc.dll instead of icu.dll
pit-ray Feb 19, 2022
71ee78d
ported Vim's function to classify codepoint.
pit-ray Feb 21, 2022
0f9ed47
add Move*Word family functions
pit-ray Feb 21, 2022
79b7621
refactor comments
pit-ray Feb 21, 2022
e1366a8
fix val scope
pit-ray Feb 21, 2022
5120eb2
use wrappers with error handling
pit-ray Feb 21, 2022
7c961e5
add a prototype of w
pit-ray Feb 21, 2022
e66e2bf
add W emulation
pit-ray Feb 21, 2022
94cd70f
add e emulation
pit-ray Feb 21, 2022
fad2f8a
add E emulation
pit-ray Feb 21, 2022
bdcb3b3
add b,B,ge,gE emulation
pit-ray Feb 22, 2022
6db68d3
add map and option into default .vindrc
pit-ray Feb 22, 2022
c961387
fix back motion in MS Word
pit-ray Feb 22, 2022
cf77e7b
add note in README
pit-ray Feb 22, 2022
a02d5d1
Merge branch 'master' into add-57
pit-ray Feb 22, 2022
8296345
Merge branch 'master' into add-57
pit-ray Feb 22, 2022
4af688c
update document for word motion
pit-ray Feb 23, 2022
e59da77
undefined reference in test
pit-ray Feb 23, 2022
d5e4a27
Merge branch 'master' into add-57
pit-ray Feb 24, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add Move*Word family functions
  • Loading branch information
pit-ray committed Feb 21, 2022
commit 0f9ed47c5ace1870a8bfa6d904a25321849cd179
122 changes: 110 additions & 12 deletions src/bind/emu/wordmotion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

#include "movebase.hpp"

#include "core/ntypelogger.hpp"
#include "util/debug.hpp"
#include "util/def.hpp"
#include "util/unicode.hpp"

#include <string>
Expand All @@ -11,29 +14,124 @@ namespace vind
{
namespace bind
{
struct MoveFwdWord::Impl {

} ;

MoveFwdWord::MoveFwdWord()
: MoveBaseCreator("move_fwd_word"),
pimpl(std::make_unique<Impl>())
: MoveBaseCreator("move_fwd_word")
{}
void MoveFwdWord::sprocess(unsigned int repeat_num) const {
std::cout << repeat_num << std::endl ;
}
void MoveFwdWord::sprocess(core::NTypeLogger& parent_lgr) const {
if(!parent_lgr.is_long_pressing()) {
sprocess(parent_lgr.get_head_num()) ;
}
}
void MoveFwdWord::sprocess(const core::CharLogger& UNUSED(parent_lgr)) const {
sprocess(1) ;
}

MoveFwdWord::~MoveFwdWord() noexcept = default ;
MoveFwdWord::MoveFwdWord(MoveFwdWord&&) = default ;
MoveFwdWord& MoveFwdWord::operator=(MoveFwdWord&&) = default ;
MoveFwdBigWord::MoveFwdBigWord()
: MoveBaseCreator("move_fwd_bigword")
{}
void MoveFwdBigWord::sprocess(unsigned int repeat_num) const {
std::cout << repeat_num << std::endl ;
}
void MoveFwdBigWord::sprocess(core::NTypeLogger& parent_lgr) const {
if(!parent_lgr.is_long_pressing()) {
sprocess(parent_lgr.get_head_num()) ;
}
}
void MoveFwdBigWord::sprocess(const core::CharLogger& UNUSED(parent_lgr)) const {
sprocess(1) ;
}

void MoveFwdWord::sprocess(unsigned int repeat_num) const {
MoveBckWord::MoveBckWord()
: MoveBaseCreator("move_bck_word")
{}
void MoveBckWord::sprocess(unsigned int repeat_num) const {
std::cout << repeat_num << std::endl ;
}
void MoveBckWord::sprocess(core::NTypeLogger& parent_lgr) const {
if(!parent_lgr.is_long_pressing()) {
sprocess(parent_lgr.get_head_num()) ;
}
}
void MoveBckWord::sprocess(const core::CharLogger& UNUSED(parent_lgr)) const {
sprocess(1) ;
}

MoveBckBigWord::MoveBckBigWord()
: MoveBaseCreator("move_bck_bigword")
{}
void MoveBckBigWord::sprocess(unsigned int repeat_num) const {
std::cout << repeat_num << std::endl ;
}
void MoveBckBigWord::sprocess(core::NTypeLogger& parent_lgr) const {
if(!parent_lgr.is_long_pressing()) {
sprocess(parent_lgr.get_head_num()) ;
}
}
void MoveBckBigWord::sprocess(const core::CharLogger& UNUSED(parent_lgr)) const {
sprocess(1) ;
}

void MoveFwdWord::sprocess(core::NTypeLogger& parent_lgr) const {
MoveEndWord::MoveEndWord()
: MoveBaseCreator("move_end_word")
{}
void MoveEndWord::sprocess(unsigned int repeat_num) const {
std::cout << repeat_num << std::endl ;
}
void MoveEndWord::sprocess(core::NTypeLogger& parent_lgr) const {
if(!parent_lgr.is_long_pressing()) {
sprocess(parent_lgr.get_head_num()) ;
}
}
void MoveEndWord::sprocess(const core::CharLogger& UNUSED(parent_lgr)) const {
sprocess(1) ;
}

MoveEndBigWord::MoveEndBigWord()
: MoveBaseCreator("move_end_bigword")
{}
void MoveEndBigWord::sprocess(unsigned int repeat_num) const {
std::cout << repeat_num << std::endl ;
}
void MoveEndBigWord::sprocess(core::NTypeLogger& parent_lgr) const {
if(!parent_lgr.is_long_pressing()) {
sprocess(parent_lgr.get_head_num()) ;
}
}
void MoveEndBigWord::sprocess(const core::CharLogger& UNUSED(parent_lgr)) const {
sprocess(1) ;
}

void MoveFwdWord::sprocess(const core::CharLogger& parent_lgr) const {
MoveBckEndWord::MoveBckEndWord()
: MoveBaseCreator("move_bckend_word")
{}
void MoveBckEndWord::sprocess(unsigned int repeat_num) const {
std::cout << repeat_num << std::endl ;
}
void MoveBckEndWord::sprocess(core::NTypeLogger& parent_lgr) const {
if(!parent_lgr.is_long_pressing()) {
sprocess(parent_lgr.get_head_num()) ;
}
}
void MoveBckEndWord::sprocess(const core::CharLogger& UNUSED(parent_lgr)) const {
sprocess(1) ;
}

MoveBckEndBigWord::MoveBckEndBigWord()
: MoveBaseCreator("move_bckend_bigword")
{}
void MoveBckEndBigWord::sprocess(unsigned int repeat_num) const {
std::cout << repeat_num << std::endl ;
}
void MoveBckEndBigWord::sprocess(core::NTypeLogger& parent_lgr) const {
if(!parent_lgr.is_long_pressing()) {
sprocess(parent_lgr.get_head_num()) ;
}
}
void MoveBckEndBigWord::sprocess(const core::CharLogger& UNUSED(parent_lgr)) const {
sprocess(1) ;
}
}
}
136 changes: 16 additions & 120 deletions src/bind/emu/wordmotion.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,167 +7,63 @@ namespace vind
{
namespace bind
{
class MoveFwdWord : MoveBaseCreator<MoveFwdWord> {
private:
struct Impl ;
std::unique_ptr<Impl> pimpl ;

public:
struct MoveFwdWord : public MoveBaseCreator<MoveFwdWord> {
explicit MoveFwdWord() ;
void sprocess(unsigned int repeat_num=1) const ;
void sprocess(core::NTypeLogger& parent_lgr) const ;
void sprocess(const core::CharLogger& parent_lgr) const ;

explicit MoveFwdWord() ;
virtual ~MoveFwdWord() noexcept ;

MoveFwdWord(MoveFwdWord&&) ;
MoveFwdWord& operator=(MoveFwdWord&&) ;

MoveFwdWord(const MoveFwdWord&) = delete ;
MoveFwdWord& operator=(const MoveFwdWord&) = delete ;
} ;

class MoveFwdBigWord : MoveBaseCreator<MoveFwdBigWord> {
private:
struct Impl ;
std::unique_ptr<Impl> pimpl ;

public:
struct MoveFwdBigWord : public MoveBaseCreator<MoveFwdBigWord> {
explicit MoveFwdBigWord() ;
void sprocess(unsigned int repeat_num=1) const ;
void sprocess(core::NTypeLogger& parent_lgr) const ;
void sprocess(const core::CharLogger& parent_lgr) const ;

explicit MoveFwdBigWord() ;
virtual ~MoveFwdBigWord() noexcept ;

MoveFwdBigWord(MoveFwdBigWord&&) ;
MoveFwdBigWord& operator=(MoveFwdBigWord&&) ;

MoveFwdBigWord(const MoveFwdBigWord&) = delete ;
MoveFwdBigWord& operator=(const MoveFwdBigWord&) = delete ;
} ;


class MoveBckWord : MoveBaseCreator<MoveBckWord> {
private:
struct Impl ;
std::unique_ptr<Impl> pimpl ;

public:
struct MoveBckWord : public MoveBaseCreator<MoveBckWord> {
explicit MoveBckWord() ;
void sprocess(unsigned int repeat_num=1) const ;
void sprocess(core::NTypeLogger& parent_lgr) const ;
void sprocess(const core::CharLogger& parent_lgr) const ;

explicit MoveBckWord() ;
virtual ~MoveBckWord() noexcept ;

MoveBckWord(MoveBckWord&&) ;
MoveBckWord& operator=(MoveBckWord&&) ;

MoveBckWord(const MoveBckWord&) = delete ;
MoveBckWord& operator=(const MoveBckWord&) = delete ;
} ;

class MoveBckBigWord : MoveBaseCreator<MoveBckBigWord> {
private:
struct Impl ;
std::unique_ptr<Impl> pimpl ;

public:
struct MoveBckBigWord : public MoveBaseCreator<MoveBckBigWord> {
explicit MoveBckBigWord() ;
void sprocess(unsigned int repeat_num=1) const ;
void sprocess(core::NTypeLogger& parent_lgr) const ;
void sprocess(const core::CharLogger& parent_lgr) const ;

explicit MoveBckBigWord() ;
virtual ~MoveBckBigWord() noexcept ;

MoveBckBigWord(MoveBckBigWord&&) ;
MoveBckBigWord& operator=(MoveBckBigWord&&) ;

MoveBckBigWord(const MoveBckBigWord&) = delete ;
MoveBckBigWord& operator=(const MoveBckBigWord&) = delete ;
} ;


class MoveEndWord : MoveBaseCreator<MoveEndWord> {
private:
struct Impl ;
std::unique_ptr<Impl> pimpl ;

public:
struct MoveEndWord : public MoveBaseCreator<MoveEndWord> {
explicit MoveEndWord() ;
void sprocess(unsigned int repeat_num=1) const ;
void sprocess(core::NTypeLogger& parent_lgr) const ;
void sprocess(const core::CharLogger& parent_lgr) const ;

explicit MoveEndWord() ;
virtual ~MoveEndWord() noexcept ;

MoveEndWord(MoveEndWord&&) ;
MoveEndWord& operator=(MoveEndWord&&) ;

MoveEndWord(const MoveEndWord&) = delete ;
MoveEndWord& operator=(const MoveEndWord&) = delete ;
} ;

class MoveEndBigWord : MoveBaseCreator<MoveEndBigWord> {
private:
struct Impl ;
std::unique_ptr<Impl> pimpl ;

public:
struct MoveEndBigWord : public MoveBaseCreator<MoveEndBigWord> {
explicit MoveEndBigWord() ;
void sprocess(unsigned int repeat_num=1) const ;
void sprocess(core::NTypeLogger& parent_lgr) const ;
void sprocess(const core::CharLogger& parent_lgr) const ;

explicit MoveEndBigWord() ;
virtual ~MoveEndBigWord() noexcept ;

MoveEndBigWord(MoveEndBigWord&&) ;
MoveEndBigWord& operator=(MoveEndBigWord&&) ;

MoveEndBigWord(const MoveEndBigWord&) = delete ;
MoveEndBigWord& operator=(const MoveEndBigWord&) = delete ;
} ;


class MoveBckEndWord : MoveBaseCreator<MoveBckEndWord> {
private:
struct Impl ;
std::unique_ptr<Impl> pimpl ;

public:
struct MoveBckEndWord : public MoveBaseCreator<MoveBckEndWord> {
explicit MoveBckEndWord() ;
void sprocess(unsigned int repeat_num=1) const ;
void sprocess(core::NTypeLogger& parent_lgr) const ;
void sprocess(const core::CharLogger& parent_lgr) const ;

explicit MoveBckEndWord() ;
virtual ~MoveBckEndWord() noexcept ;

MoveBckEndWord(MoveBckEndWord&&) ;
MoveBckEndWord& operator=(MoveBckEndWord&&) ;

MoveBckEndWord(const MoveBckEndWord&) = delete ;
MoveBckEndWord& operator=(const MoveBckEndWord&) = delete ;
} ;

class MoveBckEndBigWord : MoveBaseCreator<MoveBckEndBigWord> {
private:
struct Impl ;
std::unique_ptr<Impl> pimpl ;

public:
struct MoveBckEndBigWord : public MoveBaseCreator<MoveBckEndBigWord> {
explicit MoveBckEndBigWord() ;
void sprocess(unsigned int repeat_num=1) const ;
void sprocess(core::NTypeLogger& parent_lgr) const ;
void sprocess(const core::CharLogger& parent_lgr) const ;

explicit MoveBckEndBigWord() ;
virtual ~MoveBckEndBigWord() noexcept ;

MoveBckEndBigWord(MoveBckEndBigWord&&) ;
MoveBckEndBigWord& operator=(MoveBckEndBigWord&&) ;

MoveBckEndBigWord(const MoveBckEndBigWord&) = delete ;
MoveBckEndBigWord& operator=(const MoveBckEndBigWord&) = delete ;
} ;
}
}
Expand Down
9 changes: 4 additions & 5 deletions src/util/unicode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,10 @@ namespace vind


inline bool is_white_space(char32_t cp) noexcept {
if(cp == U' ') return true ;
if(cp == U'\t') return true ;
if(cp == U'\u0000') return true ;
if(cp == U'\u00a0') return true ;
return false ;
return cp == U' ' || \
cp == U'\t' || \
cp == U'\u0000' || \
cp == U'\u00a0' ;
}

/*
Expand Down