Jak odróżnić Ctrl+Shift+V od Shift+Insert?

0

Zagadał do mnie @Marooned z requeustem do edytora, żeby skrót Shift+Insert wklejał treść bez dodatkowego formatowania. Jednak istnieje również skrót Ctrl+Shift+V, który właśnie wkleja z formatowanie.

W edytorze łapię event ClipboardEvent, i zastanawiam się jak rozróżnić te eventy od siebie? Bo najwyraźniej ClipboardEvent.keyCode oraz .charCode i inne zwracają undefined, jak się wkleja.

Ma ktoś jakiś pomysł?

document.addEventListener("paste", function (event) {
   event; // skąd wiedzieć czy user wkleił przez Ctrl+Shift+V czy Shift+Insert?
});

PS: Od razu uprzedzam, nie mogę po prostu złapać KeydownEvent, bo odczytać schowek da się jedynie w zdarzeniu paste.

1

Od razu uprzedzam, nie mogę po prostu złapać KeydownEvent, bo odczytać schowek da się jedynie w zdarzeniu paste.

Cursed idea: jeśli KeydownEvent jest odpalany przed PasteEvent (i go nie zjada), to może możesz ustawić jakąś zmienną globalną w pierwszym zdarzeniu i odczytać ją w drugim?

0
Patryk27 napisał(a):

Cursed idea: jeśli KeydownEvent jest odpalany przed PasteEvent (i go nie zjada), to może możesz ustawić jakąś zmienną globalną w pierwszym zdarzeniu i odczytać ją w drugim?

W odpowiedzi na taki plan, zacytuję klasyka

  • @Riddle: Taki plan, to ja mam zawsze
    screenshot-20230128155516.png

  • @Patryk27: ale ja wiem jak go zrealizować

  • @Riddle: ciekawe jak, jak keyCode może odebrać tylko Keydown, a Keydown naszym wrogiem jest. Bo gdyby Keydown naszym przyjacielem był...
    screenshot-20230128155621.png

0
Riddle napisał(a):
   event; // skąd wiedzieć czy user wkleił przez Ctrl+Shift+V czy Shift+Insert?
});

Przyznam, że o Ctrl+Shift+V nigdy nie słyszałem, ale jak w takim razie rozróżniasz powyżej ten od klasycznego Ctrl+V?

0
Marooned napisał(a):
Riddle napisał(a):
   event; // skąd wiedzieć czy user wkleił przez Ctrl+Shift+V czy Shift+Insert?
});

Przyznam, że o Ctrl+Shift+V nigdy nie słyszałem,

No aktualnie używamy go np do tego Aktualnie jest to zaimplementowane do tego że normalnie jak wklejasz link do obrazka, to on się wkleja jako markdown. Przy użyciu Ctrl+Shift+V wkleja się bez dodatkowego formatowania.

Marooned napisał(a):

ale jak w takim razie rozróżniasz powyżej ten od klasycznego Ctrl+V?

Na razie szukam sposobu jak wyciągnąć z ClipboardEvent to czy został wklejony "normalnie" czy "bez formatowania", albo ewentualnie z shiftem czy bez shifta. Masz jakiś pomysł?

0

Nadal nie znam odpowiedzi na drugie pytanie. Skoro rozróżniasz Ctrl+V od Ctrl+Shift+V to być może w podobny sposób uda się rozróżnić shift+ins. A można też nie rozróżniać, ale w kontekście oceniać, że wklejając w składnię linka nie doklejać dodatkowej składni. Ale nie znam tej logiki. Zgłosiłem tylko błąd, więcej nie pomogę :(

0

@Marooned: Gubię się już, nie do końca rozumiem czego ode mnie oczekujesz?

Wydawało mi się, że po prostu chciałbyś móc wklejać linki używając Shift+Insert, czy tak? Jeśli tak, to jest skłonny to jakoś ogarnąć i dodać taką funkcjonalność do edytora, pod warunkiem że się to najpierw przemyśli dokładnie jak to ma działać (np w odniesieniu do innych skrótów, innych skrótów z Shift, obrazkami, treściami z formatowaniem, etc.). Z zewnątrz to się możę wydawać prosty temat, ale im głebiej wejdziesz, tym bardziej skomplikowany się robi.

0

Oczekiwałbym od edytora, że pozwoli mi wkleić link bez psucia składni. Skoro składnia linku to [opis](https://4programmers.net/), to pisząc [opis]( i w tym momencie wklejając link oczekiwałbym [opis](https://4programmers.net/ i tu bym sobie zamknął ) i miał poprawną składnię.
Tymczasem mając [opis]( i wklejając tu link, otrzymuję jakiś krzak:
[opis]([link](https://4programmers.net/)

0
Marooned napisał(a):

Oczekiwałbym od edytora, że pozwoli mi wkleić link bez psucia składni. Skoro składnia linku to [opis](link), to pisząc [opis]( i w tym momencie wklejając link oczekiwałbym [opis](link i tu bym sobie zamknął ) i miał poprawną składnię.
Tymczasem mając [opis]( i wklejając tu link, otrzymuję jakiś krzak:
[opis]([link](https://4programmers.net/)

No, to tak.

Po pierwsze, jak zaczniesz pisać [opis], i wciśniesz (, to edytor od razu domknie ). Więc żeby dostać [opis]( musiałbyś dodatkowo wcisnąć Delete, czyli skasować nawias zamykający. I problem jest taki, że w momencie w którym zmarzesz ten nawias domykający, to ten otwarty nawias przestaje być linkiem. Staje się nawiasem w plaintekst, więc Markdown nie wie że to jest link. Jeśli domkniesz ten nawias - owszem, ale zanim go domkniesz, to jest plain tekst.

Jeśli zostawisz nawias, czyli będzie [opis]() i użyjesz Shift+Insert żeby wkleić coś między (), to wtedy edytor nic nie zrobi - nie pozwoli Ci wkleić linku z formatowaniem, bo to zepsułoby treść.

Są dwa wyjścia z tej sytuacji:

  • Jak wklejasz coś używając Ctrl+V albo Ctrl+Shift+V, to to są dwie opcje wklejania.

    screenshot-20230130173424.png

    Modyfikator Shift zmienia zachowanie.
    Mówiłeś, że Ctrl+V jest skopiowane od Shift+Insert - to skoro tak, to od czego się wzięło Ctrl+Shift+V. To są takie niuanse które trzeba ogarnąć. Czy jest kopia skrótu Shift+V która wkleja bez formatowania?

  • Druga opcja jest taka, żeby dodać heurystykę, czyli pobawić się w jasnowidzów, i próbować "przewidzieć" czy jakiś znak wygląda tak jakby zaraz miał być linkiem. Tylko że takie rzeczy są często zależne od opinii czy ( jest plain tekstem, czy częścią linku - więc to bym zostawił jako ostateczność. No i takie rzeczy też nie są udokumentowane ani przetestowane, i byłyby też podatne na błędy.

Marooned napisał(a):

Tymczasem mając [opis]( i wklejając tu link, otrzymuję jakiś krzak:
[opis]([link](https://4programmers.net/)

To nie jest krzak, to jest:

  • Etykieta markdown [opis]
  • Nawias jako plain tekst: (
  • Odnośnik markdown: [link](https://4programmers.net/).

Całkowicie poprawna składnia. Rozumiem że mało kto wie, że etykiet i linków w markdown można używać osobno, no ale to już jest niezrozumienie formatu którym się posługujemy.

Etykiety można użyć np do czegoś takiego:

This [link] is the same [link] as the other [link].

[link]: http://google.com

to jest to samo co

This [link](http://google.com) is the same [link](http://google.com) as the other [link](http://google.com).
0

Ok, to nie było tematu

Riddle napisał(a):

Mówiłeś, że Ctrl+V jest skopiowane od Shift+Insert - to skoro tak, to od czego się wzięło Ctrl+Shift+V.

Wczoraj od Ciebie się dowiedziałem, że w ogóle został tu stworzony skrót Ctrl+Shift+V. Nigdy wcześniej się z nim nie spotkałem i raczej jutro o nim zapomnę.

0
Marooned napisał(a):

Ok, to nie było tematu

Riddle napisał(a):

Mówiłeś, że Ctrl+V jest skopiowane od Shift+Insert - to skoro tak, to od czego się wzięło Ctrl+Shift+V.

Wczoraj od Ciebie się dowiedziałem, że w ogóle został tu stworzony skrót Ctrl+Shift+V. Nigdy wcześniej się z nim nie spotkałem i raczej jutro o nim zapomnę.

Pomysł jaki mam, to przerobić żeby Shift+Insert to zawsze było "wklej normalnie". Tylko żeby to zaimplementować, trzeba wykryć jakim sposobem ClipboardEvent się zawołał. Stąd pytanie na forum.

Aktualne rozwiązanie jest hackiem, i nie chcę go powielać. Chciałbym znaleźć odpowiednie rozwiązanie.

1

@Marooned: Naprawione, sprawdź czy teraz jest git.

0

Ok, widzę, że teraz nie ma żadnej magii i wklejanie linku to po prostu plaintext, nie ważne jakim skrótem. Czyli de facto pierwotny błąd naprawiony :)

1
Marooned napisał(a):

Ok, widzę, że teraz nie ma żadnej magii i wklejanie linku to po prostu plaintext, nie ważne jakim skrótem.

Rozumiem, że ten post jest po to żeby wyrazić opinie "każde automatyczne dodawanie czegokolwiek to magia i należy jej unikać".

Marooned napisał(a):

Czyli de facto pierwotny błąd naprawiony :)

Bez obrazy, ale błędem to było powiedzieć że [opis]( to jest link, bo to widać że jest nie znajomość Markdown, o czym pisałem już wcześniej. W treści [opis]( - otwierający nawias jest plaintekstem, nie linkiem.

1
Marooned napisał(a):

Oba punkty są błędnymi założeniami moich wypowiedzi, ale ja kończę swój udział w tym wątku.

Nie podoba mi się jak ten wygląda ten wątek. Pół roku temu pewien użytkownik chciał żeby był skrót do wklejania linków ze składnią markdown, więc dodałem ten feautre. Teraz dodałeś info, że fajnie gdyby Shift+Insert jednak nie wklejał - że przeszkadza Cię pewne zachowanie w edytorze, ja postarałem się dołożyć wszelkich starań żeby zrozumieć o co chodzi, próbowałem dodać ten feature do edytora tak jak umiałem najlepiej, tak żeby nie przeszkadzał też innym użytkownikom i żeby był "w zgodzie" z całym edytorem, poświęciłem swój prywatny czas żeby to zaimplementować i wdrożyć; i wydaje mi się że efekt jaki osiągnęliśmy jest całkiem dobry. Zgłosiłeś ten problem 29ego stycznia na discordzie, i trzy dni później jest poprawka w coyote, która mam wrażenie pasuje Ci i działa tak jak chcesz.

Dlatego nie rozumiem skąd te docinki, i skąd nazywanie części tego edytora "błędami", "bugami" i "magią", funkcjonalności o którą poprosił inny user - czy to na prawdę było konieczne?

0
Riddle napisał(a):

żeby skrót Shift+Insert wklejał treść bez dodatkowego formatowania. Jednak istnieje również skrót Ctrl+Shift+V, który właśnie wkleja z formatowanie.

A jakie byłyby skróty na urządzeniach Apple?

0
Alley Cat napisał(a):
Riddle napisał(a):

żeby skrót Shift+Insert wklejał treść bez dodatkowego formatowania. Jednak istnieje również skrót Ctrl+Shift+V, który właśnie wkleja z formatowanie.

A jakie byłyby skróty na urządzeniach Apple?

Edytor, podczas wklejania nie reaguje na skróty, tylko na event paste; więc cokolwiek wywoła event paste to wklei treść.

1

Shift+Insert to zamiennik na Ctrl+V, co to za herezje chcesz tu odprawiać, a Ctrl+Shift+V powinien wklejać bez formatowania

1 użytkowników online, w tym zalogowanych: 0, gości: 1